From 5ead16ce00c248e65b5ddf5d0317bf219b815371 Mon Sep 17 00:00:00 2001 From: rtyag Date: Tue, 22 Aug 2023 17:01:59 +1000 Subject: [PATCH] fix for issue 732, plana sba in OSBA mode --- lib_com/ivas_prot.h | 4 ++++ lib_com/options.h | 2 +- lib_enc/ivas_enc.c | 18 +++++++++++++++++- lib_enc/ivas_osba_enc.c | 11 +++++++++++ lib_enc/lib_enc.c | 5 +++++ 5 files changed, 38 insertions(+), 2 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index a9fba371ab..4486246a8a 100755 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -5671,6 +5671,10 @@ void ivas_osba_enc( const ISM_MODE ism_mode, /* i : ISM mode */ const int16_t sba_analysis_order, /* i : SBA order evaluated in DirAC/SPAR encoder */ const int32_t input_Fs /* i : input sampling rate */ +#ifdef FIX_732_PLANAR_SBA_OSBA + , + const int16_t sba_planar /* i : planar SBA flag*/ +#endif ); ivas_error ivas_masa_ism_data_open( diff --git a/lib_com/options.h b/lib_com/options.h index be3261f808..523a71e466 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -167,7 +167,7 @@ #define FIX_718_JBM_MD_UDPATE /* Fhg: fix issue #718, wrong setting of the update flag in the TD obj renderer in the JBM path */ #define FIX_719_CRASH_IN_CLEANUP /* VA: issue 719: fix Decoder crash after call to goto to cleanup */ - +#define FIX_732_PLANAR_SBA_OSBA /*Dlb : issue 732: fix for crash in planar mode in OSBA format*/ /* ################## End BE DEVELOPMENT switches ######################### */ diff --git a/lib_enc/ivas_enc.c b/lib_enc/ivas_enc.c index 8096199382..67dd2662fb 100644 --- a/lib_enc/ivas_enc.c +++ b/lib_enc/ivas_enc.c @@ -368,15 +368,28 @@ ivas_error ivas_enc( } else if ( ivas_format == SBA_ISM_FORMAT ) { +#ifdef FIX_732_PLANAR_SBA_OSBA + int16_t planar_sba_orig; + planar_sba_orig = hEncoderConfig->sba_planar; +#endif ivas_osba_enc_reconfig( st_ivas ); /* Analyze objects and determine needed audio signals */ ivas_osba_enc( st_ivas->hOSba, st_ivas->hIsmMetaData, data_f, input_frame, hEncoderConfig->nchan_ism, st_ivas->ism_mode, st_ivas->sba_analysis_order, - hEncoderConfig->input_Fs ); + hEncoderConfig->input_Fs +#ifdef FIX_732_PLANAR_SBA_OSBA + , + hEncoderConfig->sba_planar +#endif + ); if ( st_ivas->ism_mode == ISM_MODE_NONE ) { +#ifdef FIX_732_PLANAR_SBA_OSBA + /*once SBA and ISM are combined into SBA signal then disable planar flag*/ + hEncoderConfig->sba_planar = 0; +#endif if ( st_ivas->nchan_transport == 1 ) { st = st_ivas->hSCE[st_ivas->nSCE - 1]->hCoreCoder[0]; @@ -433,6 +446,9 @@ ivas_error ivas_enc( return error; } } +#ifdef FIX_732_PLANAR_SBA_OSBA + hEncoderConfig->sba_planar = planar_sba_orig; +#endif } else { diff --git a/lib_enc/ivas_osba_enc.c b/lib_enc/ivas_osba_enc.c index 8630c97671..53d3f345db 100644 --- a/lib_enc/ivas_osba_enc.c +++ b/lib_enc/ivas_osba_enc.c @@ -382,6 +382,10 @@ void ivas_osba_enc( const ISM_MODE ism_mode, /* i : ISM mode */ const int16_t sba_analysis_order, /* i : SBA order evaluated in DirAC/SPAR encoder */ const int32_t input_Fs /* i : input sampling rate*/ +#ifdef FIX_732_PLANAR_SBA_OSBA + , + const int16_t sba_planar /* i : planar SBA flag*/ +#endif ) { float data_out_f[MAX_INPUT_CHANNELS][L_FRAME48k]; @@ -399,6 +403,13 @@ void ivas_osba_enc( /* Convert ISM to SBA */ ivas_osba_render_ism_to_sba( data_in_f, data_out_f, input_frame, sba_analysis_order, nchan_ism, hIsmMeta, hOSba->prev_object_dm_gains, hOSba->interpolator ); +#ifdef FIX_732_PLANAR_SBA_OSBA + if ( sba_planar ) + { + ivas_sba_zero_vert_comp( &( data_in_f[nchan_ism] ), sba_analysis_order, sba_planar, input_frame ); + } +#endif + /* Merge SBA signals */ ivas_merge_sba_transports( data_out_f, &( data_in_f[nchan_ism] ), data_in_f, input_frame, sba_analysis_order ); } diff --git a/lib_enc/lib_enc.c b/lib_enc/lib_enc.c index c1c8b047e8..ee9e172dd9 100644 --- a/lib_enc/lib_enc.c +++ b/lib_enc/lib_enc.c @@ -574,7 +574,12 @@ ivas_error IVAS_ENC_ConfigureForSBAObjects( st_ivas->hEncoderConfig->sba_order = order; /* Input in ACN/SN3D in all cases (3D and planar): get number of channels */ +#ifdef FIX_732_PLANAR_SBA_OSBA + /*Input file will always contain all channels for a given order irrespective of planar flag*/ + st_ivas->hEncoderConfig->nchan_inp = ivas_sba_get_nchan( st_ivas->hEncoderConfig->sba_order, 0 ) + numObjects; +#else st_ivas->hEncoderConfig->nchan_inp = ivas_sba_get_nchan( st_ivas->hEncoderConfig->sba_order, isPlanar ) + numObjects; +#endif st_ivas->hEncoderConfig->Opt_PCA_ON = (int16_t) Opt_PCA_ON; -- GitLab