Commit 4bfe5055 authored by TYAGIRIS's avatar TYAGIRIS
Browse files

isar plc crash fix

parent f344a5ab
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -101,6 +101,8 @@

#define FIX_2184_EVS_STEREO_DMX_CHANNEL_DISAPPEARING         /* Orange: Fix for issue 2184 - to prevent one channel from becoming inaudible in the mono downmix output */
#define FIX_2148_OBJ_EDIT_ISSUE_WITH_OSBA                    /* Nokia: Add missing code to solve issue */

#define FIX_ISAR_PLC_CRASH                                   /*Fix for ISAR PLC Crash*/
/* ################### End FIXES switches ########################### */

/* #################### Start BASOP porting switches ############################ */
+18 −2
Original line number Diff line number Diff line
@@ -225,6 +225,7 @@ void isar_splitBinLCLDDecProcess(
#endif
            IF( AnyDecodingFailed( hSplitBinLCLDDec->psLCLDDecoder ) )
            {
#ifndef FIX_ISAR_PLC_CRASH
                IF( NE_16( *Q_cldfb_final, 11 ) )
                {
                    FOR( n = 0; n < hSplitBinLCLDDec->iChannels; n++ )
@@ -240,12 +241,19 @@ void isar_splitBinLCLDDecProcess(
                    }
                    *Q_cldfb_final = 11;
                }
#else
                *Q_cldfb_final = hSplitBinLCLDDec->hSplitRendPLC->CldfbPLC_state.Q_Prev_Bin_fx;
#endif
                /* continue concealing */
                isar_splitBinRendPLC( hSplitBinLCLDDec->hSplitRendPLC, Cldfb_Out_Real_fx, Cldfb_Out_Imag_fx, (Word16) hSplitBinLCLDDec->iChannels, hSplitBinLCLDDec->iNumBlocks, hSplitBinLCLDDec->iNumIterations, GetDecodingFailedStatus( hSplitBinLCLDDec->psLCLDDecoder ), *Q_cldfb_final );
            }
            IF( AnyDecodingFailedPrev( hSplitBinLCLDDec->psLCLDDecoder ) )
            {
#ifndef FIX_ISAR_PLC_CRASH
                IF( NE_16( *Q_cldfb_final, 11 ) )
#else
                IF( GT_16( *Q_cldfb_final, hSplitBinLCLDDec->hSplitRendPLC->CldfbPLC_state.Q_Prev_Bin_fx ) )
#endif
                {
                    FOR( n = 0; n < hSplitBinLCLDDec->iChannels; n++ )
                    {
@@ -253,13 +261,19 @@ void isar_splitBinLCLDDecProcess(
                        {
                            FOR( Word16 j = 0; j < CLDFB_NO_CHANNELS_MAX; j++ )
                            {
#ifndef FIX_ISAR_PLC_CRASH
                                hSplitBinLCLDDec->pppfDecLCLDReal_fx[n][k][j] = L_shl_r( hSplitBinLCLDDec->pppfDecLCLDReal_fx[n][k][j], sub( 11, *Q_cldfb_final ) ); // Q11
                                hSplitBinLCLDDec->pppfDecLCLDImag_fx[n][k][j] = L_shl_r( hSplitBinLCLDDec->pppfDecLCLDImag_fx[n][k][j], sub( 11, *Q_cldfb_final ) ); // Q11
#else
                                hSplitBinLCLDDec->pppfDecLCLDReal_fx[n][k][j] = L_shl_r( hSplitBinLCLDDec->pppfDecLCLDReal_fx[n][k][j], sub( hSplitBinLCLDDec->hSplitRendPLC->CldfbPLC_state.Q_Prev_Bin_fx , *Q_cldfb_final ) ); // hSplitBinLCLDDec->hSplitRendPLC->CldfbPLC_state.Q_Prev_Bin_fx 
                                hSplitBinLCLDDec->pppfDecLCLDImag_fx[n][k][j] = L_shl_r( hSplitBinLCLDDec->pppfDecLCLDImag_fx[n][k][j], sub( hSplitBinLCLDDec->hSplitRendPLC->CldfbPLC_state.Q_Prev_Bin_fx , *Q_cldfb_final ) ); // hSplitBinLCLDDec->hSplitRendPLC->CldfbPLC_state.Q_Prev_Bin_fx 
#endif
                            }
                        }
                    }
                    *Q_cldfb_final = 11;
                    *Q_cldfb_final = hSplitBinLCLDDec->hSplitRendPLC->CldfbPLC_state.Q_Prev_Bin_fx ;
                }
               
                /* cross-fade recovered frame into good frame */
                isar_splitBinRendPLC_xf_fx( hSplitBinLCLDDec->hSplitRendPLC, Cldfb_Out_Real_fx, Cldfb_Out_Imag_fx, (Word16) hSplitBinLCLDDec->iChannels, hSplitBinLCLDDec->iNumBlocks, hSplitBinLCLDDec->iNumIterations, GetDecodingFailedStatus( hSplitBinLCLDDec->psLCLDDecoder ), GetDecodingFailedPrevStatus( hSplitBinLCLDDec->psLCLDDecoder ), *Q_cldfb_final );
            }
@@ -269,7 +283,9 @@ void isar_splitBinLCLDDecProcess(
    {
        /* set states in decoder */
        SetDecodingUnresolved( hSplitBinLCLDDec->psLCLDDecoder );

#ifdef FIX_ISAR_PLC_CRASH
        *Q_cldfb_final = hSplitBinLCLDDec->hSplitRendPLC->CldfbPLC_state.Q_Prev_Bin_fx;
#endif
        /* do PLC for lost split renderer frame */
        isar_splitBinRendPLC( hSplitBinLCLDDec->hSplitRendPLC, Cldfb_Out_Real_fx, Cldfb_Out_Imag_fx, (Word16) hSplitBinLCLDDec->iChannels, hSplitBinLCLDDec->iNumBlocks, hSplitBinLCLDDec->iNumIterations, GetDecodingFailedStatus( hSplitBinLCLDDec->psLCLDDecoder ), *Q_cldfb_final );
    }