Loading lib_com/ivas_cnst.h +1 −1 Original line number Diff line number Diff line Loading @@ -172,7 +172,7 @@ typedef enum #define JBM_CLDFB_SLOTS_IN_SUBFRAME 4 #define MAX_JBM_CLDFB_TIMESLOTS 32 #define DEFAULT_JBM_CLDFB_TIMESLOTS 16 #ifdef JBM_MEMORY_OPT #if (defined JBM_MEMORY_OPT && !defined REMOVE_APA_BUFFER) #define MAX_JBM_L_FRAME48k (1920 - 240) #define MAX_JBM_L_FRAME_NS 35000000L #else Loading lib_com/options.h +5 −0 Original line number Diff line number Diff line Loading @@ -161,8 +161,13 @@ /*#define FIX_I4_OL_PITCH*/ /* fix open-loop pitch used for EVS core switching */ #define TMP_FIX_1119_SPLIT_RENDERING_VOIP /* FhG: Add error check for unsupported config: split rendering with VoIP mode */ #define LIB_DEC_REVISION /* VA: cleaning and simplification of lib_dec.c */ #if 1 #define JBM_MEMORY_OPT /* VA: issue 916: optimization of RAM in the JBM decoder */ #define OPT_TC // separate heap memory from hTcBuffer->tcBuffer[] //#define REMOVE_APA_BUFFER // remove hIvasDec->apaExecBuffer[] #define MY_DEBUG #endif /* #################### End BE switches ################################## */ Loading lib_dec/ivas_jbm_dec.c +77 −0 Original line number Diff line number Diff line Loading @@ -1423,6 +1423,22 @@ ivas_error ivas_jbm_dec_flush_renderer( { int16_t ch_idx; #ifdef OPT_TC /* render available full slots (with new lower granularity) */ for ( ch_idx = 0; ch_idx < min( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full ); ch_idx++ ) //for ( ch_idx = 0; ch_idx < max( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full ); ch_idx++ ) { mvr2r( hTcBuffer->tc_buffer_old[ch_idx], hTcBuffer->tc[ch_idx], n_samples_to_render ); } for ( ; ch_idx < hTcBuffer->nchan_buffer_full; ch_idx++ ) { /* move it at the beginning of the TC buffer with zero padding */ mvr2r( hTcBuffer->tc[ch_idx] + hTcBuffer->n_samples_rendered, hTcBuffer->tc[ch_idx], n_samples_to_render ); set_zero( hTcBuffer->tc[ch_idx] + n_samples_to_render, hTcBuffer->n_samples_granularity - n_samples_to_render ); mvr2r( hTcBuffer->tc[ch_idx] + hTcBuffer->n_samples_rendered + n_samples_to_render, hTcBuffer->tc[ch_idx] + hTcBuffer->n_samples_granularity, n_samples_still_available ); } #else /* render what is still there with zero padding */ for ( ch_idx = 0; ch_idx < hTcBuffer->nchan_buffer_full; ch_idx++ ) { Loading @@ -1431,6 +1447,7 @@ ivas_error ivas_jbm_dec_flush_renderer( set_zero( hTcBuffer->tc[ch_idx] + n_samples_to_render, hTcBuffer->n_samples_granularity - n_samples_to_render ); mvr2r( hTcBuffer->tc[ch_idx] + hTcBuffer->n_samples_rendered + n_samples_to_render, hTcBuffer->tc[ch_idx] + hTcBuffer->n_samples_granularity, n_samples_still_available ); } #endif /* simple change of the slot info */ hTcBuffer->num_slots = 1; Loading Loading @@ -2052,6 +2069,9 @@ static void ivas_jbm_dec_copy_tc( for ( ch = 0; ch < n_ch_full_copy; ch++ ) { #ifdef OPT_TC mvr2r( st_ivas->hTcBuffer->tc_buffer_old[ch], st_ivas->hTcBuffer->tc[ch] + st_ivas->hTcBuffer->n_samples_rendered, n_samples_still_available ); #endif set_zero( hTcBuffer->tc[ch], hTcBuffer->n_samples_discard ); mvr2r( hTcBuffer->tc[ch] + hTcBuffer->n_samples_rendered, hTcBuffer->tc[ch] + hTcBuffer->n_samples_discard, n_samples_still_available ); for ( m = 0; m < nSamplesForRendering; m++ ) Loading @@ -2064,6 +2084,9 @@ static void ivas_jbm_dec_copy_tc( { for ( ; ch < hTcBuffer->nchan_transport_jbm; ch++ ) { #ifdef OPT_TC mvr2r( st_ivas->hTcBuffer->tc_buffer_old[ch], tc_digest_f[ch], n_samples_still_available ); // VE: TBV!!! #endif mvr2r( hTcBuffer->tc[ch], tc_digest_f[ch], n_samples_still_available ); for ( m = 0; m < nSamplesForRendering; m++ ) { Loading Loading @@ -2244,6 +2267,22 @@ ivas_error ivas_jbm_dec_tc_buffer_open( { hTcBuffer->tc[ch_idx] = NULL; } #ifdef OPT_TC /* memory buffer for TC audio samples not rendered in the previous frame */ for ( ch_idx = 0; ch_idx < max( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full ); ch_idx++ ) { if ( ( hTcBuffer->tc_buffer_old[ch_idx] = (float *) malloc( n_samp_residual * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JBM TC Buffer\n" ) ); } set_zero( hTcBuffer->tc_buffer_old[ch_idx], n_samp_residual ); } for ( ; ch_idx < MAX_TRANSPORT_CHANNELS; ch_idx++ ) { hTcBuffer->tc_buffer_old[ch_idx] = NULL; } #endif } else { Loading Loading @@ -2329,6 +2368,17 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure( { free( hTcBuffer->tc_buffer ); hTcBuffer->tc_buffer = NULL; #ifdef OPT_TC for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS; ch_idx++ ) { if ( hTcBuffer->tc_buffer_old[ch_idx] != NULL ) { free( hTcBuffer->tc_buffer_old[ch_idx] ); hTcBuffer->tc_buffer_old[ch_idx] = NULL; } } #endif } if ( st_ivas->hDecoderConfig->Opt_tsm ) Loading Loading @@ -2377,6 +2427,22 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure( { hTcBuffer->tc[ch_idx] = NULL; } #ifdef OPT_TC /* memory buffer for TC audio samples not rendered in the previous frame */ for ( ch_idx = 0; ch_idx < max( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full ); ch_idx++ ) { if ( ( hTcBuffer->tc_buffer_old[ch_idx] = (float *) malloc( n_samp_residual * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JBM TC Buffer\n" ) ); } set_zero( hTcBuffer->tc_buffer_old[ch_idx], n_samp_residual ); } for ( ; ch_idx < MAX_TRANSPORT_CHANNELS; ch_idx++ ) { hTcBuffer->tc_buffer_old[ch_idx] = NULL; } #endif } else { Loading Loading @@ -2456,6 +2522,17 @@ void ivas_jbm_dec_tc_buffer_close( ( *phTcBuffer )->tc_buffer = NULL; } #ifdef OPT_TC for ( i = 0; i < MAX_TRANSPORT_CHANNELS; i++ ) { if ( ( *phTcBuffer )->tc_buffer_old[i] != NULL ) { free( ( *phTcBuffer )->tc_buffer_old[i] ); ( *phTcBuffer )->tc_buffer_old[i] = NULL; } } #endif free( *phTcBuffer ); *phTcBuffer = NULL; } Loading lib_dec/ivas_stat_dec.h +4 −0 Original line number Diff line number Diff line Loading @@ -944,6 +944,10 @@ typedef struct ivas_masa_ism_data_structure typedef struct decoder_tc_buffer_structure { #ifdef OPT_TC float *tc_buffer_old[MAX_TRANSPORT_CHANNELS]; /* TC audio samples not rendered in the previous frame */ float *tc_residual_old[MAX_INTERN_CHANNELS]; /* residual channels audio samples not rendered in the previous frame */ #endif float *tc_buffer; /* the buffer itself */ float *tc[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS]; /* pointers into the buffer to the beginning of each tc */ // VE2SB: TBV TC_BUFFER_MODE tc_buffer_mode; /* mode of the buffer (no buffering, render buffering, out buffering) */ Loading lib_dec/lib_dec.c +53 −1 Original line number Diff line number Diff line Loading @@ -1191,7 +1191,13 @@ ivas_error IVAS_DEC_ReadFormat( { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } #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 } #endif /* when granularity goes down, render what still fits in the new granularity */ if ( tc_granularity_new < st_ivas->hTcBuffer->n_samples_granularity ) { Loading Loading @@ -1351,6 +1357,20 @@ ivas_error IVAS_DEC_GetSamplesDecoder( } #endif #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 } #endif #ifdef REMOVE_APA_BUFFER for ( int16_t ch = 0; ch < hIvasDec->st_ivas->hTcBuffer->nchan_transport_jbm; ch++ ) { mvr2r( hIvasDec->st_ivas->p_output_f[ch], hIvasDec->st_ivas->hTcBuffer->tc[ch], hIvasDec->nSamplesFrame ); } #endif /*-----------------------------------------------------------------* * JBM *-----------------------------------------------------------------*/ Loading @@ -1372,11 +1392,19 @@ ivas_error IVAS_DEC_GetSamplesDecoder( return IVAS_ERR_UNKNOWN; } #ifdef MY_DEBUG set_f( hIvasDec->apaExecBuffer, 0, nTransportChannels * APA_BUF_PER_CHANNEL ); // VE: debug #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 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 ) #endif { return IVAS_ERR_UNKNOWN; } Loading @@ -1403,7 +1431,11 @@ ivas_error IVAS_DEC_GetSamplesDecoder( } #endif if ( st_ivas->hDecoderConfig->Opt_tsm ) #ifdef MY_DEBUG set_f( hIvasDec->apaExecBuffer, 0, nTransportChannels * APA_BUF_PER_CHANNEL ); // VE: debug #endif if ( hIvasDec->st_ivas->hDecoderConfig->Opt_tsm ) { /* feed residual samples to TSM for the next call */ if ( apa_set_renderer_residual_samples( hIvasDec->hTimeScaler, (uint16_t) nResidualSamples ) != 0 ) Loading Loading @@ -2054,6 +2086,26 @@ ivas_error IVAS_DEC_GetSamplesRenderer( { *needNewFrame = false; } #endif #ifdef OPT_TC if ( st_ivas->hDecoderConfig->Opt_tsm ) { int16_t ch; DECODER_TC_BUFFER_HANDLE hTcBuffer = st_ivas->hTcBuffer; if ( hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered < hTcBuffer->n_samples_granularity ) { for ( ch = 0; ch < min( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full ); ch++ ) { mvr2r( hTcBuffer->tc[ch] + hTcBuffer->n_samples_rendered, hTcBuffer->tc_buffer_old[ch], hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered ); } 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 ); } } } #endif } Loading Loading
lib_com/ivas_cnst.h +1 −1 Original line number Diff line number Diff line Loading @@ -172,7 +172,7 @@ typedef enum #define JBM_CLDFB_SLOTS_IN_SUBFRAME 4 #define MAX_JBM_CLDFB_TIMESLOTS 32 #define DEFAULT_JBM_CLDFB_TIMESLOTS 16 #ifdef JBM_MEMORY_OPT #if (defined JBM_MEMORY_OPT && !defined REMOVE_APA_BUFFER) #define MAX_JBM_L_FRAME48k (1920 - 240) #define MAX_JBM_L_FRAME_NS 35000000L #else Loading
lib_com/options.h +5 −0 Original line number Diff line number Diff line Loading @@ -161,8 +161,13 @@ /*#define FIX_I4_OL_PITCH*/ /* fix open-loop pitch used for EVS core switching */ #define TMP_FIX_1119_SPLIT_RENDERING_VOIP /* FhG: Add error check for unsupported config: split rendering with VoIP mode */ #define LIB_DEC_REVISION /* VA: cleaning and simplification of lib_dec.c */ #if 1 #define JBM_MEMORY_OPT /* VA: issue 916: optimization of RAM in the JBM decoder */ #define OPT_TC // separate heap memory from hTcBuffer->tcBuffer[] //#define REMOVE_APA_BUFFER // remove hIvasDec->apaExecBuffer[] #define MY_DEBUG #endif /* #################### End BE switches ################################## */ Loading
lib_dec/ivas_jbm_dec.c +77 −0 Original line number Diff line number Diff line Loading @@ -1423,6 +1423,22 @@ ivas_error ivas_jbm_dec_flush_renderer( { int16_t ch_idx; #ifdef OPT_TC /* render available full slots (with new lower granularity) */ for ( ch_idx = 0; ch_idx < min( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full ); ch_idx++ ) //for ( ch_idx = 0; ch_idx < max( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full ); ch_idx++ ) { mvr2r( hTcBuffer->tc_buffer_old[ch_idx], hTcBuffer->tc[ch_idx], n_samples_to_render ); } for ( ; ch_idx < hTcBuffer->nchan_buffer_full; ch_idx++ ) { /* move it at the beginning of the TC buffer with zero padding */ mvr2r( hTcBuffer->tc[ch_idx] + hTcBuffer->n_samples_rendered, hTcBuffer->tc[ch_idx], n_samples_to_render ); set_zero( hTcBuffer->tc[ch_idx] + n_samples_to_render, hTcBuffer->n_samples_granularity - n_samples_to_render ); mvr2r( hTcBuffer->tc[ch_idx] + hTcBuffer->n_samples_rendered + n_samples_to_render, hTcBuffer->tc[ch_idx] + hTcBuffer->n_samples_granularity, n_samples_still_available ); } #else /* render what is still there with zero padding */ for ( ch_idx = 0; ch_idx < hTcBuffer->nchan_buffer_full; ch_idx++ ) { Loading @@ -1431,6 +1447,7 @@ ivas_error ivas_jbm_dec_flush_renderer( set_zero( hTcBuffer->tc[ch_idx] + n_samples_to_render, hTcBuffer->n_samples_granularity - n_samples_to_render ); mvr2r( hTcBuffer->tc[ch_idx] + hTcBuffer->n_samples_rendered + n_samples_to_render, hTcBuffer->tc[ch_idx] + hTcBuffer->n_samples_granularity, n_samples_still_available ); } #endif /* simple change of the slot info */ hTcBuffer->num_slots = 1; Loading Loading @@ -2052,6 +2069,9 @@ static void ivas_jbm_dec_copy_tc( for ( ch = 0; ch < n_ch_full_copy; ch++ ) { #ifdef OPT_TC mvr2r( st_ivas->hTcBuffer->tc_buffer_old[ch], st_ivas->hTcBuffer->tc[ch] + st_ivas->hTcBuffer->n_samples_rendered, n_samples_still_available ); #endif set_zero( hTcBuffer->tc[ch], hTcBuffer->n_samples_discard ); mvr2r( hTcBuffer->tc[ch] + hTcBuffer->n_samples_rendered, hTcBuffer->tc[ch] + hTcBuffer->n_samples_discard, n_samples_still_available ); for ( m = 0; m < nSamplesForRendering; m++ ) Loading @@ -2064,6 +2084,9 @@ static void ivas_jbm_dec_copy_tc( { for ( ; ch < hTcBuffer->nchan_transport_jbm; ch++ ) { #ifdef OPT_TC mvr2r( st_ivas->hTcBuffer->tc_buffer_old[ch], tc_digest_f[ch], n_samples_still_available ); // VE: TBV!!! #endif mvr2r( hTcBuffer->tc[ch], tc_digest_f[ch], n_samples_still_available ); for ( m = 0; m < nSamplesForRendering; m++ ) { Loading Loading @@ -2244,6 +2267,22 @@ ivas_error ivas_jbm_dec_tc_buffer_open( { hTcBuffer->tc[ch_idx] = NULL; } #ifdef OPT_TC /* memory buffer for TC audio samples not rendered in the previous frame */ for ( ch_idx = 0; ch_idx < max( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full ); ch_idx++ ) { if ( ( hTcBuffer->tc_buffer_old[ch_idx] = (float *) malloc( n_samp_residual * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JBM TC Buffer\n" ) ); } set_zero( hTcBuffer->tc_buffer_old[ch_idx], n_samp_residual ); } for ( ; ch_idx < MAX_TRANSPORT_CHANNELS; ch_idx++ ) { hTcBuffer->tc_buffer_old[ch_idx] = NULL; } #endif } else { Loading Loading @@ -2329,6 +2368,17 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure( { free( hTcBuffer->tc_buffer ); hTcBuffer->tc_buffer = NULL; #ifdef OPT_TC for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS; ch_idx++ ) { if ( hTcBuffer->tc_buffer_old[ch_idx] != NULL ) { free( hTcBuffer->tc_buffer_old[ch_idx] ); hTcBuffer->tc_buffer_old[ch_idx] = NULL; } } #endif } if ( st_ivas->hDecoderConfig->Opt_tsm ) Loading Loading @@ -2377,6 +2427,22 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure( { hTcBuffer->tc[ch_idx] = NULL; } #ifdef OPT_TC /* memory buffer for TC audio samples not rendered in the previous frame */ for ( ch_idx = 0; ch_idx < max( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full ); ch_idx++ ) { if ( ( hTcBuffer->tc_buffer_old[ch_idx] = (float *) malloc( n_samp_residual * sizeof( float ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JBM TC Buffer\n" ) ); } set_zero( hTcBuffer->tc_buffer_old[ch_idx], n_samp_residual ); } for ( ; ch_idx < MAX_TRANSPORT_CHANNELS; ch_idx++ ) { hTcBuffer->tc_buffer_old[ch_idx] = NULL; } #endif } else { Loading Loading @@ -2456,6 +2522,17 @@ void ivas_jbm_dec_tc_buffer_close( ( *phTcBuffer )->tc_buffer = NULL; } #ifdef OPT_TC for ( i = 0; i < MAX_TRANSPORT_CHANNELS; i++ ) { if ( ( *phTcBuffer )->tc_buffer_old[i] != NULL ) { free( ( *phTcBuffer )->tc_buffer_old[i] ); ( *phTcBuffer )->tc_buffer_old[i] = NULL; } } #endif free( *phTcBuffer ); *phTcBuffer = NULL; } Loading
lib_dec/ivas_stat_dec.h +4 −0 Original line number Diff line number Diff line Loading @@ -944,6 +944,10 @@ typedef struct ivas_masa_ism_data_structure typedef struct decoder_tc_buffer_structure { #ifdef OPT_TC float *tc_buffer_old[MAX_TRANSPORT_CHANNELS]; /* TC audio samples not rendered in the previous frame */ float *tc_residual_old[MAX_INTERN_CHANNELS]; /* residual channels audio samples not rendered in the previous frame */ #endif float *tc_buffer; /* the buffer itself */ float *tc[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS]; /* pointers into the buffer to the beginning of each tc */ // VE2SB: TBV TC_BUFFER_MODE tc_buffer_mode; /* mode of the buffer (no buffering, render buffering, out buffering) */ Loading
lib_dec/lib_dec.c +53 −1 Original line number Diff line number Diff line Loading @@ -1191,7 +1191,13 @@ ivas_error IVAS_DEC_ReadFormat( { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } #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 } #endif /* when granularity goes down, render what still fits in the new granularity */ if ( tc_granularity_new < st_ivas->hTcBuffer->n_samples_granularity ) { Loading Loading @@ -1351,6 +1357,20 @@ ivas_error IVAS_DEC_GetSamplesDecoder( } #endif #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 } #endif #ifdef REMOVE_APA_BUFFER for ( int16_t ch = 0; ch < hIvasDec->st_ivas->hTcBuffer->nchan_transport_jbm; ch++ ) { mvr2r( hIvasDec->st_ivas->p_output_f[ch], hIvasDec->st_ivas->hTcBuffer->tc[ch], hIvasDec->nSamplesFrame ); } #endif /*-----------------------------------------------------------------* * JBM *-----------------------------------------------------------------*/ Loading @@ -1372,11 +1392,19 @@ ivas_error IVAS_DEC_GetSamplesDecoder( return IVAS_ERR_UNKNOWN; } #ifdef MY_DEBUG set_f( hIvasDec->apaExecBuffer, 0, nTransportChannels * APA_BUF_PER_CHANNEL ); // VE: debug #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 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 ) #endif { return IVAS_ERR_UNKNOWN; } Loading @@ -1403,7 +1431,11 @@ ivas_error IVAS_DEC_GetSamplesDecoder( } #endif if ( st_ivas->hDecoderConfig->Opt_tsm ) #ifdef MY_DEBUG set_f( hIvasDec->apaExecBuffer, 0, nTransportChannels * APA_BUF_PER_CHANNEL ); // VE: debug #endif if ( hIvasDec->st_ivas->hDecoderConfig->Opt_tsm ) { /* feed residual samples to TSM for the next call */ if ( apa_set_renderer_residual_samples( hIvasDec->hTimeScaler, (uint16_t) nResidualSamples ) != 0 ) Loading Loading @@ -2054,6 +2086,26 @@ ivas_error IVAS_DEC_GetSamplesRenderer( { *needNewFrame = false; } #endif #ifdef OPT_TC if ( st_ivas->hDecoderConfig->Opt_tsm ) { int16_t ch; DECODER_TC_BUFFER_HANDLE hTcBuffer = st_ivas->hTcBuffer; if ( hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered < hTcBuffer->n_samples_granularity ) { for ( ch = 0; ch < min( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full ); ch++ ) { mvr2r( hTcBuffer->tc[ch] + hTcBuffer->n_samples_rendered, hTcBuffer->tc_buffer_old[ch], hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered ); } 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 ); } } } #endif } Loading