Loading lib_com/ivas_cnst.h +0 −5 Original line number Diff line number Diff line Loading @@ -172,13 +172,8 @@ typedef enum #define JBM_CLDFB_SLOTS_IN_SUBFRAME 4 #define MAX_JBM_CLDFB_TIMESLOTS 32 #define DEFAULT_JBM_CLDFB_TIMESLOTS 16 #if (defined JBM_MEMORY_OPT && !defined REMOVE_APA_BUFFER) #define MAX_JBM_L_FRAME48k (1920 - 240) #define MAX_JBM_L_FRAME_NS 35000000L #else #define MAX_JBM_L_FRAME48k 1920 #define MAX_JBM_L_FRAME_NS 40000000L #endif #define MAX_SPAR_INTERNAL_CHANNELS IVAS_SPAR_MAX_CH #define MAX_CLDFB_DIGEST_CHANNELS (FOA_CHANNELS + MAX_NUM_OBJECTS) Loading lib_com/ivas_prot.h +2 −2 Original line number Diff line number Diff line Loading @@ -266,7 +266,7 @@ void ivas_syn_output_f( float *synth_out /* o : integer 16 bits synthesis signal */ ); #ifdef SER2PAR #ifdef JBM_MEMORY_OPT void ivas_buffer_serial_to_parallel( float *audio, /* i/o: audio buffer */ const int16_t n_channels, /* i : number of channels */ Loading Loading @@ -849,7 +849,7 @@ void ivas_jbm_dec_feed_tc_to_renderer( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const int16_t nSamplesForRendering, /* i : number of TC samples available for rendering */ int16_t *nSamplesResidual /* o : number of samples not fitting into the renderer grid and buffer for the next call*/ #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT , float *data /* i/o: time-scaled transport channels */ #endif Loading lib_com/ivas_tools.c +1 −1 Original line number Diff line number Diff line Loading @@ -148,7 +148,7 @@ uint32_t ivas_syn_output( return noClipping; } #ifdef SER2PAR #ifdef JBM_MEMORY_OPT /*-------------------------------------------------------------------* * ivas_buffer_serial_to_parallel() Loading lib_com/options.h +0 −5 Original line number Diff line number Diff line Loading @@ -161,13 +161,8 @@ /*#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 FIX_OSBA_BR_SW_FLUSH #define REMOVE_APA_BUFFER // remove hIvasDec->apaExecBuffer[] #define SER2PAR #endif /* #################### End BE switches ################################## */ Loading lib_dec/ivas_jbm_dec.c +21 −79 Original line number Diff line number Diff line Loading @@ -50,7 +50,7 @@ * Local function prototypes *-----------------------------------------------------------------------*/ #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT static void ivas_jbm_dec_copy_tc( Decoder_Struct *st_ivas, const int16_t nSamplesForRendering, int16_t *nSamplesResidual, float *data, float *tc_digest_f[] ); #endif static void ivas_jbm_dec_tc_buffer_playout( Decoder_Struct *st_ivas, const uint16_t nSamplesAsked, uint16_t *nSamplesRendered, float *output[] ); Loading Loading @@ -793,13 +793,13 @@ void ivas_jbm_dec_feed_tc_to_renderer( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const int16_t nSamplesForRendering, /* i : number of TC samples available for rendering */ int16_t *nSamplesResidual /* o : number of samples not fitting into the renderer grid and buffer for the next call*/ #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT , float *data /* i : time-scaled transport channels */ #endif ) { #ifdef SER2PAR #ifdef JBM_MEMORY_OPT float tmp_buf[MAX_JBM_L_FRAME48k]; #else float data_f[MAX_CLDFB_DIGEST_CHANNELS][MAX_JBM_L_FRAME48k]; /* 'float' buffer for transport channels that will be directly converted with the CLDFB */ Loading @@ -808,16 +808,9 @@ void ivas_jbm_dec_feed_tc_to_renderer( int16_t n, n_render_timeslots; push_wmops( "ivas_jbm_dec_feed_tc_to_renderer" ); #ifndef SER2PAR for ( n = 0; n < MAX_CLDFB_DIGEST_CHANNELS; n++ ) { p_data_f[n] = &data_f[n][0]; } #endif if ( !st_ivas->hDecoderConfig->Opt_tsm ) { #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT for ( n = 0; n < max( st_ivas->hTcBuffer->nchan_transport_jbm, st_ivas->hTcBuffer->nchan_buffer_full ); n++ ) #else for ( n = 0; n < ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); n++ ) Loading @@ -829,28 +822,12 @@ void ivas_jbm_dec_feed_tc_to_renderer( if ( st_ivas->hDecoderConfig->Opt_tsm ) { #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT int16_t n_samples_still_available, ch; int16_t n_ch_full_copy, n_ch_res_copy, n_ch_cldfb; int16_t n_ch_full_copy, n_ch_res_copy; DECODER_TC_BUFFER_HANDLE hTcBuffer; #ifndef SER2PAR #ifdef REMOVE_APA_BUFFER float data[MAX_TRANSPORT_CHANNELS * MAX_JBM_L_FRAME48k]; int16_t n_samp_full = ( NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_L_FRAME_NS ) ); mvr2r( st_ivas->hTcBuffer->tc_buffer, data, st_ivas->hTcBuffer->nchan_transport_jbm * n_samp_full ); #endif #endif hTcBuffer = st_ivas->hTcBuffer; n_ch_cldfb = hTcBuffer->nchan_transport_jbm - hTcBuffer->nchan_buffer_full; #ifndef SER2PAR for ( n = 0; n < n_ch_cldfb; n++ ) { p_data_f[n] = &data_f[n][0]; } #endif n_samples_still_available = hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered; hTcBuffer->n_samples_buffered = n_samples_still_available + nSamplesForRendering + hTcBuffer->n_samples_discard; hTcBuffer->n_samples_available = hTcBuffer->n_samples_granularity * ( hTcBuffer->n_samples_buffered / hTcBuffer->n_samples_granularity ); Loading @@ -860,43 +837,22 @@ void ivas_jbm_dec_feed_tc_to_renderer( for ( ch = 0; ch < n_ch_full_copy; ch++ ) { #ifdef SER2PAR mvr2r( hTcBuffer->tc[ch], tmp_buf, nSamplesForRendering ); #endif set_zero( hTcBuffer->tc[ch], hTcBuffer->n_samples_discard ); mvr2r( st_ivas->hTcBuffer->tc_buffer_old[ch], st_ivas->hTcBuffer->tc[ch] + st_ivas->hTcBuffer->n_samples_discard, n_samples_still_available ); #ifdef SER2PAR mvr2r( tmp_buf, hTcBuffer->tc[ch] + n_samples_still_available + hTcBuffer->n_samples_discard, nSamplesForRendering - *nSamplesResidual ); mvr2r( tmp_buf + nSamplesForRendering - *nSamplesResidual, hTcBuffer->tc_buffer_old[ch], *nSamplesResidual ); #else for ( int16_t m = 0; m < nSamplesForRendering; m++ ) { hTcBuffer->tc[ch][n_samples_still_available + hTcBuffer->n_samples_discard + m] = data[m * hTcBuffer->nchan_transport_jbm + ch]; } mvr2r( hTcBuffer->tc[ch] + hTcBuffer->n_samples_available, hTcBuffer->tc_buffer_old[ch], *nSamplesResidual ); #endif } if ( n_ch_res_copy > 0 ) { for ( ; ch < hTcBuffer->nchan_transport_jbm; ch++ ) { #ifdef SER2PAR mvr2r( hTcBuffer->tc[ch], tmp_buf, nSamplesForRendering ); p_data_f[ch - n_ch_full_copy] = hTcBuffer->tc[ch]; #endif mvr2r( hTcBuffer->tc[ch], tmp_buf, nSamplesForRendering ); mvr2r( st_ivas->hTcBuffer->tc_buffer_old[ch], p_data_f[ch], n_samples_still_available ); #ifdef SER2PAR mvr2r( tmp_buf, p_data_f[ch] + n_samples_still_available, nSamplesForRendering - *nSamplesResidual ); mvr2r( tmp_buf + nSamplesForRendering - *nSamplesResidual, hTcBuffer->tc_buffer_old[ch], *nSamplesResidual ); #else for ( int16_t m = 0; m < nSamplesForRendering; m++ ) { p_data_f[ch][n_samples_still_available + m] = data[m * hTcBuffer->nchan_transport_jbm + ch]; } mvr2r( p_data_f[ch] + hTcBuffer->n_samples_available, hTcBuffer->tc_buffer_old[ch], *nSamplesResidual ); #endif } } Loading Loading @@ -988,7 +944,7 @@ ivas_error ivas_jbm_dec_render( p_tc[n] = &p_output[n][st_ivas->hTcBuffer->n_samples_rendered]; } #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT for ( n = 0; n < MAX_INTERN_CHANNELS; n++ ) #else for ( n = 0; n < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; n++ ) Loading Loading @@ -1517,28 +1473,14 @@ ivas_error ivas_jbm_dec_flush_renderer( { int16_t ch_idx; #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT /* render available full slots (with new lower granularity) */ #ifdef FIX_OSBA_BR_SW_FLUSH for ( ch_idx = 0; ch_idx < max( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full ); ch_idx++ ) // for ( ch_idx = 0; ch_idx < hTcBuffer->nchan_transport_internal; ch_idx++ ) // VE: TBV #else for ( ch_idx = 0; ch_idx < hTcBuffer->nchan_transport_jbm; ch_idx++ ) #endif { /* move it at the beginning of the TC buffer with zero padding */ mvr2r( hTcBuffer->tc_buffer_old[ch_idx], 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 ); } #ifndef FIX_OSBA_BR_SW_FLUSH 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 ); } #endif #else /* render what is still there with zero padding */ for ( ch_idx = 0; ch_idx < hTcBuffer->nchan_buffer_full; ch_idx++ ) Loading Loading @@ -2138,7 +2080,7 @@ int16_t ivas_jbm_dec_get_num_tc_channels( return num_tc; } #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT /*--------------------------------------------------------------------------* * ivas_jbm_dec_copy_tc() * Loading Loading @@ -2259,7 +2201,7 @@ int16_t ivas_jbm_dec_get_render_granularity( } #endif #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT /*--------------------------------------------------------------------------* * ivas_jbm_dec_tc_audio_allocate() Loading Loading @@ -2396,12 +2338,12 @@ ivas_error ivas_jbm_dec_tc_buffer_open( const int16_t n_samples_granularity /* i : granularity of the renderer/buffer */ ) { #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT int16_t nsamp_to_allocate; #endif DECODER_TC_BUFFER_HANDLE hTcBuffer; int16_t nMaxSlotsPerSubframe; #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT ivas_error error; #else int16_t nchan_residual; Loading @@ -2421,7 +2363,7 @@ ivas_error ivas_jbm_dec_tc_buffer_open( hTcBuffer->nchan_transport_jbm = nchan_transport_jbm; hTcBuffer->nchan_transport_internal = nchan_transport_internal; hTcBuffer->nchan_buffer_full = nchan_full; #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT nchan_residual = nchan_transport_internal - nchan_full; #endif hTcBuffer->n_samples_granularity = n_samples_granularity; Loading @@ -2433,7 +2375,7 @@ ivas_error ivas_jbm_dec_tc_buffer_open( hTcBuffer->n_samples_discard = 0; hTcBuffer->n_samples_flushed = 0; hTcBuffer->nb_subframes = MAX_PARAM_SPATIAL_SUBFRAMES; #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT nsamp_to_allocate = 0; #endif nMaxSlotsPerSubframe = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / ( FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES ) ) / hTcBuffer->n_samples_granularity; Loading @@ -2441,7 +2383,7 @@ ivas_error ivas_jbm_dec_tc_buffer_open( set_s( hTcBuffer->subframe_nbslots, 0, MAX_JBM_SUBFRAMES_5MS ); set_s( hTcBuffer->subframe_nbslots, nMaxSlotsPerSubframe, MAX_PARAM_SPATIAL_SUBFRAMES ); #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT if ( ( error = ivas_jbm_dec_tc_audio_allocate( hTcBuffer, st_ivas->hDecoderConfig->output_Fs, st_ivas->hDecoderConfig->Opt_tsm ) ) != IVAS_ERR_OK ) { return error; Loading Loading @@ -2529,7 +2471,7 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure( const int16_t n_samples_granularity /* i : new granularity of the renderer/buffer */ ) { #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT ivas_error error; #else int16_t nsamp_to_allocate, n_samp_full, n_samp_residual, offset, nchan_residual; Loading Loading @@ -2576,7 +2518,7 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure( hTcBuffer->nchan_transport_jbm = nchan_transport_jbm; hTcBuffer->nchan_transport_internal = nchan_transport_internal; hTcBuffer->nchan_buffer_full = nchan_full; #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT nchan_residual = nchan_transport_internal - nchan_full; #endif hTcBuffer->n_samples_granularity = n_samples_granularity; Loading @@ -2586,7 +2528,7 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure( assert( ( hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered ) < n_samples_granularity ); #endif #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT /* reallocate TC audio buffers */ ivas_jbm_dec_tc_audio_deallocate( hTcBuffer ); Loading Loading @@ -2714,13 +2656,13 @@ void ivas_jbm_dec_tc_buffer_close( DECODER_TC_BUFFER_HANDLE *phTcBuffer /* i/o: TC buffer handle */ ) { #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT int16_t i; #endif if ( *phTcBuffer != NULL ) { #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT ivas_jbm_dec_tc_audio_deallocate( *phTcBuffer ); #else for ( i = 0; i < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; i++ ) Loading Loading
lib_com/ivas_cnst.h +0 −5 Original line number Diff line number Diff line Loading @@ -172,13 +172,8 @@ typedef enum #define JBM_CLDFB_SLOTS_IN_SUBFRAME 4 #define MAX_JBM_CLDFB_TIMESLOTS 32 #define DEFAULT_JBM_CLDFB_TIMESLOTS 16 #if (defined JBM_MEMORY_OPT && !defined REMOVE_APA_BUFFER) #define MAX_JBM_L_FRAME48k (1920 - 240) #define MAX_JBM_L_FRAME_NS 35000000L #else #define MAX_JBM_L_FRAME48k 1920 #define MAX_JBM_L_FRAME_NS 40000000L #endif #define MAX_SPAR_INTERNAL_CHANNELS IVAS_SPAR_MAX_CH #define MAX_CLDFB_DIGEST_CHANNELS (FOA_CHANNELS + MAX_NUM_OBJECTS) Loading
lib_com/ivas_prot.h +2 −2 Original line number Diff line number Diff line Loading @@ -266,7 +266,7 @@ void ivas_syn_output_f( float *synth_out /* o : integer 16 bits synthesis signal */ ); #ifdef SER2PAR #ifdef JBM_MEMORY_OPT void ivas_buffer_serial_to_parallel( float *audio, /* i/o: audio buffer */ const int16_t n_channels, /* i : number of channels */ Loading Loading @@ -849,7 +849,7 @@ void ivas_jbm_dec_feed_tc_to_renderer( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const int16_t nSamplesForRendering, /* i : number of TC samples available for rendering */ int16_t *nSamplesResidual /* o : number of samples not fitting into the renderer grid and buffer for the next call*/ #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT , float *data /* i/o: time-scaled transport channels */ #endif Loading
lib_com/ivas_tools.c +1 −1 Original line number Diff line number Diff line Loading @@ -148,7 +148,7 @@ uint32_t ivas_syn_output( return noClipping; } #ifdef SER2PAR #ifdef JBM_MEMORY_OPT /*-------------------------------------------------------------------* * ivas_buffer_serial_to_parallel() Loading
lib_com/options.h +0 −5 Original line number Diff line number Diff line Loading @@ -161,13 +161,8 @@ /*#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 FIX_OSBA_BR_SW_FLUSH #define REMOVE_APA_BUFFER // remove hIvasDec->apaExecBuffer[] #define SER2PAR #endif /* #################### End BE switches ################################## */ Loading
lib_dec/ivas_jbm_dec.c +21 −79 Original line number Diff line number Diff line Loading @@ -50,7 +50,7 @@ * Local function prototypes *-----------------------------------------------------------------------*/ #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT static void ivas_jbm_dec_copy_tc( Decoder_Struct *st_ivas, const int16_t nSamplesForRendering, int16_t *nSamplesResidual, float *data, float *tc_digest_f[] ); #endif static void ivas_jbm_dec_tc_buffer_playout( Decoder_Struct *st_ivas, const uint16_t nSamplesAsked, uint16_t *nSamplesRendered, float *output[] ); Loading Loading @@ -793,13 +793,13 @@ void ivas_jbm_dec_feed_tc_to_renderer( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const int16_t nSamplesForRendering, /* i : number of TC samples available for rendering */ int16_t *nSamplesResidual /* o : number of samples not fitting into the renderer grid and buffer for the next call*/ #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT , float *data /* i : time-scaled transport channels */ #endif ) { #ifdef SER2PAR #ifdef JBM_MEMORY_OPT float tmp_buf[MAX_JBM_L_FRAME48k]; #else float data_f[MAX_CLDFB_DIGEST_CHANNELS][MAX_JBM_L_FRAME48k]; /* 'float' buffer for transport channels that will be directly converted with the CLDFB */ Loading @@ -808,16 +808,9 @@ void ivas_jbm_dec_feed_tc_to_renderer( int16_t n, n_render_timeslots; push_wmops( "ivas_jbm_dec_feed_tc_to_renderer" ); #ifndef SER2PAR for ( n = 0; n < MAX_CLDFB_DIGEST_CHANNELS; n++ ) { p_data_f[n] = &data_f[n][0]; } #endif if ( !st_ivas->hDecoderConfig->Opt_tsm ) { #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT for ( n = 0; n < max( st_ivas->hTcBuffer->nchan_transport_jbm, st_ivas->hTcBuffer->nchan_buffer_full ); n++ ) #else for ( n = 0; n < ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); n++ ) Loading @@ -829,28 +822,12 @@ void ivas_jbm_dec_feed_tc_to_renderer( if ( st_ivas->hDecoderConfig->Opt_tsm ) { #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT int16_t n_samples_still_available, ch; int16_t n_ch_full_copy, n_ch_res_copy, n_ch_cldfb; int16_t n_ch_full_copy, n_ch_res_copy; DECODER_TC_BUFFER_HANDLE hTcBuffer; #ifndef SER2PAR #ifdef REMOVE_APA_BUFFER float data[MAX_TRANSPORT_CHANNELS * MAX_JBM_L_FRAME48k]; int16_t n_samp_full = ( NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_L_FRAME_NS ) ); mvr2r( st_ivas->hTcBuffer->tc_buffer, data, st_ivas->hTcBuffer->nchan_transport_jbm * n_samp_full ); #endif #endif hTcBuffer = st_ivas->hTcBuffer; n_ch_cldfb = hTcBuffer->nchan_transport_jbm - hTcBuffer->nchan_buffer_full; #ifndef SER2PAR for ( n = 0; n < n_ch_cldfb; n++ ) { p_data_f[n] = &data_f[n][0]; } #endif n_samples_still_available = hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered; hTcBuffer->n_samples_buffered = n_samples_still_available + nSamplesForRendering + hTcBuffer->n_samples_discard; hTcBuffer->n_samples_available = hTcBuffer->n_samples_granularity * ( hTcBuffer->n_samples_buffered / hTcBuffer->n_samples_granularity ); Loading @@ -860,43 +837,22 @@ void ivas_jbm_dec_feed_tc_to_renderer( for ( ch = 0; ch < n_ch_full_copy; ch++ ) { #ifdef SER2PAR mvr2r( hTcBuffer->tc[ch], tmp_buf, nSamplesForRendering ); #endif set_zero( hTcBuffer->tc[ch], hTcBuffer->n_samples_discard ); mvr2r( st_ivas->hTcBuffer->tc_buffer_old[ch], st_ivas->hTcBuffer->tc[ch] + st_ivas->hTcBuffer->n_samples_discard, n_samples_still_available ); #ifdef SER2PAR mvr2r( tmp_buf, hTcBuffer->tc[ch] + n_samples_still_available + hTcBuffer->n_samples_discard, nSamplesForRendering - *nSamplesResidual ); mvr2r( tmp_buf + nSamplesForRendering - *nSamplesResidual, hTcBuffer->tc_buffer_old[ch], *nSamplesResidual ); #else for ( int16_t m = 0; m < nSamplesForRendering; m++ ) { hTcBuffer->tc[ch][n_samples_still_available + hTcBuffer->n_samples_discard + m] = data[m * hTcBuffer->nchan_transport_jbm + ch]; } mvr2r( hTcBuffer->tc[ch] + hTcBuffer->n_samples_available, hTcBuffer->tc_buffer_old[ch], *nSamplesResidual ); #endif } if ( n_ch_res_copy > 0 ) { for ( ; ch < hTcBuffer->nchan_transport_jbm; ch++ ) { #ifdef SER2PAR mvr2r( hTcBuffer->tc[ch], tmp_buf, nSamplesForRendering ); p_data_f[ch - n_ch_full_copy] = hTcBuffer->tc[ch]; #endif mvr2r( hTcBuffer->tc[ch], tmp_buf, nSamplesForRendering ); mvr2r( st_ivas->hTcBuffer->tc_buffer_old[ch], p_data_f[ch], n_samples_still_available ); #ifdef SER2PAR mvr2r( tmp_buf, p_data_f[ch] + n_samples_still_available, nSamplesForRendering - *nSamplesResidual ); mvr2r( tmp_buf + nSamplesForRendering - *nSamplesResidual, hTcBuffer->tc_buffer_old[ch], *nSamplesResidual ); #else for ( int16_t m = 0; m < nSamplesForRendering; m++ ) { p_data_f[ch][n_samples_still_available + m] = data[m * hTcBuffer->nchan_transport_jbm + ch]; } mvr2r( p_data_f[ch] + hTcBuffer->n_samples_available, hTcBuffer->tc_buffer_old[ch], *nSamplesResidual ); #endif } } Loading Loading @@ -988,7 +944,7 @@ ivas_error ivas_jbm_dec_render( p_tc[n] = &p_output[n][st_ivas->hTcBuffer->n_samples_rendered]; } #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT for ( n = 0; n < MAX_INTERN_CHANNELS; n++ ) #else for ( n = 0; n < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; n++ ) Loading Loading @@ -1517,28 +1473,14 @@ ivas_error ivas_jbm_dec_flush_renderer( { int16_t ch_idx; #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT /* render available full slots (with new lower granularity) */ #ifdef FIX_OSBA_BR_SW_FLUSH for ( ch_idx = 0; ch_idx < max( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full ); ch_idx++ ) // for ( ch_idx = 0; ch_idx < hTcBuffer->nchan_transport_internal; ch_idx++ ) // VE: TBV #else for ( ch_idx = 0; ch_idx < hTcBuffer->nchan_transport_jbm; ch_idx++ ) #endif { /* move it at the beginning of the TC buffer with zero padding */ mvr2r( hTcBuffer->tc_buffer_old[ch_idx], 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 ); } #ifndef FIX_OSBA_BR_SW_FLUSH 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 ); } #endif #else /* render what is still there with zero padding */ for ( ch_idx = 0; ch_idx < hTcBuffer->nchan_buffer_full; ch_idx++ ) Loading Loading @@ -2138,7 +2080,7 @@ int16_t ivas_jbm_dec_get_num_tc_channels( return num_tc; } #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT /*--------------------------------------------------------------------------* * ivas_jbm_dec_copy_tc() * Loading Loading @@ -2259,7 +2201,7 @@ int16_t ivas_jbm_dec_get_render_granularity( } #endif #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT /*--------------------------------------------------------------------------* * ivas_jbm_dec_tc_audio_allocate() Loading Loading @@ -2396,12 +2338,12 @@ ivas_error ivas_jbm_dec_tc_buffer_open( const int16_t n_samples_granularity /* i : granularity of the renderer/buffer */ ) { #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT int16_t nsamp_to_allocate; #endif DECODER_TC_BUFFER_HANDLE hTcBuffer; int16_t nMaxSlotsPerSubframe; #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT ivas_error error; #else int16_t nchan_residual; Loading @@ -2421,7 +2363,7 @@ ivas_error ivas_jbm_dec_tc_buffer_open( hTcBuffer->nchan_transport_jbm = nchan_transport_jbm; hTcBuffer->nchan_transport_internal = nchan_transport_internal; hTcBuffer->nchan_buffer_full = nchan_full; #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT nchan_residual = nchan_transport_internal - nchan_full; #endif hTcBuffer->n_samples_granularity = n_samples_granularity; Loading @@ -2433,7 +2375,7 @@ ivas_error ivas_jbm_dec_tc_buffer_open( hTcBuffer->n_samples_discard = 0; hTcBuffer->n_samples_flushed = 0; hTcBuffer->nb_subframes = MAX_PARAM_SPATIAL_SUBFRAMES; #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT nsamp_to_allocate = 0; #endif nMaxSlotsPerSubframe = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / ( FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES ) ) / hTcBuffer->n_samples_granularity; Loading @@ -2441,7 +2383,7 @@ ivas_error ivas_jbm_dec_tc_buffer_open( set_s( hTcBuffer->subframe_nbslots, 0, MAX_JBM_SUBFRAMES_5MS ); set_s( hTcBuffer->subframe_nbslots, nMaxSlotsPerSubframe, MAX_PARAM_SPATIAL_SUBFRAMES ); #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT if ( ( error = ivas_jbm_dec_tc_audio_allocate( hTcBuffer, st_ivas->hDecoderConfig->output_Fs, st_ivas->hDecoderConfig->Opt_tsm ) ) != IVAS_ERR_OK ) { return error; Loading Loading @@ -2529,7 +2471,7 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure( const int16_t n_samples_granularity /* i : new granularity of the renderer/buffer */ ) { #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT ivas_error error; #else int16_t nsamp_to_allocate, n_samp_full, n_samp_residual, offset, nchan_residual; Loading Loading @@ -2576,7 +2518,7 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure( hTcBuffer->nchan_transport_jbm = nchan_transport_jbm; hTcBuffer->nchan_transport_internal = nchan_transport_internal; hTcBuffer->nchan_buffer_full = nchan_full; #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT nchan_residual = nchan_transport_internal - nchan_full; #endif hTcBuffer->n_samples_granularity = n_samples_granularity; Loading @@ -2586,7 +2528,7 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure( assert( ( hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered ) < n_samples_granularity ); #endif #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT /* reallocate TC audio buffers */ ivas_jbm_dec_tc_audio_deallocate( hTcBuffer ); Loading Loading @@ -2714,13 +2656,13 @@ void ivas_jbm_dec_tc_buffer_close( DECODER_TC_BUFFER_HANDLE *phTcBuffer /* i/o: TC buffer handle */ ) { #ifndef REMOVE_APA_BUFFER #ifndef JBM_MEMORY_OPT int16_t i; #endif if ( *phTcBuffer != NULL ) { #ifdef REMOVE_APA_BUFFER #ifdef JBM_MEMORY_OPT ivas_jbm_dec_tc_audio_deallocate( *phTcBuffer ); #else for ( i = 0; i < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; i++ ) Loading