Commit b4e8c328 authored by vaclav's avatar vaclav
Browse files

merge OMASA_UPDATES into MASA_AND_OBJECTS; decoder side

parent 81ef67c8
Loading
Loading
Loading
Loading
+1 −17
Original line number Diff line number Diff line
@@ -268,11 +268,7 @@ ivas_error ivas_cpe_dec(

#ifdef MASA_AND_OBJECTS
            /* subtract bit-rate for combined format coding */
#ifdef OMASA_UPDATES
            if ( st_ivas->ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) )
#else
            if ( st_ivas->ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) )
#endif
            {
                sts[0]->total_brate += hCPE->brate_surplus;
            }
@@ -301,11 +297,7 @@ ivas_error ivas_cpe_dec(
#ifdef MASA_AND_OBJECTS
        /* compute bit-rate surplus per channel in combined format coding */
        int32_t brate_surplus[CPE_CHANNELS];
#ifdef OMASA_UPDATES
        if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC )
#else
        if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC )
#endif
        {
            brate_surplus[0] = ( ( hCPE->brate_surplus / FRAMES_PER_SEC ) >> 1 ) * FRAMES_PER_SEC;
            brate_surplus[1] = hCPE->brate_surplus - brate_surplus[0];
@@ -339,11 +331,7 @@ ivas_error ivas_cpe_dec(

#ifdef MASA_AND_OBJECTS
            /* subtract bit-rate for combined format coding */
#ifdef OMASA_UPDATES
            if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC )
#else
            if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC )
#endif
            {
                sts[n]->bits_frame_channel += (int16_t) ( brate_surplus[n] / FRAMES_PER_SEC );
                sts[n]->total_brate += brate_surplus[n];
@@ -681,11 +669,7 @@ ivas_error create_cpe_dec(
    }

#ifdef MASA_AND_OBJECTS
#ifdef OMASA_UPDATES
    if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC )
#else
    if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC )
#endif
    {
        cpe_brate = element_brate;
    }
@@ -1116,7 +1100,7 @@ static void read_stereo_mode_and_bwidth(
        else
        {
            /* read stereo technology info */
#ifdef OMASA_UPDATES
#ifdef MASA_AND_OBJECTS
            if ( ( hCPE->element_brate < MIN_BRATE_MDCT_STEREO && st_ivas->hMCT == NULL ) || ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM && hCPE->element_brate == IVAS_48k ) )
#else
            if ( hCPE->element_brate < MIN_BRATE_MDCT_STEREO && st_ivas->hMCT == NULL )
+2 −67
Original line number Diff line number Diff line
@@ -413,11 +413,7 @@ ivas_error ivas_dec(
        /* Set the number of objects for the parametric rendering */
        if ( st_ivas->hDirAC != NULL )
        {
#ifdef OMASA_UPDATES
            if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC && st_ivas->ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ )
#else
            if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC )
#endif
            {
                st_ivas->hDirAC->numIsmDirections = st_ivas->nchan_ism;
            }
@@ -440,7 +436,7 @@ ivas_error ivas_dec(

        st->bit_stream = &( st_ivas->bit_stream[( ism_total_brate / FRAMES_PER_SEC )] );

#ifdef OMASA_UPDATES
        //VE: !!!!!
        /* set ISM parameters */
        int16_t nchan_ism, nchan_transport_ism;
        nchan_ism = st_ivas->nchan_ism;
@@ -455,27 +451,9 @@ ivas_error ivas_dec(
            nchan_ism = 0;
            nchan_transport_ism = 1;
        }
#endif

        /* decode ISM metadata */
#ifndef OMASA_UPDATES
        if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC )
        {
            if ( st_ivas->nSCE == 1 )
            {
                ivas_sce_dec( st_ivas, 0, &output[2], output_frame, nb_bits_metadata[1] );
            }
            else
            {
#ifdef DEBUGGING
                assert( ( st_ivas->nSCE <= 1 ) && "nSCE should be 1 if not in ISM_MASA_MODE_DISC." );
#endif
            }
        }
        else
#else
        if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ )
