Commit 7d2306a7 authored by vaclav's avatar vaclav
Browse files

Merge branch '1324-tsm-memory-lost-in-jbm-bitrate-switching' into 'main'

[non-BE] Keep TSM memory in JBM bitrate switching

See merge request !2140
parents 4433b38c c4ad80e8
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -175,6 +175,7 @@
#define NONBE_1122_KEEP_EVS_MODE_UNCHANGED              /* FhG: Disables fix for issue 1122 in EVS mode to keep BE tests green. This switch should be removed once the 1122 fix is added to EVS via a CR.  */
#define NONBE_1250_MCMASA_LS_OUTPUT                     /* VA: issue 1250: fix crash in McMASA to custom LS output decoding */
#define NONBE_1302_FIX_OMASA_JBM_FLUSH                  /* VA: issue 1302: fix OMASA JBM bitrate switching flush in binaural output */
#define NONBE_1324_TC_BUFFER_MEMOERY_KEEP               /* VA: issue 1324: do not reset TSM memory in JBM bitrate switching */

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

+34 −1
Original line number Diff line number Diff line
@@ -2262,11 +2262,35 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure(
    const int16_t n_samples_granularity     /* i  : new granularity of the renderer/buffer  */
)
{
#ifdef NONBE_1324_TC_BUFFER_MEMOERY_KEEP
    int16_t ch_idx, num_tc_buffer_mem, n_samples_still_available;
    float tc_buffer_mem[MAX_INTERN_CHANNELS][L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES - 1];
#endif
    ivas_error error;
    DECODER_TC_BUFFER_HANDLE hTcBuffer;

    hTcBuffer = st_ivas->hTcBuffer;

#ifdef NONBE_1324_TC_BUFFER_MEMOERY_KEEP
    num_tc_buffer_mem = 0;
    n_samples_still_available = 0;

    if ( st_ivas->hDecoderConfig->Opt_tsm )
    {
        /* save samples of the TC buffer from the previous frame */
        num_tc_buffer_mem = min( hTcBuffer->nchan_transport_internal, nchan_transport_internal );
        n_samples_still_available = hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered;

        /* what is remaining from last frame needs always be smaller than the new granularity */
        assert( n_samples_still_available < n_samples_granularity );

        for ( ch_idx = 0; ch_idx < num_tc_buffer_mem; ch_idx++ )
        {
            mvr2r( hTcBuffer->tc_buffer_old[ch_idx] + hTcBuffer->n_samples_flushed, tc_buffer_mem[ch_idx], n_samples_still_available );
        }
    }

#endif
    /* if granularity changes, adapt subframe_nb_slots */
    if ( n_samples_granularity != hTcBuffer->n_samples_granularity )
    {
@@ -2306,11 +2330,12 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure(
    hTcBuffer->nchan_buffer_full = nchan_full;
    hTcBuffer->n_samples_granularity = n_samples_granularity;

#ifndef NONBE_1324_TC_BUFFER_MEMOERY_KEEP
#ifdef DEBUGGING
    /* what is remaining from last frames needs always be smaller than n_samples_granularity */
    assert( ( hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered ) < n_samples_granularity );
#endif

#endif
    /* reallocate TC audio buffers */

    ivas_jbm_dec_tc_audio_deallocate( hTcBuffer );
@@ -2320,6 +2345,14 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure(
        return error;
    }

#ifdef NONBE_1324_TC_BUFFER_MEMOERY_KEEP
    /* propagate samples of the TC buffer from the previous frame */
    for ( ch_idx = 0; ch_idx < num_tc_buffer_mem; ch_idx++ )
    {
        mvr2r( tc_buffer_mem[ch_idx], hTcBuffer->tc_buffer_old[ch_idx], n_samples_still_available );
    }

#endif
    return IVAS_ERR_OK;
}