Commit 2b5aecc5 authored by lintervo's avatar lintervo
Browse files

Merge branch '2186_ref_change_object_editing_gain_limitation' into 'ivas-float-update'

2186 ref change object editing gain limitation

See merge request !2534
parents 577778a3 c4146e5d
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -182,6 +182,11 @@ 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
@@ -202,6 +202,7 @@
#define NONBE_1412_AVOID_ROUNDING_AZ_ELEV              /* FhG:  Avoid rounding when passing azimuth and elevation to efap_determine_gains() */
#define NONBE_FIX_NONBE_BETWEEN_OPTIMIZATION_LEVELS    /* FhG: fix non-BE in DFT stereo encoder between optimization levels */
#define NONBE_FIX_NONBE_BETWEEN_OPTIMIZATION_LEVELS_2  /* FhG: fix even more non-BEnesses */
#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. */

// object-editing feature porting
#define FIX_HRTF_LOAD_API                               // solves API conflicts between HRTF and object-editing features
+85 −0
Original line number Diff line number Diff line
@@ -1558,13 +1558,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 )
@@ -1579,7 +1601,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 ||
@@ -1713,7 +1751,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
                {
@@ -1736,14 +1790,45 @@ ivas_error IVAS_DEC_SetEditableParameters(
                st_ivas->hIsmMetaData[obj]->pitch = hIvasEditableParameters.ism_metadata[obj].pitch;
                st_ivas->hIsmMetaData[obj]->radius = hIvasEditableParameters.ism_metadata[obj].radius;
#endif
#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 −0
Original line number Diff line number Diff line
@@ -41,8 +41,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;