Commit fe61d859 authored by vaclav's avatar vaclav
Browse files

rearrangements arount ivas_masa_enc_config()

parent e743feb2
Loading
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -5049,7 +5049,11 @@ void ivas_masa_estimate_energy(
    const int16_t nchan_transport                               /* i  : number of MASA input/transport channels         */
);

#ifdef MEM_ALLOC_APP
ivas_error ivas_masa_enc_config_memory(
#else
ivas_error ivas_masa_enc_config(
#endif
    Encoder_Struct* st_ivas                                     /* i/o: IVAS encoder structure                          */
);

+0 −2
Original line number Diff line number Diff line
@@ -239,12 +239,10 @@ ivas_error ivas_enc(
            push_indice( st->hBstr, IND_SMODE, hEncoderConfig->sba_order, SBA_ORDER_BITS );
#endif
        }
#ifndef MEM_ALLOC_APP
        else
        {
            ivas_masa_enc_reconfigure( st_ivas );
        }
#endif

        /* SBA/MASA metadata encoding and SBA/MASA metadata bitstream writing */
        hMetaData = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData : st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData;
+2 −4
Original line number Diff line number Diff line
@@ -1265,10 +1265,8 @@ ivas_error ivas_reconfig_enc(
    }
    else if ( ivas_format == MASA_FORMAT )
    {
        ivas_masa_enc_reconfigure( st_ivas );

        /* reconfigure the SBA format encoder */
        error = ivas_masa_enc_config( st_ivas );
        /* reconfigure the MASA format encoder */
        error = ivas_masa_enc_config_memory( st_ivas );
    }
    else if ( ivas_format == SBA_ISM_FORMAT )
    {
+75 −8
Original line number Diff line number Diff line
@@ -659,17 +659,31 @@ void ivas_masa_estimate_energy(
}


#ifdef MEM_ALLOC_APP
/*-----------------------------------------------------------------------*
 * ivas_masa_enc_config_memory()
 *
 * Frame-by-frame configuration of MASA encoder memory
 *-----------------------------------------------------------------------*/
#else
/*-----------------------------------------------------------------------*
 * ivas_masa_enc_config()
 *
 * Frame-by-frame configuration of MASA encoder
 *-----------------------------------------------------------------------*/
#endif

#ifdef MEM_ALLOC_APP
ivas_error ivas_masa_enc_config_memory(
#else
ivas_error ivas_masa_enc_config(
#endif
    Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */
)
{
#ifndef MEM_ALLOC_APP
    int16_t i;
#endif
    MASA_ENCODER_HANDLE hMasa;
    IVAS_QMETADATA_HANDLE hQMetaData;
    IVAS_FORMAT ivas_format;
@@ -682,8 +696,8 @@ ivas_error ivas_masa_enc_config(
    int16_t maxBin, sf;
#endif
    ivas_error error;
    int32_t ism_total_brate;
#ifndef MEM_ALLOC_APP
    int32_t ism_total_brate;
    int32_t masa_total_brate;
#endif

@@ -693,6 +707,7 @@ ivas_error ivas_masa_enc_config(
    ivas_format = st_ivas->hEncoderConfig->ivas_format;
    ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate;

#ifndef MEM_ALLOC_APP
    ism_total_brate = 0;
    if ( ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) )
    {
@@ -703,7 +718,7 @@ ivas_error ivas_masa_enc_config(
    }

    ivas_masa_set_elements( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, hQMetaData, &st_ivas->hEncoderConfig->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE, ivas_format, st_ivas->ism_mode, ism_total_brate );

#endif
    hQMetaData->is_masa_ivas_format = 1;

    if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT )
@@ -740,6 +755,7 @@ ivas_error ivas_masa_enc_config(
        ivas_masa_set_coding_config( &( hMasa->config ), hMasa->data.band_mapping, ivas_total_brate, st_ivas->nchan_transport, ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) );
    }

#ifndef MEM_ALLOC_APP
    /* Setup importance weights for two-direction band selection. */
    if ( hMasa->config.numberOfDirections == 2 )
    {
@@ -787,6 +803,7 @@ ivas_error ivas_masa_enc_config(
    {
        set_c( (int8_t *) hMasa->data.twoDirBands, 0, hMasa->config.numCodingBands );
    }
#endif

    /* Set qmeta to correct values */
    if ( ( error = ivas_qmetadata_allocate_memory( hQMetaData, hMasa->config.numCodingBands, hMasa->config.numberOfDirections == 2 && hMasa->config.numTwoDirBands != 0 ? 2 : 1, hMasa->config.useCoherence ) ) != IVAS_ERR_OK )
@@ -925,6 +942,56 @@ void ivas_masa_enc_init(
        }
    }

    ivas_masa_set_elements( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, hQMetaData, &st_ivas->hEncoderConfig->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE, ivas_format, st_ivas->ism_mode, ism_total_brate );

    /* Setup importance weights for two-direction band selection. */
    if ( hMasa->config.numberOfDirections == 2 )
    {
        set_f( hMasa->data.importanceWeight, 1.0f, hMasa->config.numCodingBands );

        if ( hMasa->config.numCodingBands == 5 )
        {
            hMasa->data.importanceWeight[4] = 0.7f;
        }
        else if ( hMasa->config.numCodingBands == 8 )
        {
            hMasa->data.importanceWeight[7] = 0.7f;
        }
        else if ( hMasa->config.numCodingBands == 10 )
        {
            hMasa->data.importanceWeight[8] = 0.7f;
            hMasa->data.importanceWeight[9] = 0.1f;
        }
        else if ( hMasa->config.numCodingBands == 12 )
        {
            hMasa->data.importanceWeight[10] = 0.7f;
            hMasa->data.importanceWeight[11] = 0.1f;
        }
        else if ( hMasa->config.numCodingBands == 18 )
        {
            hMasa->data.importanceWeight[14] = 0.8f;
            hMasa->data.importanceWeight[15] = 0.5f;
            hMasa->data.importanceWeight[16] = 0.2f;
            hMasa->data.importanceWeight[17] = 0.0f;
        }
        else if ( hMasa->config.numCodingBands == 24 )
        {
            hMasa->data.importanceWeight[20] = 0.8f;
            hMasa->data.importanceWeight[21] = 0.5f;
            hMasa->data.importanceWeight[22] = 0.2f;
            hMasa->data.importanceWeight[23] = 0.0f;
        }

        if ( hMasa->config.numTwoDirBands == hMasa->config.numCodingBands )
        {
            set_c( (int8_t *) hMasa->data.twoDirBands, 1, hMasa->config.numCodingBands );
        }
    }
    else
    {
        set_c( (int8_t *) hMasa->data.twoDirBands, 0, hMasa->config.numCodingBands );
    }

    for ( i = 0; i < hQMetaData->no_directions; i++ )
    {
        hQMetaData->q_direction[i].cfg.nbands = hMasa->config.numCodingBands;
@@ -954,7 +1021,7 @@ void ivas_masa_enc_init(
    }
    maxBand--;

    st_ivas->hQMetaData->q_direction->cfg.inactiveBands = 0;
    hQMetaData->q_direction->cfg.inactiveBands = 0;
    masa_total_brate = ivas_total_brate;
    if ( ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_DISC )
    {
@@ -983,11 +1050,11 @@ void ivas_masa_enc_init(

        if ( maxBand < MASA_MAXIMUM_CODING_SUBBANDS )
        {
            st_ivas->hQMetaData->q_direction->cfg.inactiveBands = MASA_MAXIMUM_CODING_SUBBANDS - maxBand;
            hQMetaData->q_direction->cfg.inactiveBands = MASA_MAXIMUM_CODING_SUBBANDS - maxBand;
        }
        else
        {
            st_ivas->hQMetaData->q_direction->cfg.inactiveBands = 0;
            hQMetaData->q_direction->cfg.inactiveBands = 0;
        }
    }

@@ -1007,13 +1074,13 @@ void ivas_masa_enc_init(

    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.hOmasaData->omasa_stereo_sw_cnt < OMASA_STEREO_SW_CNT_MAX )
        if ( st_ivas->hCPE[0]->element_mode == IVAS_CPE_DFT || hMasa->data.hOmasaData->omasa_stereo_sw_cnt < OMASA_STEREO_SW_CNT_MAX )
        {
            st_ivas->hMasa->data.hOmasaData->lp_noise_CPE = st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise;
            hMasa->data.hOmasaData->lp_noise_CPE = st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise;
        }
        else
        {
            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;
            hMasa->data.hOmasaData->lp_noise_CPE = ( st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise + st_ivas->hCPE[0]->hCoreCoder[1]->lp_noise ) / CPE_CHANNELS;
        }
    }

+4 −0
Original line number Diff line number Diff line
@@ -128,7 +128,11 @@ ivas_error ivas_mcmasa_enc_open(
    }

    /* With McMASA, we config MASA encoder only in init as we know the input and there are no frame-by-frame changes currently. */
#ifdef MEM_ALLOC_APP
    if ( ( error = ivas_masa_enc_config_memory( st_ivas ) ) != IVAS_ERR_OK )
#else
    if ( ( error = ivas_masa_enc_config( st_ivas ) ) != IVAS_ERR_OK )
#endif
    {
        return error;
    }
Loading