#endif
        {
            int16_t azimuth_ism;
            int16_t elevation_ism;
@@ -483,19 +461,12 @@ ivas_error ivas_dec(
            int16_t meta_write_index;

            /* decode ISM metadata */
            if ( ( error = ivas_ism_metadata_dec( ism_total_brate,
#ifdef OMASA_UPDATES
                                                  nchan_ism, &nchan_transport_ism,
#else
                                                  st_ivas->nchan_ism, &( st_ivas->nSCE ),
#endif
                                                  st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, &nb_bits_metadata[1], st_ivas->ism_mode, st_ivas->hISMDTX, NULL, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt ) ) != IVAS_ERR_OK )
            if ( ( error = ivas_ism_metadata_dec( ism_total_brate, nchan_ism, &nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, &nb_bits_metadata[1], st_ivas->ism_mode, st_ivas->hISMDTX, NULL, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt ) ) != IVAS_ERR_OK )
            {
                return error;
            }

            // VE: move the following updates into ivas_ism_metadata_dec()
#ifdef OMASA_UPDATES
            if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC )
            {
                for ( n = 0; n < st_ivas->nchan_ism; n++ )
@@ -523,31 +494,8 @@ ivas_error ivas_dec(
                    st_ivas->hMasaIsmData->elevation_separated_ism[meta_write_index] = elevation_ism;
                }
            }
#else
            for ( n = 0; n < st_ivas->nchan_ism; n++ )
            {
                st_ivas->hMasaIsmData->azimuth_ism[n] = (int16_t) ( st_ivas->hIsmMetaData[n]->azimuth + 0.5f );
                st_ivas->hMasaIsmData->elevation_ism[n] = (int16_t) ( st_ivas->hIsmMetaData[n]->elevation + 0.5f );
            }
#endif

#ifndef OMASA_UPDATES
            for ( n = 0; n < st_ivas->nSCE - 1; n++ )
            {
                if ( ( error = ivas_sce_dec( st_ivas, n, &output[2 * st_ivas->nCPE + n], output_frame, 0 ) ) != IVAS_ERR_OK )
                {
                    return error;
                }
        }

            if ( ( error = ivas_sce_dec( st_ivas, n, &output[2 * st_ivas->nCPE + n], output_frame, sum_s( &nb_bits_metadata[1], st_ivas->nSCE ) ) ) != IVAS_ERR_OK )
            {
                return error;
            }
#endif
        }

#ifdef OMASA_UPDATES
        /* decode ISM channels */
        for ( n = 0; n < nchan_transport_ism; n++ )
        {
@@ -556,7 +504,6 @@ ivas_error ivas_dec(
                return error;
            }
        }
#endif

        /* decode MASA channels */
        if ( ( error = ivas_cpe_dec( st_ivas, 0, output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK )
@@ -581,7 +528,6 @@ ivas_error ivas_dec(
        /* Rendering */
        if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC )
        {
#ifdef OMASA_UPDATES
            if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC && st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC )
            {
                float data_separated_objects[MAX_NUM_OBJECTS][L_FRAME48k];
@@ -614,9 +560,6 @@ ivas_error ivas_dec(
            {
                ivas_dirac_dec_binaural( st_ivas, output, st_ivas->nchan_transport );
            }
#else
            ivas_dirac_dec_binaural( st_ivas, output, st_ivas->nchan_transport );
#endif
        }
        else if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX )
        {
@@ -624,20 +567,12 @@ ivas_error ivas_dec(
        }
        else if ( st_ivas->hDirAC )
        {
#ifdef OMASA_UPDATES
            if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC )
#else
            if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC )
#endif
            {
                float data_separated_objects[MAX_NUM_OBJECTS][L_FRAME48k];
                int16_t dirac_read_idx;

#ifdef OMASA_UPDATES
                if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ )
#else
                if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ )
#endif
                {
                    mvr2r( output[2], data_separated_objects[0], output_frame );
                }
+1 −10
Original line number Diff line number Diff line
@@ -2250,18 +2250,9 @@ void ivas_dirac_dec(
                }
            }

#ifdef OMASA_UPDATES
            if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC && st_ivas->ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ )
#else
            if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC )
#endif
            {
                preProcessStereoTransportsForMovedObjects( st_ivas,
                                                           Cldfb_RealBuffer_Temp,
                                                           Cldfb_ImagBuffer_Temp,
                                                           (uint8_t) ( hDirAC->num_freq_bands ),
                                                           (uint8_t) subframe_idx,
                                                           1 );
                preProcessStereoTransportsForMovedObjects( st_ivas, Cldfb_RealBuffer_Temp, Cldfb_ImagBuffer_Temp, (uint8_t) ( hDirAC->num_freq_bands ), (uint8_t) subframe_idx, 1 );
            }
        }
