Commit d3a5066d authored by Tapani Pihlajakuja's avatar Tapani Pihlajakuja
Browse files

Add object editing gain limitations as agreed.

parent eb6212c5
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 OBJ_EDIT_GAIN_MIN                   0.0630957f                     /* Minimum allowed gain edit: -24 dB */
#define OBJ_EDIT_GAIN_MAX                   3.9810719f                     /* Maximum allowed gain edit: +12 dB */
#endif


typedef enum
{
    TC_BUFFER_MODE_RENDERER,
+2 −0
Original line number Diff line number Diff line
@@ -193,6 +193,8 @@
/*#define NONBE_1324_TC_BUFFER_MEMOERY_KEEP*/               /* VA: issue 1324: do not reset TSM memory in JBM bitrate switching */

#define NONBE_1380_OMASA_BUILD_DIFF                     /* Nokia: Fix for issue #1380: Large differences in OMASA output between Debug and Release builds */
#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. */


/* ##################### End NON-BE switches ########################### */

+85 −0
Original line number Diff line number Diff line
@@ -1520,13 +1520,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 > OBJ_EDIT_GAIN_MAX )
                {
                    st_ivas->hIsmMetaData[obj]->edited_gain = OBJ_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 > OBJ_EDIT_GAIN_MAX )
                {
                    st_ivas->hSbaIsmData->gain_bed = OBJ_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 )
@@ -1541,7 +1563,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 > OBJ_EDIT_GAIN_MAX )
                    {
                        st_ivas->hMasaIsmData->gain_ism_edited[obj] = OBJ_EDIT_GAIN_MAX;
                    }
                    else if ( hIvasEditableParameters.ism_metadata[obj].gain < OBJ_EDIT_GAIN_MIN )
                    {
                        st_ivas->hMasaIsmData->gain_ism_edited[obj] = 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 ||
@@ -1675,7 +1713,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 > OBJ_EDIT_GAIN_MAX )
                    {
                        st_ivas->hMasaIsmData->gain_ism_edited[obj] = OBJ_EDIT_GAIN_MAX;
                    }
                    else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ  && hIvasEditableParameters.ism_metadata[obj].gain < OBJ_EDIT_GAIN_MIN )
                    {
                        st_ivas->hMasaIsmData->gain_ism_edited[obj] = 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
                {
@@ -1691,14 +1745,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 > OBJ_EDIT_GAIN_MAX )
                {
                    st_ivas->hIsmMetaData[obj]->edited_gain = OBJ_EDIT_GAIN_MAX;
                }
                else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ  && hIvasEditableParameters.ism_metadata[obj].gain < OBJ_EDIT_GAIN_MIN )
                {
                    st_ivas->hIsmMetaData[obj]->edited_gain = OBJ_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 > OBJ_EDIT_GAIN_MAX )
            {
                st_ivas->hMasaIsmData->gain_masa_edited = OBJ_EDIT_GAIN_MAX;
            }
            else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ  && hIvasEditableParameters.gain_bed < OBJ_EDIT_GAIN_MIN )
            {
                st_ivas->hMasaIsmData->gain_masa_edited = OBJ_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;