Loading lib_com/options.h +1 −1 Original line number Diff line number Diff line Loading @@ -165,7 +165,7 @@ #define JBM_MEMORY_OPT /* VA: issue 916: optimization of RAM in the JBM decoder */ #define OPT_TC // separate heap memory from hTcBuffer->tcBuffer[] //#define FIX_OSBA_BR_SW_FLUSH // this is non-BE bugfix //#define REMOVE_APA_BUFFER // remove hIvasDec->apaExecBuffer[] #define REMOVE_APA_BUFFER // remove hIvasDec->apaExecBuffer[] #define MY_DEBUG #endif Loading lib_dec/ivas_jbm_dec.c +23 −0 Original line number Diff line number Diff line Loading @@ -2098,7 +2098,11 @@ static void ivas_jbm_dec_copy_tc( { tc_digest_f[ch][n_samples_still_available + m] = data[m * st_ivas->hTcBuffer->nchan_transport_jbm + ch]; } #ifdef OPT_TC mvr2r( tc_digest_f[ch] + hTcBuffer->n_samples_available, hTcBuffer->tc_buffer_old[ch], *nSamplesResidual ); #else mvr2r( tc_digest_f[ch] + hTcBuffer->n_samples_available, hTcBuffer->tc[ch], *nSamplesResidual ); #endif } } Loading Loading @@ -2226,7 +2230,11 @@ ivas_error ivas_jbm_dec_tc_buffer_open( int32_t offset; if ( st_ivas->hDecoderConfig->Opt_tsm ) { #ifdef REMOVE_APA_BUFFER n_samp_full = ( NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_L_FRAME_NS ) ); #else n_samp_full = ( NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_L_FRAME_NS ) + hTcBuffer->n_samples_granularity - 1 ); #endif n_samp_residual = hTcBuffer->n_samples_granularity - 1; } else Loading @@ -2236,9 +2244,14 @@ ivas_error ivas_jbm_dec_tc_buffer_open( } nsamp_to_allocate = hTcBuffer->nchan_buffer_full * n_samp_full; #ifdef OPT_TC if ( nsamp_to_allocate == 0 && nchan_residual * n_samp_residual == 0 ) #else nsamp_to_allocate += nchan_residual * n_samp_residual; if ( nsamp_to_allocate == 0 ) #endif { hTcBuffer->tc_buffer = NULL; Loading Loading @@ -2389,7 +2402,11 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure( if ( st_ivas->hDecoderConfig->Opt_tsm ) { #ifdef REMOVE_APA_BUFFER n_samp_full = ( NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_L_FRAME_NS ) ); #else n_samp_full = ( NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_L_FRAME_NS ) + hTcBuffer->n_samples_granularity - 1 ); #endif n_samp_residual = hTcBuffer->n_samples_granularity - 1; } else Loading @@ -2397,10 +2414,16 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure( n_samp_full = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); n_samp_residual = 0; } nsamp_to_allocate = hTcBuffer->nchan_buffer_full * n_samp_full; #ifdef OPT_TC if ( nsamp_to_allocate == 0 && nchan_residual * n_samp_residual == 0 ) #else nsamp_to_allocate += nchan_residual * n_samp_residual; if ( nsamp_to_allocate == 0 ) #endif { hTcBuffer->tc_buffer = NULL; for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; ch_idx++ ) Loading lib_dec/lib_dec.c +15 −7 Original line number Diff line number Diff line Loading @@ -1194,7 +1194,7 @@ ivas_error IVAS_DEC_ReadFormat( #ifdef MY_DEBUG for ( int16_t ch = 0; ch < min( hIvasDec->st_ivas->hTcBuffer->nchan_transport_jbm, hIvasDec->st_ivas->hTcBuffer->nchan_buffer_full ); ch++ ) { set_f( hIvasDec->st_ivas->hTcBuffer->tc[ch], 0, hIvasDec->nSamplesFrame + hIvasDec->nSamplesFrame / 2 + hIvasDec->st_ivas->hTcBuffer->n_samples_granularity ); // VE: debug set_f( hIvasDec->st_ivas->hTcBuffer->tc[ch], 0, hIvasDec->nSamplesFrame + hIvasDec->nSamplesFrame / 2 ); } #endif Loading Loading @@ -1360,12 +1360,12 @@ ivas_error IVAS_DEC_GetSamplesDecoder( #ifdef MY_DEBUG for ( int16_t ch = 0; ch < min( hIvasDec->st_ivas->hTcBuffer->nchan_transport_jbm, hIvasDec->st_ivas->hTcBuffer->nchan_buffer_full ); ch++ ) { set_f( hIvasDec->st_ivas->hTcBuffer->tc[ch], 0, hIvasDec->nSamplesFrame + hIvasDec->nSamplesFrame / 2 + hIvasDec->st_ivas->hTcBuffer->n_samples_granularity ); // VE: debug set_f( hIvasDec->st_ivas->hTcBuffer->tc[ch], 0, hIvasDec->nSamplesFrame + hIvasDec->nSamplesFrame / 2 ); } #endif #ifdef REMOVE_APA_BUFFER for ( int16_t ch = 0; ch < hIvasDec->st_ivas->hTcBuffer->nchan_transport_jbm; ch++ ) for ( int16_t ch = 0; ch < min( hIvasDec->st_ivas->hTcBuffer->nchan_transport_jbm, hIvasDec->st_ivas->hTcBuffer->nchan_buffer_full ); ch++ ) { mvr2r( hIvasDec->st_ivas->p_output_f[ch], hIvasDec->st_ivas->hTcBuffer->tc[ch], hIvasDec->nSamplesFrame ); } Loading Loading @@ -1393,14 +1393,14 @@ ivas_error IVAS_DEC_GetSamplesDecoder( } #ifdef MY_DEBUG set_f( hIvasDec->apaExecBuffer, 0, nTransportChannels * APA_BUF_PER_CHANNEL ); // VE: debug set_f( hIvasDec->apaExecBuffer, 0, nTransportChannels * APA_BUF_PER_CHANNEL ); #endif #ifdef LIB_DEC_REVISION ivas_syn_output_f( hIvasDec->st_ivas->p_output_f, hIvasDec->nSamplesFrame, nTransportChannels, hIvasDec->apaExecBuffer ); #endif #ifdef REMOVE_APA_BUFFER #ifdef REMOVE_APA_BUFFERaa if ( apa_exec( hIvasDec->hTimeScaler, hIvasDec->st_ivas->hTcBuffer->tc_buffer, hIvasDec->nSamplesFrame * nTransportChannels, (uint16_t) hIvasDec->tsm_max_scaling, hIvasDec->apaExecBuffer, &nTimeScalerOutSamples ) != 0 ) #else if ( apa_exec( hIvasDec->hTimeScaler, hIvasDec->apaExecBuffer, hIvasDec->nSamplesFrame * nTransportChannels, (uint16_t) hIvasDec->tsm_max_scaling, hIvasDec->apaExecBuffer, &nTimeScalerOutSamples ) != 0 ) Loading @@ -1422,6 +1422,13 @@ ivas_error IVAS_DEC_GetSamplesDecoder( * Feed decoded transport channels samples to the renderer *-----------------------------------------------------------------*/ #ifdef MY_DEBUG for ( int16_t ch = 0; ch < min( hIvasDec->st_ivas->hTcBuffer->nchan_transport_jbm, hIvasDec->st_ivas->hTcBuffer->nchan_buffer_full ); ch++ ) { set_f( hIvasDec->st_ivas->hTcBuffer->tc[ch], 0, hIvasDec->nSamplesFrame + hIvasDec->nSamplesFrame / 2 ); } #endif #ifdef LIB_DEC_REVISION ivas_jbm_dec_feed_tc_to_renderer( st_ivas, nSamplesTcsScaled, &nResidualSamples, hIvasDec->apaExecBuffer ); #else Loading @@ -1432,7 +1439,7 @@ ivas_error IVAS_DEC_GetSamplesDecoder( #endif #ifdef MY_DEBUG set_f( hIvasDec->apaExecBuffer, 0, nTransportChannels * APA_BUF_PER_CHANNEL ); // VE: debug set_f( hIvasDec->apaExecBuffer, 0, nTransportChannels * APA_BUF_PER_CHANNEL ); #endif if ( hIvasDec->st_ivas->hDecoderConfig->Opt_tsm ) Loading Loading @@ -2102,7 +2109,8 @@ ivas_error IVAS_DEC_GetSamplesRenderer( } for ( ; ch < max( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full ); ch++ ) { mvr2r( hTcBuffer->tc[ch], hTcBuffer->tc_buffer_old[ch], hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered ); /* note: residual channels were saved already in ivas_jbm_dec_copy_tc() */ // mvr2r( hTcBuffer->tc[ch], hTcBuffer->tc_buffer_old[ch], hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered ); } } } Loading Loading
lib_com/options.h +1 −1 Original line number Diff line number Diff line Loading @@ -165,7 +165,7 @@ #define JBM_MEMORY_OPT /* VA: issue 916: optimization of RAM in the JBM decoder */ #define OPT_TC // separate heap memory from hTcBuffer->tcBuffer[] //#define FIX_OSBA_BR_SW_FLUSH // this is non-BE bugfix //#define REMOVE_APA_BUFFER // remove hIvasDec->apaExecBuffer[] #define REMOVE_APA_BUFFER // remove hIvasDec->apaExecBuffer[] #define MY_DEBUG #endif Loading
lib_dec/ivas_jbm_dec.c +23 −0 Original line number Diff line number Diff line Loading @@ -2098,7 +2098,11 @@ static void ivas_jbm_dec_copy_tc( { tc_digest_f[ch][n_samples_still_available + m] = data[m * st_ivas->hTcBuffer->nchan_transport_jbm + ch]; } #ifdef OPT_TC mvr2r( tc_digest_f[ch] + hTcBuffer->n_samples_available, hTcBuffer->tc_buffer_old[ch], *nSamplesResidual ); #else mvr2r( tc_digest_f[ch] + hTcBuffer->n_samples_available, hTcBuffer->tc[ch], *nSamplesResidual ); #endif } } Loading Loading @@ -2226,7 +2230,11 @@ ivas_error ivas_jbm_dec_tc_buffer_open( int32_t offset; if ( st_ivas->hDecoderConfig->Opt_tsm ) { #ifdef REMOVE_APA_BUFFER n_samp_full = ( NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_L_FRAME_NS ) ); #else n_samp_full = ( NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_L_FRAME_NS ) + hTcBuffer->n_samples_granularity - 1 ); #endif n_samp_residual = hTcBuffer->n_samples_granularity - 1; } else Loading @@ -2236,9 +2244,14 @@ ivas_error ivas_jbm_dec_tc_buffer_open( } nsamp_to_allocate = hTcBuffer->nchan_buffer_full * n_samp_full; #ifdef OPT_TC if ( nsamp_to_allocate == 0 && nchan_residual * n_samp_residual == 0 ) #else nsamp_to_allocate += nchan_residual * n_samp_residual; if ( nsamp_to_allocate == 0 ) #endif { hTcBuffer->tc_buffer = NULL; Loading Loading @@ -2389,7 +2402,11 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure( if ( st_ivas->hDecoderConfig->Opt_tsm ) { #ifdef REMOVE_APA_BUFFER n_samp_full = ( NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_L_FRAME_NS ) ); #else n_samp_full = ( NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_L_FRAME_NS ) + hTcBuffer->n_samples_granularity - 1 ); #endif n_samp_residual = hTcBuffer->n_samples_granularity - 1; } else Loading @@ -2397,10 +2414,16 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure( n_samp_full = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); n_samp_residual = 0; } nsamp_to_allocate = hTcBuffer->nchan_buffer_full * n_samp_full; #ifdef OPT_TC if ( nsamp_to_allocate == 0 && nchan_residual * n_samp_residual == 0 ) #else nsamp_to_allocate += nchan_residual * n_samp_residual; if ( nsamp_to_allocate == 0 ) #endif { hTcBuffer->tc_buffer = NULL; for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; ch_idx++ ) Loading
lib_dec/lib_dec.c +15 −7 Original line number Diff line number Diff line Loading @@ -1194,7 +1194,7 @@ ivas_error IVAS_DEC_ReadFormat( #ifdef MY_DEBUG for ( int16_t ch = 0; ch < min( hIvasDec->st_ivas->hTcBuffer->nchan_transport_jbm, hIvasDec->st_ivas->hTcBuffer->nchan_buffer_full ); ch++ ) { set_f( hIvasDec->st_ivas->hTcBuffer->tc[ch], 0, hIvasDec->nSamplesFrame + hIvasDec->nSamplesFrame / 2 + hIvasDec->st_ivas->hTcBuffer->n_samples_granularity ); // VE: debug set_f( hIvasDec->st_ivas->hTcBuffer->tc[ch], 0, hIvasDec->nSamplesFrame + hIvasDec->nSamplesFrame / 2 ); } #endif Loading Loading @@ -1360,12 +1360,12 @@ ivas_error IVAS_DEC_GetSamplesDecoder( #ifdef MY_DEBUG for ( int16_t ch = 0; ch < min( hIvasDec->st_ivas->hTcBuffer->nchan_transport_jbm, hIvasDec->st_ivas->hTcBuffer->nchan_buffer_full ); ch++ ) { set_f( hIvasDec->st_ivas->hTcBuffer->tc[ch], 0, hIvasDec->nSamplesFrame + hIvasDec->nSamplesFrame / 2 + hIvasDec->st_ivas->hTcBuffer->n_samples_granularity ); // VE: debug set_f( hIvasDec->st_ivas->hTcBuffer->tc[ch], 0, hIvasDec->nSamplesFrame + hIvasDec->nSamplesFrame / 2 ); } #endif #ifdef REMOVE_APA_BUFFER for ( int16_t ch = 0; ch < hIvasDec->st_ivas->hTcBuffer->nchan_transport_jbm; ch++ ) for ( int16_t ch = 0; ch < min( hIvasDec->st_ivas->hTcBuffer->nchan_transport_jbm, hIvasDec->st_ivas->hTcBuffer->nchan_buffer_full ); ch++ ) { mvr2r( hIvasDec->st_ivas->p_output_f[ch], hIvasDec->st_ivas->hTcBuffer->tc[ch], hIvasDec->nSamplesFrame ); } Loading Loading @@ -1393,14 +1393,14 @@ ivas_error IVAS_DEC_GetSamplesDecoder( } #ifdef MY_DEBUG set_f( hIvasDec->apaExecBuffer, 0, nTransportChannels * APA_BUF_PER_CHANNEL ); // VE: debug set_f( hIvasDec->apaExecBuffer, 0, nTransportChannels * APA_BUF_PER_CHANNEL ); #endif #ifdef LIB_DEC_REVISION ivas_syn_output_f( hIvasDec->st_ivas->p_output_f, hIvasDec->nSamplesFrame, nTransportChannels, hIvasDec->apaExecBuffer ); #endif #ifdef REMOVE_APA_BUFFER #ifdef REMOVE_APA_BUFFERaa if ( apa_exec( hIvasDec->hTimeScaler, hIvasDec->st_ivas->hTcBuffer->tc_buffer, hIvasDec->nSamplesFrame * nTransportChannels, (uint16_t) hIvasDec->tsm_max_scaling, hIvasDec->apaExecBuffer, &nTimeScalerOutSamples ) != 0 ) #else if ( apa_exec( hIvasDec->hTimeScaler, hIvasDec->apaExecBuffer, hIvasDec->nSamplesFrame * nTransportChannels, (uint16_t) hIvasDec->tsm_max_scaling, hIvasDec->apaExecBuffer, &nTimeScalerOutSamples ) != 0 ) Loading @@ -1422,6 +1422,13 @@ ivas_error IVAS_DEC_GetSamplesDecoder( * Feed decoded transport channels samples to the renderer *-----------------------------------------------------------------*/ #ifdef MY_DEBUG for ( int16_t ch = 0; ch < min( hIvasDec->st_ivas->hTcBuffer->nchan_transport_jbm, hIvasDec->st_ivas->hTcBuffer->nchan_buffer_full ); ch++ ) { set_f( hIvasDec->st_ivas->hTcBuffer->tc[ch], 0, hIvasDec->nSamplesFrame + hIvasDec->nSamplesFrame / 2 ); } #endif #ifdef LIB_DEC_REVISION ivas_jbm_dec_feed_tc_to_renderer( st_ivas, nSamplesTcsScaled, &nResidualSamples, hIvasDec->apaExecBuffer ); #else Loading @@ -1432,7 +1439,7 @@ ivas_error IVAS_DEC_GetSamplesDecoder( #endif #ifdef MY_DEBUG set_f( hIvasDec->apaExecBuffer, 0, nTransportChannels * APA_BUF_PER_CHANNEL ); // VE: debug set_f( hIvasDec->apaExecBuffer, 0, nTransportChannels * APA_BUF_PER_CHANNEL ); #endif if ( hIvasDec->st_ivas->hDecoderConfig->Opt_tsm ) Loading Loading @@ -2102,7 +2109,8 @@ ivas_error IVAS_DEC_GetSamplesRenderer( } for ( ; ch < max( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full ); ch++ ) { mvr2r( hTcBuffer->tc[ch], hTcBuffer->tc_buffer_old[ch], hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered ); /* note: residual channels were saved already in ivas_jbm_dec_copy_tc() */ // mvr2r( hTcBuffer->tc[ch], hTcBuffer->tc_buffer_old[ch], hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered ); } } } Loading