Loading lib_com/ivas_prot.h +15 −8 Original line number Diff line number Diff line Loading @@ -259,22 +259,29 @@ uint32_t ivas_syn_output( int16_t *synth_out /* o : integer 16 bits synthesis signal */ ); void ivas_syn_output_f( float *synth[], /* i/o: float synthesis signal */ const int16_t output_frame, /* i : output frame length (one channel) */ const int16_t n_channels, /* i : number of output channels */ float *synth_out /* o : integer 16 bits synthesis signal */ ); #ifdef JBM_MEMORY_OPT void ivas_buffer_serial_to_parallel( void ivas_buffer_interleaved_to_deinterleaved( float *audio, /* i/o: audio buffer */ const int16_t n_channels, /* i : number of channels */ const int16_t frame_length, /* i : frame length (one channel ) */ const int16_t n_samp_full /* i : full frame length (one channel) */ ); void ivas_buffer_deinterleaved_to_interleaved( float *audio[], /* i : deinterleaved audio buffer */ const int16_t n_channels, /* i : number of channels */ const int16_t frame_length, /* i : frame length (one channel ) */ float *audio_out /* o : interleaved audio buffer */ ); #else void ivas_syn_output_f( float *synth[], /* i/o: float synthesis signal */ const int16_t output_frame, /* i : output frame length (one channel) */ const int16_t n_channels, /* i : number of output channels */ float *synth_out /* o : integer 16 bits synthesis signal */ ); #endif void ivas_initialize_handles_enc( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ); Loading lib_com/ivas_tools.c +32 −4 Original line number Diff line number Diff line Loading @@ -151,12 +151,12 @@ uint32_t ivas_syn_output( #ifdef JBM_MEMORY_OPT /*-------------------------------------------------------------------* * ivas_buffer_serial_to_parallel() * ivas_buffer_interleaved_to_deinterleaved() * * reshuffle an interleaved serial buffer to one-by-one audio channels representation * Convert an interleaved buffer of audio channels to deinterleaved one *-------------------------------------------------------------------*/ void ivas_buffer_serial_to_parallel( void ivas_buffer_interleaved_to_deinterleaved( float *audio, /* i/o: audio buffer */ const int16_t n_channels, /* i : number of channels */ const int16_t frame_length, /* i : frame length (one channel ) */ Loading Loading @@ -184,7 +184,34 @@ void ivas_buffer_serial_to_parallel( return; } #endif /*-------------------------------------------------------------------* * ivas_buffer_deinterleaved_to_interleaved() * * Convert a deinterleaved buffer of audio channels to interleaved one *-------------------------------------------------------------------*/ void ivas_buffer_deinterleaved_to_interleaved( float *audio[], /* i/o: deinterleaved audio buffer */ const int16_t n_channels, /* i : number of channels */ const int16_t frame_length, /* i : frame length (one channel ) */ float *audio_out /* o : interleaved audio buffer */ ) { int16_t ch, m; for ( ch = 0; ch < n_channels; ch++ ) { for ( m = 0; m < frame_length; m++ ) { audio_out[m * n_channels + ch] = audio[ch][m]; } } return; } #else /*-------------------------------------------------------------------* * ivas_syn_output_f() Loading Loading @@ -218,6 +245,7 @@ void ivas_syn_output_f( return; } #endif /*-------------------------------------------------------------------* * mvr2r_inc() Loading lib_dec/ivas_jbm_dec.c +11 −4 Original line number Diff line number Diff line Loading @@ -784,7 +784,6 @@ void ivas_jbm_dec_feed_tc_to_renderer( int16_t n_samples_still_available; int16_t n_ch_full_copy, n_ch_res_copy; hTcBuffer = st_ivas->hTcBuffer; 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 @@ -796,7 +795,7 @@ void ivas_jbm_dec_feed_tc_to_renderer( { mvr2r( hTcBuffer->tc[ch], tmp_buf, nSamplesForRendering ); 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 ); mvr2r( hTcBuffer->tc_buffer_old[ch], hTcBuffer->tc[ch] + hTcBuffer->n_samples_discard, n_samples_still_available ); 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 ); } Loading @@ -807,7 +806,7 @@ void ivas_jbm_dec_feed_tc_to_renderer( { p_data_f[ch - n_ch_full_copy] = hTcBuffer->tc[ch]; mvr2r( hTcBuffer->tc[ch], tmp_buf, nSamplesForRendering ); mvr2r( st_ivas->hTcBuffer->tc_buffer_old[ch], p_data_f[ch], n_samples_still_available ); mvr2r( hTcBuffer->tc_buffer_old[ch], p_data_f[ch], n_samples_still_available ); mvr2r( tmp_buf, p_data_f[ch] + n_samples_still_available, nSamplesForRendering - *nSamplesResidual ); mvr2r( tmp_buf + nSamplesForRendering - *nSamplesResidual, hTcBuffer->tc_buffer_old[ch], *nSamplesResidual ); } Loading Loading @@ -864,7 +863,7 @@ void ivas_jbm_dec_feed_tc_to_renderer( } #ifdef JBM_MEMORY_OPT for ( n = 0; n < max( st_ivas->hTcBuffer->nchan_transport_jbm, st_ivas->hTcBuffer->nchan_buffer_full ); n++ ) for ( n = 0; n < max( hTcBuffer->nchan_transport_jbm, 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++ ) #endif Loading Loading @@ -1397,7 +1396,11 @@ ivas_error ivas_jbm_dec_render( break; case PCM_FLOAT32: #ifdef JBM_MEMORY_OPT ivas_buffer_deinterleaved_to_interleaved( p_output, nchan_out_syn_output, *nSamplesRendered, (float *) data ); #else ivas_syn_output_f( p_output, *nSamplesRendered, nchan_out_syn_output, (float *) data ); #endif break; default: error = IVAS_ERR_UNKNOWN; Loading Loading @@ -1679,7 +1682,11 @@ ivas_error ivas_jbm_dec_flush_renderer( ivas_syn_output( p_output, *nSamplesRendered, st_ivas->hDecoderConfig->nchan_out, (int16_t *) data ); break; case PCM_FLOAT32: #ifdef JBM_MEMORY_OPT ivas_buffer_deinterleaved_to_interleaved( p_output, st_ivas->hDecoderConfig->nchan_out, *nSamplesRendered, (float *) data ); #else ivas_syn_output_f( p_output, *nSamplesRendered, st_ivas->hDecoderConfig->nchan_out, (float *) data ); #endif break; default: error = IVAS_ERR_UNKNOWN; Loading lib_dec/lib_dec.c +6 −6 Original line number Diff line number Diff line Loading @@ -1206,13 +1206,13 @@ ivas_error IVAS_DEC_GetSamplesDecoder( } #ifdef JBM_MEMORY_OPT /* reshuffle one-by-one decoded TC audio channels to an interleaved serial buffer */ ivas_syn_output_f( st_ivas->p_output_f, hIvasDec->nSamplesFrame, nTransportChannels, st_ivas->hTcBuffer->tc_buffer ); /* convert deinterleaved decoded TC audio channels buffer to an interleaved one */ ivas_buffer_deinterleaved_to_interleaved( st_ivas->p_output_f, nTransportChannels, hIvasDec->nSamplesFrame, st_ivas->hTcBuffer->tc_buffer ); /* time scale modification */ if ( apa_exec( hIvasDec->hTimeScaler, st_ivas->hTcBuffer->tc_buffer, hIvasDec->nSamplesFrame * nTransportChannels, (uint16_t) hIvasDec->tsm_max_scaling, st_ivas->hTcBuffer->tc_buffer, &nTimeScalerOutSamples ) != 0 ) #else ivas_syn_output_f( hIvasDec->st_ivas->p_output_f, hIvasDec->nSamplesFrame, nTransportChannels, hIvasDec->apaExecBuffer ); ivas_syn_output_f( st_ivas->p_output_f, hIvasDec->nSamplesFrame, nTransportChannels, hIvasDec->apaExecBuffer ); if ( apa_exec( hIvasDec->hTimeScaler, hIvasDec->apaExecBuffer, hIvasDec->nSamplesFrame * nTransportChannels, (uint16_t) hIvasDec->tsm_max_scaling, hIvasDec->apaExecBuffer, &nTimeScalerOutSamples ) != 0 ) #endif Loading @@ -1225,8 +1225,8 @@ ivas_error IVAS_DEC_GetSamplesDecoder( hIvasDec->timeScalingDone = 1; #ifdef JBM_MEMORY_OPT /* reshuffle interleaved serial buffer to one-by-one time-scaled TC audio channels */ ivas_buffer_serial_to_parallel( st_ivas->hTcBuffer->tc_buffer, nTransportChannels, nSamplesTcsScaled, NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_L_FRAME_NS ) ); /* convert interleaved time-scaled TC audio channels buffer to deinterleaved one */ ivas_buffer_interleaved_to_deinterleaved( st_ivas->hTcBuffer->tc_buffer, nTransportChannels, nSamplesTcsScaled, NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_L_FRAME_NS ) ); #endif } else Loading @@ -1244,7 +1244,7 @@ ivas_error IVAS_DEC_GetSamplesDecoder( ivas_jbm_dec_feed_tc_to_renderer( st_ivas, nSamplesTcsScaled, &nResidualSamples, hIvasDec->apaExecBuffer ); #endif if ( hIvasDec->st_ivas->hDecoderConfig->Opt_tsm ) if ( 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
lib_com/ivas_prot.h +15 −8 Original line number Diff line number Diff line Loading @@ -259,22 +259,29 @@ uint32_t ivas_syn_output( int16_t *synth_out /* o : integer 16 bits synthesis signal */ ); void ivas_syn_output_f( float *synth[], /* i/o: float synthesis signal */ const int16_t output_frame, /* i : output frame length (one channel) */ const int16_t n_channels, /* i : number of output channels */ float *synth_out /* o : integer 16 bits synthesis signal */ ); #ifdef JBM_MEMORY_OPT void ivas_buffer_serial_to_parallel( void ivas_buffer_interleaved_to_deinterleaved( float *audio, /* i/o: audio buffer */ const int16_t n_channels, /* i : number of channels */ const int16_t frame_length, /* i : frame length (one channel ) */ const int16_t n_samp_full /* i : full frame length (one channel) */ ); void ivas_buffer_deinterleaved_to_interleaved( float *audio[], /* i : deinterleaved audio buffer */ const int16_t n_channels, /* i : number of channels */ const int16_t frame_length, /* i : frame length (one channel ) */ float *audio_out /* o : interleaved audio buffer */ ); #else void ivas_syn_output_f( float *synth[], /* i/o: float synthesis signal */ const int16_t output_frame, /* i : output frame length (one channel) */ const int16_t n_channels, /* i : number of output channels */ float *synth_out /* o : integer 16 bits synthesis signal */ ); #endif void ivas_initialize_handles_enc( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ); Loading
lib_com/ivas_tools.c +32 −4 Original line number Diff line number Diff line Loading @@ -151,12 +151,12 @@ uint32_t ivas_syn_output( #ifdef JBM_MEMORY_OPT /*-------------------------------------------------------------------* * ivas_buffer_serial_to_parallel() * ivas_buffer_interleaved_to_deinterleaved() * * reshuffle an interleaved serial buffer to one-by-one audio channels representation * Convert an interleaved buffer of audio channels to deinterleaved one *-------------------------------------------------------------------*/ void ivas_buffer_serial_to_parallel( void ivas_buffer_interleaved_to_deinterleaved( float *audio, /* i/o: audio buffer */ const int16_t n_channels, /* i : number of channels */ const int16_t frame_length, /* i : frame length (one channel ) */ Loading Loading @@ -184,7 +184,34 @@ void ivas_buffer_serial_to_parallel( return; } #endif /*-------------------------------------------------------------------* * ivas_buffer_deinterleaved_to_interleaved() * * Convert a deinterleaved buffer of audio channels to interleaved one *-------------------------------------------------------------------*/ void ivas_buffer_deinterleaved_to_interleaved( float *audio[], /* i/o: deinterleaved audio buffer */ const int16_t n_channels, /* i : number of channels */ const int16_t frame_length, /* i : frame length (one channel ) */ float *audio_out /* o : interleaved audio buffer */ ) { int16_t ch, m; for ( ch = 0; ch < n_channels; ch++ ) { for ( m = 0; m < frame_length; m++ ) { audio_out[m * n_channels + ch] = audio[ch][m]; } } return; } #else /*-------------------------------------------------------------------* * ivas_syn_output_f() Loading Loading @@ -218,6 +245,7 @@ void ivas_syn_output_f( return; } #endif /*-------------------------------------------------------------------* * mvr2r_inc() Loading
lib_dec/ivas_jbm_dec.c +11 −4 Original line number Diff line number Diff line Loading @@ -784,7 +784,6 @@ void ivas_jbm_dec_feed_tc_to_renderer( int16_t n_samples_still_available; int16_t n_ch_full_copy, n_ch_res_copy; hTcBuffer = st_ivas->hTcBuffer; 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 @@ -796,7 +795,7 @@ void ivas_jbm_dec_feed_tc_to_renderer( { mvr2r( hTcBuffer->tc[ch], tmp_buf, nSamplesForRendering ); 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 ); mvr2r( hTcBuffer->tc_buffer_old[ch], hTcBuffer->tc[ch] + hTcBuffer->n_samples_discard, n_samples_still_available ); 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 ); } Loading @@ -807,7 +806,7 @@ void ivas_jbm_dec_feed_tc_to_renderer( { p_data_f[ch - n_ch_full_copy] = hTcBuffer->tc[ch]; mvr2r( hTcBuffer->tc[ch], tmp_buf, nSamplesForRendering ); mvr2r( st_ivas->hTcBuffer->tc_buffer_old[ch], p_data_f[ch], n_samples_still_available ); mvr2r( hTcBuffer->tc_buffer_old[ch], p_data_f[ch], n_samples_still_available ); mvr2r( tmp_buf, p_data_f[ch] + n_samples_still_available, nSamplesForRendering - *nSamplesResidual ); mvr2r( tmp_buf + nSamplesForRendering - *nSamplesResidual, hTcBuffer->tc_buffer_old[ch], *nSamplesResidual ); } Loading Loading @@ -864,7 +863,7 @@ void ivas_jbm_dec_feed_tc_to_renderer( } #ifdef JBM_MEMORY_OPT for ( n = 0; n < max( st_ivas->hTcBuffer->nchan_transport_jbm, st_ivas->hTcBuffer->nchan_buffer_full ); n++ ) for ( n = 0; n < max( hTcBuffer->nchan_transport_jbm, 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++ ) #endif Loading Loading @@ -1397,7 +1396,11 @@ ivas_error ivas_jbm_dec_render( break; case PCM_FLOAT32: #ifdef JBM_MEMORY_OPT ivas_buffer_deinterleaved_to_interleaved( p_output, nchan_out_syn_output, *nSamplesRendered, (float *) data ); #else ivas_syn_output_f( p_output, *nSamplesRendered, nchan_out_syn_output, (float *) data ); #endif break; default: error = IVAS_ERR_UNKNOWN; Loading Loading @@ -1679,7 +1682,11 @@ ivas_error ivas_jbm_dec_flush_renderer( ivas_syn_output( p_output, *nSamplesRendered, st_ivas->hDecoderConfig->nchan_out, (int16_t *) data ); break; case PCM_FLOAT32: #ifdef JBM_MEMORY_OPT ivas_buffer_deinterleaved_to_interleaved( p_output, st_ivas->hDecoderConfig->nchan_out, *nSamplesRendered, (float *) data ); #else ivas_syn_output_f( p_output, *nSamplesRendered, st_ivas->hDecoderConfig->nchan_out, (float *) data ); #endif break; default: error = IVAS_ERR_UNKNOWN; Loading
lib_dec/lib_dec.c +6 −6 Original line number Diff line number Diff line Loading @@ -1206,13 +1206,13 @@ ivas_error IVAS_DEC_GetSamplesDecoder( } #ifdef JBM_MEMORY_OPT /* reshuffle one-by-one decoded TC audio channels to an interleaved serial buffer */ ivas_syn_output_f( st_ivas->p_output_f, hIvasDec->nSamplesFrame, nTransportChannels, st_ivas->hTcBuffer->tc_buffer ); /* convert deinterleaved decoded TC audio channels buffer to an interleaved one */ ivas_buffer_deinterleaved_to_interleaved( st_ivas->p_output_f, nTransportChannels, hIvasDec->nSamplesFrame, st_ivas->hTcBuffer->tc_buffer ); /* time scale modification */ if ( apa_exec( hIvasDec->hTimeScaler, st_ivas->hTcBuffer->tc_buffer, hIvasDec->nSamplesFrame * nTransportChannels, (uint16_t) hIvasDec->tsm_max_scaling, st_ivas->hTcBuffer->tc_buffer, &nTimeScalerOutSamples ) != 0 ) #else ivas_syn_output_f( hIvasDec->st_ivas->p_output_f, hIvasDec->nSamplesFrame, nTransportChannels, hIvasDec->apaExecBuffer ); ivas_syn_output_f( st_ivas->p_output_f, hIvasDec->nSamplesFrame, nTransportChannels, hIvasDec->apaExecBuffer ); if ( apa_exec( hIvasDec->hTimeScaler, hIvasDec->apaExecBuffer, hIvasDec->nSamplesFrame * nTransportChannels, (uint16_t) hIvasDec->tsm_max_scaling, hIvasDec->apaExecBuffer, &nTimeScalerOutSamples ) != 0 ) #endif Loading @@ -1225,8 +1225,8 @@ ivas_error IVAS_DEC_GetSamplesDecoder( hIvasDec->timeScalingDone = 1; #ifdef JBM_MEMORY_OPT /* reshuffle interleaved serial buffer to one-by-one time-scaled TC audio channels */ ivas_buffer_serial_to_parallel( st_ivas->hTcBuffer->tc_buffer, nTransportChannels, nSamplesTcsScaled, NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_L_FRAME_NS ) ); /* convert interleaved time-scaled TC audio channels buffer to deinterleaved one */ ivas_buffer_interleaved_to_deinterleaved( st_ivas->hTcBuffer->tc_buffer, nTransportChannels, nSamplesTcsScaled, NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_L_FRAME_NS ) ); #endif } else Loading @@ -1244,7 +1244,7 @@ ivas_error IVAS_DEC_GetSamplesDecoder( ivas_jbm_dec_feed_tc_to_renderer( st_ivas, nSamplesTcsScaled, &nResidualSamples, hIvasDec->apaExecBuffer ); #endif if ( hIvasDec->st_ivas->hDecoderConfig->Opt_tsm ) if ( 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