Loading lib_dec/ivas_stat_dec.h +3 −0 Original line number Diff line number Diff line Loading @@ -836,6 +836,9 @@ typedef struct ISAR_SPLIT_REND_BITS_HANDLE hSplitRendBits; /*scratch buffer for frame by frame processing*/ SPLIT_REND_WRAPPER splitrend; ISAR_DEC_SPLIT_REND_CLDFB_OUT_DATA_HANDLE hCldfbDataOut; /*buffer to store cldfb data before binauralization*/ #ifdef FIX_1342_PROPER_FLUSH_IN_SR float zero_cldfb_col[CLDFB_NO_CHANNELS_MAX]; #endif int16_t numTdSamplesPerChannelCached; } ISAR_DEC_SPLIT_REND_WRAPPER, *ISAR_DEC_SPLIT_REND_WRAPPER_HANDLE; Loading lib_dec/lib_dec.c +7 −8 Original line number Diff line number Diff line Loading @@ -2146,17 +2146,13 @@ static ivas_error isar_generate_metadata_and_bitstream( #ifdef FIX_1342_PROPER_FLUSH_IN_SR /* For partial flush the ring buffer has fewer slots than the nominal CLDFB_NO_COL_MAX. * Point the remaining slot pointers to a static zero column so that the LCLD encoder * Point the remaining slot pointers to a zero column so that the LCLD encoder * (which always iterates over its iNumBlocks blocks) reads deterministic * zeros instead of garbage stack pointers, preventing a SIGSEGV. */ if ( num_cldfb_slots < CLDFB_NO_COL_MAX ) { static float zero_cldfb_col[CLDFB_NO_CHANNELS_MAX]; /* zero-initialised (static storage) */ for ( j = num_cldfb_slots; j < CLDFB_NO_COL_MAX; ++j ) { p_Cldfb_RealBuffer_Binaural[i][j] = zero_cldfb_col; p_Cldfb_ImagBuffer_Binaural[i][j] = zero_cldfb_col; } p_Cldfb_RealBuffer_Binaural[i][j] = hSplitBinRend->zero_cldfb_col; p_Cldfb_ImagBuffer_Binaural[i][j] = hSplitBinRend->zero_cldfb_col; } #endif } Loading Loading @@ -5453,6 +5449,9 @@ static ivas_error ivas_create_handle_isar( } isar_init_split_rend_handles( &hSplitBinRend->splitrend ); #ifdef FIX_1342_PROPER_FLUSH_IN_SR set_zero( hSplitBinRend->zero_cldfb_col, CLDFB_NO_CHANNELS_MAX ); #endif hSplitBinRend->hMultiBinTdData = NULL; for ( i = 0; i < MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS; ++i ) Loading Loading
lib_dec/ivas_stat_dec.h +3 −0 Original line number Diff line number Diff line Loading @@ -836,6 +836,9 @@ typedef struct ISAR_SPLIT_REND_BITS_HANDLE hSplitRendBits; /*scratch buffer for frame by frame processing*/ SPLIT_REND_WRAPPER splitrend; ISAR_DEC_SPLIT_REND_CLDFB_OUT_DATA_HANDLE hCldfbDataOut; /*buffer to store cldfb data before binauralization*/ #ifdef FIX_1342_PROPER_FLUSH_IN_SR float zero_cldfb_col[CLDFB_NO_CHANNELS_MAX]; #endif int16_t numTdSamplesPerChannelCached; } ISAR_DEC_SPLIT_REND_WRAPPER, *ISAR_DEC_SPLIT_REND_WRAPPER_HANDLE; Loading
lib_dec/lib_dec.c +7 −8 Original line number Diff line number Diff line Loading @@ -2146,17 +2146,13 @@ static ivas_error isar_generate_metadata_and_bitstream( #ifdef FIX_1342_PROPER_FLUSH_IN_SR /* For partial flush the ring buffer has fewer slots than the nominal CLDFB_NO_COL_MAX. * Point the remaining slot pointers to a static zero column so that the LCLD encoder * Point the remaining slot pointers to a zero column so that the LCLD encoder * (which always iterates over its iNumBlocks blocks) reads deterministic * zeros instead of garbage stack pointers, preventing a SIGSEGV. */ if ( num_cldfb_slots < CLDFB_NO_COL_MAX ) { static float zero_cldfb_col[CLDFB_NO_CHANNELS_MAX]; /* zero-initialised (static storage) */ for ( j = num_cldfb_slots; j < CLDFB_NO_COL_MAX; ++j ) { p_Cldfb_RealBuffer_Binaural[i][j] = zero_cldfb_col; p_Cldfb_ImagBuffer_Binaural[i][j] = zero_cldfb_col; } p_Cldfb_RealBuffer_Binaural[i][j] = hSplitBinRend->zero_cldfb_col; p_Cldfb_ImagBuffer_Binaural[i][j] = hSplitBinRend->zero_cldfb_col; } #endif } Loading Loading @@ -5453,6 +5449,9 @@ static ivas_error ivas_create_handle_isar( } isar_init_split_rend_handles( &hSplitBinRend->splitrend ); #ifdef FIX_1342_PROPER_FLUSH_IN_SR set_zero( hSplitBinRend->zero_cldfb_col, CLDFB_NO_CHANNELS_MAX ); #endif hSplitBinRend->hMultiBinTdData = NULL; for ( i = 0; i < MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS; ++i ) Loading