Commit 44fdd16d authored by vaclav's avatar vaclav
Browse files

address todo: introduce handle 'hOmasaData'

parent e7a6d9e4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1270,13 +1270,13 @@ enum
#define MAXIMUM_OMASA_FREQ_BANDS                8                           /* Corresponds to maximum number of coding bands at 32 kbps */
#ifdef MASA_AND_OBJECTS
#define OMASA_STEREO_SW_CNT_MAX                 100
#define OMASA_STEREO_SW_CNT_MAX2                5
#endif
#endif

#define MASA_BIT_REDUCT_PARAM                   10
#define MASA_MAXIMUM_TWO_DIR_BANDS              24
#define NBITS_HR_COH                            4

typedef enum
{
    MASA_STEREO_NOT_DEFINED,
+4 −4
Original line number Diff line number Diff line
@@ -1230,15 +1230,15 @@ static void stereo_mode_combined_format_enc(
        {
            if ( hCPE->element_brate + hCPE->brate_surplus > IVAS_64k )
            {
                st_ivas->hMasa->data.omasa_stereo_sw_cnt = 0;
                st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt = 0;
            }
            else
            {
                st_ivas->hMasa->data.omasa_stereo_sw_cnt++;
                st_ivas->hMasa->data.omasa_stereo_sw_cnt = min( st_ivas->hMasa->data.omasa_stereo_sw_cnt, OMASA_STEREO_SW_CNT_MAX );
                st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt++;
                st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt = min( st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt, OMASA_STEREO_SW_CNT_MAX );
            }

            if ( st_ivas->hMasa->data.omasa_stereo_sw_cnt < OMASA_STEREO_SW_CNT_MAX )
            if ( st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt < OMASA_STEREO_SW_CNT_MAX )
            {
                hCPE->element_mode = IVAS_CPE_MDCT;
                hCPE->element_brate = IVAS_64k;
+1 −1
Original line number Diff line number Diff line
@@ -273,7 +273,7 @@ ivas_error ivas_ism_enc(
        ism_total_brate_ref = ism_total_brate;

        ivas_ism_metadata_enc( &ism_total_brate, nchan_ism, nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData,
                               nb_bits_metadata, vad_flag, st_ivas->ism_mode, NULL, st_ivas->hEncoderConfig->ism_extended_metadata_flag, st_ivas->hMasa != NULL ? st_ivas->hMasa->data.lp_noise_CPE : 0, flag_omasa_ener_brate, st_ivas->hMasa != NULL ? &( st_ivas->hMasa->data.omasa_stereo_sw_cnt ) : NULL );
                               nb_bits_metadata, vad_flag, st_ivas->ism_mode, NULL, st_ivas->hEncoderConfig->ism_extended_metadata_flag, st_ivas->hMasa != NULL ? st_ivas->hMasa->data.hOmasaData->lp_noise_CPE : 0, flag_omasa_ener_brate, st_ivas->hMasa != NULL ? &( st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt ) : NULL );

        if ( st_ivas->hEncoderConfig->ivas_format == MASA_ISM_FORMAT )
        {
+76 −55
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ static void compensate_energy_ratios( MASA_ENCODER_HANDLE hMasa );
static int16_t encode_lfe_to_total_energy_ratio( MASA_ENCODER_HANDLE hMasa, BSTR_ENC_HANDLE hMetaData, const int32_t ivas_total_brate );

#ifdef MASA_AND_OBJECTS
static void ivas_encode_masaism_metadata( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hQMetaData, BSTR_ENC_HANDLE hMetaData, ISM_METADATA_HANDLE hIsmMeta[], const int16_t low_bitrate_mode, const int16_t omasa_nbands, const int16_t omasa_nblocks, const int16_t idx_separated_object, const int16_t ism_imp );
static void ivas_encode_masaism_metadata( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hQMetaData, BSTR_ENC_HANDLE hMetaData, ISM_METADATA_HANDLE hIsmMeta[], const int16_t nchan_ism, const int16_t low_bitrate_mode, const int16_t omasa_nbands, const int16_t omasa_nblocks, const int16_t idx_separated_object, const int16_t ism_imp );

static void reduce_metadata_further( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hqmetadata, const IVAS_FORMAT ivas_format );
#else
@@ -180,9 +180,24 @@ ivas_error ivas_masa_enc_open(
    set_zero( hMasa->data.dir_align_state.previous_ele_dir2, MASA_FREQUENCY_BANDS );

#ifdef MASA_AND_OBJECTS
    hMasa->data.lp_noise_CPE = -1;
    hMasa->data.omasa_stereo_sw_cnt = OMASA_STEREO_SW_CNT_MAX;
    hMasa->data.omasa_stereo_sw_cnt2 = OMASA_STEREO_SW_CNT_MAX2;
    if ( hEncoderConfig->ivas_format == MASA_ISM_FORMAT )
    {
        OMASA_ENCODER_DATA_HANDLE hOmasaData;

        if ( ( hOmasaData = (OMASA_ENCODER_DATA_HANDLE) malloc( sizeof( OMASA_ENCODER_DATA_STATE ) ) ) == NULL )
        {
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA data encoder\n" ) );
        }

        hOmasaData->lp_noise_CPE = -1;
        hOmasaData->omasa_stereo_sw_cnt = OMASA_STEREO_SW_CNT_MAX;

        hMasa->data.hOmasaData = hOmasaData;
    }
    else
    {
        hMasa->data.hOmasaData = NULL;
    }
#endif

    st_ivas->hMasa = hMasa;
@@ -213,6 +228,14 @@ void ivas_masa_enc_close(
        deleteCldfb( &( ( *hMasa )->data.cldfbAnaEnc[i] ) );
    }

#ifdef MASA_AND_OBJECTS
    if ( ( *hMasa )->data.hOmasaData == NULL )
    {
        free( ( *hMasa )->data.hOmasaData );
        ( *hMasa )->data.hOmasaData = NULL;
    }
#endif

    free( ( *hMasa ) );
    ( *hMasa ) = NULL;

@@ -243,8 +266,7 @@ ivas_error ivas_masa_encode(
    ISM_METADATA_HANDLE hIsmMetaData[MAX_NUM_OBJECTS], /* i  : ISM metadata handle                     */
    const int16_t idx_separated_object,                /* i  : index of the separated object           */
    OMASA_ENC_HANDLE hOMasa,                           /* i  : OMASA encoder handle                    */
    const int16_t ism_imp                              /* i  : importance of separated object  */
    ,
    const int16_t ism_imp,                             /* i  : importance of separated object          */
    const int16_t flag_omasa_ener_brate                /* i  : less bitrate for objects in OMASA flag  */
#endif
)
@@ -362,7 +384,7 @@ ivas_error ivas_masa_encode(
            hQMetaData->metadata_max_bits -= NO_BITS_MASA_ISM_NO_OBJ;

            /* write index of separated object if needed */
            if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hMasa->data.nchan_ism > 1 )
            if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && nchan_ism > 1 )
            {
                push_next_indice( hMetaData, idx_separated_object, NO_BITS_MASA_ISM_NO_OBJ );
                hQMetaData->metadata_max_bits -= NO_BITS_MASA_ISM_NO_OBJ;
@@ -528,7 +550,7 @@ ivas_error ivas_masa_encode(
    if ( ivas_format == MASA_ISM_FORMAT && ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ )
    {
        /* encode MASA/ISM energy ratios */
        ivas_encode_masaism_metadata( hMasa, hQMetaData, hMetaData, hIsmMetaData, low_bitrate_mode, hOMasa->nCodingBands, hOMasa->nSubframes,
        ivas_encode_masaism_metadata( hMasa, hQMetaData, hMetaData, hIsmMetaData, nchan_ism, low_bitrate_mode, hOMasa->nCodingBands, hOMasa->nSubframes,
                                      idx_separated_object, ism_imp );
    }
    else
@@ -969,13 +991,13 @@ ivas_error ivas_masa_enc_config(
#ifdef MASA_AND_OBJECTS
    if ( 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 ) )
    {
        if ( st_ivas->hCPE[0]->element_mode == IVAS_CPE_DFT || st_ivas->hMasa->data.omasa_stereo_sw_cnt < OMASA_STEREO_SW_CNT_MAX )
        if ( st_ivas->hCPE[0]->element_mode == IVAS_CPE_DFT || st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt < OMASA_STEREO_SW_CNT_MAX )
        {
            st_ivas->hMasa->data.lp_noise_CPE = st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise;
            st_ivas->hMasa->data.hOmasaData->lp_noise_CPE = st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise;
        }
        else
        {
            st_ivas->hMasa->data.lp_noise_CPE = ( st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise + st_ivas->hCPE[0]->hCoreCoder[1]->lp_noise ) / CPE_CHANNELS;
            st_ivas->hMasa->data.hOmasaData->lp_noise_CPE = ( st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise + st_ivas->hCPE[0]->hCoreCoder[1]->lp_noise ) / CPE_CHANNELS;
        }
    }
#endif
@@ -2728,7 +2750,6 @@ void ivas_merge_masa_metadata(
    numSf = hMasa->config.joinedSubframes == TRUE ? 1 : 4;
    hMeta = &( hMasa->masaMetadata );


    for ( sf = 0; sf < numSf; sf++ )
    {
        for ( band = 0; band < numCodingBands; band++ )
@@ -2755,7 +2776,7 @@ void ivas_merge_masa_metadata(
            {
                eneBand += hMasa->data.energy[sf][bin];
            }
            energyMerged[sf][band] = eneBand + hMasa->data.energy_ism[sf][band];
            energyMerged[sf][band] = eneBand + hMasa->data.hOmasaData->energy_ism[sf][band];

            /* Compute weights */
            energyTimesRatioMASA[0] = eneBand * hMeta->directional_meta[0].energy_ratio[sf][band];
@@ -2770,7 +2791,7 @@ void ivas_merge_masa_metadata(
            /* target is original MASA diffuseness */
            total_diff_nrg = eneBand * hMeta->common_meta.diffuse_to_total_ratio[sf][band];
            /* criterion is mean of ISM ratio and new ratio */
            energyTimesRatioISM = ( hOMasaMeta->directional_meta[0].energy_ratio[sf][band] + ( 1.0f - total_diff_nrg / ( EPSILON + eneBand + hMasa->data.energy_ism[sf][band] ) ) ) / 2.0f * hMasa->data.energy_ism[sf][band];
            energyTimesRatioISM = ( hOMasaMeta->directional_meta[0].energy_ratio[sf][band] + ( 1.0f - total_diff_nrg / ( EPSILON + eneBand + hMasa->data.hOmasaData->energy_ism[sf][band] ) ) ) / 2.0f * hMasa->data.hOmasaData->energy_ism[sf][band];

            /* Determine combined metadata based on the weights */
            merge_dest = -1;
@@ -2791,7 +2812,7 @@ void ivas_merge_masa_metadata(
                hMeta->directional_meta[merge_dest].azimuth[sf][band] = hOMasaMeta->directional_meta[0].azimuth[sf][band];
                hMeta->directional_meta[merge_dest].elevation[sf][band] = hOMasaMeta->directional_meta[0].elevation[sf][band];
                /* limit with the earlier direct-energy ratio */
                dir_sum = 1.0f - total_diff_nrg / ( EPSILON + eneBand + hMasa->data.energy_ism[sf][band] );                                          /* new dir ratio */
                dir_sum = 1.0f - total_diff_nrg / ( EPSILON + eneBand + hMasa->data.hOmasaData->energy_ism[sf][band] );                              /* new dir ratio */
                hMeta->directional_meta[merge_dest].energy_ratio[sf][band] = min( dir_sum, hOMasaMeta->directional_meta[0].energy_ratio[sf][band] ); /* clip with original ISM dir */
                hMeta->common_meta.diffuse_to_total_ratio[sf][band] = 1.0f - hMeta->directional_meta[merge_dest].energy_ratio[sf][band];

@@ -3475,6 +3496,7 @@ static void ivas_encode_masaism_metadata(
    IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle             */
    BSTR_ENC_HANDLE hMetaData,        /* i/o: metadata bitstream handle     */
    ISM_METADATA_HANDLE hIsmMeta[],   /* i/o: ISM metadata handles          */
    const int16_t nchan_ism,          /* i  : number of ISM channels        */
    const int16_t low_bitrate_mode,   /* i  : is low bitrate more? 1/0      */
    const int16_t omasa_nbands,
    const int16_t omasa_nblocks,
@@ -3499,7 +3521,7 @@ static void ivas_encode_masaism_metadata(
    float energy_ism, energy_ism_ind[MAX_NUM_OBJECTS];
    int16_t tmp, rotate;
    int16_t n_ism_tmp, i;

    OMASA_ENCODER_DATA_HANDLE hOmasaData = hMasa->data.hOmasaData;

    /* use the values from hQMetaData */
    numCodingBands = (uint8_t) hQMetaData->q_direction->cfg.nbands;
@@ -3511,7 +3533,7 @@ static void ivas_encode_masaism_metadata(

        for ( sf = 0; sf < numSf; sf++ )
        {
            if ( sum_f( hMasa->data.energy_ism[sf], omasa_nbands ) == 0.0f )
            if ( sum_f( hOmasaData->energy_ism[sf], omasa_nbands ) == 0.0f )
            {
                hQMetaData->masa_to_total_energy_ratio[sf][0] = 1.0f;
            }
@@ -3526,23 +3548,23 @@ static void ivas_encode_masaism_metadata(
                }

                energy_ism = 0.0f;
                for ( obj = 0; obj < hMasa->data.nchan_ism; obj++ )
                for ( obj = 0; obj < nchan_ism; obj++ )
                {
                    energy_ism_ind[obj] = 0.0f;
                }

                for ( band = 0; band < omasa_nbands; band++ )
                {
                    energy_ism += hMasa->data.energy_ism[sf][band];
                    for ( obj = 0; obj < hMasa->data.nchan_ism; obj++ )
                    energy_ism += hOmasaData->energy_ism[sf][band];
                    for ( obj = 0; obj < nchan_ism; obj++ )
                    {
                        energy_ism_ind[obj] += hMasa->data.energy_ism[sf][band] * hMasa->data.energy_ratio_ism[sf][band][obj];
                        energy_ism_ind[obj] += hOmasaData->energy_ism[sf][band] * hOmasaData->energy_ratio_ism[sf][band][obj];
                    }
                }

                for ( obj = 0; obj < hMasa->data.nchan_ism; obj++ )
                for ( obj = 0; obj < nchan_ism; obj++ )
                {
                    hMasa->data.energy_ratio_ism[sf][0][obj] = energy_ism_ind[obj] / energy_ism;
                    hOmasaData->energy_ratio_ism[sf][0][obj] = energy_ism_ind[obj] / energy_ism;
                }
                hQMetaData->masa_to_total_energy_ratio[sf][0] = eneBand / ( eneBand + energy_ism + EPSILON );
            }
@@ -3555,16 +3577,16 @@ static void ivas_encode_masaism_metadata(
        for ( band = 0; band < numCodingBands; band++ )
        {
            energy_ism = 0.0f; /* ISM energy for current subband */
            for ( obj = 0; obj < hMasa->data.nchan_ism; obj++ )
            for ( obj = 0; obj < nchan_ism; obj++ )
            {
                energy_ism_ind[obj] = 0.0f;
            }
            for ( sf = 0; sf < omasa_nblocks; sf++ )
            {
                energy_ism += hMasa->data.energy_ism[sf][band];
                for ( obj = 0; obj < hMasa->data.nchan_ism; obj++ )
                energy_ism += hOmasaData->energy_ism[sf][band];
                for ( obj = 0; obj < nchan_ism; obj++ )
                {
                    energy_ism_ind[obj] += hMasa->data.energy_ism[sf][band] * hMasa->data.energy_ratio_ism[sf][band][obj];
                    energy_ism_ind[obj] += hOmasaData->energy_ism[sf][band] * hOmasaData->energy_ratio_ism[sf][band][obj];
                }
            }

@@ -3574,9 +3596,9 @@ static void ivas_encode_masaism_metadata(
            }
            else
            {
                for ( obj = 0; obj < hMasa->data.nchan_ism; obj++ )
                for ( obj = 0; obj < nchan_ism; obj++ )
                {
                    hMasa->data.energy_ratio_ism[0][band][obj] = energy_ism_ind[obj] / energy_ism;
                    hOmasaData->energy_ratio_ism[0][band][obj] = energy_ism_ind[obj] / energy_ism;
                }
                brange[0] = hMasa->data.band_mapping[band];
                brange[1] = hMasa->data.band_mapping[band + 1];
@@ -3599,7 +3621,7 @@ static void ivas_encode_masaism_metadata(
        {
            for ( band = 0; band < numCodingBands; band++ )
            {
                if ( hMasa->data.energy_ism[sf][band] == 0.0f )
                if ( hOmasaData->energy_ism[sf][band] == 0.0f )
                {
                    hQMetaData->masa_to_total_energy_ratio[sf][band] = 1.0f;
                }
@@ -3613,7 +3635,7 @@ static void ivas_encode_masaism_metadata(
                    {
                        eneBand += hMasa->data.energy[sf][bin];
                    }
                    hQMetaData->masa_to_total_energy_ratio[sf][band] = eneBand / ( eneBand + hMasa->data.energy_ism[sf][band] + EPSILON );
                    hQMetaData->masa_to_total_energy_ratio[sf][band] = eneBand / ( eneBand + hOmasaData->energy_ism[sf][band] + EPSILON );
                }
            }
        }
@@ -3622,7 +3644,7 @@ static void ivas_encode_masaism_metadata(
    encode_masa_to_total( hQMetaData, hMetaData, low_bitrate_mode, numCodingBands, numSf );

    /* quantize ism_ratios */
    if ( hMasa->data.nchan_ism > 1 )
    if ( nchan_ism > 1 )
    {
        inv_step = ( ( 1 << PARAM_ISM_POW_RATIO_NBITS ) - 1 );
        step = 1.0f / inv_step;
@@ -3634,14 +3656,14 @@ static void ivas_encode_masaism_metadata(
        {
            for ( band = 0; band < numCodingBands; band++ )
            {
                for ( obj = 0; obj < hMasa->data.nchan_ism; obj++ )
                for ( obj = 0; obj < nchan_ism; obj++ )
                {
                    assert( ( hMasa->data.energy_ratio_ism[sf][band][obj] >= 0 ) && ( hMasa->data.energy_ratio_ism[sf][band][obj] <= 1 ) );
                    ratio_ism[band][obj] = hMasa->data.energy_ratio_ism[sf][band][obj];
                    assert( ( hOmasaData->energy_ratio_ism[sf][band][obj] >= 0 ) && ( hOmasaData->energy_ratio_ism[sf][band][obj] <= 1 ) );
                    ratio_ism[band][obj] = hOmasaData->energy_ratio_ism[sf][band][obj];
                }

                /* Quantize ISM ratios */
                quantize_ratio_ism_vector( ratio_ism[band], ratio_ism_idx[band], hMasa->data.nchan_ism, hQMetaData->masa_to_total_energy_ratio[sf][band], idx_separated_object );
                quantize_ratio_ism_vector( ratio_ism[band], ratio_ism_idx[band], nchan_ism, hQMetaData->masa_to_total_energy_ratio[sf][band], idx_separated_object );

                if ( n_ism_tmp == numCodingBands && ratio_ism_idx[band][idx_separated_object] != 0 && hQMetaData->masa_to_total_energy_ratio[sf][band] < MASA2TOTAL_THR )
                {
@@ -3654,7 +3676,7 @@ static void ivas_encode_masaism_metadata(
                            ratio_ism_idx[band][idx_separated_object]--;
                        }
                        i++;
                        if ( i == hMasa->data.nchan_ism )
                        if ( i == nchan_ism )
                        {
                            i = 0;
                        }
@@ -3662,11 +3684,10 @@ static void ivas_encode_masaism_metadata(
                }

                /* reconstructed values */
                reconstruct_ism_ratios( ratio_ism_idx[band], hMasa->data.nchan_ism, step, hMasa->data.q_energy_ratio_ism[sf][band] );
                /* encode vector */
                reconstruct_ism_ratios( ratio_ism_idx[band], nchan_ism, step, hMasa->data.hOmasaData->q_energy_ratio_ism[sf][band] );
            }

            if ( ( hMasa->data.nchan_ism > 2 ) && ( idx_separated_object == hMasa->data.nchan_ism - 1 ) )
            if ( ( nchan_ism > 2 ) && ( idx_separated_object == nchan_ism - 1 ) )
            {
                /* rotate components */
                rotate = 1;
@@ -3674,8 +3695,8 @@ static void ivas_encode_masaism_metadata(
                {
                    if ( hQMetaData->masa_to_total_energy_ratio[sf][band] < MASA2TOTAL_THR )
                    {
                        tmp = ratio_ism_idx[band][hMasa->data.nchan_ism - 1];
                        ratio_ism_idx[band][hMasa->data.nchan_ism - 1] = ratio_ism_idx[band][0];
                        tmp = ratio_ism_idx[band][nchan_ism - 1];
                        ratio_ism_idx[band][nchan_ism - 1] = ratio_ism_idx[band][0];
                        ratio_ism_idx[band][0] = tmp;
                        if ( sf == 0 && tmp == 0 )
                        {
@@ -3709,18 +3730,18 @@ static void ivas_encode_masaism_metadata(
            /* encode data for current subframe */
            if ( sf > 0 && n_ism_tmp == numCodingBands )
            {
                encode_ratio_ism_subframe( ratio_ism_idx, hMasa->data.nchan_ism, numCodingBands, sf, ratio_ism_idx_prev_sf, hMetaData, hQMetaData->masa_to_total_energy_ratio[sf], 1, idx_separated_object );
                encode_ratio_ism_subframe( ratio_ism_idx, nchan_ism, numCodingBands, sf, ratio_ism_idx_prev_sf, hMetaData, hQMetaData->masa_to_total_energy_ratio[sf], 1, idx_separated_object );
            }
            else
            {
                encode_ratio_ism_subframe( ratio_ism_idx, hMasa->data.nchan_ism, numCodingBands, sf, ratio_ism_idx_prev_sf, hMetaData, hQMetaData->masa_to_total_energy_ratio[sf], 0, idx_separated_object );
                encode_ratio_ism_subframe( ratio_ism_idx, nchan_ism, numCodingBands, sf, ratio_ism_idx_prev_sf, hMetaData, hQMetaData->masa_to_total_energy_ratio[sf], 0, idx_separated_object );
            }

            /* calculate quantized ISM ratios */
            /* save previous subframe indexes */
            for ( band = 0; band < numCodingBands; band++ )
            {
                mvs2s( ratio_ism_idx[band], ratio_ism_idx_prev_sf[band], hMasa->data.nchan_ism );
                mvs2s( ratio_ism_idx[band], ratio_ism_idx_prev_sf[band], nchan_ism );
            }

            if ( rotate )
@@ -3729,8 +3750,8 @@ static void ivas_encode_masaism_metadata(
                {
                    if ( hQMetaData->masa_to_total_energy_ratio[sf][band] < MASA2TOTAL_THR )
                    {
                        tmp = ratio_ism_idx[band][hMasa->data.nchan_ism - 1];
                        ratio_ism_idx[band][hMasa->data.nchan_ism - 1] = ratio_ism_idx[band][0];
                        tmp = ratio_ism_idx[band][nchan_ism - 1];
                        ratio_ism_idx[band][nchan_ism - 1] = ratio_ism_idx[band][0];
                        ratio_ism_idx[band][0] = tmp;
                    }
                }
@@ -3738,10 +3759,10 @@ static void ivas_encode_masaism_metadata(
        }
    }

    calculate_nbits_meta( hMasa->data.nchan_ism, hMasa->data.q_energy_ratio_ism, hQMetaData->masa_to_total_energy_ratio, numSf, numCodingBands, bits_ism, idx_separated_object, ism_imp );
    calculate_nbits_meta( nchan_ism, hOmasaData->q_energy_ratio_ism, hQMetaData->masa_to_total_energy_ratio, numSf, numCodingBands, bits_ism, idx_separated_object, ism_imp );

    /* quantize directions */
    for ( obj = 0; obj < hMasa->data.nchan_ism; obj++ )
    for ( obj = 0; obj < nchan_ism; obj++ )
    {
        if ( bits_ism[obj] < 8 )
        {
+24 −24

File changed.

Preview size limit exceeded, changes collapsed.

Loading