From ef7604b6d5f558db663ff4e023c3b9bad981a4de Mon Sep 17 00:00:00 2001 From: vaclav Date: Mon, 11 Aug 2025 11:40:37 +0200 Subject: [PATCH 1/2] port MR, part1 --- lib_com/ivas_prot_fx.h | 50 ++++++++++++++++++++------------- lib_com/ivas_sba_config_fx.c | 5 ++-- lib_com/options.h | 1 + lib_dec/ivas_dirac_dec_fx.c | 4 ++- lib_dec/ivas_init_dec_fx.c | 1 + lib_enc/ivas_dirac_enc_fx.c | 2 +- lib_enc/ivas_init_enc_fx.c | 19 ++++++++++++- lib_enc/ivas_qmetadata_enc_fx.c | 2 +- lib_enc/ivas_spar_md_enc_fx.c | 2 ++ 9 files changed, 61 insertions(+), 25 deletions(-) diff --git a/lib_com/ivas_prot_fx.h b/lib_com/ivas_prot_fx.h index 5b57c3501..adfa52f95 100644 --- a/lib_com/ivas_prot_fx.h +++ b/lib_com/ivas_prot_fx.h @@ -2337,7 +2337,7 @@ void ivas_dirac_dec_read_BS_fx( const Word16 last_bit_pos, /* i : last read bitstream position */ const Word16 hodirac_flag, /* i : flag to indicate HO-DirAC mode */ #ifdef NONBE_FIX_1052_SBA_EXT - const Word16 nchan_transport, /* i : number of transport channels */ + const Word16 nchan_transport, /* i : number of transport channels */ #endif Word16 *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ ); @@ -2500,7 +2500,7 @@ Word16 ivas_sba_get_nchan_metadata_fx( ); #ifdef NONBE_FIX_1052_SBA_EXT -/*! r: number of bits in SPAR SID frame */ +/*! r: number of bits in SBQ SID frame */ Word16 ivas_sba_spar_sid_bitlen_fx( const Word16 nchan_transport /* i : number of transport channels */ ); @@ -3499,7 +3499,9 @@ ivas_error ivas_qmetadata_enc_encode_hr_384_512_fx( BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ IVAS_QMETADATA *hQMetaData, /* i/o: metadata handle */ const Word16 bits_sph_idx, - const Word16 bits_sp_coh ); + const Word16 bits_sp_coh +); + void ivas_merge_masa_metadata_fx( MASA_ENCODER_HANDLE hMasa, /* i/o: MASA enc handle. source for MASA metadata and combined metadata will be here */ OMASA_SPATIAL_META_HANDLE hOMasaMeta /* i : ISM-object metadata to be merged with the MASA metadata */ @@ -3511,7 +3513,7 @@ void ivas_qmetadata_enc_sid_encode_fx( IVAS_QMETADATA *q_metadata, /* i/o: metadata handle */ const Word16 masa_sid_descriptor, /* i : description of MASA SID coding structure*/ #ifdef NONBE_FIX_1052_SBA_EXT - const Word16 nchan_transport, /* i : number of transport channels */ + const Word16 nchan_transport, /* i : number of transport channels */ #endif const Word16 ivas_format /* i : ivas format */ ); @@ -3519,14 +3521,16 @@ void ivas_param_mc_enc_fx( Encoder_Struct *st_ivas, /* i/o: IVAS Encoder handle */ BSTR_ENC_HANDLE hMetaData, /* i/o: IVAS Metadata bitstream handle */ Word32 *data_f_fx[], /* i/o: input/transport MC data Q11 */ - const Word16 input_frame /* i : input frame length */ + const Word1 + 6 input_frame /* i : input frame length */ ); void ivas_merge_masa_transports_fx( Word32 data_in_f1_fx[][L_FRAME48k], // Qx Word32 *data_in_f2_fx[], // Qx Word32 *data_out_f_fx[], // Qx const Word16 input_frame, - const Word16 num_transport_channels ); + const Word16 num_transport_channels +); void ivas_param_mc_enc_close_fx( PARAM_MC_ENC_HANDLE *hParamMC, /* i/o: Parametric MC encoder handle */ @@ -3623,24 +3627,31 @@ ivas_error ivas_masa_encode_fx( ); void ivas_write_format_sid_fx( - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - const Word16 element_mode, /* i : element bitrate */ - BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + const Word16 element_mode, /* i : element bitrate */ +#ifdef NONBE_FIX_1052_SBA_EXT_FIX + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const Word16 sba_order, /* i : Ambisonic (SBA) order */ + const Word16 sba_planar /* i : SBA planar flag */ +#else +BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ +#endif ); -void ivas_write_format_fx( /* i/o: IVAS encoder structure */ - Encoder_Struct *st_ivas ); +void ivas_write_format_fx( + Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ +); ivas_error create_sce_enc_fx( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - const Word16 sce_id, /* i : SCE # identifier */ - const Word32 element_brate /* i : element bitrate */ + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const Word16 sce_id, /* i : SCE # identifier */ + const Word32 element_brate /* i : element bitrate */ ); ivas_error create_cpe_enc_fx( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - const Word16 cpe_id, /* i : CPE # identifier */ - const Word32 element_brate /* i : element bitrate */ + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const Word16 cpe_id, /* i : CPE # identifier */ + const Word32 element_brate /* i : element bitrate */ ); void ivas_quantise_real_values_fx( @@ -5847,10 +5858,11 @@ ivas_error ivas_dirac_enc_fx( const Word16 dtx_vad, /* i : DTX vad flag */ const IVAS_FORMAT ivas_format, /* i : ivas format */ #ifdef NONBE_FIX_1052_SBA_EXT - const Word16 nchan_transport, /* i : number of transport channels */ + const Word16 nchan_transport, /* i : number of transport channels */ #endif const Word16 hodirac_flag, /* i : hodirac flag */ - const Word16 shift ); + const Word16 shift +); ivas_error ivas_spar_md_enc_init_fx( ivas_spar_md_enc_state_t *hMdEnc, /* o : MD encoder handle */ diff --git a/lib_com/ivas_sba_config_fx.c b/lib_com/ivas_sba_config_fx.c index 999caf3cc..bce2be80c 100644 --- a/lib_com/ivas_sba_config_fx.c +++ b/lib_com/ivas_sba_config_fx.c @@ -171,10 +171,10 @@ Word16 ivas_sba_get_nchan_fx( /*-------------------------------------------------------------------* * ivas_sba_spar_sid_bitlen_fx() * - * Get number of bits in SPAR SID frame + * Get number of bits in SBA SID frame *-------------------------------------------------------------------*/ -/*! r: number of bits in SPAR SID frame */ +/*! r: number of bits in SBA SID frame */ Word16 ivas_sba_spar_sid_bitlen_fx( const Word16 nchan_transport /* i : number of transport channels */ ) @@ -191,6 +191,7 @@ Word16 ivas_sba_spar_sid_bitlen_fx( } #endif + /*-------------------------------------------------------------------* * ivas_sba_get_nchan_metadata() * diff --git a/lib_com/options.h b/lib_com/options.h index d1e0bcee2..fc1dff8d7 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -124,6 +124,7 @@ #define NONBE_FIX_MC_LFE_LPF /* Dlb: Adding the LFE LPF filter back for MC content. */ #define NONBE_FIX_1074_NOBJ_SIGNAL_OMASA_LBR /* Nok: issue 1074 fixing number of objects signaling in OMASA low rate */ #define FIX_1222_OMASA_DEC_CHANNEL_BUFFERS /* VA: issue 1222: Reduction of the number of channel buffers in OMASA decoder */ +#define NONBE_FIX_1052_SBA_EXT_FIX /* VA: SBA external output support fix - do not overwrite "output_config" parameter */ /* #################### End BASOP porting switches ############################ */ diff --git a/lib_dec/ivas_dirac_dec_fx.c b/lib_dec/ivas_dirac_dec_fx.c index be043d5b8..fd70a414d 100644 --- a/lib_dec/ivas_dirac_dec_fx.c +++ b/lib_dec/ivas_dirac_dec_fx.c @@ -1247,7 +1247,7 @@ void ivas_dirac_dec_read_BS_fx( const Word16 last_bit_pos, /* i : last read bitstream position */ const Word16 hodirac_flag, /* i : flag to indicate HO-DirAC mode */ #ifdef NONBE_FIX_1052_SBA_EXT - const Word16 nchan_transport, /* i : number of transport channels */ + const Word16 nchan_transport, /* i : number of transport channels */ #endif Word16 *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ ) @@ -1292,6 +1292,7 @@ void ivas_dirac_dec_read_BS_fx( set32_fx( hQMetaData->q_direction[0].band_data[b].elevation_fx, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); } } + #ifdef NONBE_FIX_1052_SBA_EXT *nb_bits = add( *nb_bits, ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), nchan_transport, NULL, SBA_FORMAT ) ); move16(); @@ -1393,6 +1394,7 @@ void ivas_dirac_dec_read_BS_fx( *nb_bits = add( *nb_bits, ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), 0, NULL, SBA_FORMAT ) ); move16(); #endif + FOR( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) { hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth_fx[i] = hQMetaData->q_direction[0].band_data[1].azimuth_fx[0]; diff --git a/lib_dec/ivas_init_dec_fx.c b/lib_dec/ivas_init_dec_fx.c index 57e0f475b..292cd3a80 100644 --- a/lib_dec/ivas_init_dec_fx.c +++ b/lib_dec/ivas_init_dec_fx.c @@ -1076,6 +1076,7 @@ static ivas_error ivas_read_format( *num_bits_read = add( *num_bits_read, SBA_ORDER_BITS ); move16(); #endif + if ( st_ivas->sba_analysis_order == 0 ) { st_ivas->sba_analysis_order = SBA_FOA_ORDER; diff --git a/lib_enc/ivas_dirac_enc_fx.c b/lib_enc/ivas_dirac_enc_fx.c index b6b41b847..bc1f65c95 100644 --- a/lib_enc/ivas_dirac_enc_fx.c +++ b/lib_enc/ivas_dirac_enc_fx.c @@ -322,7 +322,7 @@ ivas_error ivas_dirac_enc_fx( const Word16 dtx_vad, /* i : DTX vad flag Q0*/ const IVAS_FORMAT ivas_format, /* i : ivas format */ #ifdef NONBE_FIX_1052_SBA_EXT - const Word16 nchan_transport, /* i : number of transport channels */ + const Word16 nchan_transport, /* i : number of transport channels */ #endif const Word16 hodirac_flag, /* i : hodirac flag Q0*/ const Word16 shift ) diff --git a/lib_enc/ivas_init_enc_fx.c b/lib_enc/ivas_init_enc_fx.c index 3f5b8f863..8c41a62fb 100644 --- a/lib_enc/ivas_init_enc_fx.c +++ b/lib_enc/ivas_init_enc_fx.c @@ -153,7 +153,13 @@ void ivas_write_format_fx( void ivas_write_format_sid_fx( const IVAS_FORMAT ivas_format, /* i : IVAS format */ const Word16 element_mode, /* i : element bitrate Q0*/ - BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ +#ifdef NONBE_FIX_1052_SBA_EXT_FIX + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const Word16 sba_order, /* i : Ambisonic (SBA) order */ + const Word16 sba_planar /* i : SBA planar flag */ +#else + BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ +#endif ) { Word16 ind = 0; /* to avoid compilation warning */ @@ -220,6 +226,17 @@ void ivas_write_format_sid_fx( push_indice( hBstr, IND_IVAS_FORMAT, ind, SID_FORMAT_NBITS ); +#ifdef NONBE_FIX_1052_SBA_EXT_FIX + IF( EQ_32( ivas_format, SBA_FORMAT ) ) + { + /* Write SBA planar flag */ + push_indice( hBstr, IND_SMODE, sba_planar, SBA_PLANAR_BITS ); + + /* Write SBA order */ + push_indice( hBstr, IND_SMODE, sba_order, SBA_ORDER_BITS ); + } +#endif + return; } diff --git a/lib_enc/ivas_qmetadata_enc_fx.c b/lib_enc/ivas_qmetadata_enc_fx.c index facbde22f..ba658b31a 100644 --- a/lib_enc/ivas_qmetadata_enc_fx.c +++ b/lib_enc/ivas_qmetadata_enc_fx.c @@ -868,7 +868,7 @@ void ivas_qmetadata_enc_sid_encode_fx( IVAS_QMETADATA *q_metadata, /* i/o: metadata handle */ const Word16 masa_sid_descriptor, /* i : description of MASA SID coding structure */ #ifdef NONBE_FIX_1052_SBA_EXT - const Word16 nchan_transport, /* i : number of transport channels */ + const Word16 nchan_transport, /* i : number of transport channels */ #endif const Word16 ivas_format /* i : IVAS format */ ) diff --git a/lib_enc/ivas_spar_md_enc_fx.c b/lib_enc/ivas_spar_md_enc_fx.c index 954ca5149..14f8acba6 100644 --- a/lib_enc/ivas_spar_md_enc_fx.c +++ b/lib_enc/ivas_spar_md_enc_fx.c @@ -1715,6 +1715,7 @@ static void ivas_write_parameter_bitstream_dtx_fx( #ifdef NONBE_FIX_1052_SBA_EXT Word16 sba_spar_bitlen; #endif + sid_bits_len = hMetaData->nb_bits_tot; move16(); pr_min_max[0] = pSpar_md->min_max_fx[0]; @@ -1796,6 +1797,7 @@ static void ivas_write_parameter_bitstream_dtx_fx( #else zero_pad_bits = sub( i_mult( SPAR_DTX_BANDS, SPAR_SID_BITS_TAR_PER_BAND ), sid_bits_len ); #endif + assert( zero_pad_bits >= 0 ); IF( EQ_16( num_dmx[0], 2 ) ) { -- GitLab From 5937dc9e390d8ff587448742b0a20d90c9f994f8 Mon Sep 17 00:00:00 2001 From: vaclav Date: Mon, 11 Aug 2025 16:20:00 +0200 Subject: [PATCH 2/2] - fix porting - remove doubled initialization --- lib_dec/ivas_dirac_dec_fx.c | 11 ----------- lib_dec/ivas_init_dec_fx.c | 2 +- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/lib_dec/ivas_dirac_dec_fx.c b/lib_dec/ivas_dirac_dec_fx.c index fd70a414d..2516d4ebd 100644 --- a/lib_dec/ivas_dirac_dec_fx.c +++ b/lib_dec/ivas_dirac_dec_fx.c @@ -2271,16 +2271,6 @@ void ivas_dirac_dec_render_sf_fx( move16(); move16(); - - FOR( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) - { - FOR( Word16 j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - set32_fx( Cldfb_RealBuffer_fx[i][j], 0, CLDFB_NO_CHANNELS_MAX ); - set32_fx( Cldfb_ImagBuffer_fx[i][j], 0, CLDFB_NO_CHANNELS_MAX ); - } - } - /* local copies of azi, ele, diffuseness */ Word16 azimuth[CLDFB_NO_CHANNELS_MAX]; Word16 elevation[CLDFB_NO_CHANNELS_MAX]; @@ -2327,7 +2317,6 @@ void ivas_dirac_dec_render_sf_fx( push_wmops( "ivas_dirac_dec_render" ); /* Initialize aux buffers */ - FOR( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) { FOR( Word16 j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) diff --git a/lib_dec/ivas_init_dec_fx.c b/lib_dec/ivas_init_dec_fx.c index b415f5f7e..f79ca8cca 100644 --- a/lib_dec/ivas_init_dec_fx.c +++ b/lib_dec/ivas_init_dec_fx.c @@ -1766,7 +1766,7 @@ ivas_error ivas_init_decoder_fx( test(); #ifdef NONBE_FIX_1052_SBA_EXT_FIX test(); - IF( NE_32( hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_FOA ) && NE_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_STEREO ) && NE_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_MONO ) && !( EQ_32( hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) && NE_32( st_ivas->intern_config, IVAS_AUDIO_CONFIG_FOA ) ) ) + IF( NE_32( hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_FOA ) && NE_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_STEREO ) && NE_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_MONO ) && !( EQ_32( hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) && EQ_32( st_ivas->intern_config, IVAS_AUDIO_CONFIG_FOA ) ) ) #else IF( NE_32( hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_FOA ) && NE_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_STEREO ) && NE_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_MONO ) ) #endif -- GitLab