diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 14226ddbd9312bd78fe968c54ae3275f3ddb29cf..79e774793e74509666cb1babac428ff62e88305a 100755 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -5652,6 +5652,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 1bdad531d639fbc89d54db5ff3afb331b2816589..1d13c60dd4077a68f5db18c565171bdd3c0ce2f7 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -158,6 +158,8 @@ #define OSBA_SPLIT_RENDERING #endif +#define FIX_732_PLANAR_SBA_OSBA /* Dlb : issue 732: fix for crash in planar mode in OSBA format*/ + #define FIX_708_DPID_COMMAND_LINE /* issue 708: sanity checks for '-dpid' command-line */ #define FIX_730_DPID_NOT_SET_CORRECTLY /* Eri: issue 730: write dpid read from file in correct index, print informative error message when DPID specified is not found. */ diff --git a/lib_enc/ivas_enc.c b/lib_enc/ivas_enc.c index 7e0d245b4a640f54cfadbcafcd8ddd2f322abd1b..85426f310dee102fdbe62cb66ad228b79170047b 100644 --- a/lib_enc/ivas_enc.c +++ b/lib_enc/ivas_enc.c @@ -386,15 +386,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 #ifndef NONBE_CR_FIX_735_SBA_HP20_BRATE_SWITCHING ivas_osba_enc_reconfig( st_ivas ); #endif /* 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]; @@ -451,6 +464,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 4558f337ec58909cf18c64e2a9d84bc88e849850..6c7553ffffeecfc2a754832888373979e0df61b2 100644 --- a/lib_enc/ivas_osba_enc.c +++ b/lib_enc/ivas_osba_enc.c @@ -390,6 +390,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]; @@ -407,6 +411,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 c1c8b047e8f20eadca1eae31aa9de92cb69f1810..ee9e172dd920142b8cb20af909afd86e8642d260 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;