Commit 3b2f6109 authored by Vladimir Malenovsky's avatar Vladimir Malenovsky
Browse files

initialize zero-column CLDBF pointers

parent f6650815
Loading
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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;
+7 −8
Original line number Diff line number Diff line
@@ -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
        }
@@ -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 )