diff --git a/lib_com/options.h b/lib_com/options.h old mode 100644 new mode 100755 index 73c25a9c74d48ac8221f45cadec544114a3f70bb..d295cb628e1b86405030486599bee8b1ee4963fa --- a/lib_com/options.h +++ b/lib_com/options.h @@ -155,6 +155,7 @@ #define SBA_AND_OBJECTS #ifdef SBA_AND_OBJECTS #define OSBA_BR_SWITCHING +#define FIX_691_OSBA_NULL_META /* FhG: Issue 691: Fix crashes for OSBA with NULL metadata */ #endif /*#define SPLIT_REND_WITH_HEAD_ROT*/ /* Dlb,FhG: Split Rendering contributions 21 and 35 */ diff --git a/lib_dec/ivas_ism_metadata_dec.c b/lib_dec/ivas_ism_metadata_dec.c index e21566dd244d51dc6953fc3eec0e42ff748ca1e8..587eddd195e43c9c2c727534d02378e0920a3bda 100755 --- a/lib_dec/ivas_ism_metadata_dec.c +++ b/lib_dec/ivas_ism_metadata_dec.c @@ -321,7 +321,11 @@ ivas_error ivas_ism_metadata_dec( } /* read ISM_NO_META class signalling */ +#ifdef FIX_691_OSBA_NULL_META + if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_SBA_MODE_DISC ) +#else if ( ism_mode == ISM_MODE_DISC ) +#endif { for ( ch = 0; ch < *nchan_transport; ch++ ) { @@ -356,6 +360,9 @@ ivas_error ivas_ism_metadata_dec( } } else +#endif +#ifdef FIX_691_OSBA_NULL_META + if ( ism_mode != ISM_SBA_MODE_DISC ) #endif { if ( null_metadata_flag[ch] ) diff --git a/lib_enc/ivas_ism_metadata_enc.c b/lib_enc/ivas_ism_metadata_enc.c old mode 100755 new mode 100644 index ac67be6585a3de266e3e53a55d3027fbfedc9ac6..1b608987ae6adec50545cd3795ea2251aa8bcaa6 --- a/lib_enc/ivas_ism_metadata_enc.c +++ b/lib_enc/ivas_ism_metadata_enc.c @@ -375,6 +375,60 @@ ivas_error ivas_ism_metadata_enc( } } +#ifdef FIX_691_OSBA_NULL_META + /* write ISM metadata flag (one per object) */ + for ( ch = 0; ch < nchan_transport; ch++ ) + { +#ifdef MASA_AND_OBJECTS + if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) + { + /* flags will be written in ivas_masa_encode() */ + hIsmMeta[ch]->ism_imp = ism_imp[ch]; + hIsmMeta[ch]->ism_md_null_flag = null_metadata_flag[ch]; + hIsmMeta[ch]->ism_md_lowrate_flag = lowrate_metadata_flag[ch]; + } + else + { +#endif + if ( null_metadata_flag[ch] ) + { + /* signal NULL metadata frame */ + push_indice( hBstr, IND_ISM_MD_NULL_FLAG, 1, ISM_METADATA_MD_FLAG_BITS ); + + /* write the ISM class to ISM_NO_META and again the true ISM class */ + if ( ism_mode != ISM_SBA_MODE_DISC ) + { + push_indice( hBstr, IND_ISM_METADATA_FLAG, ISM_NO_META, ISM_METADATA_FLAG_BITS ); + push_indice( hBstr, IND_ISM_MD_INACTIVE_FLAG, ism_imp[ch], ISM_METADATA_FLAG_BITS ); + } + else + { + push_indice( hBstr, IND_ISM_METADATA_FLAG, ISM_NO_META, 1 ); + } + } + else if ( ism_mode != ISM_SBA_MODE_DISC ) + { + push_indice( hBstr, IND_ISM_METADATA_FLAG, ism_imp[ch], ISM_METADATA_FLAG_BITS ); + + if ( ism_imp[ch] == ISM_NO_META ) + { + /* signal low-rate ISM_NO_META frame */ + push_indice( hBstr, IND_ISM_MD_NULL_FLAG, 0, ISM_METADATA_MD_FLAG_BITS ); + + /* signal presence of MD in low-rate ISM_NO_META frame */ + push_indice( hBstr, IND_ISM_MD_INACTIVE_FLAG, lowrate_metadata_flag[ch], ISM_METADATA_INACTIVE_FLAG_BITS ); + } + } + else /*ism_mode == ISM_SBA_MODE_DISC*/ + { + /* all objects are considered active*/ + push_indice( hBstr, IND_ISM_METADATA_FLAG, 1, 1 ); + } +#ifdef MASA_AND_OBJECTS + } +#endif + } +#else /* write ISM metadata flag (one per object) */ for ( ch = 0; ch < nchan_transport; ch++ ) { @@ -426,6 +480,8 @@ ivas_error ivas_ism_metadata_enc( #endif } +#endif + if ( ism_metadata_flag_global ) { @@ -703,6 +759,13 @@ ivas_error ivas_ism_metadata_enc( } } } +#ifdef FIX_691_OSBA_NULL_META + else if ( ism_mode == ISM_SBA_MODE_DISC ) + { + pop_wmops(); + return error; + } +#endif #ifdef MASA_AND_OBJECTS /*----------------------------------------------------------------*