#endif
+2 −10
Original line number Diff line number Diff line
@@ -1738,19 +1738,11 @@ void ivas_dirac_dec_compute_directional_responses(
                    {
                        if ( hMasaIsm->ism_is_edited[dir] )
                        {
#ifdef OMASA_UPDATES
                            vbap_determine_gains( hVBAPdata, direct_response_temp, hMasaIsm->azimuth_ism_edited[dir], hMasaIsm->elevation_ism_edited[dir], 1 );
#else
                            vbap_determine_gains( hVBAPdata, direct_response_temp, hMasaIsm->azimuth_ism_edited[dir], hMasaIsm->elevation_ism_edited[dir] );
#endif
                        }
                        else
                        {
#ifdef OMASA_UPDATES
                            vbap_determine_gains( hVBAPdata, direct_response_temp, hMasaIsm->azimuth_ism[dir][hDirAC->dirac_read_idx], hMasaIsm->elevation_ism[dir][hDirAC->dirac_read_idx], 1 );
#else
                            vbap_determine_gains( hVBAPdata, direct_response_temp, hMasaIsm->azimuth_ism[dir], hMasaIsm->elevation_ism[dir] );
#endif
                        }

                        for ( l = 0; l < num_channels_dir; l++ )
@@ -2268,7 +2260,7 @@ static void spreadCoherencePanningVbap(
        return;
    }

#ifdef OMASA_UPDATES
#ifdef MASA_AND_OBJECTS
    vbap_determine_gains( hVBAPdata, direct_response, azimuth, elevation, 0 );
#else
    vbap_determine_gains( hVBAPdata, direct_response, azimuth, elevation );
@@ -2276,7 +2268,7 @@ static void spreadCoherencePanningVbap(

    if ( spreadCoh > 0.f )
    {
#ifdef OMASA_UPDATES
#ifdef MASA_AND_OBJECTS
        vbap_determine_gains( hVBAPdata, direct_response_left, azimuth + 30, elevation, 0 );
        vbap_determine_gains( hVBAPdata, direct_response_right, azimuth - 30, elevation, 0 );
#else
+3 −12
Original line number Diff line number Diff line
@@ -1062,11 +1062,8 @@ ivas_error ivas_init_decoder(
        {
            k++;
        }
#ifdef OMASA_UPDATES

        if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ )
#else
        if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ )
#endif
        {
            /* one separated object */
            st_ivas->nSCE = 1;
@@ -1247,7 +1244,7 @@ ivas_error ivas_init_decoder(
                }
                else
                {
#ifdef OMASA_UPDATES
#ifdef MASA_AND_OBJECTS
                    vbap_determine_gains( st_ivas->hVBAPdata, st_ivas->hLsSetupCustom->separate_ch_gains, 0, 0, 0 );
#else
                    vbap_determine_gains( st_ivas->hVBAPdata, st_ivas->hLsSetupCustom->separate_ch_gains, 0, 0 );
@@ -1414,10 +1411,9 @@ ivas_error ivas_init_decoder(
        st_ivas->binaural_latency_ns = st_ivas->hCrendWrapper->binaural_latency_ns;
    }

#ifdef OMASA_UPDATES
#ifdef MASA_AND_OBJECTS
    if ( st_ivas->ivas_format == MASA_ISM_FORMAT )
    {
        // VE: introduce a new renderer_type for this case
        if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC && st_ivas->ism_mode == ISM_MASA_MODE_DISC )
        {
            /* Allocate TD renderer for the objects in DISC mode */
@@ -1433,7 +1429,6 @@ ivas_error ivas_init_decoder(
            }
        }

        // VE: introduce a new renderer_type for this case
        if ( st_ivas->renderer_type == RENDERER_DIRAC && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) )
        {
            /* Allocate 'hIsmRendererData' handle and memory for delay buffer within 'hMasaIsmData' */
@@ -1997,11 +1992,7 @@ void ivas_init_dec_get_num_cldfb_instances(
                {
                    *numCldfbAnalyses += st_ivas->nchan_ism;
                }
#ifdef OMASA_UPDATES
                else if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ )
#else
                else if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ )
#endif
                {
                    *numCldfbAnalyses = st_ivas->nchan_transport + 1;
                }
Loading