Commit a042eaaa authored by Adam Mills's avatar Adam Mills
Browse files

Merge branch '723-sba-dtx-with-bitrate-switching-use-of-uninitialized-value' into 'main'

[Non-BE] Resolve "SBA DTX with bitrate switching use of uninitialized value"

See merge request !999
parents 745cf829 52aab1c6
Loading
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -174,6 +174,7 @@
#define NONBE_FIX_751_MASA_TD_BITRATE_CHECK                   /* Nokia: issue 751: prevents secondary channel to take reserved bitrate if not DTX mode */
#define NONBE_FIX_736_FOA_BR_SWITCH                           /* FhG/Dlb : Issue 736: FOA bitrate switching decoding crashes in in ivas_spar_to_dirac */
#define NONBE_FIX_746_NONDIEGETIC_MD                          /* Eri: Issue 746: The non-diegetic panning flag affects the encoder bitstream even if extended metadata is not enabled. Crashes the decoder.*/
#define NONBE_FIX_723_SBA_BR_SWITCH_MSAN                      /* Dlb: issue 723: Uninitialised value used after BR switching*/
#define NONBE_FIX_729_ASAN_2ISM_ACELP                         /* VA: issue 729: fix ASAN ACELP errors with 2 ISM coding using LTV */
#define NONBE_FIX_698_SBA_MSAN                                /* Dlb: issue 698: Uninitialized memory read in SBA init */
#define NONBE_FIX_694_OMASA_ACELP                             /* Nokia: Issue #694: OMASA crash in ACELP with extreme item */
+12 −0
Original line number Diff line number Diff line
@@ -1092,6 +1092,9 @@ void ivas_dirac_dec_read_BS(
                hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth[i] = hQMetaData->q_direction[0].band_data[1].azimuth[0];
                hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation[i] = hQMetaData->q_direction[0].band_data[1].elevation[0];
                hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio[0];
#ifdef NONBE_FIX_723_SBA_BR_SWITCH_MSAN
                hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio_index[0];
#endif
            }
            for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ )
            {
@@ -1100,6 +1103,9 @@ void ivas_dirac_dec_read_BS(
                    hQMetaData->q_direction[0].band_data[j].azimuth[i] = hQMetaData->q_direction[0].band_data[0].azimuth[0];
                    hQMetaData->q_direction[0].band_data[j].elevation[i] = hQMetaData->q_direction[0].band_data[0].elevation[0];
                    hQMetaData->q_direction[0].band_data[j].energy_ratio[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio[0];
#ifdef NONBE_FIX_723_SBA_BR_SWITCH_MSAN
                    hQMetaData->q_direction[0].band_data[j].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio_index[0];
#endif
                }
            }

@@ -1158,6 +1164,9 @@ void ivas_dirac_dec_read_BS(
            hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth[i] = hQMetaData->q_direction[0].band_data[1].azimuth[0];
            hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation[i] = hQMetaData->q_direction[0].band_data[1].elevation[0];
            hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio[0];
#ifdef NONBE_FIX_723_SBA_BR_SWITCH_MSAN
            hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio_index[0];
#endif
        }
        for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ )
        {
@@ -1166,6 +1175,9 @@ void ivas_dirac_dec_read_BS(
                hQMetaData->q_direction[0].band_data[j].azimuth[i] = hQMetaData->q_direction[0].band_data[0].azimuth[0];
                hQMetaData->q_direction[0].band_data[j].elevation[i] = hQMetaData->q_direction[0].band_data[0].elevation[0];
                hQMetaData->q_direction[0].band_data[j].energy_ratio[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio[0];
#ifdef NONBE_FIX_723_SBA_BR_SWITCH_MSAN
                hQMetaData->q_direction[0].band_data[j].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio_index[0];
#endif
            }
        }

+9 −1
Original line number Diff line number Diff line
@@ -1520,7 +1520,9 @@ static void ivas_spar_dec_parse_md_bs(
    float quant[IVAS_SPAR_MAX_C_COEFF];
    int16_t do_repeat[IVAS_MAX_NUM_BANDS];
    int16_t bw_final, bw_fact;

#ifdef NONBE_FIX_723_SBA_BR_SWITCH_MSAN
    int32_t active_brate;
#endif
    *dtx_vad = 1;
    *bands_bw = 1;
    qsi = 0;
@@ -1591,8 +1593,13 @@ static void ivas_spar_dec_parse_md_bs(
        }

        ivas_parse_parameter_bitstream_dtx( &hMdDec->spar_md, st0, *bands_bw, *nB, hMdDec->spar_md_cfg.num_dmx_chans_per_band, hMdDec->spar_md_cfg.num_decorr_per_band );
#ifdef NONBE_FIX_723_SBA_BR_SWITCH_MSAN
        active_brate = ( ivas_total_brate > IVAS_SID_5k2 ) ? ivas_total_brate : last_active_brate;

        if ( active_brate >= IVAS_24k4 )
#else
        if ( last_active_brate >= IVAS_24k4 )
#endif
        {
            bw_final = 1;
        }
@@ -1600,6 +1607,7 @@ static void ivas_spar_dec_parse_md_bs(
        {
            bw_final = 2;
        }

        bw_fact = *bands_bw / bw_final;

        for ( i = *nB - 1; i >= 0; i-- )