Commit 73cb32e1 authored by Vladimir Malenovsky's avatar Vladimir Malenovsky
Browse files

fix crash due to runnig loop beyond num_cldfb_slots

parent 278f78f2
Loading
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -2176,7 +2176,11 @@ static ivas_error isar_generate_metadata_and_bitstream(
                                                          Quaternion,
                                                          st_ivas->hRenderConfig->split_rend_config.splitRendBitRate,
                                                          st_ivas->hRenderConfig->split_rend_config.codec,
#ifdef FIX_1342_PROPER_FLUSH_IN_SR
                                                          (int16_t) ( (int32_t) nSamples * 1000 / (int32_t) st_ivas->hDecoderConfig->output_Fs ),
#else
                                                          st_ivas->hRenderConfig->split_rend_config.isar_frame_size_ms,
#endif
                                                          st_ivas->hRenderConfig->split_rend_config.codec_frame_size_ms,
                                                          splitRendBits,
                                                          p_Cldfb_RealBuffer_Binaural,
@@ -4365,7 +4369,8 @@ ivas_error IVAS_DEC_Flush(
            /* Flush the remaining audio output in SR mode.
               For BINAURAL_SPLIT_PCM, generate metadata and binaural PCM from the ring buffer.
               The ISAR metadata output is discarded (flush frames are not written to the metadata file). */
            if ( hIvasDec->st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
            if ( hIvasDec->st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM &&
                 hIvasDec->hasBeenFedFirstGoodFrame && nOutSamples > 0 )
            {
                Decoder_Struct *st_ivas_flush = hIvasDec->st_ivas;
                ISAR_SPLIT_REND_BITS_DATA flushSplitRendBits;
+4 −0
Original line number Diff line number Diff line
@@ -277,6 +277,10 @@ void isar_rend_CldfbSplitPreRendProcess(
    const int32_t target_md_bits,                               /* i  : ISAR MD bitrate                         */
    const int16_t low_res_pre_rend_rot,                         /* i  : low time resolution pre-renderer flag   */
    const int16_t ro_md_flag                                    /* i  : real only metadata for yaw flag         */
#ifdef FIX_1342_PROPER_FLUSH_IN_SR
    ,
    const int16_t num_cldfb_slots                               /* i  : actual number of valid CLDFB columns    */
#endif
);

ivas_error isar_renderMultiTDBinToSplitBinaural(
+26 −1
Original line number Diff line number Diff line
@@ -53,7 +53,11 @@
 * Local function declarations
 *---------------------------------------------------------------------*/

#ifdef FIX_1342_PROPER_FLUSH_IN_SR
static void isar_SplitRenderer_GetRotMd( ISAR_BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, float *Cldfb_RealBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX], float *Cldfb_ImagBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX], const int16_t low_res, const int16_t ro_md_flag, const int16_t num_cldfb_slots );
#else
static void isar_SplitRenderer_GetRotMd( ISAR_BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, float *Cldfb_RealBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX], float *Cldfb_ImagBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX], const int16_t low_res, const int16_t ro_md_flag );
#endif


/*-------------------------------------------------------------------------
@@ -1351,6 +1355,10 @@ static void isar_SplitRenderer_GetRotMd(
    float *Cldfb_ImagBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX], /* o  : Reference Binaural signals */
    const int16_t low_res,
    const int16_t ro_md_flag /* i  : Flag to indicate real only metadata for yaw */
#ifdef FIX_1342_PROPER_FLUSH_IN_SR
    ,
    const int16_t num_cldfb_slots /* i  : actual number of valid CLDFB columns in the input buffers */
#endif
)
{
    float cov_ii_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS];
@@ -1371,7 +1379,11 @@ static void isar_SplitRenderer_GetRotMd(

    if ( low_res )
    {
#ifdef FIX_1342_PROPER_FLUSH_IN_SR
        num_slots = num_cldfb_slots;
#else
        num_slots = CLDFB_NO_COL_MAX;
#endif
        num_subframes = 1;
    }
    else
@@ -1439,11 +1451,19 @@ void isar_rend_CldfbSplitPreRendProcess(
    const int32_t target_md_bits,                               /* i  : ISAR MD bitrate                          */
    const int16_t low_res_pre_rend_rot,                         /* i  : low time resolution pre-renderer flag    */
    const int16_t ro_md_flag                                    /* i  : real only metadata for yaw flag          */
#ifdef FIX_1342_PROPER_FLUSH_IN_SR
    ,
    const int16_t num_cldfb_slots /* i  : actual number of valid CLDFB columns     */
#endif
)
{
    push_wmops( "isar_rend_CldfbSplitPreRendProcess" );

#ifdef FIX_1342_PROPER_FLUSH_IN_SR
    isar_SplitRenderer_GetRotMd( hBinHrSplitPreRend, pMultiBinPoseData, Cldfb_In_BinReal, Cldfb_In_BinImag, low_res_pre_rend_rot, ro_md_flag, num_cldfb_slots );
#else
    isar_SplitRenderer_GetRotMd( hBinHrSplitPreRend, pMultiBinPoseData, Cldfb_In_BinReal, Cldfb_In_BinImag, low_res_pre_rend_rot, ro_md_flag );
#endif

    isar_SplitRenderer_quant_code( hBinHrSplitPreRend, headPosition, pMultiBinPoseData, pBits, low_res_pre_rend_rot, ro_md_flag, target_md_bits );

@@ -1985,7 +2005,12 @@ ivas_error isar_renderMultiTDBinToSplitBinaural(
            pBits,
            target_md_bits,
            low_res_pre_rend_rot,
            ro_md_flag );
            ro_md_flag
#ifdef FIX_1342_PROPER_FLUSH_IN_SR
            ,
            (int16_t) num_slots
#endif
        );
    }

    if ( pcm_out_flag == 0 )
+4 −0
Original line number Diff line number Diff line
@@ -341,7 +341,11 @@ ivas_error ISAR_PRE_REND_MultiBinToSplitBinaural(
        target_md_bits = isar_get_split_rend_md_target_brate( SplitRendBitRate, pcm_out_flag ) * L_FRAME48k / 48000;


#ifdef FIX_1342_PROPER_FLUSH_IN_SR
        isar_rend_CldfbSplitPreRendProcess( hSplitBin->hBinHrSplitPreRend, headPosition, &hSplitBin->multiBinPoseData, Cldfb_In_BinReal, Cldfb_In_BinImag, pBits, target_md_bits, low_res_pre_rend_rot, ro_md_flag, (int16_t) ( isar_frame_size_ms * 1000000 / CLDFB_SLOT_NS ) );
#else
        isar_rend_CldfbSplitPreRendProcess( hSplitBin->hBinHrSplitPreRend, headPosition, &hSplitBin->multiBinPoseData, Cldfb_In_BinReal, Cldfb_In_BinImag, pBits, target_md_bits, low_res_pre_rend_rot, ro_md_flag );
#endif
    }

    if ( pcm_out_flag == 0 )