Commit bb76a1ab authored by lintervo's avatar lintervo
Browse files

Merge branch '1305-omasa-ext-incorrect-output-with-object-editing' into 'main'

[Non-BE] Resolve "OMASA EXT incorrect output with object editing"

See merge request !2076
parents 3cb698c4 fafb26de
Loading
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -5808,6 +5808,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             */
+1 −0
Original line number Diff line number Diff line
@@ -175,6 +175,7 @@
#define NONBE_1122_KEEP_EVS_MODE_UNCHANGED              /* FhG: Disables fix for issue 1122 in EVS mode to keep BE tests green. This switch should be removed once the 1122 fix is added to EVS via a CR.  */
#define NONBE_1118_EVS_LR_HQ_BITERROR                   /* VA: issue 1118: fix EVS decoder crash in LR-HQ in case of bit errors */
#define NONBE_1303_REND_GRANULARITY                     /* VA: issue 1303: Renderer granularity revision */
#define NONBE_FIX_1305_OMASA_OBJ_EDIT_EXT               /* Nokia: issue 1305: Fix OMASA ext output in case of object editing */


/* ##################### End NON-BE switches ########################### */
+17 −0
Original line number Diff line number Diff line
@@ -2885,6 +2885,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 )
    {
@@ -2960,6 +2967,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
@@ -185,7 +185,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];
@@ -198,7 +202,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];
                }

+25 −0
Original line number Diff line number Diff line
@@ -1321,3 +1321,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