Commit 33ff80ab authored by reutelhuber's avatar reutelhuber
Browse files

Merge branch '691-osba-crash-for-stereo-output-2' into 'main'

Resolve "OSBA crash for stereo output (encoder crash with NULL metadata)"

See merge request !962
parents 5b128d31 b137a7db
Loading
Loading
Loading
Loading
Loading

lib_com/options.h

100644 → 100755
+1 −0
Original line number Diff line number Diff line
@@ -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 */
+7 −0
Original line number Diff line number Diff line
@@ -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] )
+63 −0
Original line number Diff line number Diff line
@@ -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
    /*----------------------------------------------------------------*