Commit 038761d9 authored by Tapani Pihlajakuja's avatar Tapani Pihlajakuja
Browse files

Merge remote-tracking branch 'origin/ivas-float-update' into...

Merge remote-tracking branch 'origin/ivas-float-update' into 2149_ref_port_mr_2268_fix_object_editing_issues_remainders
parents 9f740c63 7e946ced
Loading
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -5811,6 +5811,15 @@ void ivas_omasa_render_objects_from_mix(
    const int16_t output_frame                                  /* i  : output frame length per channel        */
);

#ifdef NONBE_FIX_1305_OMASA_OBJ_EDIT_EXT
void ivas_omasa_gain_masa_tc(
    float *output[],                                            /* i/o  : output synthesis signal                 */
    const float gainMasa,                                       /* i  : gain for MASA transport channels        */
    const int16_t nchan_transport_ism,                          /* i  : number of ISM TCs                       */
    const int16_t output_frame                                  /* i  : output frame length per channel         */
);
#endif

void ivas_omasa_dirac_rend_jbm(
    Decoder_Struct *st_ivas,                                    /* i/o: IVAS decoder handle                     */
    const uint16_t nSamplesAsked,                               /* i  : number of samples requested             */
+3 −0
Original line number Diff line number Diff line
@@ -193,6 +193,7 @@
#define FIX_NCHAN_BUFFERS                               /* VA: issue 1322: Correct the number of float buffers (channels) at the decoder */
#define FIX_RENDERER_STACK                              /* VA: issue 1322: reduction of renderers' buffers size */
#define FIX_1370_EXTERNAL_ORIENTATION_CHECK             /* Nokia: add sanity check for Euler angles for external orientations */
#define NONBE_FIX_1197_OMASA_META_BUFFER                /* Nokia: OMASA ISM_MASA_MODE_PARAM_ONE_OBJ history zero in rateswitching - port 251 */

// object-editing feature porting
#define FIX_HRTF_LOAD_API                               // solves API conflicts between HRTF and object-editing features
@@ -203,6 +204,8 @@
#define NONBE_1217_OBJ_EDIT_FOA                         /* VA/Nokia: isse 1217: fix crash in object editing to FOA output in ParamISM */
#define NONBE_FIX_1255_OBJ_EDIT_JBM                     /* VA: issue 1255: restore object editing in JBM */
#define FIX_1372_OSBA_OBJECT_EDITING                    /* VA: issue 1372: Fix OSBA object-editing in BINAURAL_ROOM_IR */
#define NONBE_FIX_1305_OMASA_OBJ_EDIT_EXT               /* Nokia: issue 1305: Fix OMASA ext output in case of object editing */
#define NONBE_FIX_1172_OBJ_EDIT_JBM                     /* VA: issue 1172: fix OMASA object editing in JBM */
#define NONBE_1399_1400_FIX_OBJ_EDIT_ISSUES             /* Nokia: Fix for issues 1399: obj edit broken with MC/SBA output in VOIP, and 1400: negative energy estimate used for gaining. */

/* #################### End BASOP porting switches ############################ */
+17 −0
Original line number Diff line number Diff line
@@ -3079,6 +3079,13 @@ void ivas_dec_prepare_renderer(
        {
            ivas_jbm_masa_sf_to_slot_map( st_ivas, n_render_timeslots );
        }
#ifdef NONBE_FIX_1305_OMASA_OBJ_EDIT_EXT
        /* MASA transport gaining for edited disc OMASA EXT. For ISMs, only metadata is modified */
        if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_DISC && st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL && st_ivas->hMasaIsmData->masa_gain_is_edited == 1 )
        {
            ivas_omasa_gain_masa_tc( st_ivas->hTcBuffer->tc, st_ivas->hMasaIsmData->gain_masa_edited, st_ivas->nchan_ism, st_ivas->hTcBuffer->n_samples_available );
        }
#endif
    }
    else if ( st_ivas->ivas_format == STEREO_FORMAT )
    {
@@ -3154,6 +3161,16 @@ void ivas_dec_prepare_renderer(
            {
                ivas_jbm_masa_sf_to_slot_map( st_ivas, n_render_timeslots );
            }
#ifdef NONBE_FIX_1305_OMASA_OBJ_EDIT_EXT
            /* MASA transport gaining for edited param_one OMASA EXT. For ISMs, only metadata is modified.  */
            if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && st_ivas->hMasaIsmData->masa_gain_is_edited == 1 )
            {
                for ( n = 0; n < CPE_CHANNELS; n++ )
                {
                    v_multc( st_ivas->hTcBuffer->tc[n], st_ivas->hMasaIsmData->gain_masa_edited, st_ivas->hTcBuffer->tc[n], st_ivas->hTcBuffer->n_samples_available );
                }
            }
#endif
        }
        else
        {
+16 −0
Original line number Diff line number Diff line
@@ -184,7 +184,11 @@ ivas_error ivas_td_binaural_renderer_sf(
        }
        if ( subframe_idx == ism_md_subframe_update_jbm )
        {
#ifdef NONBE_FIX_1305_OMASA_OBJ_EDIT_EXT
            if ( st_ivas->ivas_format == ISM_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT )
#else
            if ( st_ivas->ivas_format == ISM_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT )
#endif
            {
                ISM_METADATA_FRAME ismMetaData[MAX_NUM_OBJECTS];
                ISM_METADATA_HANDLE hIsmMetaData[MAX_NUM_OBJECTS];
@@ -196,7 +200,19 @@ ivas_error ivas_td_binaural_renderer_sf(
                    ismMetaData[nS].yaw = st_ivas->hIsmMetaData[nS]->edited_yaw;
                    ismMetaData[nS].pitch = st_ivas->hIsmMetaData[nS]->edited_pitch;
                    ismMetaData[nS].non_diegetic_flag = st_ivas->hIsmMetaData[nS]->non_diegetic_flag;
#ifdef NONBE_FIX_1305_OMASA_OBJ_EDIT_EXT
                    if ( st_ivas->ivas_format == MASA_ISM_FORMAT )
                    {
                        /* DISC OMASA ISM gaining with TDREND is done in ivas_dec_prepare_renderer()*/
                        ismMetaData[nS].gain = 1;
                    }
                    else
                    {
                        ismMetaData[nS].gain = st_ivas->hIsmMetaData[nS]->edited_gain;
                    }
#else
                    ismMetaData[nS].gain = st_ivas->hIsmMetaData[nS]->edited_gain;
#endif
                    hIsmMetaData[nS] = &ismMetaData[nS];
                }

+43 −0
Original line number Diff line number Diff line
@@ -334,6 +334,24 @@ ivas_error ivas_omasa_dec_config(
            ivas_omasa_separate_object_renderer_close( st_ivas );
        }

#ifdef NONBE_FIX_1197_OMASA_META_BUFFER
        if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && st_ivas->hMasaIsmData != NULL ) /* this structure is in use only in ISM_MASA_MODE_PARAM_ONE_OBJ */
        {
            MASA_ISM_DATA_HANDLE hMasaIsmData = st_ivas->hMasaIsmData;
            for ( int16_t obj_idx = 0; obj_idx < MAX_NUM_OBJECTS; obj_idx++ )
            {
                set_s( hMasaIsmData->azimuth_ism[obj_idx], 0, MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR );
                set_s( hMasaIsmData->elevation_ism[obj_idx], 0, MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR );
                for ( int16_t sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR; sf++ )
                {
                    set_zero( hMasaIsmData->energy_ratio_ism[obj_idx][sf], CLDFB_NO_CHANNELS_MAX );
                }
            }
            set_s( hMasaIsmData->azimuth_separated_ism, 0, MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR );
            set_s( hMasaIsmData->elevation_separated_ism, 0, MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR );
        }
#endif

        if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC )
        {
            if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC )
@@ -1299,3 +1317,28 @@ void ivas_omasa_render_objects_from_mix(

    return;
}

#ifdef NONBE_FIX_1305_OMASA_OBJ_EDIT_EXT
/*--------------------------------------------------------------------------*
 * ivas_omasa_gain_masa_tc()
 *
 * in case of external rendering with object editing, MASA transport channels
 * need to be gained
 *--------------------------------------------------------------------------*/

void ivas_omasa_gain_masa_tc(
    float *output[],                   /* i/o  : output synthesis signal         */
    const float gainMasa,              /* i  : gain                            */
    const int16_t nchan_transport_ism, /* i  : number of ISM TCs               */
    const int16_t output_frame         /* i  : output frame length per channel */
)
{
    /* Edited OMASA EXT MASA transport gaining */
    for ( int16_t ch = 0; ch < 2; ch++ )
    {
        v_multc( output[nchan_transport_ism + ch], gainMasa, output[nchan_transport_ism + ch], output_frame );
    }

    return;
}
#endif
Loading