Commit 3a1052af authored by Tapani Pihlajakuja's avatar Tapani Pihlajakuja
Browse files

Provides gain editing objects and MASA in OMASA rendering. Refactors direction...

Provides gain editing objects and MASA in OMASA rendering. Refactors direction editing and parametric stereo rendering code to avoid unnecessary complexity. Changes ISM metadata reservation to save memory and fully support rate switching together with object editing.
parent 1972089a
Loading
Loading
Loading
Loading
Loading
+7 −13
Original line number Diff line number Diff line
@@ -164,7 +164,7 @@ static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, RotF
static ivas_error decodeVoIP( DecArguments arg, BS_READER_HANDLE hBsReader, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, IVAS_DEC_HANDLE hIvasDec );

#ifdef ENABLE_OBJECT_EDITING
static void exampleObjEditFun(IVAS_ISM_METADATA *obj_metas[IVAS_MAX_NUM_OBJECTS], uint16_t n_objs, bool* obj_modified_flag);
static void exampleObjEditFun( IVAS_ISM_METADATA *obj_metas[IVAS_MAX_NUM_OBJECTS], uint16_t n_objs, bool *obj_modified_flag, float *bed_gain );
#endif

#ifdef DEBUGGING
@@ -3588,24 +3588,18 @@ static IVAS_DEC_FORCED_REND_MODE parseForcedRendModeDec(
 *
 * An example object editing callback function
 *---------------------------------------------------------------------*/
static void exampleObjEditFun(IVAS_ISM_METADATA *obj_metas[IVAS_MAX_NUM_OBJECTS], uint16_t n_objs, bool* obj_modified_flag)
static void exampleObjEditFun( IVAS_ISM_METADATA *obj_metas[IVAS_MAX_NUM_OBJECTS], uint16_t n_objs, bool *obj_modified_flag, float *bed_gain )
{
    uint16_t obj_idx;

    for ( obj_idx = 0; obj_idx < n_objs; obj_idx++ )
    {
        /* limit azimuth to the front */
        if ( obj_metas[obj_idx]->azimuth > 90.0f )
        {
            obj_metas[obj_idx]->azimuth = 90.0f;
            obj_modified_flag[obj_idx] = true;
        }
        else if ( obj_metas[obj_idx]->azimuth < -90.0f )
        {
            obj_metas[obj_idx]->azimuth = -90.0f;
        obj_metas[obj_idx]->azimuth = (float) obj_idx * 19.0f;
        obj_metas[obj_idx]->gainFactor = 1.5f;
        obj_modified_flag[obj_idx] = true;
    }
    }

    bed_gain[0] = 0.7f;
}
#endif

+3 −0
Original line number Diff line number Diff line
@@ -1222,6 +1222,9 @@ enum
#define MASA_MAXIMUM_TWO_DIR_BANDS              24
#define NBITS_HR_COH                            4
#define OMASA_TDREND_MATCHING_GAIN              0.7943f
#ifdef ENABLE_OBJECT_EDITING
#define OMASA_GAIN_EDIT_THR                     0.06f                       /* OMASA gain change threshold */
#endif

#define MASA_JBM_RINGBUFFER_FRAMES              3

+10 −0
Original line number Diff line number Diff line
@@ -5782,6 +5782,15 @@ void ivas_omasa_dirac_rend_jbm(
    float *output_f[]                                           /* o  : rendered time signal                    */
);

#ifdef ENABLE_OBJECT_GAIN_EDITING
void ivas_omasa_preProcessStereoTransportsForEditedObjects(
    Decoder_Struct *st_ivas,
    float inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX],
    float inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX],
    const int16_t nBins,
    const int16_t subframe
);
#else
void ivas_omasa_preProcessStereoTransportsForMovedObjects(
    Decoder_Struct *st_ivas,
    float inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX],
@@ -5789,6 +5798,7 @@ void ivas_omasa_preProcessStereoTransportsForMovedObjects(
    const int16_t nBins,
    const int16_t subframe
);
#endif

ivas_error ivas_omasa_separate_object_renderer_open(
    Decoder_Struct *st_ivas                                     /* i/o: IVAS decoder structure                  */
+3 −1
Original line number Diff line number Diff line
@@ -161,7 +161,9 @@


#define ENABLE_OBJECT_EDITING                           /* Nokia: development switch for object editing interface */

#define ENABLE_OBJECT_GAIN_EDITING                      /* Nokia: development switch for object gain editing */
#define STEREO_GAIN_CACHE                               /* Nokia: development switch for stereo gain cache optimization */
#define OMASA_ISM_META_OPT                              /* Nokia: development switch OMASA ISM metadata allocation optimization */

/* #################### End BE switches ################################## */

+7 −0
Original line number Diff line number Diff line
@@ -1869,10 +1869,17 @@ void ivas_dirac_dec_render_sf(
            }
        }

#ifdef ENABLE_OBJECT_GAIN_EDITING
        if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ )
        {
            ivas_omasa_preProcessStereoTransportsForEditedObjects( st_ivas, Cldfb_RealBuffer_Temp, Cldfb_ImagBuffer_Temp, hSpatParamRendCom->num_freq_bands, subframe_idx );
        }
#else
        if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC && st_ivas->ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ )
        {
            ivas_omasa_preProcessStereoTransportsForMovedObjects( st_ivas, Cldfb_RealBuffer_Temp, Cldfb_ImagBuffer_Temp, hSpatParamRendCom->num_freq_bands, subframe_idx );
        }
#endif
    }

    for ( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ )
Loading