Commit aa830908 authored by TYAGIRIS's avatar TYAGIRIS
Browse files

fix for issue 1329

parent 03819099
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -2541,6 +2541,13 @@ void SetCurrentPsychParams(
    TCX_CONFIG_HANDLE hTcxCfg 
);

#ifdef NONBE_FIX_1329_OSBA_CRASH_128
int16_t is_available_bits(
    Encoder_State **sts, /* i/o: encoder state structure         */
    const int16_t mct_on /* i  : flag mct block (1) or stereo (0)  */
);
#endif

void stereo_coder_tcx(
    STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct,                    /* i/o: MDCT encoder structure                  */
    Encoder_State **sts,                                        /* i/o: encoder state structure                 */
+1 −0
Original line number Diff line number Diff line
@@ -179,6 +179,7 @@
#define NONBE_FIX_1326_MASA_EXTREND_CUSTOMLS_OUT        /* FhG: Fix crash for external renderer MASA to custom LS rendering, number of output channels not set correctly */
#define NONBE_1325_TD_STEREO_QUANT_LSF_SEC              /* Nokia: issue 1325: fix for usage of active_cnt variable in TD stereo LSFQ */
#define NONBE_FIX_1172_OBJ_EDIT_JBM                     /* VA: issue 1172: fix OMASA object editing in JBM */
#define NONBE_FIX_1329_OSBA_CRASH_128                   /* Dlb: Fix for issue 1329, OSBA cras at 128 kbps*/

/* ##################### End NON-BE switches ########################### */

+12 −0
Original line number Diff line number Diff line
@@ -588,6 +588,18 @@ void apply_MCT_enc(

            if ( ( fabsf( max_corr ) > DEFAULT_CORR_THRES && !hMCT->hbr_mct ) || ( fabsf( max_corr ) > SPAR_CORR_THRES && hMCT->hbr_mct ) )
            {
#ifdef NONBE_FIX_1329_OSBA_CRASH_128
                {
                    Encoder_State *p_st[2];
                    p_st[0] = sts[ch1];
                    p_st[1] = sts[ch2];
                    if ( is_available_bits( p_st, 1 ) == 0 )
                    {
                        break;
                    }
                }
#endif

                if ( !forceKeepTree )
                {
                    /*save channel pair*/
+40 −0
Original line number Diff line number Diff line
@@ -167,6 +167,46 @@ static void write_itd_data(
}


#ifdef NONBE_FIX_1329_OSBA_CRASH_128
int16_t is_available_bits(
    Encoder_State **sts, /* i/o: encoder state structure         */
    const int16_t mct_on /* i  : flag mct block (1) or stereo (0)  */
)
{
    int16_t nSubframes, bits_available;
    nSubframes = ( sts[0]->core == TCX_20_CORE && sts[1]->core == TCX_20_CORE ) ? 1 : NB_DIV;
    if ( !mct_on )
    {
        return 1;
    }
    else
    {
        if (
#ifdef DEBUG_FORCE_MDCT_STEREO_MODE
            hStereoMdct->fDualMono ||
#endif
            ( sts[0]->hTcxEnc->transform_type[0] != sts[1]->hTcxEnc->transform_type[0] ) || ( sts[0]->hTcxEnc->transform_type[1] != sts[1]->hTcxEnc->transform_type[1] ) || ( sts[0]->last_core != sts[1]->last_core && ( sts[0]->last_core == ACELP_CORE || sts[1]->last_core == ACELP_CORE ) ) || sts[0]->last_core == ACELP_CORE || sts[1]->last_core == ACELP_CORE )
        {
            return 1;
        }
        else
        {
            int16_t k;
            for ( k = 0; k < nSubframes; k++ )
            {
                bits_available = ( ( mct_on ? 2 * sts[0]->bits_frame_channel : sts[0]->bits_frame_nominal ) - sts[0]->side_bits_frame_channel - sts[1]->side_bits_frame_channel - ( nSubframes == 2 ? OFFSET_BITS_TCX10 : OFFSET_BITS_TCX20 ) ) / nSubframes;
                /*check if this should be 0 or a higher value*/
                if ( bits_available <= 0 )
                {
                    return 0;
                }
            }
        }
    }
    return 1;
}
#endif

/*-------------------------------------------------------------------*
 * stereo_coder_tcx()
 *