Skip to content
Commits on Source (16)
......@@ -134,9 +134,7 @@ typedef enum
IVAS_ERR_BITSTREAM_READER_INVALID_FORMAT,
IVAS_ERR_NO_FILE_OPEN,
IVAS_ERR_SAMPLING_RATE_UNKNOWN,
#ifdef FIX_1370_EXTERNAL_ORIENTATION_CHECK
IVAS_ERR_EXTERNAL_ORIENTATION_INVALID_FORMAT,
#endif
/*----------------------------------------*
* renderer (lib_rend only) *
......@@ -274,10 +272,8 @@ static inline const char *ivas_error_to_string( ivas_error error_code )
return "Invalid input format";
case IVAS_ERR_INVALID_INDEX:
return "Invalid index";
#ifdef FIX_1370_EXTERNAL_ORIENTATION_CHECK
case IVAS_ERR_EXTERNAL_ORIENTATION_INVALID_FORMAT:
return "Euler angles were detected in the input but only Quaternions are supported";
#endif
default:
break;
}
......
......@@ -308,14 +308,9 @@ ivas_error ivas_init_decoder(
ivas_error ivas_output_buff_dec(
float *p_output_f[], /* i/o: output audio buffers */
#ifdef FIX_1330_JBM_MEMORY
const int16_t nchan_out_buff, /* i : number of output channels */
const int16_t Opt_tsm, /* i : TSM option flag */
DECODER_TC_BUFFER_HANDLE hTcBuffer /* i : TSM buffer handle */
#else
const int16_t nchan_out_buff_old, /* i : previous frame number of output channels*/
const int16_t nchan_out_buff /* i : number of output channels */
#endif
);
ivas_error stereo_dmx_evs_init_encoder(
......@@ -5829,12 +5824,7 @@ void ivas_omasa_separate_object_render_jbm(
const uint16_t nSamplesRendered, /* i : number of samples rendered */
float input_f[][L_FRAME48k], /* i : separated object signal */
float *output_f[], /* o : rendered time signal */
#ifdef FIX_1330_JBM_MEMORY
const int16_t subframes_rendered /* i : number of subframes rendered */
#else
const int16_t subframes_rendered, /* i : number of subframes rendered */
const int16_t slots_rendered /* i : number of CLDFB slots rendered */
#endif
);
void ivas_omasa_encode_masa_to_total(
......
......@@ -198,24 +198,18 @@ void ivas_buffer_deinterleaved_to_interleaved(
)
{
int16_t ch, m;
#ifdef FIX_1330_JBM_MEMORY
float buffer[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS][L_FRAME48k]; /* temp buffer needed when "*audio[]" and "*audio_out[]" are the same */
for ( ch = 0; ch < n_channels; ch++ )
{
mvr2r( audio[ch], buffer[ch], frame_length );
}
#endif
for ( ch = 0; ch < n_channels; ch++ )
{
for ( m = 0; m < frame_length; m++ )
{
#ifdef FIX_1330_JBM_MEMORY
audio_out[m * n_channels + ch] = buffer[ch][m];
#else
audio_out[m * n_channels + ch] = audio[ch][m];
#endif
}
}
......
......@@ -164,9 +164,6 @@
/*#define FIX_I4_OL_PITCH*/ /* fix open-loop pitch used for EVS core switching */
#define FIX_1119_SPLIT_RENDERING_VOIP /* FhG: Add split rendering support to decoder in VoIP mode */
#define TMP_1342_WORKAROUND_DEC_FLUSH_BROKEN_IN_SR /* FhG: Temporary workaround for incorrect implementation of decoder flush with split rendering */
#define FIX_1330_JBM_MEMORY /* VA: issue 1330: memory savings in the JBM decoder */
#define FIX_1370_EXTERNAL_ORIENTATION_CHECK /* Nokia: add sanity check for Euler angles for external orientations */
#define FIX_1371_EARLY_PART_INIT_FASTCONV /* Nokia: fix uninitialized variable in FASTCONV path of binaural reverb init */
/* #################### End BE switches ################################## */
......@@ -179,6 +176,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_1328_FIX_NON_LINEARITY /* VA: Fix possible issue when computing bwe_exc_extended and previous frame were almost 0 */
#define NONBE_1321_JBM_ASSERT_BITRATE_SWITCHING /* FhG: Fix assert being hit in JBM code during rate switching */
/* ##################### End NON-BE switches ########################### */
/* ################## End DEVELOPMENT switches ######################### */
......
......@@ -999,6 +999,7 @@ ivas_error ivas_binRenderer_open(
if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV && st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) )
{
pRoomAcoustics = ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ? &( st_ivas->hRenderConfig->roomAcoustics ) : NULL;
if ( ( error = ivas_binaural_reverb_init( &( hBinRenderer->hReverb ),
st_ivas->hHrtfStatistics,
hBinRenderer->conv_band,
......@@ -1007,12 +1008,7 @@ ivas_error ivas_binRenderer_open(
st_ivas->hDecoderConfig->output_Fs,
st_ivas->hHrtfFastConv->fastconvReverberationTimes,
st_ivas->hHrtfFastConv->fastconvReverberationEneCorrections,
#ifdef FIX_1371_EARLY_PART_INIT_FASTCONV
NULL
#else
hBinRenderer->earlyPartEneCorrection
#endif
) ) != IVAS_ERR_OK )
NULL ) ) != IVAS_ERR_OK )
{
return error;
......
......@@ -1256,9 +1256,7 @@ ivas_error ivas_init_decoder(
int16_t sce_id, cpe_id;
int16_t numCldfbAnalyses, numCldfbSyntheses;
int16_t granularity, n_channels_transport_jbm;
#ifdef FIX_1330_JBM_MEMORY
int16_t nchan_out_buff;
#endif
int32_t output_Fs, ivas_total_brate;
int32_t delay_ns;
AUDIO_CONFIG output_config;
......@@ -2393,28 +2391,11 @@ ivas_error ivas_init_decoder(
* Allocate floating-point output audio buffers
*-----------------------------------------------------------------*/
#ifdef FIX_1330_JBM_MEMORY
nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, ivas_total_brate );
if ( ( error = ivas_output_buff_dec( st_ivas->p_output_f, nchan_out_buff, hDecoderConfig->Opt_tsm, st_ivas->hTcBuffer ) ) != IVAS_ERR_OK )
{
return error;
}
#else
k = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, ivas_total_brate );
for ( n = 0; n < k; n++ )
{
/* note: these are intra-frame heap memories */
if ( ( st_ivas->p_output_f[n] = (float *) malloc( ( 48000 / FRAMES_PER_SEC ) * sizeof( float ) ) ) == NULL )
{
return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for floating-point output audio buffer!\n" ) );
}
}
for ( ; n < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; n++ )
{
st_ivas->p_output_f[n] = NULL;
}
#endif
return IVAS_ERR_OK;
}
......@@ -2890,16 +2871,8 @@ void ivas_destroy_dec(
/* floating-point output audio buffers */
for ( i = 0; i < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; i++ )
{
#ifdef FIX_1330_JBM_MEMORY
st_ivas->p_output_f[i] = NULL;
#else
if ( st_ivas->p_output_f[i] != NULL )
{
free( st_ivas->p_output_f[i] );
st_ivas->p_output_f[i] = NULL;
}
#endif
}
/* main IVAS handle */
free( st_ivas );
......
......@@ -60,11 +60,7 @@ static ivas_error ivas_ism_bitrate_switching_dec(
int16_t tc_nchan_tc_new;
int16_t tc_nchan_allocate_new;
int16_t tc_granularity_new;
#ifdef FIX_1330_JBM_MEMORY
int16_t nchan_out_buff;
#else
int16_t nchan_out_buff, nchan_out_buff_old;
#endif
nCPE_old = st_ivas->nCPE;
nSCE_old = st_ivas->nSCE;
......@@ -74,9 +70,6 @@ static ivas_error ivas_ism_bitrate_switching_dec(
st_ivas->ism_mode = last_ism_mode;
ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses_old, &numCldfbSyntheses_old );
st_ivas->ism_mode = ism_mode;
#ifndef FIX_1330_JBM_MEMORY
nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 );
#endif
if ( ( error = ivas_ism_config( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->nchan_ism, NULL, 0, NULL, NULL, element_brate_tmp, NULL, NULL, 0 ) ) != IVAS_ERR_OK )
{
......@@ -291,17 +284,6 @@ static ivas_error ivas_ism_bitrate_switching_dec(
return error;
}
#ifndef FIX_1330_JBM_MEMORY
/*-----------------------------------------------------------------*
* floating-point output audio buffers
*-----------------------------------------------------------------*/
nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 );
if ( ( error = ivas_output_buff_dec( st_ivas->p_output_f, nchan_out_buff_old, nchan_out_buff ) ) != IVAS_ERR_OK )
{
return error;
}
#endif
/*-----------------------------------------------------------------*
* JBM TC buffers
*-----------------------------------------------------------------*/
......@@ -343,7 +325,6 @@ static ivas_error ivas_ism_bitrate_switching_dec(
mvs2s( st_ivas->hTcBuffer->subframe_nbslots, st_ivas->hSpatParamRendCom->subframe_nbslots, MAX_JBM_SUBFRAMES_5MS );
}
#ifdef FIX_1330_JBM_MEMORY
/*-----------------------------------------------------------------*
* floating-point output audio buffers
......@@ -354,7 +335,6 @@ static ivas_error ivas_ism_bitrate_switching_dec(
{
return error;
}
#endif
return IVAS_ERR_OK;
}
......
......@@ -193,25 +193,11 @@ void ivas_ism_render_sf(
ism_md_subframe_update_jbm = st_ivas->hTcBuffer->nb_subframes - 2;
}
#ifndef FIX_1330_JBM_MEMORY
if ( st_ivas->hDecoderConfig->Opt_tsm )
{
for ( i = 0; i < num_objects; i++ )
{
p_tc[i] = &st_ivas->hTcBuffer->tc[i][tc_offset];
}
}
else
{
#endif
for ( i = 0; i < num_objects; i++ )
{
mvr2r( &output_f[i][tc_offset], tc_local[i], n_samples_to_render );
p_tc[i] = tc_local[i];
}
#ifndef FIX_1330_JBM_MEMORY
}
#endif
for ( i = 0; i < nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; i++ )
{
......@@ -436,12 +422,7 @@ void ivas_omasa_separate_object_render_jbm(
const uint16_t nSamplesRendered, /* i : number of samples rendered */
float input_f_in[][L_FRAME48k], /* i : separated object signal */
float *output_f[], /* o : rendered time signal */
#ifdef FIX_1330_JBM_MEMORY
const int16_t subframes_rendered /* i : number of subframes rendered */
#else
const int16_t subframes_rendered, /* i : number of subframes rendered */
const int16_t slots_rendered /* i : number of CLDFB slots rendered */
#endif
)
{
VBAP_HANDLE hVBAPdata;
......@@ -482,33 +463,15 @@ void ivas_omasa_separate_object_render_jbm(
num_objects = st_ivas->nchan_ism;
}
#ifndef FIX_1330_JBM_MEMORY
offsetSamples = slots_rendered * hSpatParamRendCom->slot_size;
#endif
for ( j = 0; j < nchan_out_woLFE + num_lfe; j++ )
{
output_f_local[j] = output_f[j];
}
#ifndef FIX_1330_JBM_MEMORY
if ( st_ivas->hDecoderConfig->Opt_tsm )
{
for ( obj = 0; obj < num_objects; obj++ )
{
input_f[obj] = &st_ivas->hTcBuffer->tc[obj + 2][offsetSamples];
}
}
else
{
#endif
for ( obj = 0; obj < num_objects; obj++ )
{
input_f[obj] = input_f_in[obj];
}
#ifndef FIX_1330_JBM_MEMORY
}
#endif
slots_to_render = nSamplesRendered / hSpatParamRendCom->slot_size;
first_sf = subframes_rendered;
......
......@@ -763,11 +763,7 @@ void ivas_jbm_dec_feed_tc_to_renderer(
float tmp_buf[MAX_JBM_L_FRAME48k];
float *p_data_f[FOA_CHANNELS + MAX_NUM_OBJECTS];
int16_t n, n_render_timeslots, n_ch_cldfb;
#ifdef FIX_1330_JBM_MEMORY
int16_t ch, offset, len_offset;
#else
int16_t ch;
#endif
DECODER_TC_BUFFER_HANDLE hTcBuffer;
hTcBuffer = st_ivas->hTcBuffer;
......@@ -785,7 +781,6 @@ void ivas_jbm_dec_feed_tc_to_renderer(
n_ch_full_copy = min( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full );
n_ch_res_copy = hTcBuffer->nchan_transport_jbm - hTcBuffer->nchan_buffer_full;
#ifdef FIX_1330_JBM_MEMORY
/* buffers are shared between 'hTcBuffer->tc[]' and 'p_output_f[]':
in case of 'length(hTcBuffer->tc[]) < length(p_output_f[])', reset of TC buffers
pointers is needed after ivas_buffer_interleaved_to_deinterleaved() */
......@@ -800,7 +795,6 @@ void ivas_jbm_dec_feed_tc_to_renderer(
}
}
#endif
for ( ch = 0; ch < n_ch_full_copy; ch++ )
{
mvr2r( hTcBuffer->tc[ch], tmp_buf, nSamplesForRendering );
......@@ -2112,9 +2106,7 @@ static ivas_error ivas_jbm_dec_tc_audio_allocate(
if ( Opt_tsm )
{
n_samp_full = ( NS2SA( output_Fs, MAX_JBM_L_FRAME_NS ) );
#ifdef FIX_1330_JBM_MEMORY
n_samp_full = max( n_samp_full, L_FRAME48k ); /* buffers are shared between 'hTcBuffer->tc[]' and 'p_output_f[]': ensure minimal length */
#endif
n_samp_residual = hTcBuffer->n_samples_granularity - 1;
}
else
......@@ -2174,10 +2166,8 @@ static ivas_error ivas_jbm_dec_tc_audio_allocate(
}
}
#ifdef FIX_1330_JBM_MEMORY
hTcBuffer->tc_buffer2 = NULL;
#endif
return IVAS_ERR_OK;
}
......@@ -2215,14 +2205,12 @@ static void ivas_jbm_dec_tc_audio_deallocate(
hTcBuffer->tc_buffer_old[ch_idx] = NULL;
}
}
#ifdef FIX_1330_JBM_MEMORY
if ( hTcBuffer->tc_buffer2 != NULL )
{
free( hTcBuffer->tc_buffer2 );
hTcBuffer->tc_buffer2 = NULL;
}
#endif
}
return;
......@@ -2419,11 +2407,7 @@ static void ivas_jbm_dec_tc_buffer_playout(
for ( ch_idx = 0; ch_idx < st_ivas->hTcBuffer->nchan_transport_jbm; ch_idx++ )
{
#ifdef FIX_1330_JBM_MEMORY
output[ch_idx] = st_ivas->hTcBuffer->tc[ch_idx] + st_ivas->hTcBuffer->n_samples_rendered;
#else
mvr2r( st_ivas->hTcBuffer->tc[ch_idx] + st_ivas->hTcBuffer->n_samples_rendered, output[ch_idx], *nSamplesRendered );
#endif
}
st_ivas->hTcBuffer->subframes_rendered = last_sf;
......
......@@ -1320,11 +1320,7 @@ ivas_error ivas_masa_dec_reconfigure(
Decoder_State **sts;
int32_t ivas_total_brate, last_ivas_total_brate;
int16_t numCldfbAnalyses_old, numCldfbSyntheses_old;
#ifdef FIX_1330_JBM_MEMORY
int16_t nchan_out_buff;
#else
int16_t nchan_out_buff_old, nchan_out_buff;
#endif
ivas_error error;
int16_t pos_idx;
int32_t ism_total_brate;
......@@ -1332,10 +1328,6 @@ ivas_error ivas_masa_dec_reconfigure(
ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate;
last_ivas_total_brate = st_ivas->hDecoderConfig->last_ivas_total_brate;
#ifndef FIX_1330_JBM_MEMORY
nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 );
#endif
/* Copy state to TC buffer if granularity matches and we are not in OMASA EXT rendering mode */
if ( st_ivas->hSpatParamRendCom != NULL && st_ivas->hSpatParamRendCom->slot_size == st_ivas->hTcBuffer->n_samples_granularity && st_ivas->hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_EXTERNAL )
{
......@@ -1573,11 +1565,7 @@ ivas_error ivas_masa_dec_reconfigure(
if ( st_ivas->ivas_format == MASA_FORMAT && st_ivas->last_ivas_format == MASA_FORMAT ) /* note: switching with OMASA is addressed in ivas_omasa_dec_config() */
{
nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 );
#ifdef FIX_1330_JBM_MEMORY
if ( ( error = ivas_output_buff_dec( st_ivas->p_output_f, nchan_out_buff, st_ivas->hDecoderConfig->Opt_tsm, st_ivas->hTcBuffer ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_output_buff_dec( st_ivas->p_output_f, nchan_out_buff_old, nchan_out_buff ) ) != IVAS_ERR_OK )
#endif
{
return error;
}
......
......@@ -732,17 +732,10 @@ static ivas_error ivas_mc_dec_reconfig(
int16_t tc_nchan_tc_new;
int16_t tc_nchan_allocate_new;
int16_t tc_granularity_new;
#ifdef FIX_1330_JBM_MEMORY
int16_t nchan_out_buff;
#else
int16_t nchan_out_buff_old, nchan_out_buff;
#endif
ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate;
nchan_transport_old = st_ivas->nchan_transport;
#ifndef FIX_1330_JBM_MEMORY
nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 );
#endif
last_mc_mode = ivas_mc_mode_select( ivas_mc_map_output_config_to_mc_ls_setup( st_ivas->transport_config ), st_ivas->hDecoderConfig->last_ivas_total_brate ); /* NB: this assumes that LS config remains the same between frames */
/* temporally set the current mc_mode back to the previous one to make sure the following call to
......@@ -1393,11 +1386,7 @@ static ivas_error ivas_mc_dec_reconfig(
*-----------------------------------------------------------------*/
nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 );
#ifdef FIX_1330_JBM_MEMORY
if ( ( error = ivas_output_buff_dec( st_ivas->p_output_f, nchan_out_buff, st_ivas->hDecoderConfig->Opt_tsm, st_ivas->hTcBuffer ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_output_buff_dec( st_ivas->p_output_f, nchan_out_buff_old, nchan_out_buff ) ) != IVAS_ERR_OK )
#endif
{
return error;
}
......
......@@ -200,11 +200,7 @@ ivas_error ivas_omasa_dec_config(
int32_t ivas_total_brate, ism_total_brate, cpe_brate;
ISM_MODE ism_mode_old;
IVAS_FORMAT ivas_format_orig;
#ifdef FIX_1330_JBM_MEMORY
int16_t nchan_out_buff;
#else
int16_t nchan_out_buff, nchan_out_buff_old;
#endif
ivas_error error;
RENDERER_TYPE old_renderer_type;
......@@ -219,9 +215,6 @@ ivas_error ivas_omasa_dec_config(
ivas_format_orig = st_ivas->ivas_format;
st_ivas->ivas_format = st_ivas->last_ivas_format;
ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses_old, &numCldfbSyntheses_old );
#ifndef FIX_1330_JBM_MEMORY
nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 );
#endif
st_ivas->ivas_format = ivas_format_orig;
nSCE_old = st_ivas->nSCE;
......@@ -475,11 +468,7 @@ ivas_error ivas_omasa_dec_config(
*-----------------------------------------------------------------*/
nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 );
#ifdef FIX_1330_JBM_MEMORY
if ( ( error = ivas_output_buff_dec( st_ivas->p_output_f, nchan_out_buff, st_ivas->hDecoderConfig->Opt_tsm, st_ivas->hTcBuffer ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_output_buff_dec( st_ivas->p_output_f, nchan_out_buff_old, nchan_out_buff ) ) != IVAS_ERR_OK )
#endif
{
return error;
}
......@@ -682,27 +671,16 @@ void ivas_omasa_dirac_rend_jbm(
)
{
int16_t subframes_rendered;
#ifndef FIX_1330_JBM_MEMORY
int16_t slots_rendered;
#endif
int16_t n;
float data_separated_objects[MAX_NUM_OBJECTS][L_FRAME48k];
#ifndef FIX_1330_JBM_MEMORY
if ( !st_ivas->hDecoderConfig->Opt_tsm )
{
#endif
*nSamplesRendered = min( nSamplesAsked, st_ivas->hTcBuffer->n_samples_available );
if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ )
{
mvr2r( &output_f[CPE_CHANNELS][st_ivas->hTcBuffer->n_samples_rendered], data_separated_objects[0], *nSamplesRendered );
#ifdef FIX_1330_JBM_MEMORY
if ( !st_ivas->hDecoderConfig->Opt_tsm && st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ )
#else
if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ )
#endif
{
/* Gain separated object, if edited */
for ( n = 0; n < st_ivas->nchan_ism; n++ )
......@@ -721,22 +699,14 @@ void ivas_omasa_dirac_rend_jbm(
mvr2r( &output_f[n + CPE_CHANNELS][st_ivas->hTcBuffer->n_samples_rendered], data_separated_objects[n], *nSamplesRendered );
/* Gain discrete objects, if edited */
#ifdef FIX_1330_JBM_MEMORY
if ( !st_ivas->hDecoderConfig->Opt_tsm && st_ivas->hMasaIsmData->ism_gain_is_edited[n] )
#else
if ( st_ivas->hMasaIsmData->ism_gain_is_edited[n] )
#endif
{
v_multc( data_separated_objects[n], st_ivas->hMasaIsmData->gain_ism_edited[n], data_separated_objects[n], *nSamplesRendered );
}
}
/* Gain MASA part, if edited */
#ifdef FIX_1330_JBM_MEMORY
if ( !st_ivas->hDecoderConfig->Opt_tsm && st_ivas->hMasaIsmData->masa_gain_is_edited )
#else
if ( st_ivas->hMasaIsmData->masa_gain_is_edited )
#endif
{
for ( int16_t ch = 0; ch < 2; ch++ )
{
......@@ -744,22 +714,12 @@ void ivas_omasa_dirac_rend_jbm(
}
}
}
#ifndef FIX_1330_JBM_MEMORY
}
#endif
subframes_rendered = st_ivas->hSpatParamRendCom->subframes_rendered;
#ifndef FIX_1330_JBM_MEMORY
slots_rendered = st_ivas->hSpatParamRendCom->slots_rendered;
#endif
ivas_dirac_dec_render( st_ivas, nchan_transport, nSamplesAsked, nSamplesRendered, nSamplesAvailable, output_f );
#ifdef FIX_1330_JBM_MEMORY
ivas_omasa_separate_object_render_jbm( st_ivas, *nSamplesRendered, data_separated_objects, output_f, subframes_rendered );
#else
ivas_omasa_separate_object_render_jbm( st_ivas, *nSamplesRendered, data_separated_objects, output_f, subframes_rendered, slots_rendered );
#endif
return;
}
......
......@@ -271,70 +271,35 @@ ivas_error ivas_osba_render_sf(
)
{
int16_t n;
#ifdef FIX_1330_JBM_MEMORY
float output_sba[MAX_OUTPUT_CHANNELS][L_FRAME48k];
float *p_output_sba[MAX_OUTPUT_CHANNELS];
#else
float output_ism[MAX_OUTPUT_CHANNELS][L_FRAME48k];
float *p_output_ism[MAX_OUTPUT_CHANNELS];
#endif
ivas_error error;
for ( n = 0; n < MAX_OUTPUT_CHANNELS; n++ )
{
#ifdef FIX_1330_JBM_MEMORY
p_output_sba[n] = output_sba[n];
#else
p_output_ism[n] = &output_ism[n][0];
#endif
}
#ifndef FIX_1330_JBM_MEMORY
if ( !st_ivas->hDecoderConfig->Opt_tsm )
{
int16_t tc_offset;
tc_offset = st_ivas->hTcBuffer->n_samples_rendered;
for ( n = 0; n < st_ivas->nchan_ism; n++ )
{
mvr2r( &p_output[n][tc_offset], &output_ism[n][tc_offset], nSamplesAsked );
}
}
#endif
#ifdef FIX_1330_JBM_MEMORY
if ( ( error = ivas_sba_dec_render( st_ivas, nSamplesAsked, nSamplesRendered, nSamplesAvailableNext, p_output_sba ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_sba_dec_render( st_ivas, nSamplesAsked, nSamplesRendered, nSamplesAvailableNext, p_output ) ) != IVAS_ERR_OK )
#endif
{
return error;
}
if ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM )
{
#ifdef FIX_1330_JBM_MEMORY
ivas_ism_render_sf( st_ivas, st_ivas->renderer_type, p_output, *nSamplesRendered );
#else
ivas_ism_render_sf( st_ivas, st_ivas->renderer_type, p_output_ism, *nSamplesRendered );
#endif
}
for ( n = 0; n < st_ivas->hDecoderConfig->nchan_out; n++ )
{
if ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM )
{
#ifdef FIX_1330_JBM_MEMORY
v_add( p_output[n], p_output_sba[n], p_output[n], *nSamplesRendered );
#else
v_add( p_output[n], p_output_ism[n], p_output[n], *nSamplesRendered );
#endif
}
#ifdef FIX_1330_JBM_MEMORY
else
{
mvr2r( p_output_sba[n], p_output[n], *nSamplesRendered );
}
#endif
}
return IVAS_ERR_OK;
......
......@@ -111,12 +111,7 @@ ivas_error ivas_sba_dec_reconfigure(
int32_t ivas_total_brate;
int32_t last_ivas_total_brate;
int16_t num_channels, num_md_sub_frames;
#ifdef FIX_1330_JBM_MEMORY
int16_t nchan_out_buff;
#else
int16_t nchan_out_buff, nchan_out_buff_old;
int16_t sba_analysis_order_old_flush;
#endif
DECODER_CONFIG_HANDLE hDecoderConfig;
ivas_error error;
ISM_MODE ism_mode_old;
......@@ -127,18 +122,12 @@ ivas_error ivas_sba_dec_reconfigure(
hDecoderConfig = st_ivas->hDecoderConfig;
ivas_total_brate = hDecoderConfig->ivas_total_brate;
last_ivas_total_brate = st_ivas->last_active_ivas_total_brate;
#ifndef FIX_1330_JBM_MEMORY
sba_analysis_order_old_flush = st_ivas->sba_analysis_order;
#endif
/*-----------------------------------------------------------------*
* Set SBA high-level parameters
* Save old SBA high-level parameters
*-----------------------------------------------------------------*/
#ifndef FIX_1330_JBM_MEMORY
nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas, sba_analysis_order_old_flush, last_ivas_total_brate );
#endif
ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses_old, &numCldfbSyntheses_old );
nchan_hp20_old = getNumChanSynthesis( st_ivas );
......@@ -620,11 +609,7 @@ ivas_error ivas_sba_dec_reconfigure(
*-----------------------------------------------------------------*/
nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate );
#ifdef FIX_1330_JBM_MEMORY
if ( ( error = ivas_output_buff_dec( st_ivas->p_output_f, nchan_out_buff, hDecoderConfig->Opt_tsm, st_ivas->hTcBuffer ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_output_buff_dec( st_ivas->p_output_f, nchan_out_buff_old, nchan_out_buff ) ) != IVAS_ERR_OK )
#endif
{
return error;
}
......
......@@ -979,10 +979,8 @@ typedef struct decoder_tc_buffer_structure
int16_t num_slots;
int16_t n_samples_discard; /* number of samples to discard from the beginning of the output */
#ifdef FIX_1330_JBM_MEMORY
float *tc_buffer2; /* non-scaled buffer of output audio - needed only when '*tc_buffer* is not long enough */
#endif
} DECODER_TC_BUFFER, *DECODER_TC_BUFFER_HANDLE;
typedef struct jbm_metadata_structure
......
......@@ -369,17 +369,11 @@ int16_t ivas_get_nchan_buffers_dec(
ivas_error ivas_output_buff_dec(
float *p_output_f[], /* i/o: output audio buffers */
#ifdef FIX_1330_JBM_MEMORY
const int16_t nchan_out_buff, /* i : number of output channels */
const int16_t Opt_tsm, /* i : TSM option flag */
DECODER_TC_BUFFER_HANDLE hTcBuffer /* i : TSM buffer handle */
#else
const int16_t nchan_out_buff_old, /* i : previous frame number of output channels */
const int16_t nchan_out_buff /* i : number of output channels */
#endif
)
{
#ifdef FIX_1330_JBM_MEMORY
int16_t ch, nchan_tc_jbm, nsamp_to_allocate, n_samp_full, offset;
for ( ch = 0; ch < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; ch++ )
......@@ -437,35 +431,6 @@ ivas_error ivas_output_buff_dec(
offset += n_samp_full;
}
}
#else
int16_t ch;
if ( nchan_out_buff > nchan_out_buff_old )
{
for ( ch = nchan_out_buff_old; ch < nchan_out_buff; ch++ )
{
#ifdef DEBUGGING
if ( p_output_f[ch] != NULL )
{
return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Memory for floating-point output audio buffer is already allocated!\n" ) );
}
#endif
/* note: these are intra-frame heap memories */
if ( ( p_output_f[ch] = (float *) malloc( ( 48000 / FRAMES_PER_SEC ) * sizeof( float ) ) ) == NULL )
{
return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for floating-point output audio buffer!\n" ) );
}
}
}
else
{
for ( ch = nchan_out_buff; ch < nchan_out_buff_old; ch++ )
{
free( p_output_f[ch] );
p_output_f[ch] = NULL;
}
}
#endif
return IVAS_ERR_OK;
}
......
......@@ -1924,23 +1924,17 @@ ivas_error ivas_binaural_reverb_init(
energyModifier = ( adjustedRevTime - revTimes[bin] ) / adjustedRevTime;
/* Adjust early and late energies, by moving late energy to early energy */
#ifdef FIX_1371_EARLY_PART_INIT_FASTCONV
if ( earlyEne != NULL )
{
adjustedEarlyEne = earlyEne[bin] + revEne[bin] * energyModifier;
earlyEne[bin] = adjustedEarlyEne; /* Store already here */
}
#else
adjustedEarlyEne = earlyEne[bin] + revEne[bin] * energyModifier;
#endif
adjustedLateEne = revEne[bin] * ( 1.0f - energyModifier );
/* Store adjusted room effect parameters to be used in reverb processing */
revTimes[bin] = adjustedRevTime;
revEne[bin] = adjustedLateEne;
#ifndef FIX_1371_EARLY_PART_INIT_FASTCONV
earlyEne[bin] = adjustedEarlyEne;
#endif
}
}
......
......@@ -174,14 +174,12 @@ ivas_error ExternalOrientationFileReading(
}
( externalOrientationReader->frameCounter )++;
#ifdef FIX_1370_EXTERNAL_ORIENTATION_CHECK
/* Only Quaternion orientations are supported, raise an error if Euler angles are detected in the input */
if ( w == -3.0f )
{
return IVAS_ERR_EXTERNAL_ORIENTATION_INVALID_FORMAT;
}
#endif
pQuaternion->w = w;
pQuaternion->x = x;
......
#!/usr/bin/env python3
import argparse
from pathlib import Path
import pandas as pd
REPRODUCE_REGRESSION_SCRIPT_TMPL = """
#!/bin/bash -x
SCRIPTS_DIR=/usr/local/scripts
LTV_DIR=/usr/local/ltv
MIN_DATE={min_date}
MIN_SHA={min_sha}
LEVEL_SCALING={level_scaling}
TESTCASE="{testcase}"
REF_ENC1={REF_ENC1}
REF_DEC1={REF_DEC1}
DUT_ENC1={DUT_ENC1}
DUT_DEC1={DUT_DEC1}
REF_ENC2={REF_ENC2}
REF_DEC2={REF_DEC2}
DUT_ENC2={DUT_ENC2}
DUT_DEC2={DUT_DEC2}
INV_LEVEL_SCALING=$(awk "BEGIN {{print 1.0 / $LEVEL_SCALING}}")
# Obtain executables from past reference
git checkout `git rev-list -1 --before="$MIN_DATE 22:00:00" ivas-float-update`
echo "ivas_float_update, min version: `git rev-parse HEAD`" > versions.txt
make clean
make -j
mv IVAS_cod IVAS_cod_ref_1
mv IVAS_dec IVAS_dec_ref_1
mv IVAS_rend IVAS_rend_ref_1
git checkout $MIN_SHA
echo "main, min version: `git rev-parse HEAD`" >> versions.txt
make clean
make -j
mv IVAS_cod IVAS_cod_1
mv IVAS_dec IVAS_dec_1
mv IVAS_rend IVAS_rend_1
# Obtain latest executables
git checkout ivas-float-update
git pull
echo "ivas-float-update, current version: `git rev-parse HEAD`" >> versions.txt
make clean
make -j
mv IVAS_cod IVAS_cod_ref_2
mv IVAS_dec IVAS_dec_ref_2
mv IVAS_rend IVAS_rend_ref_2
git checkout main
git pull
echo "main, current version: `git rev-parse HEAD`" >> versions.txt
make clean
make -j
mv IVAS_cod IVAS_cod_2
mv IVAS_dec IVAS_dec_2
mv IVAS_rend IVAS_rend_2
# Get fresh copy of scripts, tests and ci
cp -r $SCRIPTS_DIR/{{scripts,tests,ci,pytest.ini}} .
rm -rf tests/ref tests/dut tests/renderer/ref tests/renderer/cut
python3 ci/remove_unsupported_testcases.py scripts/config/self_test.prm scripts/config/self_test_ltv.prm
# Get LTVs
cp $LTV_DIR/* scripts/testv
# Apply level scaling
tests/scale_pcm.py ./scripts/testv/ "$LEVEL_SCALING"
# Run tests
cp IVAS_rend_ref_1 IVAS_rend_ref
cp IVAS_rend_1 IVAS_rend
python3 -m pytest "$TESTCASE" -n 1 --update_ref 1 --create_ref --param_file scripts/config/self_test_ltv.prm --use_ltv --ref_encoder_path $REF_ENC1 --ref_decoder_path $REF_DEC1
python3 -m pytest "$TESTCASE" -n 1 --create_cut --param_file scripts/config/self_test_ltv.prm --use_ltv --dut_encoder_path $DUT_ENC1 --dut_decoder_path $DUT_DEC1 --mld --ssnr --odg --scalefac $INV_LEVEL_SCALING --junit-xml=report1.xml --html=report1.html --self-contained-html
python3 scripts/parse_xml_report.py report1.xml report1.csv
# Store results from first run
mkdir -p tests1/renderer
cp -r tests/ref tests/dut tests1
cp -r tests/renderer/ref tests1/renderer
cp -r tests/renderer/cut tests1/renderer
cp IVAS_rend_ref_2 IVAS_rend_ref
cp IVAS_rend_2 IVAS_rend
python3 -m pytest "$TESTCASE" -n 1 --update_ref 1 --create_ref --param_file scripts/config/self_test_ltv.prm --use_ltv --ref_encoder_path $REF_ENC2 --ref_decoder_path $REF_DEC2
python3 -m pytest "$TESTCASE" -n 1 --create_cut --param_file scripts/config/self_test_ltv.prm --use_ltv --dut_encoder_path $DUT_ENC2 --dut_decoder_path $DUT_DEC2 --mld --ssnr --odg --scalefac $INV_LEVEL_SCALING --junit-xml=report2.xml --html=report2.html --self-contained-html
python3 scripts/parse_xml_report.py report2.xml report2.csv
"""
def main(logs_dir, output_filename, measure):
input_path = Path(logs_dir)
logs = [f for f in input_path.iterdir() if f.is_dir()]
# Build dict of scores
formatdict = {}
sha = {}
logdict = {}
for log in logs:
date = log.name
logdict[date] = {}
formatdict[date] = {}
for logfile in log.glob("*.csv"):
tmp = logfile.name.split("-")
job = "-".join(tmp[3:-4])
sha[date] = tmp[-1].split(".")[0]
data = pd.read_csv(logfile, usecols=["testcase", measure, "format"])
logdict[date][job] = {}
formatdict[date][job] = {}
for testcase, value, format in zip(
data["testcase"], data[measure], data["format"]
):
formatdict[date][job][testcase] = format
logdict[date][job][testcase] = value
# Restructure dict
csv_rows = []
formats = []
for date, jobs in logdict.items():
for job, testcases in jobs.items():
for testcase, value in testcases.items():
csv_rows.append((job, testcase, date, value))
formats.append((job, testcase, date, formatdict[date][job][testcase]))
result = pd.DataFrame(csv_rows, columns=["job", "testcase", "date", "value"])
result = result.pivot(
index=["job", "testcase"], columns="date", values="value"
).reset_index()
f = pd.DataFrame(formats, columns=["job", "testcase", "date", "format"])
f = f.pivot(
index=["job", "testcase"], columns="date", values="format"
).reset_index()
values = result.iloc[:, 2:]
last_date = values.columns[-1]
result.insert(2, "format", f[last_date])
result.insert(3, "min_date", values.idxmin(axis=1))
result.insert(4, "min_sha", result["min_date"].map(sha))
result.insert(5, "curr_value", values[last_date])
result.insert(6, "min_value", values.min(axis=1))
result.insert(7, "diff", result["curr_value"] - result["min_value"])
result.insert(8, "ratio", result["curr_value"] / result["min_value"])
result.loc[result["min_value"] == 0, "ratio"] = (
1 # Set ratio to 1 for denominator 0
)
result["min_sha"] = "'" + result["min_sha"]
result.to_csv(output_filename, sep=";", index=False)
critical = result.iloc[:, 0:9]
formats = list(set(critical["format"]))
formats.sort()
critical3 = pd.DataFrame()
for format in formats:
top3 = (
critical[critical["format"] == format]
.sort_values(by="ratio", ascending=False)
.head(3)
)
critical3 = pd.concat([critical3, top3], ignore_index=True)
critical3.to_csv("critical3.csv", sep=";", index=False)
for row_counter, row in critical3.iterrows():
# Find level
level_scaling = 1.0
if "lev+10" in row["job"]:
level_scaling = 3.162
if "lev-10" in row["job"]:
level_scaling = 0.3162
# Find executables setup
REF_ENC1 = "IVAS_cod_ref_1"
REF_DEC1 = "IVAS_dec_ref_1"
DUT_ENC1 = "IVAS_cod_1"
DUT_DEC1 = "IVAS_dec_1"
REF_ENC2 = "IVAS_cod_ref_2"
REF_DEC2 = "IVAS_dec_ref_2"
DUT_ENC2 = "IVAS_cod_2"
DUT_DEC2 = "IVAS_dec_2"
if "dec" in row["job"]:
DUT_ENC1 = "IVAS_cod_ref_1"
DUT_ENC2 = "IVAS_cod_ref_2"
if "enc" in row["job"]:
DUT_DEC1 = "IVAS_dec_ref_1"
DUT_DEC2 = "IVAS_dec_ref_2"
script_content = REPRODUCE_REGRESSION_SCRIPT_TMPL.format(
min_date=row["min_date"],
min_sha=row["min_sha"][1:],
level_scaling=level_scaling,
testcase=row["testcase"],
REF_ENC1=REF_ENC1,
REF_DEC1=REF_DEC1,
DUT_ENC1=DUT_ENC1,
DUT_DEC1=DUT_DEC1,
REF_ENC2=REF_ENC2,
REF_DEC2=REF_DEC2,
DUT_ENC2=DUT_ENC2,
DUT_DEC2=DUT_DEC2,
)
script_filename = f"regression_{row_counter+2:03d}.bash"
with open(script_filename, "w") as f:
f.write(script_content)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="logs dir")
parser.add_argument(
"logs_dir",
type=str,
help="Logs dir, e.g. logs",
)
parser.add_argument(
"output_filename",
type=str,
help="Filename of the combined csv file. e.g mld.csv",
)
parser.add_argument(
"--measure",
type=str,
help="Measure for summary, one of MLD MIN_SSNR MAX_ABS_DIFF MIN_ODG, (default: MLD)",
default="MLD",
)
args = parser.parse_args()
main(args.logs_dir, args.output_filename, args.measure)