diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index fde4bc78c4ffb3ba0f442029c4a94581b20cbc46..724e0fdb31a8091fa45ebedf181662080c77518d 100755 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -153,7 +153,11 @@ typedef enum #define MAX_SCE MAX_NUM_OBJECTS /* max. number of SCEs */ #define MAX_CPE ( MAX_TRANSPORT_CHANNELS / CPE_CHANNELS ) /* max. number of CPEs */ +#ifdef FIX_747_ISM_TODOS +#define MAX_BITS_METADATA 2500 /* max. bit-budget of metadata */ +#else #define MAX_BITS_METADATA 2640 /* max. bit-budget of metadata, one channel */ /* IVAS_fmToDo: to be confirmed for final value once mature */ +#endif #define MIN_NUM_IND 10 /* minimum number of indices in the core coder */ #define MAX_NUM_IND_LFE 100 /* maximum number of indices in the LFE encoder */ #define MAX_NUM_IND_TEMP_LIST 10 /* maximum number of indices in the temporary list */ @@ -360,17 +364,18 @@ typedef enum #define ISM_Q_STEP_LOW (ISM_Q_STEP * 2) #define ISM_Q_STEP_BORDER_LOW (ISM_Q_STEP_BORDER * 2) +#ifndef FIX_747_ISM_TODOS #define BRATE_ISM_INACTIVE 2450 /* CoreCoder bitrate in ISM inactive frames */ - +#endif typedef enum { ISM_MODE_NONE, ISM_MODE_DISC, /* discrete ISM */ ISM_MODE_PARAM, /* parametric ISM */ - ISM_MASA_MODE_MASA_ONE_OBJ, /* MASA ISM mode when one object is encoded separately and remainder using MASA parameters */ - ISM_MASA_MODE_PARAM_ONE_OBJ, /* MASA ISM mode when one object is encoded separately and remainder using parametric object model */ - ISM_MASA_MODE_DISC, /* MASA ISM mode when all objects are encoded separarately */ - ISM_SBA_MODE_DISC /* MASA ISM mode when all objects are encoded separarately */ + ISM_MASA_MODE_MASA_ONE_OBJ, /* MASA ISM mode when one object is encoded separately and remainder using MASA parameters */ + ISM_MASA_MODE_PARAM_ONE_OBJ, /* MASA ISM mode when one object is encoded separately and remainder using parametric object model */ + ISM_MASA_MODE_DISC, /* MASA ISM mode when all objects are encoded separarately */ + ISM_SBA_MODE_DISC /* MASA ISM mode when all objects are encoded separarately */ } ISM_MODE; @@ -396,10 +401,16 @@ enum IND_ISM_ELEVATION = TAG_ISM_LOOP_START, IND_ISM_RADIUS_DIFF_FLAG = TAG_ISM_LOOP_START, IND_ISM_RADIUS = TAG_ISM_LOOP_START, +#ifdef FIX_747_ISM_TODOS + TAG_ISM_LOOP_END = TAG_ISM_LOOP_START +#else TAG_ISM_LOOP_END = TAG_ISM_LOOP_START + 100, /* IVAS_fmToDo: to be reviewed once the final metadata are defined */ +#endif /* --------- end of loop for objects ----------- */ - +#ifndef FIX_747_ISM_TODOS ISM_MAX_NUM_INDICES +#endif + }; diff --git a/lib_com/ivas_error.h b/lib_com/ivas_error.h index 2ebaf6d30b3b312ccee1e435418b7aaa5d072c63..b03e28b106990b06ff5d7a67edd6db1b62d6645d 100644 --- a/lib_com/ivas_error.h +++ b/lib_com/ivas_error.h @@ -61,7 +61,9 @@ typedef enum IVAS_ERR_INVALID_MASA_CONFIG, IVAS_ERR_TOO_MANY_INPUTS, IVAS_ERR_MISSING_METADATA, +#ifndef FIX_747_ISM_TODOS IVAS_ERR_INDEX_OUT_OF_BOUNDS, +#endif IVAS_ERR_RECONFIGURE_NOT_SUPPORTED, IVAS_ERR_INVALID_FEC_CONFIG, IVAS_ERR_INVALID_FEC_OFFSET, @@ -84,7 +86,12 @@ typedef enum #endif IVAS_ERR_INVALID_HRTF, IVAS_ERR_INVALID_INPUT_FORMAT, +#ifdef FIX_747_ISM_TODOS + IVAS_ERR_INVALID_INDEX, + +#else IVAS_ERR_INVALID_INDEX, /* ToDo: should be merged with IVAS_ERR_INDEX_OUT_OF_BOUNDS */ +#endif IVAS_ERR_NOT_SUPPORTED_OPTION, IVAS_ERR_NOT_IMPLEMENTED, IVAS_ERR_WAITING_FOR_BITSTREAM, @@ -215,8 +222,10 @@ static inline const char *ivas_error_to_string( ivas_error error_code ) return "Invalid MASA config"; case IVAS_ERR_TOO_MANY_INPUTS: return "Too many object inputs provided"; +#ifndef FIX_747_ISM_TODOS case IVAS_ERR_INDEX_OUT_OF_BOUNDS: return "Index out of bounds"; +#endif case IVAS_ERR_RECONFIGURE_NOT_SUPPORTED: return "Reconfigure not supported"; case IVAS_ERR_INVALID_FEC_OFFSET: diff --git a/lib_com/options.h b/lib_com/options.h index 876ca8adc254b123eef33da99b0a3364de56cfe2..e4b62eddecd97a19319da81acfd928352cc87925 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -159,10 +159,8 @@ #define ROM_TO_RAM /*Dlb : ROM optimization in SR mode*/ #define FIX_712_713_SPLIT_REND_MASA_MC /*Dlb : Fix for issue 712 and 713*/ #endif -#define FIX_705_REND_CONF_FALSE_WARNING /* Eri: Bug in MSVC ftell() for UNIX-style line endings trigger false warning messages in renderer configuration. */ - -/* #################### End BE switches ################################## */ +#define FIX_705_REND_CONF_FALSE_WARNING /* Eri: Bug in MSVC ftell() for UNIX-style line endings trigger false warning messages in renderer configuration. */ #define IGF_MEMORY_ALLOC_OPT /* FhG: Issue 157: allocate IGF encoder structure only when needed */ #define FIX_732_PLANAR_SBA_OSBA /* Dlb : issue 732: fix for crash in planar mode in OSBA format*/ #define FIX_708_DPID_COMMAND_LINE /* issue 708: sanity checks for '-dpid' command-line */ @@ -174,8 +172,10 @@ #define FIX_708_AEID_COMMAND_LINE /* VA: issue 708: improve AEID command-line robustness */ #define FIX_518_ISM_BRIR_EXTREND /* FhG: fix issue #518, cleanup ISM to BINAURAL_ROOM_IR rendering in the external renderer */ #define FIX_764_HARM_CODE /* VA: issue 764: introduce new function for the same code block at four different places */ +#define FIX_747_ISM_TODOS /* VA: issue 747 - address ISM ToDos */ +/* #################### End BE switches ################################## */ /* #################### Start NON-BE switches ############################ */ /* any switch which is non-be wrt selection floating point code */ diff --git a/lib_dec/ivas_ism_metadata_dec.c b/lib_dec/ivas_ism_metadata_dec.c index 13c8ceeb80386fdcc6fa492529bd2fb500b3f679..82f07ffe3e37d6143c6472c03197decc3acecef3 100644 --- a/lib_dec/ivas_ism_metadata_dec.c +++ b/lib_dec/ivas_ism_metadata_dec.c @@ -62,6 +62,10 @@ static int16_t decode_radius( DEC_CORE_HANDLE st0, int16_t *last_radius_idx, int #define CNG_MD_MAX_DIFF_AZIMUTH 5 #define CNG_MD_MAX_DIFF_ELEVATION 5 +#ifdef FIX_747_ISM_TODOS +#define MAX_BITS_ISM_METADATA ( 2 * ISM_EXTENDED_METADATA_BITS + MAX_NUM_OBJECTS * ( 1 /*number of objects*/ + ISM_METADATA_MD_FLAG_BITS + 2 * ISM_METADATA_FLAG_BITS + ISM_METADATA_IS_NDP_BITS + 1 /*abs.flag*/ + ISM_AZIMUTH_NBITS + ISM_ELEVATION_NBITS + 1 /*abs.flag*/ + ISM_RADIUS_NBITS + 1 /*abs.flag*/ + ISM_AZIMUTH_NBITS + ISM_ELEVATION_NBITS ) + 10 /* margin */ ) /* max. bit-budget of ISM metadata */ +#endif + /*-------------------------------------------------------------------* * ism_metadata_smooth() @@ -165,7 +169,11 @@ ivas_error ivas_ism_metadata_dec( int16_t idx_angle1; int16_t idx_angle2; int16_t next_bit_pos_orig; +#ifdef FIX_747_ISM_TODOS + uint16_t i, bstr_meta[MAX_BITS_ISM_METADATA], *bstr_orig; +#else uint16_t i, bstr_meta[MAX_BITS_METADATA], *bstr_orig; +#endif ISM_METADATA_HANDLE hIsmMetaData; int16_t nchan_transport_prev, ism_metadata_flag_global; int16_t null_metadata_flag[MAX_NUM_OBJECTS]; @@ -191,7 +199,11 @@ ivas_error ivas_ism_metadata_dec( set_s( lowrate_metadata_flag, 0, nchan_ism ); /* reverse the bitstream for easier reading of indices */ +#ifdef FIX_747_ISM_TODOS + for ( i = 0; i < min( MAX_BITS_ISM_METADATA, last_bit_pos ); i++ ) +#else for ( i = 0; i < min( MAX_BITS_METADATA, last_bit_pos ); i++ ) +#endif { bstr_meta[i] = st0->bit_stream[last_bit_pos - i]; } @@ -967,7 +979,11 @@ void ivas_ism_metadata_sid_dec( st0->next_bit_pos = 0; /* reverse the bitstream for easier reading of indices */ +#ifdef FIX_747_ISM_TODOS + for ( i = 0; i < min( MAX_BITS_ISM_METADATA, last_bit_pos ); i++ ) +#else for ( i = 0; i < min( MAX_BITS_METADATA, last_bit_pos ); i++ ) +#endif { bstr_meta[i] = st0->bit_stream[last_bit_pos - i]; } diff --git a/lib_dec/ivas_omasa_dec.c b/lib_dec/ivas_omasa_dec.c index b0f2c872eed01ad0aca65dee65d9ddd6db941f51..240731d674515198717350fe2fd4feb9c485307d 100644 --- a/lib_dec/ivas_omasa_dec.c +++ b/lib_dec/ivas_omasa_dec.c @@ -562,8 +562,7 @@ ivas_error ivas_omasa_ism_metadata_dec( { /* decode ISM metadata */ if ( ( error = ivas_ism_metadata_dec( ism_total_brate, *nchan_ism, nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, - nb_bits_metadata, st_ivas->ism_mode, st_ivas->hISMDTX, NULL, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt, - st_ivas->hSCE[0]->hCoreCoder[0] ) ) != IVAS_ERR_OK ) + nb_bits_metadata, st_ivas->ism_mode, st_ivas->hISMDTX, NULL, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt, st_ivas->hSCE[0]->hCoreCoder[0] ) ) != IVAS_ERR_OK ) { return error; } diff --git a/lib_enc/ivas_enc.c b/lib_enc/ivas_enc.c index f9f02b51b57a1c33b3eb47e34f2b5da952131fc8..dfe8106a04d5da1caf496d7ae1d0126c34acd1d9 100644 --- a/lib_enc/ivas_enc.c +++ b/lib_enc/ivas_enc.c @@ -201,8 +201,7 @@ ivas_error ivas_enc( ivas_param_ism_stereo_dmx( st_ivas, data_f, input_frame ); /* Core coding of Stereo DMX */ - if ( ( error = ivas_ism_enc( st_ivas, data_f, input_frame, nb_bits_metadata, - 0 ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_ism_enc( st_ivas, data_f, input_frame, nb_bits_metadata, 0 ) ) != IVAS_ERR_OK ) { return error; } @@ -210,8 +209,7 @@ ivas_error ivas_enc( else if ( st_ivas->ism_mode == ISM_MODE_DISC ) { /* Analysis, decision about bitrates per channel & core coding */ - if ( ( error = ivas_ism_enc( st_ivas, data_f, input_frame, nb_bits_metadata, - 0 ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_ism_enc( st_ivas, data_f, input_frame, nb_bits_metadata, 0 ) ) != IVAS_ERR_OK ) { return error; } diff --git a/lib_enc/ivas_ism_enc.c b/lib_enc/ivas_ism_enc.c index eeb7689868e063ccb9b511a38990a1a05d5cdd38..e143c51ce9deeca86aac0aa2c25dcc402e9a7026 100644 --- a/lib_enc/ivas_ism_enc.c +++ b/lib_enc/ivas_ism_enc.c @@ -235,9 +235,17 @@ ivas_error ivas_ism_enc( } else if ( st_ivas->ism_mode == ISM_MODE_PARAM ) { +#ifdef FIX_747_ISM_TODOS + if ( ( error = ivas_ism_metadata_enc( &st_ivas->hEncoderConfig->ivas_total_brate, nchan_ism, nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, + nb_bits_metadata, vad_flag, st_ivas->ism_mode, st_ivas->hDirAC->hParamIsm, st_ivas->hEncoderConfig->ism_extended_metadata_flag, -1, 0, NULL, st_ivas->hSCE[0]->hCoreCoder[0]->ini_frame ) ) != IVAS_ERR_OK ) + { + return error; + } +#else ivas_ism_metadata_enc( &st_ivas->hEncoderConfig->ivas_total_brate, nchan_ism, nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, nb_bits_metadata, vad_flag, st_ivas->ism_mode, st_ivas->hDirAC->hParamIsm, st_ivas->hEncoderConfig->ism_extended_metadata_flag, -1, 0, NULL, st_ivas->hSCE[0]->hCoreCoder[0]->ini_frame ); +#endif } else /* ISM_MODE_DISC */ { @@ -256,9 +264,17 @@ ivas_error ivas_ism_enc( ism_total_brate_ref = ism_total_brate; +#ifdef FIX_747_ISM_TODOS + if ( ( error = ivas_ism_metadata_enc( &ism_total_brate, nchan_ism, nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, + nb_bits_metadata, vad_flag, st_ivas->ism_mode, NULL, st_ivas->hEncoderConfig->ism_extended_metadata_flag, st_ivas->hMasa != NULL ? st_ivas->hMasa->data.hOmasaData->lp_noise_CPE : 0, flag_omasa_ener_brate, st_ivas->hMasa != NULL ? &( st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt ) : NULL, st_ivas->hSCE[0]->hCoreCoder[0]->ini_frame ) ) != IVAS_ERR_OK ) + { + return error; + } +#else ivas_ism_metadata_enc( &ism_total_brate, nchan_ism, nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, nb_bits_metadata, vad_flag, st_ivas->ism_mode, NULL, st_ivas->hEncoderConfig->ism_extended_metadata_flag, st_ivas->hMasa != NULL ? st_ivas->hMasa->data.hOmasaData->lp_noise_CPE : 0, flag_omasa_ener_brate, st_ivas->hMasa != NULL ? &( st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt ) : NULL, st_ivas->hSCE[0]->hCoreCoder[0]->ini_frame ); +#endif if ( st_ivas->hEncoderConfig->ivas_format == MASA_ISM_FORMAT ) { @@ -285,6 +301,7 @@ ivas_error ivas_ism_enc( assert( st_ivas->ism_mode != ISM_MODE_NONE ); return error; } + /*------------------------------------------------------------------* * CoreCoders encoding *-----------------------------------------------------------------*/ diff --git a/lib_enc/lib_enc.c b/lib_enc/lib_enc.c index ee9e172dd920142b8cb20af909afd86e8642d260..984048ec38a2be6f153091b147c4a3d17c309a8a 100644 --- a/lib_enc/lib_enc.c +++ b/lib_enc/lib_enc.c @@ -458,7 +458,11 @@ ivas_error IVAS_ENC_FeedObjectMetadata( if ( ismIndex > hIvasEnc->st_ivas->hEncoderConfig->nchan_inp ) { +#ifdef FIX_747_ISM_TODOS + return IVAS_ERR_INVALID_INDEX; +#else return IVAS_ERR_INDEX_OUT_OF_BOUNDS; +#endif } error = ivas_set_ism_metadata( hIvasEnc->st_ivas->hIsmMetaData[ismIndex], metadata.azimuth, metadata.elevation, metadata.radius, metadata.yaw, metadata.pitch, metadata.non_diegetic_flag ); diff --git a/lib_enc/swb_tbe_enc.c b/lib_enc/swb_tbe_enc.c index d82af15f3505bc94f49385bfd6587263869ac48d..135e856a990dee3f7efa2aae09c465498791ed4a 100644 --- a/lib_enc/swb_tbe_enc.c +++ b/lib_enc/swb_tbe_enc.c @@ -2150,7 +2150,6 @@ static void Quant_BWE_LSF( if ( extl_brate == SWB_TBE_1k75 ) { - /* Todo: input properly the number of bits */ LVQQuant_BWE_LSF( hBstr, lsf_shb, Q_lsfs, NUM_BITS_SHB_MSLVQ ); } else diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index cbfedbc822926e0254010b6621fac58ae5c9074c..ce4b1a775f9b53a24b2c8b7be75360b9b9efbc7c 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -394,7 +394,6 @@ static ivas_error set_base_config( return IVAS_ERR_INTERNAL; } - /* TODO: values below could be reconsidered, and/or be made variable */ pParams->pre_delay = 0; pParams->nr_outputs = BINAURAL_CHANNELS; pParams->nr_loops = IVAS_REV_MAX_NR_BRANCHES; @@ -540,7 +539,6 @@ static ivas_error compute_t60_coeffs( } } - // TODO: Compute proper (group) Delay from IIR filter len = ( pParams->t60_filter_order + 1 ) >> 1; /* == floor( (order+1) / 2) */ for ( loop_idx = 0; loop_idx < pParams->nr_loops; loop_idx++ ) { diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 1fdecb06fb6c9ba19c1e93fa9c29689bdaf360eb..3919f2b3a70b222a252307d228dcd5e4d49829bd 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -109,12 +109,6 @@ typedef struct const int16_t *pSplitRendBFI; const SPLIT_REND_WRAPPER *pSplitRendWrapper; #endif - - /* TODO @Philips : would this be a better place to store the render config data? - * bearing in mind we could have multiple inputs to the renderer, we might neeed to accomodate - * multiple rendering configurations unless one global one can be used. If this is not relevant, - * feel free to remove this TODO. - */ const COMBINED_ORIENTATION_HANDLE *pCombinedOrientationData; } rendering_context; @@ -253,7 +247,6 @@ struct IVAS_REND input_split_post_rend inputsSplitPost[RENDERER_MAX_BIN_INPUTS]; #endif - /* TODO @Philips - inputConfig should not be stored here, but read from e.g. input_mc->input_base.inConfig, please remove this */ AUDIO_CONFIG inputConfig; AUDIO_CONFIG outputConfig; EFAP_WRAPPER efapOutWrapper;