diff --git a/lib_com/bitstream.c b/lib_com/bitstream.c index dcd1b71684cdef22049e8a112685bb52dab24e4f..52c89794e0c2e4dd36734da6e9f55a0c60ae0d8c 100755 --- a/lib_com/bitstream.c +++ b/lib_com/bitstream.c @@ -2855,7 +2855,9 @@ ivas_error preview_indices( if ( bit_stream[2] == 0 ) { st_ivas->ivas_format = SBA_FORMAT; +#ifndef SBA_MODE_CLEAN_UP st_ivas->sba_mode = ivas_sba_mode_select(); +#endif } else { diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index f6298fe9ea1ec9f6b8c3c15c0650f516168e0ab8..1e7ca7ae8e7ac03724af12ae7971f779c8e6084f 100755 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -919,7 +919,7 @@ typedef enum { #define SBA_NHARM_HOA3 16 #define SBA_T_DESIGN_11_SIZE 70 #define SBA_DTX_BITRATE_THRESHOLD IVAS_80k - +#ifndef SBA_MODE_CLEAN_UP typedef enum { SBA_MODE_NONE, @@ -927,6 +927,7 @@ typedef enum SBA_MODE_SPAR, // VE: this is actually SBA_MODE_SPAR_DIRAC } SBA_MODE; +#endif /*----------------------------------------------------------------------------------* * DirAC Constants diff --git a/lib_com/ivas_dirac_com.c b/lib_com/ivas_dirac_com.c index 95d122ba790d0c26b31856a58ddef9f0d39e2c81..721a6befdb453cc3a444dff3168d5d9d5d76a76b 100644 --- a/lib_com/ivas_dirac_com.c +++ b/lib_com/ivas_dirac_com.c @@ -85,7 +85,11 @@ ivas_error ivas_dirac_config( { IVAS_FORMAT ivas_format; int16_t sba_order; +#ifndef SBA_MODE_CLEAN_UP int16_t *nSCE, *nCPE, *element_mode, *nchan_transport; +#else + int16_t *element_mode; +#endif int32_t ivas_total_brate; DIRAC_CONFIG_DATA_HANDLE hConfig; IVAS_QMETADATA_HANDLE hQMetaData; @@ -94,7 +98,9 @@ ivas_error ivas_dirac_config( ivas_error error; int16_t spar_dirac_split_band; IVAS_FB_MIXER_HANDLE hFbMdft; +#ifndef SBA_MODE_CLEAN_UP SBA_MODE sba_mode; +#endif int16_t *dirac_to_spar_md_bands; @@ -104,17 +110,23 @@ ivas_error ivas_dirac_config( if ( enc_dec == ENC ) { ivas_format = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->ivas_format; +#ifndef SBA_MODE_CLEAN_UP nSCE = &( ( (Encoder_Struct *) st_ivas )->nSCE ); nCPE = &( (Encoder_Struct *) st_ivas )->nCPE; +#endif element_mode = &( (Encoder_Struct *) st_ivas )->hEncoderConfig->element_mode_init; +#ifndef SBA_MODE_CLEAN_UP nchan_transport = &( (Encoder_Struct *) st_ivas )->nchan_transport; +#endif sba_order = ( (Encoder_Struct *) st_ivas )->sba_analysis_order; ivas_total_brate = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->ivas_total_brate; Fs = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->input_Fs; band_grouping = ( (Encoder_Struct *) st_ivas )->hDirAC->band_grouping; hConfig = ( (Encoder_Struct *) st_ivas )->hDirAC->hConfig; hQMetaData = ( (Encoder_Struct *) st_ivas )->hQMetaData; +#ifndef SBA_MODE_CLEAN_UP sba_mode = ( (Encoder_Struct *) st_ivas )->sba_mode; +#endif if ( ( (Encoder_Struct *) st_ivas )->hSpar != NULL ) { hFbMdft = ( (Encoder_Struct *) st_ivas )->hSpar->hFbMixer; @@ -123,22 +135,32 @@ ivas_error ivas_dirac_config( { hFbMdft = NULL; } +#ifndef SBA_MODE_CLEAN_UP dirac_to_spar_md_bands = ( (Encoder_Struct *) st_ivas )->hDirAC->dirac_to_spar_md_bands; +#else + dirac_to_spar_md_bands = ( (Encoder_Struct *) st_ivas )->hSpar->dirac_to_spar_md_bands; +#endif } else { ivas_format = ( (Decoder_Struct *) st_ivas )->ivas_format; +#ifndef SBA_MODE_CLEAN_UP nSCE = &( (Decoder_Struct *) st_ivas )->nSCE; nCPE = &( (Decoder_Struct *) st_ivas )->nCPE; +#endif element_mode = &( (Decoder_Struct *) st_ivas )->element_mode_init; +#ifndef SBA_MODE_CLEAN_UP nchan_transport = &( (Decoder_Struct *) st_ivas )->nchan_transport; +#endif sba_order = ( (Decoder_Struct *) st_ivas )->sba_analysis_order; ivas_total_brate = ( (Decoder_Struct *) st_ivas )->hDecoderConfig->ivas_total_brate; Fs = ( (Decoder_Struct *) st_ivas )->hDecoderConfig->output_Fs; band_grouping = ( (Decoder_Struct *) st_ivas )->hDirAC->band_grouping; hConfig = ( (Decoder_Struct *) st_ivas )->hDirAC->hConfig; hQMetaData = ( (Decoder_Struct *) st_ivas )->hQMetaData; +#ifndef SBA_MODE_CLEAN_UP sba_mode = ( (Decoder_Struct *) st_ivas )->sba_mode; +#endif if ( ( (Decoder_Struct *) st_ivas )->hSpar != NULL ) { hFbMdft = ( (Decoder_Struct *) st_ivas )->hSpar->hFbMixer; @@ -148,10 +170,18 @@ ivas_error ivas_dirac_config( hFbMdft = NULL; } ( (Decoder_Struct *) st_ivas )->hDirAC->hFbMdft = hFbMdft; +#ifndef SBA_MODE_CLEAN_UP dirac_to_spar_md_bands = ( (Decoder_Struct *) st_ivas )->hDirAC->dirac_to_spar_md_bands; +#else + dirac_to_spar_md_bands = ( (Decoder_Struct *) st_ivas )->hSpar->dirac_to_spar_md_bands; +#endif } +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode == SBA_MODE_SPAR ) +#else + if ( ivas_format == SBA_FORMAT ) +#endif { hConfig->nbands = IVAS_MAX_NUM_BANDS; @@ -172,14 +202,22 @@ ivas_error ivas_dirac_config( hConfig->dec_param_estim_old = hConfig->dec_param_estim; if ( ivas_format == SBA_FORMAT ) /* skip for MASA decoder */ { +#ifndef SBA_MODE_CLEAN_UP if ( ( error = ivas_dirac_sba_config( hQMetaData, nchan_transport, nSCE, nCPE, element_mode, ivas_total_brate, sba_order, sba_mode, hConfig->nbands - spar_dirac_split_band ) ) != IVAS_ERR_OK ) +#else + if ( ( error = ivas_dirac_sba_config( hQMetaData, element_mode, ivas_total_brate, sba_order, hConfig->nbands - spar_dirac_split_band ) ) != IVAS_ERR_OK ) +#endif { return error; } if ( hQMetaData != NULL ) { +#ifndef SBA_MODE_CLEAN_UP if ( enc_dec == ENC || sba_mode != SBA_MODE_SPAR ) +#else + if ( enc_dec == ENC || ivas_format != SBA_FORMAT ) +#endif { hConfig->nbands = hQMetaData->q_direction[0].cfg.nbands; } @@ -187,8 +225,10 @@ ivas_error ivas_dirac_config( } +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode == SBA_MODE_SPAR ) { +#endif hConfig->dec_param_estim = TRUE; if ( hConfig->dec_param_estim == TRUE ) { @@ -203,6 +243,7 @@ ivas_error ivas_dirac_config( set_c( (int8_t *) hQMetaData->twoDirBands, (int8_t) 1, hQMetaData->q_direction[0].cfg.nbands ); hQMetaData->numTwoDirBands = (uint8_t) hQMetaData->q_direction[0].cfg.nbands; } +#ifndef SBA_MODE_CLEAN_UP } else { @@ -211,9 +252,14 @@ ivas_error ivas_dirac_config( hConfig->dec_param_estim = TRUE; } } +#endif } +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode == SBA_MODE_SPAR ) +#else + if ( ivas_format == SBA_FORMAT ) +#endif { ivas_dirac_config_bands( band_grouping, IVAS_MAX_NUM_BANDS, (int16_t) ( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), dirac_to_spar_md_bands, hQMetaData->useLowerBandRes, hConfig->enc_param_start_band, hFbMdft ); } @@ -402,18 +448,24 @@ void ivas_get_dirac_sba_max_md_bits( ivas_error ivas_dirac_sba_config( IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ - int16_t *nchan_transport, /* o : number of transport channel needed for MASA format */ - int16_t *nSCE, /* o : number of SCEs */ - int16_t *nCPE, /* o : number of CPEs */ - int16_t *element_mode, /* i/o: element mode of the core coder */ - int32_t sba_total_brate, /* i : SBA total bitrate */ - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - const SBA_MODE sba_mode, /* i : SBA mode */ - const int16_t nbands /* i : number of frequency bands */ +#ifndef SBA_MODE_CLEAN_UP + int16_t *nchan_transport, /* o : number of transport channel needed for MASA format */ + int16_t *nSCE, /* o : number of SCEs */ + int16_t *nCPE, /* o : number of CPEs */ +#endif + int16_t *element_mode, /* i/o: element mode of the core coder */ + int32_t sba_total_brate, /* i : SBA total bitrate */ + const int16_t sba_order, /* i : Ambisonic (SBA) order */ +#ifndef SBA_MODE_CLEAN_UP + const SBA_MODE sba_mode, /* i : SBA mode */ +#endif + const int16_t nbands /* i : number of frequency bands */ ) { +#ifndef SBA_MODE_CLEAN_UP int16_t i; int16_t nbands_wb; +#endif int16_t nbands_coded; int16_t hodirac_flag; ivas_error error; @@ -422,8 +474,10 @@ ivas_error ivas_dirac_sba_config( hQMetaData->is_masa_ivas_format = 0; hodirac_flag = ivas_get_hodirac_flag( sba_total_brate, sba_order ); +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode == SBA_MODE_SPAR ) { +#endif /* map the bitrate for SID frame */ if ( sba_total_brate == IVAS_SID_5k2 ) { @@ -499,62 +553,63 @@ ivas_error ivas_dirac_sba_config( &hQMetaData->qmetadata_max_bit_req, hQMetaData->q_direction[0].cfg.nbands ); #else - if ( sba_total_brate <= IVAS_13k2 ) - { - hQMetaData->bits_frame_nominal = ACELP_9k60 / FRAMES_PER_SEC; - hQMetaData->metadata_max_bits = 70; - } - else if ( sba_total_brate <= IVAS_16k4 ) - { - hQMetaData->bits_frame_nominal = ACELP_13k20 / FRAMES_PER_SEC; - hQMetaData->metadata_max_bits = 80; - } - else if ( sba_total_brate <= IVAS_24k4 ) - { - hQMetaData->bits_frame_nominal = ACELP_16k40 / FRAMES_PER_SEC; - hQMetaData->metadata_max_bits = 103; - } - else if ( sba_total_brate <= IVAS_32k ) - { - hQMetaData->bits_frame_nominal = ACELP_32k / FRAMES_PER_SEC; - hQMetaData->metadata_max_bits = 214; - } - else if ( sba_total_brate <= IVAS_48k ) - { - hQMetaData->bits_frame_nominal = IVAS_48k / FRAMES_PER_SEC; - hQMetaData->metadata_max_bits = 240; - } - else if ( sba_total_brate <= IVAS_64k ) - { - hQMetaData->bits_frame_nominal = IVAS_64k / FRAMES_PER_SEC; - hQMetaData->metadata_max_bits = 200; - } - else if ( sba_total_brate <= IVAS_80k ) - { - hQMetaData->bits_frame_nominal = IVAS_80k / FRAMES_PER_SEC; - hQMetaData->metadata_max_bits = 200; - } - else if ( sba_total_brate <= IVAS_96k ) - { - hQMetaData->bits_frame_nominal = IVAS_96k / FRAMES_PER_SEC; - hQMetaData->metadata_max_bits = 200; - } - else if ( sba_total_brate <= IVAS_128k ) - { - hQMetaData->bits_frame_nominal = IVAS_128k / FRAMES_PER_SEC; - hQMetaData->metadata_max_bits = 250; - } - else - { - hQMetaData->bits_frame_nominal = (int16_t) ( sba_total_brate / FRAMES_PER_SEC ); - hQMetaData->metadata_max_bits = MAX16B; /* no limit */ - } + if ( sba_total_brate <= IVAS_13k2 ) + { + hQMetaData->bits_frame_nominal = ACELP_9k60 / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 70; + } + else if ( sba_total_brate <= IVAS_16k4 ) + { + hQMetaData->bits_frame_nominal = ACELP_13k20 / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 80; + } + else if ( sba_total_brate <= IVAS_24k4 ) + { + hQMetaData->bits_frame_nominal = ACELP_16k40 / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 103; + } + else if ( sba_total_brate <= IVAS_32k ) + { + hQMetaData->bits_frame_nominal = ACELP_32k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 214; + } + else if ( sba_total_brate <= IVAS_48k ) + { + hQMetaData->bits_frame_nominal = IVAS_48k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 240; + } + else if ( sba_total_brate <= IVAS_64k ) + { + hQMetaData->bits_frame_nominal = IVAS_64k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 200; + } + else if ( sba_total_brate <= IVAS_80k ) + { + hQMetaData->bits_frame_nominal = IVAS_80k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 200; + } + else if ( sba_total_brate <= IVAS_96k ) + { + hQMetaData->bits_frame_nominal = IVAS_96k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 200; + } + else if ( sba_total_brate <= IVAS_128k ) + { + hQMetaData->bits_frame_nominal = IVAS_128k / FRAMES_PER_SEC; + hQMetaData->metadata_max_bits = 250; + } + else + { + hQMetaData->bits_frame_nominal = (int16_t) ( sba_total_brate / FRAMES_PER_SEC ); + hQMetaData->metadata_max_bits = MAX16B; /* no limit */ + } - hQMetaData->metadata_max_bits = (int16_t) ceilf( (float) hQMetaData->metadata_max_bits * hQMetaData->q_direction[0].cfg.nbands / 5 ); - hQMetaData->qmetadata_max_bit_req = QMETADATA_MAXBIT_REQ_SBA >> 1; + hQMetaData->metadata_max_bits = (int16_t) ceilf( (float) hQMetaData->metadata_max_bits * hQMetaData->q_direction[0].cfg.nbands / 5 ); + hQMetaData->qmetadata_max_bit_req = QMETADATA_MAXBIT_REQ_SBA >> 1; #endif return error; +#ifndef SBA_MODE_CLEAN_UP } if ( sba_total_brate > IVAS_SID_5k2 ) @@ -710,8 +765,8 @@ ivas_error ivas_dirac_sba_config( assert( !"SBA number of transport channels must be 8 or lower" ); } } - return error; +#endif } diff --git a/lib_com/ivas_fb_mixer.c b/lib_com/ivas_fb_mixer.c index 3d0b6255c9395ad982f29f39228f60e098c2f90d..dbbce9afe42e525db5d25e9cbe2e5f9126b24ce9 100644 --- a/lib_com/ivas_fb_mixer.c +++ b/lib_com/ivas_fb_mixer.c @@ -99,9 +99,11 @@ static int16_t ivas_get_num_bands( *---------------------------------------------------------------------*/ ivas_error ivas_fb_set_cfg( - IVAS_FB_CFG **pFb_cfg_out, /* o : FB config. handle */ - const int16_t ivas_format, /* i : IVAS format */ - const SBA_MODE sba_mode, /* i : SBA mode */ + IVAS_FB_CFG **pFb_cfg_out, /* o : FB config. handle */ + const int16_t ivas_format, /* i : IVAS format */ +#ifndef SBA_MODE_CLEAN_UP + const SBA_MODE sba_mode, /* i : SBA mode */ +#endif const int16_t num_in_chans, /* i : number of FB input channels */ const int16_t num_out_chans, /* i : number of FB output channels */ const int16_t active_w_mixing, /* i : active_w_mixing flag */ @@ -135,11 +137,14 @@ ivas_error ivas_fb_set_cfg( { pFb_cfg->fb_latency = NS2SA( sampling_rate, DELAY_FB_1_NS ); +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode == SBA_MODE_SPAR ) { +#endif pFb_cfg->fade_len = NS2SA( sampling_rate, DELAY_FB_4_NS ); pFb_cfg->prior_input_length = NS2SA( sampling_rate, FRAME_SIZE_NS ); pFb_cfg->windowed_fr_offset = (int16_t) ( (float) ( sampling_rate / FRAMES_PER_SEC ) * 3.0f / 4.0f ) - NS2SA( sampling_rate, DELAY_DIRAC_SPAR_ENC_CMP_NS ); +#ifndef SBA_MODE_CLEAN_UP } else /* SBA_MODE_DIRAC */ { @@ -148,6 +153,7 @@ ivas_error ivas_fb_set_cfg( /* extra SPAR/DirAC synchro delay */ pFb_cfg->prior_input_length += NS2SA( sampling_rate, DELAY_FB_1_NS ); } +#endif } else if ( ivas_format == MASA_FORMAT ) { diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 556daf327b9a1f9680cad2775e1cc263cf1eafff..669aff0912f9faedc20c4985c30c5d9905082cef 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -3133,8 +3133,11 @@ void reset_metadata_spatial( const int32_t element_brate, /* i : element bitrate */ int32_t *total_brate, /* o : total bitrate */ const int32_t core_brate, /* i : core bitrate */ - const int16_t nb_bits_metadata, /* i : number of meatdata bits */ + const int16_t nb_bits_metadata /* i : number of meatdata bits */ +#ifndef SBA_MODE_CLEAN_UP + , const SBA_MODE sba_mode /* i : SBA mode */ +#endif ); /*! r: number of bits written */ @@ -3142,8 +3145,11 @@ void ivas_qmetadata_enc_sid_encode( BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ IVAS_QMETADATA *q_metadata, /* i/o: metadata handle */ const int16_t masa_sid_descriptor, /* i : description of MASA SID coding structure*/ - const int16_t ivas_format, /* i : ivas format */ + const int16_t ivas_format /* i : ivas format */ +#ifndef SBA_MODE_CLEAN_UP + , const SBA_MODE sba_mode /* i : SBA mode */ +#endif ); /*! r: number of bits read */ @@ -3178,8 +3184,11 @@ int16_t ivas_qmetadata_dec_sid_decode( int16_t *index, /* i/o: bitstream position */ const int16_t nchan_transport, /* i : number of transport channels */ int16_t *element_mode, /* o : element mode */ - const int16_t ivas_format, /* i : IVAS format */ + const int16_t ivas_format /* i : IVAS format */ +#ifndef SBA_MODE_CLEAN_UP + , const SBA_MODE sba_mode /* i : SBA mode */ +#endif ); void ivas_qmetadata_to_dirac( @@ -3187,7 +3196,11 @@ void ivas_qmetadata_to_dirac( DIRAC_DEC_HANDLE hDirAC, /* o : DirAC decoder structure */ MASA_DECODER_HANDLE hMasa, /* i : MASA decoder structure */ const int32_t ivas_total_brate, /* i : IVAS total bitrate */ +#ifndef SBA_MODE_CLEAN_UP const SBA_MODE sba_mode, /* i : SBA mode */ +#else + const IVAS_FORMAT ivas_format, /* i : IVAS format */ +#endif const int16_t hodirac_flag, /* i : flag to indicate HO-DirAC mode */ int16_t *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ ); @@ -3390,13 +3403,18 @@ void ivas_dirac_param_est_enc( float **pp_fr_real, float **pp_fr_imag, const int16_t input_frame, - const SBA_MODE sba_mode +#ifndef SBA_MODE_CLEAN_UP + const SBA_MODE sba_mode +#else + const IVAS_FORMAT ivas_format +#endif , const int16_t hodirac_flag, const int16_t nchan_fb_in ); +#ifndef SBA_MODE_CLEAN_UP /*----------------------------------------------------------------------------------* * SBA format prototypes *----------------------------------------------------------------------------------*/ @@ -3405,7 +3423,7 @@ void ivas_dirac_param_est_enc( SBA_MODE ivas_sba_mode_select( void ); - +#endif void ivas_sba_config( const int32_t sba_total_brate, /* i : SBA total bitrate */ int16_t sba_order, /* i : Ambisonic (SBA) order */ @@ -3568,6 +3586,7 @@ void ivas_dirac_enc_close( const int32_t input_Fs /* i : input sampling_rate */ ); +#ifndef SBA_MODE_CLEAN_UP void ivas_dirac_enc( DIRAC_ENC_HANDLE hDirAC, /* i/o: encoder DirAC handle */ IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ @@ -3578,7 +3597,20 @@ void ivas_dirac_enc( const int16_t input_frame, /* i : input frame length */ const int16_t sba_planar /* i : SBA planar flag */ ); - +#else +void ivas_dirac_enc( + DIRAC_ENC_HANDLE hDirAC, /* i/o: encoder DirAC handle */ + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ + BSTR_ENC_HANDLE hMetaData, /* i/o: Metadata bitstream handle */ + float data_f[][L_FRAME48k], /* i/o: SBA channels */ + float **ppIn_FR_real, /* o : real freq domain values */ + float **ppIn_FR_imag, /* o : imag freq domain values */ + const int16_t input_frame, /* i : input frame length */ + const int16_t dtx_vad, /* i : DTX vad flag */ + const IVAS_FORMAT ivas_format, /* i : ivas format */ + int16_t hodirac_flag /* i : hodirac flag */ +); +#endif ivas_error ivas_dirac_config( void *st_ivas, /* i/o: IVAS encoder/decoder state structure */ const int16_t enc_dec /* i : encoder or decoder flag */ @@ -3605,13 +3637,17 @@ void ivas_get_dirac_sba_max_md_bits( ivas_error ivas_dirac_sba_config( IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ +#ifndef SBA_MODE_CLEAN_UP int16_t *nchan_transport, /* o : number of transport channel needed for MASA format */ int16_t *nSCE, /* o : number of SCEs */ int16_t *nCPE, /* o : number of CPEs */ +#endif int16_t *element_mode, /* o : element mode of the core coder */ int32_t sba_total_brate, /* i : SBA total bitrate */ const int16_t sba_order, /* i : Ambisonic (SBA) order */ +#ifndef SBA_MODE_CLEAN_UP const SBA_MODE sba_mode, /* i : SBA mode */ +#endif const int16_t nbands /* i : number of frequency bands */ ); @@ -3644,7 +3680,9 @@ void ivas_dirac_dec_read_BS( DIRAC_DEC_HANDLE hDirAC, /* i/o: decoder DirAC handle */ IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q metadata */ int16_t *nb_bits, /* o : number of bits read */ +#ifndef SBA_MODE_CLEAN_UP const SBA_MODE sba_mode, /* i : SBA mode */ +#endif const int16_t hodirac_flag, /* i : flag to indicate HO-DirAC mode */ int16_t *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ ); @@ -5524,7 +5562,12 @@ void computeReferencePower_enc( float *reference_power, /* o : Estimated power */ const int16_t enc_param_start_band, /* i : first band to process */ const int16_t num_freq_bands, /* i : Number of frequency bands */ +#ifndef SBA_MODE_CLEAN_UP const SBA_MODE sba_mode /* i : SBA mode */ +#else + const IVAS_FORMAT ivas_format, /* i : ivas_format */ + int16_t ref_power_w /* i : use 0 if hodirac is enabled */ +#endif , const int16_t nchan_ana /* i : number of analysis channels */ ); @@ -5657,7 +5700,9 @@ ivas_error ivas_td_binaural_renderer_sf( ivas_error ivas_fb_set_cfg( IVAS_FB_CFG **pFb_cfg_out, /* o : FB config. handle */ const int16_t ivas_format, /* i : IVAS format */ +#ifndef SBA_MODE_CLEAN_UP const SBA_MODE sba_mode, /* i : SBA mode */ +#endif const int16_t num_in_chans, /* i : number of FB input channels */ const int16_t num_out_chans, /* i : number of FB output channels */ const int16_t active_w_mixing, /* i : active_w_mixing flag */ @@ -5688,12 +5733,13 @@ void ivas_fb_mixer_pcm_ingest( const int16_t HOA_md_ind[IVAS_SPAR_MAX_CH] ); +#ifndef SBA_MODE_CLEAN_UP void ivas_dirac_enc_spar_delay_synchro( Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ const int16_t input_frame, /* i : input frame length */ float data_f[][L_FRAME48k] /* i/o: SBA channels (ACN / SN3D) */ ); - +#endif void ivas_fb_mixer_update_prior_input( IVAS_FB_MIXER_HANDLE hFbMixer, /* i/o: FB mixer handle */ float *pcm_in[], /* i : input audio channels */ diff --git a/lib_com/ivas_sba_config.c b/lib_com/ivas_sba_config.c index e7a448315f43ef827f94e165106f77c728c140e6..450ebef7910ffd1a04e5a0b3760a19950d899e6f 100644 --- a/lib_com/ivas_sba_config.c +++ b/lib_com/ivas_sba_config.c @@ -47,6 +47,7 @@ #include "wmc_auto.h" +#ifndef SBA_MODE_CLEAN_UP /*-------------------------------------------------------------------* * ivas_sba_mode_select() * @@ -58,6 +59,7 @@ SBA_MODE ivas_sba_mode_select() { return SBA_MODE_SPAR; } +#endif /*-------------------------------------------------------------------* * ivas_sba_config() * diff --git a/lib_com/ivas_spar_com.c b/lib_com/ivas_spar_com.c index c25a88e5cb464e3f5c094d187941af3a4f324db0..8e7da38580ae116e99a3ea224d1251533d0b6e49 100644 --- a/lib_com/ivas_spar_com.c +++ b/lib_com/ivas_spar_com.c @@ -435,10 +435,12 @@ int16_t ivas_get_sba_num_TCs( { nchan_transport = 1; } +#ifndef SBA_MODE_CLEAN_UP else if ( ivas_sba_mode_select() == SBA_MODE_DIRAC ) { nchan_transport = 1; } +#endif else { table_idx = ivas_get_spar_table_idx( ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); diff --git a/lib_com/options.h b/lib_com/options.h old mode 100755 new mode 100644 index 3c714b64e0669a84329647c9b2e1948fe6f8783d..c373d562ab208986f30753889360a1360c78e930 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -212,6 +212,7 @@ #define FIX_I503_ASAN_ERROR_IND_LIST /* VA: fix issue #503: address sanitizer error with IND_LIST_DYN */ #define FIX_473_JITTER_NONDIEGETIC_PANNING /* FhG,Orange: add missing non-diegetic panning to JITTER */ +#define SBA_MODE_CLEAN_UP /* Dlb: Cean up SBA mode references */ #define FIX_502_IND_LIST_SIZE /* Fix issue #502: insufficient index buffer sizes */ #ifdef HR_METADATA diff --git a/lib_dec/ivas_corecoder_dec_reconfig.c b/lib_dec/ivas_corecoder_dec_reconfig.c index 9d15f1bdfc34b2e98ccff7f0b8595648f67f654a..e112a8ec040ce6bc96adc27314eafd8d69f3ab69 100644 --- a/lib_dec/ivas_corecoder_dec_reconfig.c +++ b/lib_dec/ivas_corecoder_dec_reconfig.c @@ -511,8 +511,13 @@ ivas_error ivas_cldfb_dec_reconfig( } } +#ifndef SBA_MODE_CLEAN_UP /* CLDFB Interpolation weights */ if ( st_ivas->sba_mode == SBA_MODE_SPAR && ( numCldfbAnalyses_old != numCldfbAnalyses || numCldfbSyntheses_old != numCldfbSyntheses || nchan_transport_old != st_ivas->nchan_transport ) && numCldfbAnalyses != 0 && numCldfbSyntheses != 0 ) +#else + /* CLDFB Interpolation weights */ + if ( st_ivas->ivas_format == SBA_FORMAT && ( numCldfbAnalyses_old != numCldfbAnalyses || numCldfbSyntheses_old != numCldfbSyntheses || nchan_transport_old != st_ivas->nchan_transport ) && numCldfbAnalyses != 0 && numCldfbSyntheses != 0 ) +#endif { ivas_spar_get_cldfb_gains( st_ivas->hSpar, st_ivas->cldfbAnaDec[0], st_ivas->cldfbSynDec[0], hDecoderConfig ); } diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index 5d2b1218d1059ff0c7b85825084515c132e4c89f..587f3c34fcca79503c75d6ccecf6b8512d602143 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -313,10 +313,15 @@ ivas_error ivas_dec( set_s( nb_bits_metadata, 0, MAX_SCE ); /* read parameters from the bitstream */ +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->hQMetaData != NULL && st_ivas->sba_mode != SBA_MODE_SPAR ) +#else + if ( st_ivas->ivas_format == MASA_FORMAT && st_ivas->hQMetaData != NULL ) +#endif { st = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0] : st_ivas->hCPE[0]->hCoreCoder[0]; +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->ivas_format == SBA_FORMAT ) { ivas_dirac_dec_read_BS( ivas_total_brate, st, st_ivas->hDirAC, st_ivas->hQMetaData, &nb_bits_metadata[0], st_ivas->sba_mode, @@ -325,22 +330,37 @@ ivas_error ivas_dec( } else { +#endif if ( ( error = ivas_masa_decode( st_ivas, st, &nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) { return error; } +#ifndef SBA_MODE_CLEAN_UP } +#endif } +#ifndef SBA_MODE_CLEAN_UP else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#else + else if ( st_ivas->ivas_format == SBA_FORMAT ) +#endif { +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->hQMetaData != NULL ) { st = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0] : st_ivas->hCPE[0]->hCoreCoder[0]; +#ifndef SBA_MODE_CLEAN_UP ivas_dirac_dec_read_BS( ivas_total_brate, st, st_ivas->hDirAC, st_ivas->hQMetaData, &nb_bits_metadata[0], st_ivas->sba_mode, ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ), st_ivas->hSpar->dirac_to_spar_md_bands ); +#else + ivas_dirac_dec_read_BS( ivas_total_brate, st, st_ivas->hDirAC, st_ivas->hQMetaData, &nb_bits_metadata[0], + ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ), + st_ivas->hSpar->dirac_to_spar_md_bands ); +#endif } +#endif if ( ( error = ivas_spar_dec( st_ivas, nb_bits_metadata ) ) != IVAS_ERR_OK ) { @@ -397,7 +417,11 @@ ivas_error ivas_dec( { nchan_remapped = nchan_out; +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#else + if ( st_ivas->ivas_format == SBA_FORMAT ) +#endif { ivas_agc_dec_process( st_ivas->hSpar->hAgcDec, output, output, st_ivas->hSpar->hMdDec->spar_md_cfg.nchan_transport, output_frame ); @@ -428,12 +452,21 @@ ivas_error ivas_dec( { nchan_remapped = ivas_sba_remapTCs( output, st_ivas, output_frame ); +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode == SBA_MODE_SPAR && ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) +#else + if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) + +#endif { ivas_sba_mix_matrix_determiner( st_ivas->hSpar, output, st_ivas->bfi, nchan_remapped, output_frame ); } #ifdef JBM_TSM_ON_TCS +#ifndef SBA_MODE_CLEAN_UP else if ( st_ivas->sba_mode == SBA_MODE_SPAR && st_ivas->renderer_type != RENDERER_DISABLE ) +#else + else if ( st_ivas->renderer_type != RENDERER_DISABLE ) +#endif { ivas_spar_dec_agc_pca( st_ivas, output, output_frame ); } @@ -468,7 +501,11 @@ ivas_error ivas_dec( { ivas_dirac_dec_binaural( st_ivas, output, nchan_remapped ); } +#ifndef SBA_MODE_CLEAN_UP else if ( st_ivas->sba_mode == SBA_MODE_DIRAC || st_ivas->ivas_format == MASA_FORMAT ) +#else + else if ( st_ivas->ivas_format == MASA_FORMAT ) +#endif { if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_DEC ) { diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 646f6b18090cbaa8255cafebff787418a1b34a49..01ed888fb4067a4575b5e60776da887f0b80812c 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -316,7 +316,11 @@ ivas_error ivas_dirac_dec_config( num_protos_diff_old = 0; nchan_transport_orig = st_ivas->nchan_transport; +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR && !( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) +#else + if ( st_ivas->ivas_format == SBA_FORMAT && !( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) +#endif { st_ivas->nchan_transport = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); @@ -427,7 +431,11 @@ ivas_error ivas_dirac_dec_config( } /* band config needed only for SPAR with FOA output */ +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_FOA && st_ivas->sba_mode == SBA_MODE_SPAR && !hodirac_flag ) +#else + if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_FOA && st_ivas->ivas_format == SBA_FORMAT && !hodirac_flag ) +#endif { return IVAS_ERR_OK; } @@ -589,7 +597,11 @@ ivas_error ivas_dirac_dec_config( set_s( hDirAC->proto_index_diff, 0, hDirAC->num_outputs_diff ); hDirAC->sba_map_tc = sba_map_tc; +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR ) +#else + if ( st_ivas->ivas_format == SBA_FORMAT ) +#endif { if ( st_ivas->sba_order > SBA_FOA_ORDER && ivas_total_brate >= IVAS_512k ) { @@ -694,8 +706,11 @@ ivas_error ivas_dirac_dec_config( { hDirAC->num_protos_diff = 1; hDirAC->num_protos_dir = nchan_transport; - +#ifndef SBA_MODE_CLEAN_UP if ( ( st_ivas->sba_planar ) && ( !( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR ) ) ) +#else + if ( ( st_ivas->sba_planar ) && ( !( st_ivas->ivas_format == SBA_FORMAT ) ) ) +#endif { hDirAC->num_protos_dir++; } @@ -805,7 +820,11 @@ ivas_error ivas_dirac_dec_config( if ( flag_config == DIRAC_OPEN ) { hDirAC->hoa_decoder = NULL; +#ifndef SBA_MODE_CLEAN_UP if ( ( hDirAC->panningConf == DIRAC_PANNING_HOA3 ) || st_ivas->sba_mode == SBA_MODE_SPAR || ( nchan_transport > 2 ) ) +#else + if ( ( hDirAC->panningConf == DIRAC_PANNING_HOA3 ) || st_ivas->ivas_format == SBA_FORMAT || ( nchan_transport > 2 ) ) +#endif { if ( hDirAC->hOutSetup.is_loudspeaker_setup ) { @@ -1040,7 +1059,7 @@ ivas_error ivas_dirac_dec_config( { int16_t num_slots_in_subfr; num_slots_in_subfr = hDirAC->hConfig->dec_param_estim ? CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES : 1; - +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode == SBA_MODE_DIRAC ) { hDirAC->dirac_md_buffer_length = MAX_PARAM_SPATIAL_SUBFRAMES * num_slots_in_subfr; @@ -1051,12 +1070,15 @@ ivas_error ivas_dirac_dec_config( } else { +#endif hDirAC->dirac_md_buffer_length = ( MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_DIRAC_PARAM_DEC_SFR ) * num_slots_in_subfr; hDirAC->dirac_bs_md_write_idx = DELAY_DIRAC_PARAM_DEC_SFR * num_slots_in_subfr; hDirAC->spar_to_dirac_write_idx = DELAY_DIRAC_PARAM_DEC_SFR * num_slots_in_subfr; hDirAC->dirac_read_idx = 0; hDirAC->dirac_estimator_idx = 0; +#ifndef SBA_MODE_CLEAN_UP } +#endif #ifdef JBM_TSM_ON_TCS set_s( hDirAC->render_to_md_map, 0, MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME ); @@ -1096,7 +1118,11 @@ ivas_error ivas_dirac_dec_config( { int16_t num_slots_in_subfr; num_slots_in_subfr = hDirAC->hConfig->dec_param_estim ? CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES : 1; +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#else + if ( st_ivas->ivas_format == SBA_FORMAT ) +#endif { if ( ( hDirAC->hConfig->dec_param_estim_old != hDirAC->hConfig->dec_param_estim ) ) { @@ -1121,7 +1147,11 @@ ivas_error ivas_dirac_dec_config( { if ( st_ivas->hDecoderConfig->voip_active == 1 && st_ivas->hTcBuffer == NULL ) { +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode == SBA_MODE_DIRAC ) +#else + if ( st_ivas->ivas_format == SBA_FORMAT ) +#endif { int16_t nchan_to_allocate; @@ -1713,9 +1743,11 @@ void ivas_dirac_dec_read_BS( DIRAC_DEC_HANDLE hDirAC, /* i/o: decoder DirAC handle */ IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata */ int16_t *nb_bits, /* o : number of bits read */ - const SBA_MODE sba_mode, /* i : SBA mode */ - const int16_t hodirac_flag, /* i : flag to indicate HO-DirAC mode */ - int16_t *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ +#ifndef SBA_MODE_CLEAN_UP + const SBA_MODE sba_mode, /* i : SBA mode */ +#endif + const int16_t hodirac_flag, /* i : flag to indicate HO-DirAC mode */ + int16_t *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ ) { int16_t i, j, b, dir, orig_dirac_bands; @@ -1730,13 +1762,15 @@ void ivas_dirac_dec_read_BS( b = st->bit_stream[( st->next_bit_pos )--]; ( *nb_bits )++; +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode != SBA_MODE_SPAR ) { assert( ( b == 0 ) || ( hQMetaData->q_direction[0].cfg.start_band > 0 ) ); } - +#endif if ( b == 1 ) /* WB 4TCs condition, no other metadata to read*/ { +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode != SBA_MODE_SPAR ) { if ( hDirAC != NULL ) @@ -1761,6 +1795,7 @@ void ivas_dirac_dec_read_BS( } else { +#endif orig_dirac_bands = hQMetaData->q_direction[0].cfg.nbands; hQMetaData->sba_inactive_mode = 1; @@ -1775,8 +1810,11 @@ void ivas_dirac_dec_read_BS( } } +#ifndef SBA_MODE_CLEAN_UP *nb_bits += ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), 0, NULL, SBA_FORMAT, sba_mode ); - +#else + *nb_bits += ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), 0, NULL, SBA_FORMAT ); +#endif for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) { hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth[i] = hQMetaData->q_direction[0].band_data[1].azimuth[0]; @@ -1794,7 +1832,9 @@ void ivas_dirac_dec_read_BS( } hQMetaData->q_direction->cfg.nbands = orig_dirac_bands; +#ifndef SBA_MODE_CLEAN_UP } +#endif } else { @@ -1844,10 +1884,15 @@ void ivas_dirac_dec_read_BS( } } +#ifndef SBA_MODE_CLEAN_UP *nb_bits += ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), 0, NULL, SBA_FORMAT, sba_mode ); - +#else + *nb_bits += ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), 0, NULL, SBA_FORMAT ); +#endif +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode == SBA_MODE_SPAR ) { +#endif for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) { hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth[i] = hQMetaData->q_direction[0].band_data[1].azimuth[0]; @@ -1865,21 +1910,29 @@ void ivas_dirac_dec_read_BS( } hQMetaData->q_direction->cfg.nbands = orig_dirac_bands; +#ifndef SBA_MODE_CLEAN_UP } else { *nb_bits += SID_FORMAT_NBITS; } +#endif st->next_bit_pos = next_bit_pos_orig; } if ( hDirAC != NULL ) { +#ifndef SBA_MODE_CLEAN_UP ivas_qmetadata_to_dirac( hQMetaData, hDirAC, NULL, ivas_total_brate, sba_mode, hodirac_flag, dirac_to_spar_md_bands ); +#else + ivas_qmetadata_to_dirac( hQMetaData, hDirAC, NULL, ivas_total_brate, SBA_FORMAT, + hodirac_flag, + dirac_to_spar_md_bands ); +#endif } return; @@ -1897,9 +1950,13 @@ void ivas_qmetadata_to_dirac( DIRAC_DEC_HANDLE hDirAC, /* o : DirAC decoder structure */ MASA_DECODER_HANDLE hMasa, /* i : MASA decoder structure */ const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const SBA_MODE sba_mode, /* i : SBA mode */ - const int16_t hodirac_flag, /* i : flag to indicate HO-DirAC mode */ - int16_t *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ +#ifndef SBA_MODE_CLEAN_UP + const SBA_MODE sba_mode, /* i : SBA mode */ +#else + const IVAS_FORMAT ivas_format, /* i : IVAS format */ +#endif + const int16_t hodirac_flag, /* i : flag to indicate HO-DirAC mode */ + int16_t *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ ) { int16_t block, band; @@ -2016,7 +2073,11 @@ void ivas_qmetadata_to_dirac( nbands = hDirAC->band_grouping[hDirAC->hConfig->nbands]; band_grouping = hDirAC->band_grouping; +#ifndef SBA_MODE_CLEAN_UP if ( ivas_total_brate <= IVAS_SID_5k2 && sba_mode != SBA_MODE_SPAR ) +#else + if ( ivas_total_brate <= IVAS_SID_5k2 && ivas_format != SBA_FORMAT ) +#endif { /* SID/zero-frame: 1 direction, 5 bands, nblocks re-generated out of SID decoder*/ start_band = 0; @@ -2027,8 +2088,11 @@ void ivas_qmetadata_to_dirac( else { start_band = hDirAC->hConfig->enc_param_start_band; - +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode == SBA_MODE_SPAR ) +#else + if ( ivas_format == SBA_FORMAT ) +#endif { hDirAC->hConfig->nbands = IVAS_MAX_NUM_BANDS; } @@ -2119,7 +2183,11 @@ void ivas_qmetadata_to_dirac( band_end = band_grouping[band + 1]; tmp_write_idx_param_band = hDirAC->dirac_bs_md_write_idx; +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode == SBA_MODE_SPAR ) +#else + if ( ivas_format == SBA_FORMAT ) +#endif { qBand_idx = dirac_to_spar_md_bands[band] - start_band; } @@ -2415,7 +2483,11 @@ void ivas_dirac_dec( st_ivas->hTcBuffer->tc[n] = output_f[n]; } +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->nchan_transport == 1 && st_ivas->hSCE[0]->hCoreCoder[0] != NULL && st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && st_ivas->sba_mode != SBA_MODE_SPAR ) +#else + if ( st_ivas->nchan_transport == 1 && st_ivas->hSCE[0]->hCoreCoder[0] != NULL && st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && st_ivas->ivas_format != SBA_FORMAT ) +#endif { Decoder_State *st = st_ivas->hSCE[0]->hCoreCoder[0]; st_ivas->hTcBuffer->tc[nchan_transport] = &cng_td_buffer[0]; @@ -2445,7 +2517,11 @@ void ivas_dirac_dec( { st_ivas->hTcBuffer->tc[n] = NULL; } +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->nchan_transport == 1 && st_ivas->hSCE[0]->hCoreCoder[0] != NULL && st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && st_ivas->sba_mode != SBA_MODE_SPAR ) +#else + if ( st_ivas->nchan_transport == 1 && st_ivas->hSCE[0]->hCoreCoder[0] != NULL && st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && st_ivas->ivas_format != SBA_FORMAT ) +#endif { st_ivas->hTcBuffer->tc[nchan_transport] = NULL; } @@ -2608,7 +2684,11 @@ void ivas_dirac_dec_render_sf( hodirac_flag = ivas_get_hodirac_flag( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->sba_analysis_order ); +#ifdef SBA_MODE_CLEAN_UP + if ( st_ivas->hQMetaData != NULL && st_ivas->ivas_format != SBA_FORMAT ) +#else if ( st_ivas->hQMetaData != NULL && st_ivas->sba_mode != SBA_MODE_SPAR ) +#endif { coherence_flag = st_ivas->hQMetaData->coherence_flag; } @@ -2887,7 +2967,11 @@ void ivas_dirac_dec_render_sf( index_slot = subframe_idx * hDirAC->subframe_nbslots + slot_idx; #endif - if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#ifdef SBA_MODE_CLEAN_UP + if ( st_ivas->ivas_format == SBA_FORMAT ) +#else + if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#endif { for ( ch = 0; ch < nchan_transport; ch++ ) { @@ -2917,7 +3001,11 @@ void ivas_dirac_dec_render_sf( } /* CNG in DirAC, extra CLDFB ana for CNA*/ - if ( st_ivas->nchan_transport == 1 && st_ivas->hSCE[0]->hCoreCoder[0] != NULL && st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && st_ivas->sba_mode != SBA_MODE_SPAR ) +#ifdef SBA_MODE_CLEAN_UP + if ( st_ivas->nchan_transport == 1 && st_ivas->hSCE[0]->hCoreCoder[0] != NULL && st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && st_ivas->ivas_format != SBA_FORMAT ) +#else + if ( st_ivas->nchan_transport == 1 && st_ivas->hSCE[0]->hCoreCoder[0] != NULL && st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && st_ivas->sba_mode != SBA_MODE_SPAR ) +#endif { Decoder_State *st = st_ivas->hSCE[0]->hCoreCoder[0]; @@ -3427,7 +3515,11 @@ void ivas_dirac_dec_render_sf( #endif } } - else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#ifdef SBA_MODE_CLEAN_UP + else if ( st_ivas->ivas_format == SBA_FORMAT ) +#else + else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#endif { for ( ch = 0; ch < hDirAC->hOutSetup.nchan_out_woLFE; ch++ ) { diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index ddb6496fce7930e0dcd97fbcb297e0471643b5a1..b23207841709c995ef975c77d470299c96f9ab52 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -273,12 +273,18 @@ ivas_error ivas_dec_setup( if ( st_ivas->ini_frame > 0 && st_ivas->ivas_format == SBA_FORMAT ) { int16_t nchan_transport_old, nchan_transport; +#ifndef SBA_MODE_CLEAN_UP SBA_MODE sba_mode_old; sba_mode_old = ivas_sba_mode_select(); +#endif nchan_transport_old = st_ivas->nchan_transport; nchan_transport = ( st_ivas->sid_format == SID_SBA_2TC ) ? 2 : 1; +#ifdef SBA_MODE_CLEAN_UP + if ( ( nchan_transport_old != nchan_transport ) ) +#else if ( ( nchan_transport_old != nchan_transport ) || ( sba_mode_old != st_ivas->sba_mode ) ) +#endif { /*Setting the default bitrate for the reconfig function*/ if ( st_ivas->sid_format == SID_SBA_2TC ) @@ -287,7 +293,12 @@ ivas_error ivas_dec_setup( } else { +#ifdef SBA_MODE_CLEAN_UP + st_ivas->hDecoderConfig->ivas_total_brate = IVAS_24k4; +#else st_ivas->hDecoderConfig->ivas_total_brate = ( st_ivas->sba_mode == SBA_MODE_SPAR ) ? IVAS_24k4 : IVAS_13k2; + +#endif } if ( ( error = ivas_sba_dec_reconfigure( st_ivas ) ) != IVAS_ERR_OK ) @@ -408,7 +419,9 @@ static ivas_error ivas_read_format( else { st_ivas->ivas_format = SBA_FORMAT; +#ifndef SBA_MODE_CLEAN_UP st_ivas->sba_mode = ivas_sba_mode_select(); +#endif } ( *num_bits_read )++; break; @@ -477,6 +490,7 @@ static ivas_error ivas_read_format( { st_ivas->sba_analysis_order = SBA_FOA_ORDER; } +#ifndef SBA_MODE_CLEAN_UP if ( idx == 1 ) { st_ivas->sba_mode = SBA_MODE_SPAR; @@ -485,6 +499,7 @@ static ivas_error ivas_read_format( { st_ivas->sba_mode = SBA_MODE_DIRAC; } +#endif } /* reset bitstream handle to avoid BER detection after reading the 2400 kbps for ch0 */ @@ -579,7 +594,9 @@ ivas_error ivas_init_decoder_front( st_ivas->ism_mode = ISM_MODE_NONE; st_ivas->mc_mode = MC_MODE_NONE; +#ifndef SBA_MODE_CLEAN_UP st_ivas->sba_mode = SBA_MODE_NONE; +#endif st_ivas->sba_dirac_stereo_flag = 0; @@ -673,7 +690,11 @@ ivas_error ivas_init_decoder( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) { +#ifndef SBA_MODE_CLEAN_UP int16_t i, k, n; +#else + int16_t i, n; +#endif int16_t sce_id, cpe_id; int16_t numCldfbAnalyses, numCldfbSyntheses; #ifdef JBM_TSM_ON_TCS @@ -923,8 +944,10 @@ ivas_error ivas_init_decoder( } else if ( st_ivas->ivas_format == SBA_FORMAT ) { +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode == SBA_MODE_SPAR ) { +#endif if ( ( error = ivas_spar_dec_open( st_ivas, 0 ) ) != IVAS_ERR_OK ) { return error; @@ -940,13 +963,17 @@ ivas_error ivas_init_decoder( if ( ( error = ivas_dirac_sba_config( st_ivas->hQMetaData, +#ifndef SBA_MODE_CLEAN_UP &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, +#endif &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, +#ifndef SBA_MODE_CLEAN_UP st_ivas->sba_mode, +#endif ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ) ? IVAS_MAX_NUM_BANDS : ( IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND ) ) ) != IVAS_ERR_OK ) { return error; @@ -959,10 +986,12 @@ ivas_error ivas_init_decoder( return error; } +#ifndef SBA_MODE_CLEAN_UP for ( k = 0; k < DIRAC_MAX_NBANDS; k++ ) { st_ivas->hSpar->dirac_to_spar_md_bands[k] = st_ivas->hDirAC->dirac_to_spar_md_bands[k]; } +#endif st_ivas->hSpar->enc_param_start_band = st_ivas->hDirAC->hConfig->enc_param_start_band; } else @@ -982,6 +1011,7 @@ ivas_error ivas_init_decoder( st_ivas->hSpar->dirac_to_spar_md_bands, st_ivas->hQMetaData->useLowerBandRes, st_ivas->hSpar->enc_param_start_band, 0 ); } st_ivas->sba_dirac_stereo_flag = ivas_get_sba_dirac_stereo_flag( st_ivas ); +#ifndef SBA_MODE_CLEAN_UP } else /* SBA_MODE_DIRAC */ { @@ -992,10 +1022,16 @@ ivas_error ivas_init_decoder( st_ivas->sba_dirac_stereo_flag = ivas_get_sba_dirac_stereo_flag( st_ivas ); } +#endif } +#ifdef SBA_MODE_CLEAN_UP + if ( st_ivas->renderer_type != RENDERER_BINAURAL_MIXER_CONV && st_ivas->renderer_type != RENDERER_BINAURAL_MIXER_CONV_ROOM && + st_ivas->renderer_type != RENDERER_DISABLE && st_ivas->renderer_type != RENDERER_SBA_LINEAR_DEC && st_ivas->ivas_format != SBA_FORMAT ) +#else if ( st_ivas->renderer_type != RENDERER_BINAURAL_MIXER_CONV && st_ivas->renderer_type != RENDERER_BINAURAL_MIXER_CONV_ROOM && st_ivas->renderer_type != RENDERER_DISABLE && st_ivas->renderer_type != RENDERER_SBA_LINEAR_DEC && st_ivas->sba_mode != SBA_MODE_SPAR ) +#endif { if ( ( error = ivas_dirac_dec_open( st_ivas ) ) != IVAS_ERR_OK ) { @@ -1464,7 +1500,11 @@ ivas_error ivas_init_decoder( } /* CLDFB Interpolation weights */ +#ifdef SBA_MODE_CLEAN_UP + if ( st_ivas->ivas_format == SBA_FORMAT && !st_ivas->sba_dirac_stereo_flag && st_ivas->hDecoderConfig->nchan_out != 1 ) +#else if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR && !st_ivas->sba_dirac_stereo_flag && st_ivas->hDecoderConfig->nchan_out != 1 ) +#endif { ivas_spar_get_cldfb_gains( st_ivas->hSpar, st_ivas->cldfbAnaDec[0], st_ivas->cldfbSynDec[0], hDecoderConfig ); } @@ -1979,7 +2019,11 @@ void ivas_init_dec_get_num_cldfb_instances( } break; case RENDERER_DIRAC: +#ifdef SBA_MODE_CLEAN_UP + if ( st_ivas->ivas_format == SBA_FORMAT ) +#else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#endif { *numCldfbAnalyses = st_ivas->hSpar->hFbMixer->fb_cfg->num_in_chans; @@ -1996,7 +2040,11 @@ void ivas_init_dec_get_num_cldfb_instances( *numCldfbSyntheses = MAX_OUTPUT_CHANNELS; } } +#ifdef SBA_MODE_CLEAN_UP + if ( st_ivas->ivas_format != SBA_FORMAT ) +#else if ( st_ivas->sba_mode != SBA_MODE_SPAR ) +#endif { if ( st_ivas->nchan_transport > 2 && st_ivas->sba_planar ) { @@ -2037,7 +2085,11 @@ void ivas_init_dec_get_num_cldfb_instances( case RENDERER_BINAURAL_MIXER_CONV_ROOM: case RENDERER_BINAURAL_FASTCONV: case RENDERER_BINAURAL_FASTCONV_ROOM: +#ifdef SBA_MODE_CLEAN_UP + if ( st_ivas->ivas_format == SBA_FORMAT ) +#else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#endif { if ( st_ivas->sba_dirac_stereo_flag ) { diff --git a/lib_dec/ivas_jbm_dec.c b/lib_dec/ivas_jbm_dec.c index 0e112a84df666e6f2364bb1005070854542c8e74..987c55f2218b8614f00d39fbc8284d9182bfde88 100644 --- a/lib_dec/ivas_jbm_dec.c +++ b/lib_dec/ivas_jbm_dec.c @@ -184,13 +184,21 @@ ivas_error ivas_jbm_dec_tc( set_s( nb_bits_metadata, 0, MAX_SCE ); /* read parameters from the bitstream */ +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->hQMetaData != NULL && st_ivas->sba_mode != SBA_MODE_SPAR ) +#else + if ( st_ivas->hQMetaData != NULL && st_ivas->ivas_format != SBA_FORMAT ) +#endif { st = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0] : st_ivas->hCPE[0]->hCoreCoder[0]; if ( st_ivas->ivas_format == SBA_FORMAT ) { +#ifndef SBA_MODE_CLEAN_UP ivas_dirac_dec_read_BS( ivas_total_brate, st, st_ivas->hDirAC, st_ivas->hQMetaData, &nb_bits_metadata[0], st_ivas->sba_mode, hodirac_flag, 0 ); +#else + ivas_dirac_dec_read_BS( ivas_total_brate, st, st_ivas->hDirAC, st_ivas->hQMetaData, &nb_bits_metadata[0], hodirac_flag, 0 ); +#endif } else { @@ -200,13 +208,23 @@ ivas_error ivas_jbm_dec_tc( } } } +#ifndef SBA_MODE_CLEAN_UP else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#else + else if ( st_ivas->ivas_format == SBA_FORMAT ) +#endif { +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->hQMetaData != NULL ) { st = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0] : st_ivas->hCPE[0]->hCoreCoder[0]; +#ifndef SBA_MODE_CLEAN_UP ivas_dirac_dec_read_BS( ivas_total_brate, st, st_ivas->hDirAC, st_ivas->hQMetaData, &nb_bits_metadata[0], st_ivas->sba_mode, hodirac_flag, st_ivas->hSpar->dirac_to_spar_md_bands ); +#else + ivas_dirac_dec_read_BS( ivas_total_brate, st, st_ivas->hDirAC, st_ivas->hQMetaData, &nb_bits_metadata[0], hodirac_flag, st_ivas->hSpar->dirac_to_spar_md_bands ); +#endif } +#endif if ( ( error = ivas_spar_dec( st_ivas, nb_bits_metadata ) ) != IVAS_ERR_OK ) { @@ -252,7 +270,11 @@ ivas_error ivas_jbm_dec_tc( { nchan_remapped = nchan_out; +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#else + if ( st_ivas->ivas_format == SBA_FORMAT ) +#endif { ivas_agc_dec_process( st_ivas->hSpar->hAgcDec, output, output, st_ivas->hSpar->hMdDec->spar_md_cfg.nchan_transport, output_frame ); @@ -283,11 +305,19 @@ ivas_error ivas_jbm_dec_tc( { nchan_remapped = ivas_sba_remapTCs( output, st_ivas, output_frame ); +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode == SBA_MODE_SPAR && ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) +#else + if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) +#endif { ivas_sba_mix_matrix_determiner( st_ivas->hSpar, output, st_ivas->bfi, nchan_remapped, output_frame ); } +#ifndef SBA_MODE_CLEAN_UP else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#else + else +#endif { ivas_spar_dec_agc_pca( st_ivas, output, output_frame ); } @@ -758,7 +788,11 @@ ivas_error ivas_jbm_dec_render( { ivas_dirac_dec_binaural_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output ); } +#ifndef SBA_MODE_CLEAN_UP else if ( st_ivas->sba_mode == SBA_MODE_DIRAC || st_ivas->ivas_format == MASA_FORMAT ) +#else + else if ( st_ivas->ivas_format == MASA_FORMAT ) +#endif { if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_DEC ) { @@ -1284,8 +1318,12 @@ int16_t ivas_jbm_dec_get_num_tc_channels( } if ( st_ivas->ivas_format == SBA_FORMAT ) { +#ifndef SBA_MODE_CLEAN_UP if ( ( st_ivas->sba_mode != SBA_MODE_SPAR && st_ivas->sba_planar && num_tc >= 3 ) || ( ( st_ivas->sba_mode == SBA_MODE_SPAR ) && num_tc == 3 ) ) +#else + if ( ( st_ivas->sba_planar && num_tc >= 3 ) || ( num_tc == 3 ) ) +#endif { num_tc++; } @@ -1805,7 +1843,11 @@ TC_BUFFER_MODE ivas_jbm_dec_get_tc_buffer_mode( } break; case RENDERER_SBA_LINEAR_DEC: +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR && ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_MONO || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_STEREO ) ) +#else + if ( st_ivas->ivas_format == SBA_FORMAT && ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_MONO || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_STEREO ) ) +#endif { buffer_mode = TC_BUFFER_MODE_BUFFER; } diff --git a/lib_dec/ivas_masa_dec.c b/lib_dec/ivas_masa_dec.c index 401e041894797ab2e2d572ba76e0d8c6b44932e7..8d6cebe036d31c4b4182ef6e1f3b259feaad6f2c 100644 --- a/lib_dec/ivas_masa_dec.c +++ b/lib_dec/ivas_masa_dec.c @@ -287,8 +287,11 @@ ivas_error ivas_masa_decode( } tmp_elem_mode = -1; +#ifndef SBA_MODE_CLEAN_UP *nb_bits_read += ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), st_ivas->nchan_transport, &tmp_elem_mode, ivas_format, SBA_MODE_NONE ); - +#else + *nb_bits_read += ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), st_ivas->nchan_transport, &tmp_elem_mode, ivas_format ); +#endif if ( st_ivas->nchan_transport == 2 ) { assert( st_ivas->nCPE > 0 ); @@ -309,7 +312,11 @@ ivas_error ivas_masa_decode( if ( st_ivas->hDirAC != NULL ) { ivas_qmetadata_to_dirac( hQMetaData, st_ivas->hDirAC, hMasa, ivas_total_brate, +#ifndef SBA_MODE_CLEAN_UP SBA_MODE_NONE, +#else + ivas_format, +#endif 0, 0 ); } diff --git a/lib_dec/ivas_output_config.c b/lib_dec/ivas_output_config.c index e1c2621ea81fbecaa9a1c157a6c37c0467ddb156..52891aaf8783761909311291609cf8fceb7b9c04 100644 --- a/lib_dec/ivas_output_config.c +++ b/lib_dec/ivas_output_config.c @@ -316,9 +316,13 @@ void ivas_renderer_select( else if ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == SBA_FORMAT ) { *renderer_type = RENDERER_DIRAC; - +#ifdef SBA_MODE_CLEAN_UP + if ( st_ivas->ivas_format == SBA_FORMAT && + ( output_config != AUDIO_CONFIG_5_1 && output_config != AUDIO_CONFIG_5_1_2 && output_config != AUDIO_CONFIG_5_1_4 && output_config != AUDIO_CONFIG_7_1 && output_config != AUDIO_CONFIG_7_1_4 && output_config != AUDIO_CONFIG_LS_CUSTOM && output_config != AUDIO_CONFIG_MONO && output_config != AUDIO_CONFIG_STEREO ) ) +#else if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR && ( output_config != AUDIO_CONFIG_5_1 && output_config != AUDIO_CONFIG_5_1_2 && output_config != AUDIO_CONFIG_5_1_4 && output_config != AUDIO_CONFIG_7_1 && output_config != AUDIO_CONFIG_7_1_4 && output_config != AUDIO_CONFIG_LS_CUSTOM && output_config != AUDIO_CONFIG_MONO && output_config != AUDIO_CONFIG_STEREO ) ) +#endif { if ( output_config == AUDIO_CONFIG_HOA2 || output_config == AUDIO_CONFIG_FOA ) { diff --git a/lib_dec/ivas_qmetadata_dec.c b/lib_dec/ivas_qmetadata_dec.c index cc7335c221aca81c5b8794a15dc22bd0adf6c8f2..3c077a5d90d5ac85652e5e7feff1f948e6dd503d 100644 --- a/lib_dec/ivas_qmetadata_dec.c +++ b/lib_dec/ivas_qmetadata_dec.c @@ -1264,8 +1264,11 @@ int16_t ivas_qmetadata_dec_sid_decode( int16_t *index, /* i/o: bitstream position */ const int16_t nchan_transport, /* i : number of transport channels */ int16_t *element_mode, /* o : element mode */ - const int16_t ivas_format, /* i : IVAS format */ - const SBA_MODE sba_mode /* i : SBA mode */ + const int16_t ivas_format /* i : IVAS format */ +#ifndef SBA_MODE_CLEAN_UP + , + const SBA_MODE sba_mode /* i : SBA mode */ +#endif ) { int16_t b, m, i; @@ -1296,10 +1299,13 @@ int16_t ivas_qmetadata_dec_sid_decode( if ( ivas_format == SBA_FORMAT ) { +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode == SBA_MODE_SPAR ) { +#endif /* TODO: still use old sid frame size to keep bitexactness */ metadata_sid_bits = (int16_t) ( 5000 /*IVAS_SID_5k2*/ - SID_2k40 ) / FRAMES_PER_SEC - ( SPAR_DTX_BANDS * 18 ) - 1; /* -1 for inactive mode header bit*/ +#ifndef SBA_MODE_CLEAN_UP } else { @@ -1307,6 +1313,7 @@ int16_t ivas_qmetadata_dec_sid_decode( /* TODO: still use old sid frame size to keep bitexactness */ metadata_sid_bits = ( 4400 /*IVAS_SID_5k2*/ - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; } +#endif } else { @@ -1332,8 +1339,11 @@ int16_t ivas_qmetadata_dec_sid_decode( /* Fix configuration for SID */ q_direction = &hQMetaData->q_direction[0]; /* only 1 direction */ - +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode == SBA_MODE_SPAR ) +#else + if ( ivas_format == SBA_FORMAT ) +#endif { nbands = DIRAC_DTX_BANDS; /* only 2 bands transmitted */ } @@ -1346,7 +1356,11 @@ int16_t ivas_qmetadata_dec_sid_decode( start_band = 0; /* start from band 0 */ /* Read 2D signaling*/ +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode != SBA_MODE_SPAR ) +#else + if ( ivas_format != SBA_FORMAT ) +#endif { q_direction->not_in_2D = bitstream[( *index )--]; } @@ -1431,6 +1445,7 @@ int16_t ivas_qmetadata_dec_sid_decode( } } /* TODO: temporary hack to keep BE */ +#ifndef SBA_MODE_CLEAN_UP if ( ivas_format == SBA_FORMAT ) { if ( sba_mode != SBA_MODE_SPAR ) @@ -1439,6 +1454,9 @@ int16_t ivas_qmetadata_dec_sid_decode( } } else +#else + if ( ivas_format != SBA_FORMAT ) +#endif { metadata_sid_bits = ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; } diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c old mode 100755 new mode 100644 index dd7174eae04d07205f89132babdab6b69c5be182..2d4c4cb2ab46d4eb2d91a5feff23f7dafffc6648 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -59,7 +59,11 @@ void ivas_sba_set_cna_cng_flag( { int16_t n, cpe_id; +#ifdef SBA_MODE_CLEAN_UP + if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->nchan_transport == 1 ) +#else if ( st_ivas->sba_mode == SBA_MODE_SPAR && st_ivas->nchan_transport == 1 ) +#endif { /* skip as done in init function */ /* st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag = 0; */ /* Todo: Check if these can be enabled */ @@ -296,13 +300,17 @@ ivas_error ivas_sba_dec_reconfigure( if ( ( error = ivas_dirac_sba_config( st_ivas->hQMetaData, +#ifndef SBA_MODE_CLEAN_UP &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, +#endif &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, +#ifndef SBA_MODE_CLEAN_UP st_ivas->sba_mode, +#endif ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ) ? IVAS_MAX_NUM_BANDS : ( IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND ) ) ) != IVAS_ERR_OK ) @@ -319,7 +327,9 @@ ivas_error ivas_sba_dec_reconfigure( if ( st_ivas->hDirAC != NULL ) { +#ifndef SBA_MODE_CLEAN_UP mvs2s( st_ivas->hDirAC->dirac_to_spar_md_bands, st_ivas->hSpar->dirac_to_spar_md_bands, DIRAC_MAX_NBANDS ); +#endif st_ivas->hSpar->enc_param_start_band = st_ivas->hDirAC->hConfig->enc_param_start_band; } @@ -386,7 +396,11 @@ ivas_error ivas_sba_dec_reconfigure( { tc_nchan_to_allocate = 2 * BINAURAL_CHANNELS; } +#ifndef SBA_MODE_CLEAN_UP else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#else + else if ( st_ivas->ivas_format == SBA_FORMAT ) +#endif { tc_nchan_to_allocate = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); @@ -432,12 +446,20 @@ ivas_error ivas_sba_dec_digest_tc( error = IVAS_ERR_OK; /* set the md map */ +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->hDirAC && !( st_ivas->renderer_type == RENDERER_SBA_LINEAR_DEC && st_ivas->sba_mode == SBA_MODE_DIRAC ) ) +#else + if ( st_ivas->hDirAC ) +#endif { ivas_dirac_dec_set_md_map( st_ivas, nCldfbSlots ); } +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#else + if ( st_ivas->ivas_format == SBA_FORMAT ) +#endif { ivas_spar_dec_digest_tc( st_ivas, st_ivas->nchan_transport, nCldfbSlots, nSamplesForRendering ); } @@ -478,7 +500,11 @@ ivas_error ivas_sba_dec_digest_tc( } /* if we have a late CNG generation, do it here */ +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->nchan_transport == 1 && st_ivas->hSCE[0]->hCoreCoder[0] != NULL && st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && st_ivas->sba_mode != SBA_MODE_SPAR ) +#else + if ( st_ivas->nchan_transport == 1 && st_ivas->hSCE[0]->hCoreCoder[0] != NULL && st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && st_ivas->ivas_format == SBA_FORMAT ) +#endif { Decoder_State *st = st_ivas->hSCE[0]->hCoreCoder[0]; generate_masking_noise_lb_dirac( st->hFdCngDec->hFdCngCom, st_ivas->hTcBuffer->tc[1], nCldfbSlots, st->cna_dirac_flag && st->flag_cna ); diff --git a/lib_dec/ivas_sba_dirac_stereo_dec.c b/lib_dec/ivas_sba_dirac_stereo_dec.c index 3ae546193244df0d048fa8579a0048aabf2ef25b..13f1401f8e589be0b01f9d165b238261a56bd043 100644 --- a/lib_dec/ivas_sba_dirac_stereo_dec.c +++ b/lib_dec/ivas_sba_dirac_stereo_dec.c @@ -63,7 +63,11 @@ int16_t ivas_get_sba_dirac_stereo_flag( if ( st_ivas->ivas_format == SBA_FORMAT || ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ) { +#ifdef SBA_MODE_CLEAN_UP + if ( st_ivas->ivas_format == SBA_FORMAT ) +#else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#endif { if ( output_config == AUDIO_CONFIG_STEREO || ( output_config == AUDIO_CONFIG_MONO && st_ivas->nchan_transport == 1 ) ) { @@ -860,8 +864,12 @@ void ivas_sba_dirac_stereo_dec( memOffset = NS2SA( output_frame * FRAMES_PER_SEC, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ); ivas_sba_dirac_stereo_config( hStereoDft->hConfig ); +#ifdef SBA_MODE_CLEAN_UP + hStereoDft->nbands = ivas_sba_dirac_stereo_band_config( hStereoDft->band_limits, st_ivas->hDecoderConfig->output_Fs, hStereoDft->NFFT, ( st_ivas->ivas_format == SBA_FORMAT && !mcmasa ) ); +#else hStereoDft->nbands = ivas_sba_dirac_stereo_band_config( hStereoDft->band_limits, st_ivas->hDecoderConfig->output_Fs, hStereoDft->NFFT, ( st_ivas->sba_mode == SBA_MODE_SPAR && !mcmasa ) ); +#endif stereo_dft_dec_update( hStereoDft, output_frame, 1 /*st_ivas->sba_dirac_stereo_flag*/ ); if ( st_ivas->nchan_transport > 1 ) { @@ -883,12 +891,22 @@ void ivas_sba_dirac_stereo_dec( } /* mapping of DirAC parameters (azimuth, elevation, diffuseness) to DFT Stereo parameters (side gain, prediction gain) */ +#ifdef SBA_MODE_CLEAN_UP + map_params_dirac_to_stereo( hStereoDft, st_ivas->hQMetaData, tmp_synth, DFT[0], + st_ivas->ivas_format == MC_FORMAT, + ( st_ivas->ivas_format != SBA_FORMAT || mcmasa ) ? hSCE->hCoreCoder[0]->L_frame : output_frame, + ( st_ivas->ivas_format != SBA_FORMAT || mcmasa ) ); +#else map_params_dirac_to_stereo( hStereoDft, st_ivas->hQMetaData, tmp_synth, DFT[0], st_ivas->ivas_format == MC_FORMAT, ( st_ivas->sba_mode != SBA_MODE_SPAR || mcmasa ) ? hSCE->hCoreCoder[0]->L_frame : output_frame, ( st_ivas->sba_mode != SBA_MODE_SPAR || mcmasa ) ); - +#endif +#ifdef SBA_MODE_CLEAN_UP + if ( st_ivas->ivas_format == SBA_FORMAT && !mcmasa ) +#else if ( st_ivas->sba_mode == SBA_MODE_SPAR && !mcmasa ) +#endif { set_f( hStereoDft->res_pred_gain, 1.f, 3 * STEREO_DFT_BAND_MAX ); } @@ -934,9 +952,13 @@ void ivas_sba_dirac_stereo_dec( /* upmix ACELP BWE */ ivas_sba_dirac_stereo_compute_hb_gain( hStereoDft, hb_gain ); +#ifdef SBA_MODE_CLEAN_UP + ivas_sba_dirac_stereo_upmix_hb( hb_synth_stereo, hSCE->save_hb_synth, hb_gain, output_frame, + ( st_ivas->ivas_format != SBA_FORMAT || mcmasa ), sba_mono_flag, hSCE->hCoreCoder[0]->bwidth, hStereoDft ); +#else ivas_sba_dirac_stereo_upmix_hb( hb_synth_stereo, hSCE->save_hb_synth, hb_gain, output_frame, ( st_ivas->sba_mode != SBA_MODE_SPAR || mcmasa ), sba_mono_flag, hSCE->hCoreCoder[0]->bwidth, hStereoDft ); - +#endif /* add HB to ACELP core */ v_add( output[0], hb_synth_stereo[0], output[0], output_frame ); @@ -945,7 +967,12 @@ void ivas_sba_dirac_stereo_dec( v_add( output[1], hb_synth_stereo[1], output[1], output_frame ); /* apply TD Stereo Filling as is done in ICBWE */ +#ifdef SBA_MODE_CLEAN_UP + ivas_sba_dirac_stereo_apply_td_stefi( hStereoDft, output, output_frame, ( st_ivas->ivas_format == SBA_FORMAT && !mcmasa ) ); +#else ivas_sba_dirac_stereo_apply_td_stefi( hStereoDft, output, output_frame, ( st_ivas->sba_mode == SBA_MODE_SPAR && !mcmasa ) ); + +#endif } } diff --git a/lib_dec/ivas_sba_rendering_internal.c b/lib_dec/ivas_sba_rendering_internal.c index ed2915aacc677a3eea86d474bdc5c3a5f31ec0f9..dd4af01ccf68b1fa14298f6f54e60e8f1491c2f8 100644 --- a/lib_dec/ivas_sba_rendering_internal.c +++ b/lib_dec/ivas_sba_rendering_internal.c @@ -254,15 +254,21 @@ int16_t ivas_sba_remapTCs( #endif nchan_remapped = st_ivas->nchan_transport; +#ifdef SBA_MODE_CLEAN_UP + if ( nchan_remapped == 3 ) +#else if ( ( st_ivas->sba_mode != SBA_MODE_SPAR && st_ivas->sba_planar && nchan_remapped >= 3 ) || ( ( st_ivas->sba_mode == SBA_MODE_SPAR ) && nchan_remapped == 3 ) ) +#endif { nchan_remapped++; +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode != SBA_MODE_SPAR ) { assert( ( ( st_ivas->nchan_transport == 3 ) || ( st_ivas->nchan_transport == 5 ) || ( st_ivas->nchan_transport == 7 ) ) && "Number of channels must be odd for SBA planar!" ); } +#endif if ( nchan_remapped == 4 ) { @@ -289,11 +295,12 @@ int16_t ivas_sba_remapTCs( } } +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode != SBA_MODE_SPAR ) { ivas_sba_zero_vert_comp( sba_data, st_ivas->sba_analysis_order, st_ivas->sba_planar, output_frame ); } - +#endif return ( nchan_remapped ); } diff --git a/lib_dec/ivas_sce_dec.c b/lib_dec/ivas_sce_dec.c index 97a9b8189561c02b52568353f64d4d0cde103382..f405f50c04ac0e8fe294fe9a4aee07155d345df2 100755 --- a/lib_dec/ivas_sce_dec.c +++ b/lib_dec/ivas_sce_dec.c @@ -149,8 +149,13 @@ ivas_error ivas_sce_dec( st->codec_mode = MODE1; /* set "bits_frame_nominal" */ +#ifndef SBA_MODE_CLEAN_UP if ( ( st_ivas->hQMetaData != NULL ) && ( st_ivas->sba_mode != SBA_MODE_SPAR ) ) +#else + if ( ( st_ivas->hQMetaData != NULL ) && + ( st_ivas->ivas_format != SBA_FORMAT ) ) +#endif { if ( st_ivas->mc_mode == MC_MODE_MCMASA && ivas_total_brate >= MCMASA_SEPARATE_BRATE ) { @@ -161,7 +166,11 @@ ivas_error ivas_sce_dec( st->bits_frame_nominal = st_ivas->hQMetaData->bits_frame_nominal; } } +#ifndef SBA_MODE_CLEAN_UP else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#else + else if ( st_ivas->ivas_format == SBA_FORMAT ) +#endif { st->bits_frame_nominal = (int16_t) ( st_ivas->hSpar->core_nominal_brate / FRAMES_PER_SEC ); } diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index a2cdfe1562a92d543332a6bc2953830e10bdf751..0d028b2359a02451262458da285d2d94126e103b 100755 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -127,8 +127,13 @@ ivas_error ivas_spar_dec_open( /* set FB config. */ active_w_mixing = -1; +#ifndef SBA_MODE_CLEAN_UP if ( ( error = ivas_fb_set_cfg( &fb_cfg, SBA_FORMAT, SBA_MODE_SPAR, num_channels_internal, num_channels_internal, active_w_mixing, output_Fs, 0 ) ) != IVAS_ERR_OK ) +#else + if ( ( error = ivas_fb_set_cfg( &fb_cfg, SBA_FORMAT, num_channels_internal, num_channels_internal, active_w_mixing, output_Fs, + 0 ) ) != IVAS_ERR_OK ) +#endif { return error; } @@ -321,6 +326,16 @@ ivas_error ivas_spar_dec( bit_stream_orig = st0->bit_stream; next_bit_pos_orig = st0->next_bit_pos; +#ifdef SBA_MODE_CLEAN_UP + /* read DirAC bitstream */ + if ( st_ivas->hQMetaData != NULL ) + { + ivas_dirac_dec_read_BS( hDecoderConfig->ivas_total_brate, st0, st_ivas->hDirAC, st_ivas->hQMetaData, nb_bits_read, + ivas_get_hodirac_flag( hDecoderConfig->ivas_total_brate, st_ivas->sba_analysis_order ), + st_ivas->hSpar->dirac_to_spar_md_bands ); + } +#endif + last_bit_pos = (int16_t) ( ( hDecoderConfig->ivas_total_brate / FRAMES_PER_SEC ) - 1 ); if ( !st0->bfi && hDecoderConfig->ivas_total_brate == IVAS_SID_5k2 ) { diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index 834ce32ab5221525f1719942de5fd3f90e432c39..aacaa7aa0fec389b47261af8833f31569ab8788e 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -732,7 +732,9 @@ typedef struct ivas_dirac_dec_data_structure float power_ratios[MAX_PARAM_ISM_NBANDS][MAX_PARAM_ISM_NBLOCKS][MAX_PARAM_ISM_WAVE]; PARAM_ISM_RENDERING_HANDLE hParamIsmRendering; IVAS_FB_MIXER_HANDLE hFbMdft; +#ifndef SBA_MODE_CLEAN_UP int16_t dirac_to_spar_md_bands[DIRAC_MAX_NBANDS]; +#endif const int16_t *sba_map_tc; } DIRAC_DEC_DATA, *DIRAC_DEC_HANDLE; @@ -1313,7 +1315,9 @@ typedef struct Decoder_Struct ISM_MODE ism_mode; /* ISM format mode */ int16_t nchan_ism; /* number of ISM channels */ +#ifndef SBA_MODE_CLEAN_UP SBA_MODE sba_mode; /* SBA format mode */ +#endif MC_MODE mc_mode; /* MC format mode */ int16_t sba_order; /* Ambisonic (SBA) order */ int16_t sba_planar; /* Ambisonic (SBA) planar flag */ diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 95fd02a0c136dc0cc8960fd43be19b73d20bb214..86ec47068072b7113bd12960b3407077660a90f9 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -231,7 +231,9 @@ ivas_error IVAS_DEC_Open( st_ivas->writeFECoffset = 0; st_ivas->ism_mode = ISM_MODE_NONE; +#ifndef SBA_MODE_CLEAN_UP st_ivas->sba_mode = SBA_MODE_NONE; +#endif st_ivas->mc_mode = MC_MODE_NONE; st_ivas->sba_order = 0; diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c index ab4a36cb5f90bf42798d70b08adeea7a4269107e..c4dc434d1c2b0dcbbe6c3aefa0a5cb3ec6e44bab 100644 --- a/lib_enc/ivas_cpe_enc.c +++ b/lib_enc/ivas_cpe_enc.c @@ -467,7 +467,11 @@ ivas_error ivas_cpe_enc( { if ( hCPE->element_mode == IVAS_CPE_DFT || hCPE->element_mode == IVAS_CPE_TD ) { +#ifndef SBA_MODE_CLEAN_UP reset_metadata_spatial( ivas_format, hCPE->hMetaData, hCPE->element_brate, &tmp, sts[0]->core_brate, nb_bits_metadata, st_ivas->sba_mode ); +#else + reset_metadata_spatial( ivas_format, hCPE->hMetaData, hCPE->element_brate, &tmp, sts[0]->core_brate, nb_bits_metadata ); +#endif } } @@ -477,9 +481,17 @@ ivas_error ivas_cpe_enc( stereoFdCngCoherence( sts, hCPE->last_element_mode, fft_buff ); /* Reset metadata */ +#ifndef SBA_MODE_CLEAN_UP if ( sts[0]->cng_sba_flag || ( ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR ) ) +#else + if ( sts[0]->cng_sba_flag || ( ivas_format == SBA_FORMAT ) ) +#endif { +#ifndef SBA_MODE_CLEAN_UP reset_metadata_spatial( ivas_format, hCPE->hMetaData, hCPE->element_brate, &tmp, sts[0]->core_brate, nb_bits_metadata, st_ivas->sba_mode ); +#else + reset_metadata_spatial( ivas_format, hCPE->hMetaData, hCPE->element_brate, &tmp, sts[0]->core_brate, nb_bits_metadata ); +#endif } } diff --git a/lib_enc/ivas_dirac_enc.c b/lib_enc/ivas_dirac_enc.c index 283c51c4be7388e1c86ee0040ebf065576360b05..de15725b6514d2669b1a5ddf9a16f6728dc7f08c 100644 --- a/lib_enc/ivas_dirac_enc.c +++ b/lib_enc/ivas_dirac_enc.c @@ -62,9 +62,13 @@ ivas_error ivas_dirac_enc_open( ) { int16_t i, j; +#ifndef SBA_MODE_CLEAN_UP int32_t input_Fs; +#endif DIRAC_ENC_HANDLE hDirAC; +#ifndef SBA_MODE_CLEAN_UP IVAS_FB_CFG *fb_cfg; +#endif int32_t dirac_slot_ns; ivas_error error; @@ -93,7 +97,9 @@ ivas_error ivas_dirac_enc_open( *-----------------------------------------------------------------*/ st_ivas->hDirAC = hDirAC; +#ifndef SBA_MODE_CLEAN_UP input_Fs = st_ivas->hEncoderConfig->input_Fs; +#endif if ( ( error = ivas_dirac_config( (void *) st_ivas, ENC ) ) != IVAS_ERR_OK ) { @@ -101,9 +107,12 @@ ivas_error ivas_dirac_enc_open( } /* set FB config. */ +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode == SBA_MODE_SPAR ) { +#endif hDirAC->hFbMixer = NULL; +#ifndef SBA_MODE_CLEAN_UP } else { @@ -120,7 +129,7 @@ ivas_error ivas_dirac_enc_open( return error; } } - +#endif for ( i = 0; i < DIRAC_MAX_NBANDS + 1; i++ ) { @@ -130,6 +139,7 @@ ivas_error ivas_dirac_enc_open( dirac_slot_ns = DIRAC_SLOT_ENC_NS; /* initialize delay for SPAR/DirAC delay synchronization */ +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode == SBA_MODE_DIRAC ) { hDirAC->num_samples_synchro_delay = NS2SA( input_Fs, IVAS_FB_ENC_DELAY_NS ); @@ -152,6 +162,7 @@ ivas_error ivas_dirac_enc_open( hDirAC->sba_synchro_buffer[i] = NULL; } } +#endif /* intensity 3-dim */ for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) @@ -207,13 +218,15 @@ ivas_error ivas_dirac_enc_open( hDirAC->index_buffer_intensity = 0; st_ivas->hDirAC = hDirAC; - +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode == SBA_MODE_SPAR ) { mvs2s( st_ivas->hDirAC->dirac_to_spar_md_bands, st_ivas->hSpar->dirac_to_spar_md_bands, DIRAC_MAX_NBANDS ); +#endif st_ivas->hSpar->enc_param_start_band = st_ivas->hDirAC->hConfig->enc_param_start_band; +#ifndef SBA_MODE_CLEAN_UP } - +#endif return error; } @@ -286,7 +299,7 @@ void ivas_dirac_enc_close( { ivas_FB_mixer_close( &hDirAC->hFbMixer, input_Fs, 0 ); } - +#ifndef SBA_MODE_CLEAN_UP for ( i = 0; i < DIRAC_MAX_ANA_CHANS; i++ ) { if ( hDirAC->sba_synchro_buffer[i] != NULL ) @@ -295,7 +308,7 @@ void ivas_dirac_enc_close( hDirAC->sba_synchro_buffer[i] = NULL; } } - +#endif /* intensity 3-dim */ for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) { @@ -336,7 +349,7 @@ void ivas_dirac_enc_close( return; } - +#ifndef SBA_MODE_CLEAN_UP /*------------------------------------------------------------------------- * ivas_dirac_enc() * @@ -462,8 +475,12 @@ void ivas_dirac_enc( } /* encode SID parameters */ +#ifndef SBA_MODE_CLEAN_UP ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1, SBA_FORMAT, SBA_MODE_DIRAC ); +#else + ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1, SBA_FORMAT ); +#endif /* restore original metadata */ hDirAC->hConfig->nbands = nbands; hQMetaData->q_direction[0].cfg.nbands = nbands; @@ -481,7 +498,11 @@ void ivas_dirac_enc( push_next_indice( hMetaData, 0, 1 ); /* encode SID parameters */ +#ifndef SBA_MODE_CLEAN_UP ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1, SBA_FORMAT, SBA_MODE_DIRAC ); +#else + ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1, SBA_FORMAT ); +#endif } } } @@ -546,7 +567,121 @@ void ivas_dirac_enc_spar_delay_synchro( return; } +#else +/*------------------------------------------------------------------------- + * ivas_dirac_enc() + * + * DirAC Encoder + * + *------------------------------------------------------------------------*/ + +void ivas_dirac_enc( + DIRAC_ENC_HANDLE hDirAC, /* i/o: encoder DirAC handle */ + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ + BSTR_ENC_HANDLE hMetaData, /* i/o: Metadata bitstream handle */ + float data_f[][L_FRAME48k], /* i/o: SBA channels */ + float **ppIn_FR_real, /* o : real freq domain values */ + float **ppIn_FR_imag, /* o : imag freq domain values */ + const int16_t input_frame, /* i : input frame length */ + const int16_t dtx_vad, /* i : DTX vad flag */ + const IVAS_FORMAT ivas_format, /* i : ivas format */ + int16_t hodirac_flag ) /* i : hodirac flag */ +{ + int16_t orig_dirac_bands; + float dir[3], avg_dir[3]; + float energySum, vecLen; + int16_t i, j, b, i_ts; + push_wmops( "ivas_dirac_enc" ); + + ivas_dirac_param_est_enc( hDirAC, hQMetaData->q_direction, hQMetaData->useLowerRes, data_f, ppIn_FR_real, ppIn_FR_imag, input_frame, ivas_format, hodirac_flag, hodirac_flag ? HOA2_CHANNELS : FOA_CHANNELS ); + + if ( hQMetaData->q_direction->cfg.nbands > 0 ) + { + orig_dirac_bands = hQMetaData->q_direction[0].cfg.nbands; + if ( dtx_vad == 1 ) + { + /* WB 4TC mode bit : disable for now*/ + push_next_indice( hMetaData, 0, 1 ); + + ivas_qmetadata_enc_encode( hMetaData, hQMetaData, hodirac_flag ); + } + else + { + hQMetaData->q_direction[0].cfg.nbands = DIRAC_DTX_BANDS; + + /* compute directions */ + for ( i = 0; i < hQMetaData->q_direction[0].cfg.nblocks; i++ ) + { + set_zero( dir, 3 ); + set_zero( avg_dir, 3 ); + energySum = 0.0f; + + /* combine all DirAC bands except the last one, handle last band separately, last band covers BW above WB */ + for ( j = 0; j < orig_dirac_bands - 1; j++ ) + { + ivas_qmetadata_azimuth_elevation_to_direction_vector( hQMetaData->q_direction[0].band_data[j].azimuth[i], hQMetaData->q_direction[0].band_data[j].elevation[i], &dir[0] ); + vecLen = hQMetaData->q_direction[0].band_data[j].energy_ratio[i] * hDirAC->buffer_energy[i * orig_dirac_bands + j]; + + avg_dir[0] += dir[0] * vecLen; + avg_dir[1] += dir[1] * vecLen; + avg_dir[2] += dir[2] * vecLen; + + energySum += hDirAC->buffer_energy[i * orig_dirac_bands + j]; + } + + ivas_qmetadata_direction_vector_to_azimuth_elevation( &avg_dir[0], &hQMetaData->q_direction[0].band_data[0].azimuth[i], &hQMetaData->q_direction[0].band_data[0].elevation[i] ); + hQMetaData->q_direction[0].band_data[0].energy_ratio[i] = sqrtf( dotp( avg_dir, avg_dir, 3 ) ) / ( energySum + EPSILON ); + + hQMetaData->q_direction[0].band_data[1].azimuth[i] = hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth[i]; + hQMetaData->q_direction[0].band_data[1].elevation[i] = hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation[i]; + hQMetaData->q_direction[0].band_data[1].energy_ratio[i] = hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio[i]; + } + + /* 1 bit to indicate mode MD coding : temp solution*/ + push_next_indice( hMetaData, 1, 1 ); + + /* encode SID parameters */ + ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1, SBA_FORMAT ); + } + + for ( b = hQMetaData->q_direction->cfg.start_band; b < hQMetaData->q_direction->cfg.nbands; b++ ) + { + for ( i_ts = 0; i_ts < ( ( dtx_vad == 1 ) ? hQMetaData->q_direction[0].cfg.nblocks : 1 ); i_ts++ ) + { + hQMetaData->q_direction->band_data[b].azimuth[i_ts] = hQMetaData->q_direction->band_data[b].q_azimuth[i_ts]; + hQMetaData->q_direction->band_data[b].elevation[i_ts] = hQMetaData->q_direction->band_data[b].q_elevation[i_ts]; + hQMetaData->q_direction[0].band_data[b].energy_ratio[0] = 1.0f - diffuseness_reconstructions[hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]]; + } + } + + if ( dtx_vad == 0 ) + { + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth[i] = hQMetaData->q_direction[0].band_data[1].azimuth[0]; + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation[i] = hQMetaData->q_direction[0].band_data[1].elevation[0]; + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio[0]; + } + + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + for ( j = orig_dirac_bands - 2; j >= 0; j-- ) + { + hQMetaData->q_direction[0].band_data[j].azimuth[i] = hQMetaData->q_direction[0].band_data[0].azimuth[0]; + hQMetaData->q_direction[0].band_data[j].elevation[i] = hQMetaData->q_direction[0].band_data[0].elevation[0]; + hQMetaData->q_direction[0].band_data[j].energy_ratio[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio[0]; + } + } + + hQMetaData->q_direction->cfg.nbands = orig_dirac_bands; + } + } + pop_wmops(); + + return; +} +#endif /*------------------------------------------------------------------------- * computeReferencePower_enc() @@ -561,7 +696,12 @@ void computeReferencePower_enc( float *reference_power, /* o : Estimated power */ const int16_t enc_param_start_band, /* i : first band to process */ const int16_t num_freq_bands, /* i : Number of frequency bands */ - const SBA_MODE sba_mode /* i : SBA mode */ +#ifndef SBA_MODE_CLEAN_UP + const SBA_MODE sba_mode /* i : SBA mode */ +#else + const IVAS_FORMAT ivas_format, /* i : ivas_format */ + int16_t ref_power_w /* i : use 0 if hodirac is enabled */ +#endif , const int16_t nchan_ana /* i : number of analysis channels */ ) @@ -595,7 +735,11 @@ void computeReferencePower_enc( } v_multc( reference_power, 0.5f, reference_power, num_freq_bands ); +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode == SBA_MODE_SPAR ) +#else + if ( ivas_format == SBA_FORMAT && ref_power_w == 1 ) +#endif { for ( i = 0; i < num_freq_bands; i++ ) { @@ -621,7 +765,11 @@ void ivas_dirac_param_est_enc( float **pp_fr_real, float **pp_fr_imag, const int16_t input_frame, +#ifndef SBA_MODE_CLEAN_UP const SBA_MODE sba_mode, +#else + const IVAS_FORMAT ivas_format, +#endif const int16_t hodirac_flag, const int16_t nchan_fb_in ) { @@ -730,7 +878,12 @@ void ivas_dirac_param_est_enc( reference_power[ts], hDirAC->hConfig->enc_param_start_band, num_freq_bands, +#ifndef SBA_MODE_CLEAN_UP hodirac_flag ? SBA_MODE_DIRAC : sba_mode, +#else + ivas_format, + hodirac_flag ? 0 : 1, +#endif FOA_CHANNELS ); computeIntensityVector_enc( diff --git a/lib_enc/ivas_enc.c b/lib_enc/ivas_enc.c index 854f638491781ce15292d970f9c502099bbf196c..64ed5c9c02fc8aab96f0dc8a456d82d47035d63a 100644 --- a/lib_enc/ivas_enc.c +++ b/lib_enc/ivas_enc.c @@ -132,7 +132,11 @@ ivas_error ivas_enc( /* bypass EVS coding in float precision, emulating EVS encoder/decoder delay */ for ( i = 0; i < n; i++ ) { +#ifndef SBA_MODE_CLEAN_UP if ( ( ivas_format == SBA_FORMAT ) && ( st_ivas->sba_mode == SBA_MODE_SPAR ) && !( st_ivas->sba_analysis_order > 1 ) ) +#else + if ( ( ivas_format == SBA_FORMAT ) && !( st_ivas->sba_analysis_order > 1 ) ) +#endif { hp20( data_f[HOA_keep_ind[st_ivas->hSpar->hMdEnc->HOA_md_ind[i]]], input_frame, st_ivas->mem_hp20_in[i], input_Fs ); } @@ -217,8 +221,13 @@ ivas_error ivas_enc( /* SBA/MASA metadata encoding and SBA/MASA metadata bitstream writing */ hMetaData = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData : st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData; +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->hQMetaData != NULL && st_ivas->sba_mode != SBA_MODE_SPAR ) +#else + if ( st_ivas->hQMetaData != NULL && ivas_format != SBA_FORMAT ) +#endif { +#ifndef SBA_MODE_CLEAN_UP if ( ivas_format == SBA_FORMAT ) { ivas_dirac_enc( st_ivas->hDirAC, st_ivas->hQMetaData, hMetaData, &nb_bits_metadata[0], hEncoderConfig->Opt_DTX_ON, data_f, input_frame, hEncoderConfig->sba_planar ); @@ -227,6 +236,7 @@ ivas_error ivas_enc( } else { +#endif ivas_masa_estimate_energy( st_ivas->hMasa, data_f, input_frame, st_ivas->nchan_transport ); /* energy-estimation uses TF-resolution: 4x24 */ if ( ( error = ivas_masa_enc_config( st_ivas ) ) != IVAS_ERR_OK ) { @@ -237,9 +247,15 @@ ivas_error ivas_enc( { return error; } +#ifndef SBA_MODE_CLEAN_UP } +#endif } +#ifndef SBA_MODE_CLEAN_UP else if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#else + else if ( ivas_format == SBA_FORMAT ) +#endif { if ( ( error = ivas_spar_enc( st_ivas, data_f, input_frame, nb_bits_metadata, hMetaData ) ) != IVAS_ERR_OK ) { diff --git a/lib_enc/ivas_init_enc.c b/lib_enc/ivas_init_enc.c index d96442835275a54e21750d0efe088cfbc99c62a6..006fb176fb401fbdfaaeb77f8cb0746d03983a4b 100644 --- a/lib_enc/ivas_init_enc.c +++ b/lib_enc/ivas_init_enc.c @@ -357,10 +357,14 @@ ivas_error ivas_init_encoder( /* In IVAS, ensure that minimum coded bandwidth is WB */ hEncoderConfig->max_bwidth = max( hEncoderConfig->max_bwidth, WB ); } +#ifndef SBA_MODE_CLEAN_UP hEncoderConfig->spar_reconfig_flag = 0; +#endif st_ivas->ism_mode = ISM_MODE_NONE; st_ivas->mc_mode = MC_MODE_NONE; +#ifndef SBA_MODE_CLEAN_UP st_ivas->sba_mode = SBA_MODE_NONE; +#endif st_ivas->nchan_transport = -1; @@ -515,17 +519,23 @@ ivas_error ivas_init_encoder( if ( ivas_format == SBA_FORMAT ) { +#ifndef SBA_MODE_CLEAN_UP st_ivas->sba_mode = ivas_sba_mode_select(); - st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, st_ivas->hEncoderConfig->sba_order ); +#endif + st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, st_ivas->hEncoderConfig->sba_order ); +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode == SBA_MODE_SPAR ) { +#endif if ( ( error = ivas_spar_enc_open( st_ivas, 0 ) ) != IVAS_ERR_OK ) { return error; } - } +#ifndef SBA_MODE_CLEAN_UP + } +#endif if ( ( error = ivas_dirac_enc_open( st_ivas ) ) != IVAS_ERR_OK ) { return error; @@ -556,7 +566,11 @@ ivas_error ivas_init_encoder( reset_indices_enc( st_ivas->hSCE[sce_id]->hMetaData, MAX_BITS_METADATA ); #endif +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode == SBA_MODE_SPAR && st_ivas->hEncoderConfig->Opt_DTX_ON ) +#else + if ( ivas_format == SBA_FORMAT && st_ivas->hEncoderConfig->Opt_DTX_ON ) +#endif { st_ivas->hSCE[sce_id]->hCoreCoder[0]->dtx_sce_sba = 1; } diff --git a/lib_enc/ivas_ism_param_enc.c b/lib_enc/ivas_ism_param_enc.c index 6afb57c1557831c6c65c8060a68a2b92d7edd410..24038448d9e0b77b595bdb283619d0ac1f1c9cb5 100644 --- a/lib_enc/ivas_ism_param_enc.c +++ b/lib_enc/ivas_ism_param_enc.c @@ -299,8 +299,13 @@ ivas_error ivas_param_ism_enc_open( /* set FB config. */ +#ifndef SBA_MODE_CLEAN_UP if ( ( error = ivas_fb_set_cfg( &fb_cfg, ISM_FORMAT, SBA_MODE_NONE, st_ivas->hEncoderConfig->nchan_inp, 0, 0, input_Fs, 0 ) ) != IVAS_ERR_OK ) +#else + if ( ( error = ivas_fb_set_cfg( &fb_cfg, ISM_FORMAT, st_ivas->hEncoderConfig->nchan_inp, 0, 0, input_Fs, + 0 ) ) != IVAS_ERR_OK ) +#endif { return error; } diff --git a/lib_enc/ivas_masa_enc.c b/lib_enc/ivas_masa_enc.c index e62a38f3801b9ed3b5fb5d7f6dbc8f6758e63dbb..cfed98617a399aae4595419dacd301aaeeaa9fdb 100644 --- a/lib_enc/ivas_masa_enc.c +++ b/lib_enc/ivas_masa_enc.c @@ -402,7 +402,11 @@ ivas_error ivas_masa_encode( free( h_orig_metadata ); +#ifndef SBA_MODE_CLEAN_UP ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, masa_sid_descriptor, ivas_format, SBA_MODE_NONE ); +#else + ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, masa_sid_descriptor, ivas_format ); +#endif /* restore old values */ hMasa->config.numCodingBands = numCodingBands; diff --git a/lib_enc/ivas_mc_param_enc.c b/lib_enc/ivas_mc_param_enc.c index ff01bd3aa19dfd28470ea75a06a3094efb165f8d..ba746ff442f53d31a2d2a7e5f0797bae0f6b3fdf 100644 --- a/lib_enc/ivas_mc_param_enc.c +++ b/lib_enc/ivas_mc_param_enc.c @@ -140,8 +140,13 @@ ivas_error ivas_param_mc_enc_open( hParamMC->dmx_factors = ivas_param_mc_conf[config_index].dmx_fac; /* set FB config. */ +#ifndef SBA_MODE_CLEAN_UP if ( ( error = ivas_fb_set_cfg( &fb_cfg, MC_FORMAT, SBA_MODE_DIRAC, nchan_inp, 0, 0, input_Fs, 0 ) ) != IVAS_ERR_OK ) +#else + if ( ( error = ivas_fb_set_cfg( &fb_cfg, MC_FORMAT, nchan_inp, 0, 0, input_Fs, + 0 ) ) != IVAS_ERR_OK ) +#endif { return error; } diff --git a/lib_enc/ivas_mc_paramupmix_enc.c b/lib_enc/ivas_mc_paramupmix_enc.c index 0d5f69d800527839890c9ac4df6381dfedd58d0d..c5ee2950db6c75d9665825b1cce6103e5dc9a0e9 100644 --- a/lib_enc/ivas_mc_paramupmix_enc.c +++ b/lib_enc/ivas_mc_paramupmix_enc.c @@ -184,8 +184,13 @@ ivas_error ivas_mc_paramupmix_enc_open( /* set FB config. */ /* need to set num output channels to a value > 0 to get pFb != NULL */ +#ifndef SBA_MODE_CLEAN_UP if ( ( error = ivas_fb_set_cfg( &fb_cfg, MC_FORMAT, SBA_MODE_SPAR, MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH, MC_PARAMUPMIX_COMBINATIONS, 0, input_Fs, 0 ) ) != IVAS_ERR_OK ) +#else + if ( ( error = ivas_fb_set_cfg( &fb_cfg, MC_FORMAT, MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH, MC_PARAMUPMIX_COMBINATIONS, 0, input_Fs, + 0 ) ) != IVAS_ERR_OK ) +#endif { return error; } diff --git a/lib_enc/ivas_mcmasa_enc.c b/lib_enc/ivas_mcmasa_enc.c index ec3a49956b727532e24dec28ba6a94314e8e6442..0c158afbb74a4570c7d147deebf9424fe5b5d692 100644 --- a/lib_enc/ivas_mcmasa_enc.c +++ b/lib_enc/ivas_mcmasa_enc.c @@ -188,8 +188,13 @@ ivas_error ivas_mcmasa_enc_open( } /* set FB config. */ +#ifndef SBA_MODE_CLEAN_UP if ( ( error = ivas_fb_set_cfg( &fb_cfg, MASA_FORMAT, SBA_MODE_NONE, numAnalysisChannels, 0, 0, input_Fs, 0 ) ) != IVAS_ERR_OK ) +#else + if ( ( error = ivas_fb_set_cfg( &fb_cfg, MASA_FORMAT, numAnalysisChannels, 0, 0, input_Fs, + 0 ) ) != IVAS_ERR_OK ) +#endif { return error; } @@ -220,8 +225,13 @@ ivas_error ivas_mcmasa_enc_open( else { /* Allocate and initialize FB mixer handle for LFE channel */ +#ifndef SBA_MODE_CLEAN_UP if ( ( error = ivas_fb_set_cfg( &fb_cfgLfe, MASA_FORMAT, SBA_MODE_NONE, 1, 0, 0, input_Fs, 0 ) ) != IVAS_ERR_OK ) +#else + if ( ( error = ivas_fb_set_cfg( &fb_cfgLfe, MASA_FORMAT, 1, 0, 0, input_Fs, + 0 ) ) != IVAS_ERR_OK ) +#endif { return error; } @@ -977,7 +987,12 @@ void ivas_mcmasa_param_est_enc( reference_power[ts], 0, num_freq_bands, +#ifndef SBA_MODE_CLEAN_UP SBA_MODE_NONE, +#else + MC_FORMAT, + 0, +#endif FOA_CHANNELS ); /* Fill buffers of length "averaging_length" time slots for intensity and energy */ diff --git a/lib_enc/ivas_mct_enc.c b/lib_enc/ivas_mct_enc.c index af743deaa1c4c6d6f1827335d3df9b70f2c4ec09..55da6495f8d68e75c141e590367e23d392341962 100644 --- a/lib_enc/ivas_mct_enc.c +++ b/lib_enc/ivas_mct_enc.c @@ -60,8 +60,12 @@ static ivas_error ivas_mc_enc_reconfig( Encoder_Struct *st_ivas, const int16_t l static void set_mct_enc_params( MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const SBA_MODE sba_mode, /* i : SBA mode */ - const uint16_t b_nchan_change /* i : flag indicating different channel count */ +#ifndef SBA_MODE_CLEAN_UP + const SBA_MODE sba_mode, /* i : SBA mode */ +#else + const IVAS_FORMAT ivas_format, /* i : IVAS_FORMAT */ +#endif + const uint16_t b_nchan_change /* i : flag indicating different channel count */ ) { int16_t n; @@ -82,7 +86,11 @@ static void set_mct_enc_params( } hMCT->hbr_mct = 0; +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode == SBA_MODE_SPAR && ivas_total_brate >= IVAS_256k ) +#else + if ( ivas_format == SBA_FORMAT && ivas_total_brate >= IVAS_256k ) +#endif { hMCT->hbr_mct = 1; } @@ -387,7 +395,11 @@ ivas_error create_mct_enc( * Initializations *-----------------------------------------------------------------*/ +#ifndef SBA_MODE_CLEAN_UP set_mct_enc_params( hMCT, ivas_total_brate, st_ivas->sba_mode, 1 ); +#else + set_mct_enc_params( hMCT, ivas_total_brate, ivas_format, 1 ); +#endif st_ivas->hMCT = hMCT; @@ -549,8 +561,11 @@ ivas_error mct_enc_reconfigure( * Initializations *-----------------------------------------------------------------*/ +#ifndef SBA_MODE_CLEAN_UP set_mct_enc_params( hMCT, ivas_total_brate, st_ivas->sba_mode, b_nchan_change ); - +#else + set_mct_enc_params( hMCT, ivas_total_brate, ivas_format, b_nchan_change ); +#endif return IVAS_ERR_OK; } diff --git a/lib_enc/ivas_qmetadata_enc.c b/lib_enc/ivas_qmetadata_enc.c index 17ddbe367687a19741dae585966e9f4a6b806251..a9cb5c763166fd0f4f045c9b0393ae5a65e125dc 100644 --- a/lib_enc/ivas_qmetadata_enc.c +++ b/lib_enc/ivas_qmetadata_enc.c @@ -1029,8 +1029,11 @@ void ivas_qmetadata_enc_sid_encode( BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ IVAS_QMETADATA *q_metadata, /* i/o: metadata handle */ const int16_t masa_sid_descriptor, /* i : description of MASA SID coding structure */ - const int16_t ivas_format, /* i : IVAS format */ - const SBA_MODE sba_mode /* i : SBA mode */ + const int16_t ivas_format /* i : IVAS format */ +#ifndef SBA_MODE_CLEAN_UP + , + const SBA_MODE sba_mode /* i : SBA mode */ +#endif ) { int16_t b, m; @@ -1046,10 +1049,13 @@ void ivas_qmetadata_enc_sid_encode( if ( ivas_format == SBA_FORMAT ) { +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode == SBA_MODE_SPAR ) { +#endif /* TODO: still use old sid frame size to keep bitexactness */ metadata_sid_bits = (int16_t) ( 5000 /*IVAS_SID_5k2*/ - SID_2k40 ) / FRAMES_PER_SEC - ( SPAR_DTX_BANDS * SPAR_SID_BITS_TAR_PER_BAND ) - 1; /* -1 for inactive mode header bit*/ +#ifndef SBA_MODE_CLEAN_UP } else { @@ -1057,6 +1063,7 @@ void ivas_qmetadata_enc_sid_encode( /* TODO: still use old sid frame size to keep bitexactness */ metadata_sid_bits = ( 4400 /*IVAS_SID_5k2*/ - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; } +#endif } else { @@ -1095,7 +1102,11 @@ void ivas_qmetadata_enc_sid_encode( /* sanity checks*/ assert( q_metadata->no_directions == 1 && "Qmetadata SID: only one direction supported!" ); +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode == SBA_MODE_SPAR ) +#else + if ( ivas_format == SBA_FORMAT ) +#endif { assert( ( q_direction->cfg.nbands == DIRAC_DTX_BANDS ) && "Qmetadata SID: only 2 bands supported!" ); } @@ -1104,7 +1115,11 @@ void ivas_qmetadata_enc_sid_encode( assert( ( q_direction->cfg.nbands == 5 ) && "Qmetadata SID: only 5 bands supported!" ); } +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode != SBA_MODE_SPAR ) +#else + if ( ivas_format != SBA_FORMAT ) +#endif { /* Signalling 2D*/ push_next_indice( hMetaData, ( q_direction->not_in_2D > 0 ), 1 ); /*2D flag*/ @@ -1241,6 +1256,7 @@ void ivas_qmetadata_enc_sid_encode( #endif /* TODO: temporary to keep BE */ +#ifndef SBA_MODE_CLEAN_UP if ( ivas_format == SBA_FORMAT ) { if ( sba_mode != SBA_MODE_SPAR ) @@ -1250,6 +1266,9 @@ void ivas_qmetadata_enc_sid_encode( } } else +#else + if ( ivas_format != SBA_FORMAT ) +#endif { metadata_sid_bits = ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; } @@ -1271,13 +1290,16 @@ void ivas_qmetadata_enc_sid_encode( *------------------------------------------------------------------------*/ void reset_metadata_spatial( - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ - const int32_t element_brate, /* i : element bitrate */ - int32_t *total_brate, /* o : total bitrate */ - const int32_t core_brate, /* i : core bitrate */ - const int16_t nb_bits_metadata, /* i : number of metadata bits */ - const SBA_MODE sba_mode /* i : SBA mode */ + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ + const int32_t element_brate, /* i : element bitrate */ + int32_t *total_brate, /* o : total bitrate */ + const int32_t core_brate, /* i : core bitrate */ + const int16_t nb_bits_metadata /* i : number of meatdata bits */ +#ifndef SBA_MODE_CLEAN_UP + , + const SBA_MODE sba_mode /* i : SBA mode */ +#endif ) { int16_t i, next_ind_sid, last_ind_sid; @@ -1291,7 +1313,11 @@ void reset_metadata_spatial( { if ( ( ivas_format == SBA_FORMAT || ivas_format == MASA_FORMAT ) && core_brate != FRAME_NO_DATA ) { +#ifndef SBA_MODE_CLEAN_UP if ( sba_mode == SBA_MODE_SPAR ) +#else + if ( ivas_format == SBA_FORMAT ) +#endif { #ifdef DEBUGGING assert( hMetaData->ind_list[0].nb_bits == 1 ); @@ -1374,7 +1400,11 @@ void reset_metadata_spatial( *total_brate = element_brate; } +#ifndef SBA_MODE_CLEAN_UP else if ( sba_mode != SBA_MODE_SPAR ) +#else + else if ( ivas_format != SBA_FORMAT ) +#endif { /* Reset SID metadata bits*/ while ( hMetaData->nb_bits_tot > nb_bits_metadata ) diff --git a/lib_enc/ivas_sba_enc.c b/lib_enc/ivas_sba_enc.c index 39da325d620109c32b1e4116ac82a614bc817450..e01de987412d4667582674ab0054f49260bacca8 100644 --- a/lib_enc/ivas_sba_enc.c +++ b/lib_enc/ivas_sba_enc.c @@ -204,7 +204,7 @@ ivas_error ivas_sba_enc_reconfigure( } ivas_spar_config( ivas_total_brate, min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ), &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, &st_ivas->hSpar->core_nominal_brate, -1 ); - +#ifndef SBA_MODE_CLEAN_UP for ( n = 0; n < DIRAC_MAX_ANA_CHANS; n++ ) { if ( hDirAC->sba_synchro_buffer[n] != NULL ) @@ -214,6 +214,7 @@ ivas_error ivas_sba_enc_reconfigure( } } hDirAC->num_samples_synchro_delay = 0; +#endif hSpar = st_ivas->hSpar; if ( st_ivas->nchan_transport == 1 ) @@ -240,7 +241,11 @@ ivas_error ivas_sba_enc_reconfigure( return error; } } +#ifndef SBA_MODE_CLEAN_UP hEncoderConfig->spar_reconfig_flag = spar_reconfig_flag; +#else + st_ivas->hSpar->spar_reconfig_flag = spar_reconfig_flag; +#endif if ( ( error = ivas_dirac_enc_reconfigure( st_ivas ) ) != IVAS_ERR_OK ) { return error; @@ -263,7 +268,9 @@ ivas_error ivas_sba_enc_reconfigure( } } #endif +#ifndef SBA_MODE_CLEAN_UP mvs2s( hDirAC->dirac_to_spar_md_bands, hSpar->dirac_to_spar_md_bands, DIRAC_MAX_NBANDS ); +#endif hSpar->enc_param_start_band = hDirAC->hConfig->enc_param_start_band; /*-----------------------------------------------------------------* * Allocate, initialize, and configure SCE/CPE/MCT handles @@ -293,7 +300,11 @@ int16_t ivas_sba_get_max_md_bits( max_bits = 500; } max_md_bits = min( st_ivas->hQMetaData->metadata_max_bits + 1, max_bits ); // TODO: remove 500 once max MD bits has been defined at all bitrates in DirAC +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->sba_mode == SBA_MODE_SPAR ) +#else + if ( st_ivas->hEncoderConfig->ivas_format == SBA_FORMAT ) +#endif { max_md_bits += st_ivas->hSpar->hMdEnc->spar_md_cfg.max_md_bits_spar; } diff --git a/lib_enc/ivas_sce_enc.c b/lib_enc/ivas_sce_enc.c index 1b3eac4f1af5e9203a536f9660c0c3b2c6141536..87c0e8e9d333481f8d0afcf8998bd64c9b836149 100644 --- a/lib_enc/ivas_sce_enc.c +++ b/lib_enc/ivas_sce_enc.c @@ -205,8 +205,12 @@ ivas_error ivas_sce_enc( * Reset metadata *----------------------------------------------------------------*/ +#ifndef SBA_MODE_CLEAN_UP reset_metadata_spatial( ivas_format, hSCE->hMetaData, hSCE->element_brate, &st->total_brate, st->core_brate, nb_bits_metadata, st_ivas->sba_mode ); +#else + reset_metadata_spatial( ivas_format, hSCE->hMetaData, hSCE->element_brate, &st->total_brate, st->core_brate, nb_bits_metadata ); +#endif /*----------------------------------------------------------------* * Write IVAS format signaling in SID frames *----------------------------------------------------------------*/ diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index 642fef906a7cb0e2bb75c71da7c9807f0c8483af..57e6ce003e3749ed75e8a631b94d7f386ada0b11 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -84,6 +84,9 @@ ivas_error ivas_spar_enc_open( } } +#ifdef SBA_MODE_CLEAN_UP + hSpar->spar_reconfig_flag = 0; +#endif input_Fs = hEncoderConfig->input_Fs; sba_order_internal = min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ); nchan_inp = ivas_sba_get_nchan_metadata( sba_order_internal, @@ -123,8 +126,13 @@ ivas_error ivas_spar_enc_open( /* set FB config. */ active_w_mixing = ivas_spar_br_table_consts[table_idx].active_w; +#ifndef SBA_MODE_CLEAN_UP ivas_fb_set_cfg( &fb_cfg, SBA_FORMAT, SBA_MODE_SPAR, nchan_inp, nchan_transport, active_w_mixing, input_Fs, nchan_fb_in ); +#else + ivas_fb_set_cfg( &fb_cfg, SBA_FORMAT, nchan_inp, nchan_transport, active_w_mixing, input_Fs, + nchan_fb_in ); +#endif fb_cfg->remix_order = remix_order_set[hSpar->hMdEnc->spar_md_cfg.remix_unmix_order]; /* FB mixer handle */ @@ -348,6 +356,7 @@ ivas_error ivas_spar_enc( // VE2DB: can hFbMixer->ppFilterbank_prior_input be replaced by st->input ? /* check last sba_mode */ +#ifndef SBA_MODE_CLEAN_UP if ( ivas_sba_mode_select() == SBA_MODE_DIRAC ) { Encoder_State *sts[MCT_MAX_BLOCKS]; @@ -375,6 +384,7 @@ ivas_error ivas_spar_enc( ( st_ivas->hSpar->hFbMixer->ppFilterbank_prior_input[i] + st_ivas->hSpar->hFbMixer->fb_cfg->prior_input_length - input_frame ), input_frame ); } } +#endif /* front VAD */ if ( ( error = front_vad_spar( st_ivas->hSpar, data_f[0], hEncoderConfig, input_frame ) ) != IVAS_ERR_OK ) @@ -433,12 +443,18 @@ static ivas_error ivas_spar_enc_process( const int16_t *order; SPAR_ENC_HANDLE hSpar = st_ivas->hSpar; IVAS_QMETADATA_HANDLE hQMetaData = st_ivas->hQMetaData; +#ifndef SBA_MODE_CLEAN_UP int16_t ts, l_ts, orig_dirac_bands, num_del_samples; +#else + int16_t ts, l_ts, num_del_samples; +#endif float *ppIn_FR_real[IVAS_SPAR_MAX_CH], *ppIn_FR_imag[IVAS_SPAR_MAX_CH]; float wyzx_del_buf[FOA_CHANNELS][IVAS_FB_1MS_48K_SAMP]; +#ifndef SBA_MODE_CLEAN_UP float dir[3], avg_dir[3]; float energySum, vecLen; +#endif int16_t nchan_fb_in; #ifdef ARITH_HUFF_CODER_CHANGES @@ -556,6 +572,7 @@ static ivas_error ivas_spar_enc_process( hodirac_flag = ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ); +#ifndef SBA_MODE_CLEAN_UP ivas_dirac_param_est_enc( st_ivas->hDirAC, hQMetaData->q_direction, hQMetaData->useLowerRes, data_f, ppIn_FR_real, ppIn_FR_imag, input_frame, st_ivas->sba_mode, hodirac_flag, hodirac_flag ? HOA2_CHANNELS : FOA_CHANNELS ); if ( hQMetaData->q_direction->cfg.nbands > 0 ) @@ -640,6 +657,9 @@ static ivas_error ivas_spar_enc_process( hQMetaData->q_direction->cfg.nbands = orig_dirac_bands; } } +#else + ivas_dirac_enc( st_ivas->hDirAC, hQMetaData, hMetaData, data_f, ppIn_FR_real, ppIn_FR_imag, input_frame, dtx_vad, hEncoderConfig->ivas_format, hodirac_flag ); +#endif /*-----------------------------------------------------------------------------------------* * Set SPAR bitrates *-----------------------------------------------------------------------------------------*/ @@ -649,7 +669,11 @@ static ivas_error ivas_spar_enc_process( if ( hSpar->hMdEnc->table_idx != table_idx ) { hSpar->hMdEnc->table_idx = table_idx; +#ifndef SBA_MODE_CLEAN_UP if ( ( ivas_total_brate != hEncoderConfig->last_ivas_total_brate ) && ( !hEncoderConfig->spar_reconfig_flag ) ) +#else + if ( ( ivas_total_brate != hEncoderConfig->last_ivas_total_brate ) && ( !hSpar->spar_reconfig_flag ) ) +#endif { if ( ( error = ivas_spar_md_enc_init( hSpar->hMdEnc, hEncoderConfig, sba_order ) ) != IVAS_ERR_OK ) { diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index ca5728f81ed4bceea3897899683abc9ca1017b1a..50ef2f03487406478d0b825ac15bd3f2b7f7fae4 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -1909,8 +1909,7 @@ static void ivas_store_prior_coeffs( for ( i = 0; i < num_bands; i++ ) { b = i; - /* TODO: Bitrate switching will require dependence on bands_bw, and changes to time differential coding/prior index - storage for 6-12 band switching. e.g. b = (int16_t) floor( i * one_by_bands_bw ); */ + for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) { hMdEnc->spar_md_prior.band_coeffs_idx[i].pred_index_re[j] = hMdEnc->spar_md.band_coeffs_idx[b].pred_index_re[j]; diff --git a/lib_enc/ivas_stat_enc.h b/lib_enc/ivas_stat_enc.h index 806899c3433cc9be83e57dea810beba68ec9371b..7690ac5b300d0a6167ed670e2e2d2a4b3a49e3a4 100644 --- a/lib_enc/ivas_stat_enc.h +++ b/lib_enc/ivas_stat_enc.h @@ -591,8 +591,10 @@ typedef struct ivas_dirac_enc_data_structure PARAM_ISM_CONFIG_HANDLE hParamIsm; /* Parametric ISM handle */ IVAS_FB_MIXER_HANDLE hFbMixer; +#ifndef SBA_MODE_CLEAN_UP float *sba_synchro_buffer[DIRAC_MAX_ANA_CHANS]; int16_t num_samples_synchro_delay; +#endif /* DirAC parameter estimation */ float **direction_vector[DIRAC_NUM_DIMS]; @@ -612,7 +614,9 @@ typedef struct ivas_dirac_enc_data_structure float ele_prev[NUM_ANA_SECTORS * IVAS_MAX_NUM_BANDS]; #endif +#ifndef SBA_MODE_CLEAN_UP int16_t dirac_to_spar_md_bands[DIRAC_MAX_NBANDS]; +#endif /* diffuseness */ int16_t index_buffer_intensity; @@ -711,6 +715,9 @@ typedef struct ivas_spar_enc_lib_t FRONT_VAD_ENC_HANDLE hFrontVad; /* front-VAD handle */ ENC_CORE_HANDLE hCoreCoderVAD; /* core-coder handle for front-VAD module */ +#ifdef SBA_MODE_CLEAN_UP + int16_t spar_reconfig_flag; +#endif int16_t front_vad_flag; int16_t front_vad_dtx_flag; int16_t force_front_vad; @@ -1072,7 +1079,9 @@ typedef struct encoder_config_structure /* temp. development parameters */ int16_t Opt_PCA_ON; /* flag indicating PCA operation in SBA */ +#ifndef SBA_MODE_CLEAN_UP int16_t spar_reconfig_flag; + #endif #ifdef DEBUGGING /* debugging options */ int16_t stereo_mode_cmdl; /* stereo mode forced from the command-line */ @@ -1131,7 +1140,9 @@ typedef struct LFE_ENC_HANDLE hLFE; /* LFE data handle */ ISM_MODE ism_mode; /* ISM format mode */ +#ifndef SBA_MODE_CLEAN_UP SBA_MODE sba_mode; /* SBA format mode */ +#endif MC_MODE mc_mode; /* MC format mode */ /* Stereo downmix for EVS module */ diff --git a/lib_enc/lib_enc.c b/lib_enc/lib_enc.c index 62610838a5fe705cc38959a6e945ab3a5e623bb1..d1c18a9bafe00fafe49682cf75c40bcdd42943e2 100755 --- a/lib_enc/lib_enc.c +++ b/lib_enc/lib_enc.c @@ -199,7 +199,9 @@ ivas_error IVAS_ENC_Open( /* set high-level parameters */ st_ivas->mc_mode = MC_MODE_NONE; st_ivas->ism_mode = ISM_MODE_NONE; +#ifndef SBA_MODE_CLEAN_UP st_ivas->sba_mode = SBA_MODE_NONE; +#endif st_ivas->sba_analysis_order = 0; return IVAS_ERR_OK; @@ -912,7 +914,11 @@ static ivas_error configureEncoder( } #ifdef DEBUG_AGC_ENCODER_CMD_OPTION +#ifndef SBA_MODE_CLEAN_UP if ( hEncoderConfig->Opt_AGC_ON == SBA_AGC_FORCE_ENABLE && !( hEncoderConfig->ivas_format == SBA_FORMAT && ivas_sba_mode_select() == SBA_MODE_SPAR ) ) +#else + if ( hEncoderConfig->Opt_AGC_ON == SBA_AGC_FORCE_ENABLE && !( hEncoderConfig->ivas_format == SBA_FORMAT ) ) +#endif { return IVAS_ERROR( IVAS_ERR_NOT_SUPPORTED_OPTION, "AGC supported in SBA format at bitrates >= 24.4 kbps only." ); } diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index 525935ffbf13fa8036829a62506c58f960bbd608..c3e76e7306d949e34a894d626f20782f1eb84f16 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -433,7 +433,11 @@ void ivas_dirac_dec_binaural( } ivas_dirac_dec_set_md_map( st_ivas, DEFAULT_JBM_CLDFB_TIMESLOTS ); +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR ) +#else + if ( st_ivas->ivas_format == SBA_FORMAT ) +#endif { ivas_spar_dec_set_render_map( st_ivas, DEFAULT_JBM_CLDFB_TIMESLOTS ); } @@ -671,7 +675,11 @@ static void ivas_dirac_dec_binaural_internal( } } +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR ) +#else + if ( st_ivas->ivas_format == SBA_FORMAT ) +#endif { st_ivas->hDirAC->hDiffuseDist = &diffuseDistData; @@ -1107,7 +1115,11 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric } else /* When rendering binaural, ambience has frequency dependent ICC. */ { +#ifndef SBA_MODE_CLEAN_UP if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_mode == SBA_MODE_SPAR && bin < BINAURAL_COHERENCE_DIFFERENCE_BINS ) +#else + if ( st_ivas->ivas_format == SBA_FORMAT && bin < BINAURAL_COHERENCE_DIFFERENCE_BINS ) +#endif { float diffuseFieldCoherence; #ifdef JBM_TSM_ON_TCS diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 6a1de3b0e2024ca4fd83efd4615974e91e0c635f..cd4f16aaa72e87ab56219fa4bb2a83205f58997e 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -2212,8 +2212,10 @@ static ivas_error initMasaDummyDecForMcOut( decDummy->sba_analysis_order = 1; decDummy->hDecoderConfig->ivas_total_brate = IVAS_512k; /* Todo Nokia: This is preventing initialization of 2TC as 1TC, should be fixed properly in ivas_dirac_dec_config() */ - decDummy->sba_mode = SBA_MODE_NONE; /* Todo Nokia: This is done to prevent ivas_dirac_dec_config() to not use uninitialized value. It could be considered if this should not be even accessed when not in SBA. */ - decDummy->mc_mode = MC_MODE_NONE; /* Todo Nokia: This should be also refactored in such way that it is not checked if not in MC mode */ +#ifndef SBA_MODE_CLEAN_UP + decDummy->sba_mode = SBA_MODE_NONE; /* Todo Nokia: This is done to prevent ivas_dirac_dec_config() to not use uninitialized value. It could be considered if this should not be even accessed when not in SBA. */ +#endif + decDummy->mc_mode = MC_MODE_NONE; /* Todo Nokia: This should be also refactored in such way that it is not checked if not in MC mode */ ivas_output_init( &( decDummy->hOutSetup ), output_config ); ivas_output_init( &( decDummy->hIntSetup ), output_config ); @@ -2295,8 +2297,10 @@ static ivas_error initMasaDummyDecForSbaOut( decDummy->hDecoderConfig->output_config = output_config; decDummy->hDecoderConfig->ivas_total_brate = IVAS_512k; /* Todo Nokia: This is preventing initialization of 2TC as 1TC, should be fixed properly in ivas_dirac_dec_config() */ - decDummy->sba_mode = SBA_MODE_NONE; /* Todo Nokia: This is done to prevent ivas_dirac_dec_config() to not use uninitialized value. It could be considered if this should not be even accessed when not in SBA. */ - decDummy->mc_mode = MC_MODE_NONE; /* Todo Nokia: This should be also refactored in such way that it is not checked if not in MC mode */ +#ifndef SBA_MODE_CLEAN_UP + decDummy->sba_mode = SBA_MODE_NONE; /* Todo Nokia: This is done to prevent ivas_dirac_dec_config() to not use uninitialized value. It could be considered if this should not be even accessed when not in SBA. */ +#endif + decDummy->mc_mode = MC_MODE_NONE; /* Todo Nokia: This should be also refactored in such way that it is not checked if not in MC mode */ decDummy->sba_analysis_order = 1; @@ -2369,8 +2373,10 @@ static ivas_error initMasaDummyDecForBinauralOut( decDummy->sba_analysis_order = 1; decDummy->hDecoderConfig->ivas_total_brate = IVAS_512k; /* Todo Nokia: This is preventing initialization of 2TC as 1TC, should be fixed properly in ivas_dirac_dec_config() */ - decDummy->sba_mode = SBA_MODE_NONE; /* Todo Nokia: This is done to prevent ivas_dirac_dec_config() to not use uninitialized value. It could be considered if this should not be even accessed when not in SBA. */ - decDummy->mc_mode = MC_MODE_NONE; /* Todo Nokia: This should be also refactored in such way that it is not checked if not in MC mode */ +#ifndef SBA_MODE_CLEAN_UP + decDummy->sba_mode = SBA_MODE_NONE; /* Todo Nokia: This is done to prevent ivas_dirac_dec_config() to not use uninitialized value. It could be considered if this should not be even accessed when not in SBA. */ +#endif + decDummy->mc_mode = MC_MODE_NONE; /* Todo Nokia: This should be also refactored in such way that it is not checked if not in MC mode */ ivas_output_init( &( decDummy->hOutSetup ), output_config ); if ( output_config == AUDIO_CONFIG_BINAURAL )