Commit 7b36c742 authored by lintervo's avatar lintervo
Browse files

Merge branch '1431_change_object_editing_gain_limitation' into 'main'

[non-be] Add object editing gain limitations as agreed.

See merge request !2361
parents 679f394d e9b1da18
Loading
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -177,6 +177,12 @@ typedef enum
#define MAX_SPAR_INTERNAL_CHANNELS              IVAS_SPAR_MAX_CH
#define MAX_CLDFB_DIGEST_CHANNELS               3                           /* == maximum of ParamISM TCs and ParamMC TCs */

#ifdef FIX_GAIN_EDIT_LIMITS
#define EDIT_GAIN_MIN                           0.0630957f                     /* Minimum allowed gain edit with parametric modes: -24 dB */
#define EDIT_GAIN_MAX                           3.9810719f                     /* Maximum allowed gain edit: +12 dB */
#endif


typedef enum
{
    TC_BUFFER_MODE_RENDERER,
+1 −0
Original line number Diff line number Diff line
@@ -194,6 +194,7 @@
#define FIX_1330_JBM_MEMORY_FIX                         /* VA: basop issue: 2179 fix non-BE difference in FIX_1330_JBM_MEMORY */
#define NONBE_1380_OMASA_BUILD_DIFF                     /* Nokia: Fix for issue #1380: Large differences in OMASA output between Debug and Release builds */
#define NONBE_FIX_1426_STEREO_PANNING_BETWEEN_OPT_LEVEL /* Nokia: Adjustments in remaining stereo panning functions to make them BE between Debug and Release */
#define FIX_GAIN_EDIT_LIMITS                                 /* Harmonize gain edit limits for all opertation points. For all modes, limit to max +12dB. For parametric modes, limit to min -24dB. */


#define FIX_1430_EVS_STEREO_DMX_CHANNEL_DISAPPEARING    /* Orange: Fix for basop issue 2184 - to prevent one channel from becoming inaudible in the mono downmix output */
+85 −0
Original line number Diff line number Diff line
@@ -1528,13 +1528,35 @@ ivas_error IVAS_DEC_SetEditableParameters(
                st_ivas->hIsmMetaData[obj]->edited_radius = hIvasEditableParameters.ism_metadata[obj].radius;
                st_ivas->hIsmMetaData[obj]->edited_yaw = hIvasEditableParameters.ism_metadata[obj].yaw;
                st_ivas->hIsmMetaData[obj]->edited_pitch = hIvasEditableParameters.ism_metadata[obj].pitch;
#ifdef FIX_GAIN_EDIT_LIMITS
                if ( hIvasEditableParameters.ism_metadata[obj].gain > EDIT_GAIN_MAX )
                {
                    st_ivas->hIsmMetaData[obj]->edited_gain = EDIT_GAIN_MAX;
                }
                else
                {
                    st_ivas->hIsmMetaData[obj]->edited_gain = hIvasEditableParameters.ism_metadata[obj].gain;
                }
#else
                st_ivas->hIsmMetaData[obj]->edited_gain = hIvasEditableParameters.ism_metadata[obj].gain;
#endif
                st_ivas->hIsmMetaData[obj]->non_diegetic_flag = hIvasEditableParameters.ism_metadata[obj].non_diegetic_flag;
            }

            if ( ism_mode == ISM_SBA_MODE_DISC )
            {
#ifdef FIX_GAIN_EDIT_LIMITS
                if ( hIvasEditableParameters.gain_bed > EDIT_GAIN_MAX )
                {
                    st_ivas->hSbaIsmData->gain_bed = EDIT_GAIN_MAX;
                }
                else
                {
                    st_ivas->hSbaIsmData->gain_bed = hIvasEditableParameters.gain_bed;
                }
#else
                st_ivas->hSbaIsmData->gain_bed = hIvasEditableParameters.gain_bed;
#endif
            }
        }
        else if ( ism_mode == ISM_MODE_PARAM )
