Loading lib_com/bitstream.c +10 −0 Original line number Diff line number Diff line Loading @@ -1975,11 +1975,21 @@ ivas_error preview_indices( } else if ( st_ivas->ivas_format == SBA_FORMAT ) { /* Read SBA planar flag and SBA order */ st_ivas->sba_planar = ( bit_stream[IVAS_FORMAT_SIGNALING_NBITS_SBA] == 1 ); st_ivas->sba_order = ( bit_stream[IVAS_FORMAT_SIGNALING_NBITS_SBA + 2] == 1 ); st_ivas->sba_order += 2 * ( bit_stream[IVAS_FORMAT_SIGNALING_NBITS_SBA + 1] == 1 ); #ifdef SBA_ORDER_BITSTREAM st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( total_brate, st_ivas->sba_order ); #endif #ifdef SBA_ORDER_BITSTREAM ivas_sba_config( total_brate, st_ivas->sba_analysis_order, -1, &( st_ivas->nchan_transport ), st_ivas->sba_planar, &( st_ivas->nSCE ), &( st_ivas->nCPE ), &( st_ivas->element_mode_init ), st_ivas->sba_mode ); #else ivas_sba_config( total_brate, st_ivas->sba_order, -1, &( st_ivas->nchan_transport ), st_ivas->sba_planar, &( st_ivas->nSCE ), &( st_ivas->nCPE ), &( st_ivas->element_mode_init ), st_ivas->sba_mode ); #endif } } Loading lib_com/ivas_cnst.h +1 −0 Original line number Diff line number Diff line Loading @@ -831,6 +831,7 @@ typedef enum { #define SBA_PLANAR_BITS 1 #define SBA_ORDER_BITS 2 #define SBA_MIN_BRATE_HOA IVAS_256k #define SBA_NHARM_HOA3 16 #define SBA_T_DESIGN_11_SIZE 70 Loading lib_com/ivas_dirac_com.c +8 −0 Original line number Diff line number Diff line Loading @@ -82,7 +82,11 @@ ivas_error ivas_dirac_config( nCPE = &( (Encoder_Struct *) st_ivas )->nCPE; element_mode = &( (Encoder_Struct *) st_ivas )->hEncoderConfig->element_mode_init; nchan_transport = &( (Encoder_Struct *) st_ivas )->nchan_transport; #ifndef SBA_ORDER_BITSTREAM sba_order = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->sba_order; #else sba_order = ( (Encoder_Struct *) st_ivas )->sba_analysis_order; #endif sba_planar = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->sba_planar; ivas_total_brate = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->ivas_total_brate; Fs = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->input_Fs; Loading @@ -107,7 +111,11 @@ ivas_error ivas_dirac_config( nCPE = &( (Decoder_Struct *) st_ivas )->nCPE; element_mode = &( (Decoder_Struct *) st_ivas )->element_mode_init; nchan_transport = &( (Decoder_Struct *) st_ivas )->nchan_transport; #ifndef SBA_ORDER_BITSTREAM sba_order = ( (Decoder_Struct *) st_ivas )->sba_order; #else sba_order = ( (Decoder_Struct *) st_ivas )->sba_analysis_order; #endif sba_planar = ( (Decoder_Struct *) st_ivas )->sba_planar; ivas_total_brate = ( (Decoder_Struct *) st_ivas )->hDecoderConfig->ivas_total_brate; Fs = ( (Decoder_Struct *) st_ivas )->hDecoderConfig->output_Fs; Loading lib_com/ivas_mdft_imdft.c 100644 → 100755 +2 −62 Original line number Diff line number Diff line Loading @@ -50,72 +50,31 @@ static void ivas_get_mdft_twid_factors( const int16_t length, #ifndef MDFT_ROM_OPTIMIZE const float **ppTwid_re, const float **ppTwid_im #else const float **ppTwid #endif ) const float **ppTwid ) { switch ( length ) { case L_FRAME48k: #ifndef MDFT_ROM_OPTIMIZE *ppTwid_re = &ivas_mdft_coeff_cos_twid_960[0]; *ppTwid_im = &ivas_mdft_coeff_sin_twid_960[0]; #else *ppTwid = &ivas_mdft_coeff_cos_twid_960[0]; #endif break; case L_FRAME32k: #ifndef MDFT_ROM_OPTIMIZE *ppTwid_re = &ivas_mdft_coeff_cos_twid_640[0]; *ppTwid_im = &ivas_mdft_coeff_sin_twid_640[0]; #else *ppTwid = &ivas_mdft_coeff_cos_twid_640[0]; #endif break; case L_FRAME16k: #ifndef MDFT_ROM_OPTIMIZE *ppTwid_re = &ivas_mdft_coeff_cos_twid_320[0]; *ppTwid_im = &ivas_mdft_coeff_sin_twid_320[0]; #else *ppTwid = &ivas_mdft_coeff_cos_twid_320[0]; #endif break; case IVAS_240_PT_LEN: #ifndef MDFT_ROM_OPTIMIZE *ppTwid_re = &ivas_mdft_coeff_cos_twid_240[0]; *ppTwid_im = &ivas_mdft_coeff_sin_twid_240[0]; #else *ppTwid = &ivas_mdft_coeff_cos_twid_240[0]; #endif break; case IVAS_160_PT_LEN: #ifndef MDFT_ROM_OPTIMIZE *ppTwid_re = &ivas_mdft_coeff_cos_twid_160[0]; *ppTwid_im = &ivas_mdft_coeff_sin_twid_160[0]; #else *ppTwid = &ivas_mdft_coeff_cos_twid_160[0]; #endif break; case IVAS_80_PT_LEN: #ifndef MDFT_ROM_OPTIMIZE *ppTwid_re = &ivas_mdft_coeff_cos_twid_80[0]; *ppTwid_im = &ivas_mdft_coeff_sin_twid_80[0]; #else *ppTwid = &ivas_mdft_coeff_cos_twid_80[0]; #endif break; case IVAS_40_PT_LEN: #ifndef MDFT_ROM_OPTIMIZE *ppTwid_re = &ivas_mdft_coeff_cos_twid_40[0]; *ppTwid_im = &ivas_mdft_coeff_sin_twid_40[0]; #else *ppTwid = &ivas_mdft_coeff_cos_twid_40[0]; #endif break; default: Loading Loading @@ -256,45 +215,26 @@ void ivas_mdft( float re[L_FRAME48k]; float im[L_FRAME48k]; int16_t j, len_by_2; #ifndef MDFT_ROM_OPTIMIZE const float *pTwid_re, *pTwid_im; #else const float *pTwid; #endif len_by_2 = mdft_length >> 1; ivas_get_mdft_twid_factors( mdft_length, #ifndef MDFT_ROM_OPTIMIZE &pTwid_re, &pTwid_im #else &pTwid #endif ); &pTwid ); if ( mdft_length == input_length ) { for ( j = 0; j < mdft_length; j++ ) { #ifndef MDFT_ROM_OPTIMIZE re[j] = pIn[j] * pTwid_re[j]; im[j] = -pIn[j] * pTwid_im[j]; #else re[j] = pIn[j] * pTwid[j]; im[j] = -pIn[j] * pTwid[mdft_length - j]; #endif } } else { for ( j = 0; j < mdft_length; j++ ) { #ifndef MDFT_ROM_OPTIMIZE re[j] = pIn[j] * pTwid_re[j] - pIn[j + mdft_length] * pTwid_im[j]; im[j] = -pIn[j] * pTwid_im[j] - pIn[j + mdft_length] * pTwid_re[j]; #else re[j] = pIn[j] * pTwid[j] - pIn[j + mdft_length] * pTwid[mdft_length - j]; im[j] = -pIn[j] * pTwid[mdft_length - j] - pIn[j + mdft_length] * pTwid[j]; #endif } } Loading lib_com/ivas_prot.h +24 −1 Original line number Diff line number Diff line Loading @@ -2155,6 +2155,7 @@ void stereo_mdct_core_dec( void splitAvailableBits( const int16_t total_bits, /* i : total available bits for TCX coding */ const int16_t split_ratio, /* i : split ratio */ const int16_t isSBAStereoMode, /* i : signal core coding for sba */ int16_t *bits_ch0, /* o : bits for channel 0 */ int16_t *bits_ch1 /* o : bits for channel 1 */ ); Loading @@ -2172,6 +2173,7 @@ void parse_stereo_from_bitstream( STEREO_MDCT_DEC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo decoder structure */ Decoder_State **sts, /* i/o: decoder state structure */ const int16_t mct_on, /* i : flag mct block (1) or stereo (0) */ const int16_t isSBAStereoMode, /* i: flag core coding for sba */ Decoder_State *st0, /* i/o: decoder state structure for Bstr */ int16_t ms_mask[NB_DIV][MAX_SFB] /* o : bandwise MS mask */ ); Loading Loading @@ -2507,6 +2509,9 @@ ivas_error stereo_memory_enc( const int16_t max_bwidth, /* i : maximum audio bandwidth */ float *tdm_last_ratio, /* o : TD stereo last ratio */ const IVAS_FORMAT ivas_format /* i : IVAS format */ , const int16_t nchan_transport /* i : number transport chans */ ); ivas_error stereo_memory_dec( Loading Loading @@ -3002,7 +3007,7 @@ void ivas_dirac_param_est_enc( *----------------------------------------------------------------------------------*/ /*! r: SBA format mode */ int16_t ivas_sba_mode_select( SBA_MODE ivas_sba_mode_select( const int32_t ivas_total_brate /* i : IVAS total bitrate */ ); Loading @@ -3028,15 +3033,25 @@ void ivas_init_dec_get_num_cldfb_instances( int16_t *numCldfbSyntheses /* o : number of CLDFB synthesis instances */ ); /*! r: Ambisonic (SBA) order */ int16_t ivas_sba_get_order( const int16_t nb_channels, /* i : Number of ambisonic channels */ const int16_t sba_planar /* i : SBA planar flag */ ); #ifdef SBA_ORDER_BITSTREAM /*! r: Ambisonic (SBA) order used for analysis and coding */ int16_t ivas_sba_get_analysis_order( const int32_t ivas_total_brate, /* i : IVAS total bitrate */ const int16_t sba_order /* i : Ambisonic (SBA) order */ ); #endif int16_t ivas_sba_get_order_transport( const int16_t nchan_transport /* i : Number of transport channels */ ); /*!r: number of Ambisonic channels */ int16_t ivas_sba_get_nchan( const int16_t sba_order, /* i : Ambisonic (SBA) order */ const int16_t sba_planar /* i : SBA planar flag */ Loading Loading @@ -3853,6 +3868,10 @@ void ivas_spar_dec_upmixer( ivas_error ivas_spar_md_enc_open( ivas_spar_md_enc_state_t **hMdEnc, /* i/o: SPAR MD encoder handle */ const ENCODER_CONFIG_HANDLE hEncoderConfig /* i : configuration structure */ #ifdef SBA_ORDER_BITSTREAM , const int16_t sba_order /* i : Ambisonic (SBA) order */ #endif ); void ivas_spar_md_enc_close( Loading @@ -3865,6 +3884,10 @@ ivas_error ivas_spar_md_enc_process( ivas_spar_md_enc_in_buf_t *pIn_buf, BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ const int16_t dtx_silence_mode #ifdef SBA_ORDER_BITSTREAM , const int16_t sba_order /* i : Ambisonic (SBA) order */ #endif ); void ivas_compute_spar_params( Loading Loading
lib_com/bitstream.c +10 −0 Original line number Diff line number Diff line Loading @@ -1975,11 +1975,21 @@ ivas_error preview_indices( } else if ( st_ivas->ivas_format == SBA_FORMAT ) { /* Read SBA planar flag and SBA order */ st_ivas->sba_planar = ( bit_stream[IVAS_FORMAT_SIGNALING_NBITS_SBA] == 1 ); st_ivas->sba_order = ( bit_stream[IVAS_FORMAT_SIGNALING_NBITS_SBA + 2] == 1 ); st_ivas->sba_order += 2 * ( bit_stream[IVAS_FORMAT_SIGNALING_NBITS_SBA + 1] == 1 ); #ifdef SBA_ORDER_BITSTREAM st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( total_brate, st_ivas->sba_order ); #endif #ifdef SBA_ORDER_BITSTREAM ivas_sba_config( total_brate, st_ivas->sba_analysis_order, -1, &( st_ivas->nchan_transport ), st_ivas->sba_planar, &( st_ivas->nSCE ), &( st_ivas->nCPE ), &( st_ivas->element_mode_init ), st_ivas->sba_mode ); #else ivas_sba_config( total_brate, st_ivas->sba_order, -1, &( st_ivas->nchan_transport ), st_ivas->sba_planar, &( st_ivas->nSCE ), &( st_ivas->nCPE ), &( st_ivas->element_mode_init ), st_ivas->sba_mode ); #endif } } Loading
lib_com/ivas_cnst.h +1 −0 Original line number Diff line number Diff line Loading @@ -831,6 +831,7 @@ typedef enum { #define SBA_PLANAR_BITS 1 #define SBA_ORDER_BITS 2 #define SBA_MIN_BRATE_HOA IVAS_256k #define SBA_NHARM_HOA3 16 #define SBA_T_DESIGN_11_SIZE 70 Loading
lib_com/ivas_dirac_com.c +8 −0 Original line number Diff line number Diff line Loading @@ -82,7 +82,11 @@ ivas_error ivas_dirac_config( nCPE = &( (Encoder_Struct *) st_ivas )->nCPE; element_mode = &( (Encoder_Struct *) st_ivas )->hEncoderConfig->element_mode_init; nchan_transport = &( (Encoder_Struct *) st_ivas )->nchan_transport; #ifndef SBA_ORDER_BITSTREAM sba_order = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->sba_order; #else sba_order = ( (Encoder_Struct *) st_ivas )->sba_analysis_order; #endif sba_planar = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->sba_planar; ivas_total_brate = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->ivas_total_brate; Fs = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->input_Fs; Loading @@ -107,7 +111,11 @@ ivas_error ivas_dirac_config( nCPE = &( (Decoder_Struct *) st_ivas )->nCPE; element_mode = &( (Decoder_Struct *) st_ivas )->element_mode_init; nchan_transport = &( (Decoder_Struct *) st_ivas )->nchan_transport; #ifndef SBA_ORDER_BITSTREAM sba_order = ( (Decoder_Struct *) st_ivas )->sba_order; #else sba_order = ( (Decoder_Struct *) st_ivas )->sba_analysis_order; #endif sba_planar = ( (Decoder_Struct *) st_ivas )->sba_planar; ivas_total_brate = ( (Decoder_Struct *) st_ivas )->hDecoderConfig->ivas_total_brate; Fs = ( (Decoder_Struct *) st_ivas )->hDecoderConfig->output_Fs; Loading
lib_com/ivas_mdft_imdft.c 100644 → 100755 +2 −62 Original line number Diff line number Diff line Loading @@ -50,72 +50,31 @@ static void ivas_get_mdft_twid_factors( const int16_t length, #ifndef MDFT_ROM_OPTIMIZE const float **ppTwid_re, const float **ppTwid_im #else const float **ppTwid #endif ) const float **ppTwid ) { switch ( length ) { case L_FRAME48k: #ifndef MDFT_ROM_OPTIMIZE *ppTwid_re = &ivas_mdft_coeff_cos_twid_960[0]; *ppTwid_im = &ivas_mdft_coeff_sin_twid_960[0]; #else *ppTwid = &ivas_mdft_coeff_cos_twid_960[0]; #endif break; case L_FRAME32k: #ifndef MDFT_ROM_OPTIMIZE *ppTwid_re = &ivas_mdft_coeff_cos_twid_640[0]; *ppTwid_im = &ivas_mdft_coeff_sin_twid_640[0]; #else *ppTwid = &ivas_mdft_coeff_cos_twid_640[0]; #endif break; case L_FRAME16k: #ifndef MDFT_ROM_OPTIMIZE *ppTwid_re = &ivas_mdft_coeff_cos_twid_320[0]; *ppTwid_im = &ivas_mdft_coeff_sin_twid_320[0]; #else *ppTwid = &ivas_mdft_coeff_cos_twid_320[0]; #endif break; case IVAS_240_PT_LEN: #ifndef MDFT_ROM_OPTIMIZE *ppTwid_re = &ivas_mdft_coeff_cos_twid_240[0]; *ppTwid_im = &ivas_mdft_coeff_sin_twid_240[0]; #else *ppTwid = &ivas_mdft_coeff_cos_twid_240[0]; #endif break; case IVAS_160_PT_LEN: #ifndef MDFT_ROM_OPTIMIZE *ppTwid_re = &ivas_mdft_coeff_cos_twid_160[0]; *ppTwid_im = &ivas_mdft_coeff_sin_twid_160[0]; #else *ppTwid = &ivas_mdft_coeff_cos_twid_160[0]; #endif break; case IVAS_80_PT_LEN: #ifndef MDFT_ROM_OPTIMIZE *ppTwid_re = &ivas_mdft_coeff_cos_twid_80[0]; *ppTwid_im = &ivas_mdft_coeff_sin_twid_80[0]; #else *ppTwid = &ivas_mdft_coeff_cos_twid_80[0]; #endif break; case IVAS_40_PT_LEN: #ifndef MDFT_ROM_OPTIMIZE *ppTwid_re = &ivas_mdft_coeff_cos_twid_40[0]; *ppTwid_im = &ivas_mdft_coeff_sin_twid_40[0]; #else *ppTwid = &ivas_mdft_coeff_cos_twid_40[0]; #endif break; default: Loading Loading @@ -256,45 +215,26 @@ void ivas_mdft( float re[L_FRAME48k]; float im[L_FRAME48k]; int16_t j, len_by_2; #ifndef MDFT_ROM_OPTIMIZE const float *pTwid_re, *pTwid_im; #else const float *pTwid; #endif len_by_2 = mdft_length >> 1; ivas_get_mdft_twid_factors( mdft_length, #ifndef MDFT_ROM_OPTIMIZE &pTwid_re, &pTwid_im #else &pTwid #endif ); &pTwid ); if ( mdft_length == input_length ) { for ( j = 0; j < mdft_length; j++ ) { #ifndef MDFT_ROM_OPTIMIZE re[j] = pIn[j] * pTwid_re[j]; im[j] = -pIn[j] * pTwid_im[j]; #else re[j] = pIn[j] * pTwid[j]; im[j] = -pIn[j] * pTwid[mdft_length - j]; #endif } } else { for ( j = 0; j < mdft_length; j++ ) { #ifndef MDFT_ROM_OPTIMIZE re[j] = pIn[j] * pTwid_re[j] - pIn[j + mdft_length] * pTwid_im[j]; im[j] = -pIn[j] * pTwid_im[j] - pIn[j + mdft_length] * pTwid_re[j]; #else re[j] = pIn[j] * pTwid[j] - pIn[j + mdft_length] * pTwid[mdft_length - j]; im[j] = -pIn[j] * pTwid[mdft_length - j] - pIn[j + mdft_length] * pTwid[j]; #endif } } Loading
lib_com/ivas_prot.h +24 −1 Original line number Diff line number Diff line Loading @@ -2155,6 +2155,7 @@ void stereo_mdct_core_dec( void splitAvailableBits( const int16_t total_bits, /* i : total available bits for TCX coding */ const int16_t split_ratio, /* i : split ratio */ const int16_t isSBAStereoMode, /* i : signal core coding for sba */ int16_t *bits_ch0, /* o : bits for channel 0 */ int16_t *bits_ch1 /* o : bits for channel 1 */ ); Loading @@ -2172,6 +2173,7 @@ void parse_stereo_from_bitstream( STEREO_MDCT_DEC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo decoder structure */ Decoder_State **sts, /* i/o: decoder state structure */ const int16_t mct_on, /* i : flag mct block (1) or stereo (0) */ const int16_t isSBAStereoMode, /* i: flag core coding for sba */ Decoder_State *st0, /* i/o: decoder state structure for Bstr */ int16_t ms_mask[NB_DIV][MAX_SFB] /* o : bandwise MS mask */ ); Loading Loading @@ -2507,6 +2509,9 @@ ivas_error stereo_memory_enc( const int16_t max_bwidth, /* i : maximum audio bandwidth */ float *tdm_last_ratio, /* o : TD stereo last ratio */ const IVAS_FORMAT ivas_format /* i : IVAS format */ , const int16_t nchan_transport /* i : number transport chans */ ); ivas_error stereo_memory_dec( Loading Loading @@ -3002,7 +3007,7 @@ void ivas_dirac_param_est_enc( *----------------------------------------------------------------------------------*/ /*! r: SBA format mode */ int16_t ivas_sba_mode_select( SBA_MODE ivas_sba_mode_select( const int32_t ivas_total_brate /* i : IVAS total bitrate */ ); Loading @@ -3028,15 +3033,25 @@ void ivas_init_dec_get_num_cldfb_instances( int16_t *numCldfbSyntheses /* o : number of CLDFB synthesis instances */ ); /*! r: Ambisonic (SBA) order */ int16_t ivas_sba_get_order( const int16_t nb_channels, /* i : Number of ambisonic channels */ const int16_t sba_planar /* i : SBA planar flag */ ); #ifdef SBA_ORDER_BITSTREAM /*! r: Ambisonic (SBA) order used for analysis and coding */ int16_t ivas_sba_get_analysis_order( const int32_t ivas_total_brate, /* i : IVAS total bitrate */ const int16_t sba_order /* i : Ambisonic (SBA) order */ ); #endif int16_t ivas_sba_get_order_transport( const int16_t nchan_transport /* i : Number of transport channels */ ); /*!r: number of Ambisonic channels */ int16_t ivas_sba_get_nchan( const int16_t sba_order, /* i : Ambisonic (SBA) order */ const int16_t sba_planar /* i : SBA planar flag */ Loading Loading @@ -3853,6 +3868,10 @@ void ivas_spar_dec_upmixer( ivas_error ivas_spar_md_enc_open( ivas_spar_md_enc_state_t **hMdEnc, /* i/o: SPAR MD encoder handle */ const ENCODER_CONFIG_HANDLE hEncoderConfig /* i : configuration structure */ #ifdef SBA_ORDER_BITSTREAM , const int16_t sba_order /* i : Ambisonic (SBA) order */ #endif ); void ivas_spar_md_enc_close( Loading @@ -3865,6 +3884,10 @@ ivas_error ivas_spar_md_enc_process( ivas_spar_md_enc_in_buf_t *pIn_buf, BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ const int16_t dtx_silence_mode #ifdef SBA_ORDER_BITSTREAM , const int16_t sba_order /* i : Ambisonic (SBA) order */ #endif ); void ivas_compute_spar_params( Loading