@@ -1549,7 +1571,23 @@ ivas_error IVAS_DEC_SetEditableParameters(

                if ( st_ivas->hMasaIsmData != NULL )
                {
#ifdef FIX_GAIN_EDIT_LIMITS
                    /* Limit gain edit to a range of +12dB to -24dB with parametric ISM mode */
                    if ( hIvasEditableParameters.ism_metadata[obj].gain > EDIT_GAIN_MAX )
                    {
                        st_ivas->hMasaIsmData->gain_ism_edited[obj] = EDIT_GAIN_MAX;
                    }
                    else if ( hIvasEditableParameters.ism_metadata[obj].gain < EDIT_GAIN_MIN )
                    {
                        st_ivas->hMasaIsmData->gain_ism_edited[obj] = EDIT_GAIN_MIN;
                    }
                    else
                    {
                        st_ivas->hMasaIsmData->gain_ism_edited[obj] = hIvasEditableParameters.ism_metadata[obj].gain;
                    }
#else
                    st_ivas->hMasaIsmData->gain_ism_edited[obj] = hIvasEditableParameters.ism_metadata[obj].gain;
#endif

                    /* Detect direction editing in Param-ISM mode */
                    if ( fabsf( st_ivas->hParamIsmDec->azimuth_values[obj] - hIvasEditableParameters.ism_metadata[obj].azimuth ) > OMASA_AZI_EDIT_THR ||
@@ -1683,7 +1721,23 @@ ivas_error IVAS_DEC_SetEditableParameters(
                if ( fabsf( st_ivas->hIsmMetaData[obj]->edited_gain - hIvasEditableParameters.ism_metadata[obj].gain ) > OMASA_GAIN_EDIT_THR )
                {
                    st_ivas->hMasaIsmData->ism_gain_is_edited[obj] = 1u;
#ifdef FIX_GAIN_EDIT_LIMITS
                    /* Limit masa gain edit to a range of +12dB to -infdB with discrete OMASA mode and +12dB to -24dB with parametric OMASA mode  */
                    if ( hIvasEditableParameters.ism_metadata[obj].gain > EDIT_GAIN_MAX )
                    {
                        st_ivas->hMasaIsmData->gain_ism_edited[obj] = EDIT_GAIN_MAX;
                    }
                    else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.ism_metadata[obj].gain < EDIT_GAIN_MIN )
                    {
                        st_ivas->hMasaIsmData->gain_ism_edited[obj] = EDIT_GAIN_MIN;
                    }
                    else
                    {
                        st_ivas->hMasaIsmData->gain_ism_edited[obj] = hIvasEditableParameters.ism_metadata[obj].gain;
                    }
#else
                    st_ivas->hMasaIsmData->gain_ism_edited[obj] = hIvasEditableParameters.ism_metadata[obj].gain;
#endif
                }
                else
                {
@@ -1699,14 +1753,45 @@ ivas_error IVAS_DEC_SetEditableParameters(
                st_ivas->hIsmMetaData[obj]->edited_yaw = hIvasEditableParameters.ism_metadata[obj].yaw;
                st_ivas->hIsmMetaData[obj]->edited_pitch = hIvasEditableParameters.ism_metadata[obj].pitch;
                st_ivas->hIsmMetaData[obj]->edited_radius = hIvasEditableParameters.ism_metadata[obj].radius;
#ifdef FIX_GAIN_EDIT_LIMITS
                if ( hIvasEditableParameters.ism_metadata[obj].gain > EDIT_GAIN_MAX )
                {
                    st_ivas->hIsmMetaData[obj]->edited_gain = EDIT_GAIN_MAX;
                }
                else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.ism_metadata[obj].gain < EDIT_GAIN_MIN )
                {
                    st_ivas->hIsmMetaData[obj]->edited_gain = EDIT_GAIN_MIN;
                }
                else
                {
                    st_ivas->hIsmMetaData[obj]->edited_gain = hIvasEditableParameters.ism_metadata[obj].gain;
                }
#else
                st_ivas->hIsmMetaData[obj]->edited_gain = hIvasEditableParameters.ism_metadata[obj].gain;
#endif
                st_ivas->hIsmMetaData[obj]->non_diegetic_flag = hIvasEditableParameters.ism_metadata[obj].non_diegetic_flag;
            }
        }

        if ( fabsf( hIvasEditableParameters.gain_bed - 1.0f ) > OMASA_GAIN_EDIT_THR )
        {
#ifdef FIX_GAIN_EDIT_LIMITS
            /* Limit masa gain edit to a range of +12dB to -infdB with discrete OMASA mode and +12dB to -24dB with parametric OMASA mode */
            if ( hIvasEditableParameters.gain_bed > EDIT_GAIN_MAX )
            {
                st_ivas->hMasaIsmData->gain_masa_edited = EDIT_GAIN_MAX;
            }
            else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.gain_bed < EDIT_GAIN_MIN )
            {
                st_ivas->hMasaIsmData->gain_masa_edited = EDIT_GAIN_MIN;
            }
            else
            {
                st_ivas->hMasaIsmData->gain_masa_edited = hIvasEditableParameters.gain_bed;
            }
#else
            st_ivas->hMasaIsmData->gain_masa_edited = hIvasEditableParameters.gain_bed;
#endif
            st_ivas->hMasaIsmData->masa_gain_is_edited = 1u;
        }
        else
+5 −1
Original line number Diff line number Diff line
@@ -40,9 +40,13 @@ the United Nations Convention on Contracts on the International Sales of Goods.
/*---------------------------------------------------------------------*
 * Constants ans structures
 *---------------------------------------------------------------------*/

#ifdef FIX_GAIN_EDIT_LIMITS
#define OBJ_EDIT_GAIN_MIN 0.0f       /* -inf dB */
#define OBJ_EDIT_GAIN_MAX 3.9810719f /* +12 dB */
#else
#define OBJ_EDIT_GAIN_MIN 0.06309573f /* -24 dB */
#define OBJ_EDIT_GAIN_MAX 15.84893f   /* +24 dB */
#endif

typedef struct ObjectEditFileReader ObjectEditFileReader;
typedef struct ReadObjectEditInfo ReadObjectEditInfo;