Commit 3b0318ec authored by Shikha Shetgeri's avatar Shikha Shetgeri
Browse files

Added functionality to populate the hMetaData_tmp buffer dynamically

parent d76c2a49
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -170,6 +170,7 @@
#define FIX_350_MASA_DELAY_COMP                         /* Nokia: Issue 350: MASA audio/meta delay compensation */
#define FIX_372_LIB_REND_VALIDATE_IO                    /* FhG: Issue 372: IVAS_rend segfaults with unsupported I/O configs - add validation checks of I/O config */

#define ARITH_HUFF_CODER_CHANGES
/* ################## End DEVELOPMENT switches ######################### */
/* clang-format on */
#endif
+0 −1
Original line number Diff line number Diff line
@@ -236,7 +236,6 @@ ivas_error ivas_spar_enc_open(
#ifdef SBA_BR_SWITCHING_CLEAN_UP
    }
#endif

    /*-----------------------------------------------------------------*
     * Final assignment
     *-----------------------------------------------------------------*/
+58 −2
Original line number Diff line number Diff line
@@ -111,7 +111,11 @@ ivas_error ivas_spar_md_enc_open(
    ivas_spar_md_enc_state_t *hMdEnc;
    ivas_error error;
    int16_t num_channels, i, j;

#ifdef ARITH_HUFF_CODER_CHANGES
    int16_t bits_per_PR, bits_per_C, bits_per_P = 0;
    int16_t wc_coarse_strat = 0;
    int16_t num_bands_arith_huff = ivas_get_num_bands_from_bw_idx( SPAR_CONFIG_BW );
#endif
    error = IVAS_ERR_OK;

    if ( ( hMdEnc = (ivas_spar_md_enc_state_t *) malloc( sizeof( ivas_spar_md_enc_state_t ) ) ) == NULL )
@@ -206,6 +210,41 @@ ivas_error ivas_spar_md_enc_open(
        return error;
    }

#ifdef ARITH_HUFF_CODER_CHANGES
    i = 0;
    /*calculate the worst case strat vlaue*/
    while ( i <= IVAS_SPAR_BR_TABLE_LEN )
    {
        if ( sba_order == SBA_FOA_ORDER && ivas_spar_br_table_consts[i].ivas_total_brate == hEncoderConfig->ivas_total_brate && hEncoderConfig->ivas_total_brate <= 192000 )
        {
            bits_per_PR = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[2][0] ) + 1 ) * 3;
            bits_per_C = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[2][1] ) + 1 ) * 2;
            bits_per_P = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[2][2] ) + 1 ) * 1;
            wc_coarse_strat = bits_per_PR + bits_per_C + bits_per_P;
            wc_coarse_strat = ( wc_coarse_strat * num_bands_arith_huff * 50 ) + 550;
            wc_coarse_strat = wc_coarse_strat / 50;
            break;
        }
        else if ( sba_order == SBA_FOA_ORDER && ivas_spar_br_table_consts[i].ivas_total_brate == hEncoderConfig->ivas_total_brate && hEncoderConfig->ivas_total_brate > 192000 )
        {
            bits_per_PR = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[0][0] ) + 1 ) * 3;
            bits_per_C = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[0][1] ) + 1 ) * 2;
            bits_per_P = ( (int16_t) log2( ivas_spar_br_table_consts[i].q_lvls[0][2] ) + 1 ) * 1;
            wc_coarse_strat = bits_per_PR + bits_per_C + bits_per_P;
            wc_coarse_strat = ( wc_coarse_strat * num_bands_arith_huff * 50 ) + 550;
            wc_coarse_strat = wc_coarse_strat / 50;
            break;
        }
        else if ( sba_order == SBA_HOA2_ORDER || sba_order == SBA_HOA3_ORDER )
        {
            wc_coarse_strat = MAX_BITS_METADATA;
            break;
        }
        i++;
    }
    hMdEnc->wc_strat = wc_coarse_strat;
    hMdEnc->wc_coarse_strat_buff = (Indice *) malloc( wc_coarse_strat * sizeof( Indice ) );
#endif
    *hMdEnc_in = hMdEnc;

    return error;
@@ -287,7 +326,14 @@ void ivas_spar_md_enc_close(
        }
        free( hMdEnc->mixer_mat_local );
    }

#ifdef ARITH_HUFF_CODER_CHANGES
    if ( hMdEnc->wc_coarse_strat_buff != NULL )
    {
        free( hMdEnc->wc_coarse_strat_buff );
        hMdEnc->wc_coarse_strat_buff = NULL;
        hMdEnc->wc_strat = 0;
    }
#endif
    if ( hMdEnc != NULL )
    {
        free( hMdEnc );
@@ -558,7 +604,9 @@ ivas_error ivas_spar_md_enc_process(
    int16_t code_strat;
    int16_t bit_pos_start, next_ind_start, last_ind_start;
    BSTR_ENC_DATA hMetaData_tmp;
#ifndef ARITH_HUFF_CODER_CHANGES
    Indice ind_list_tmp[MAX_BITS_METADATA]; // IVAS_fmToDo: size to be optimized
#endif
    float Wscale[IVAS_MAX_NUM_BANDS];

    num_quant_strats = hMdEnc->spar_md_cfg.num_quant_strats;
@@ -605,7 +653,11 @@ ivas_error ivas_spar_md_enc_process(
        num_quant_strats = 1;
    }

#ifdef ARITH_HUFF_CODER_CHANGES
    hMetaData_tmp.ind_list = hMdEnc->wc_coarse_strat_buff;
#else
    hMetaData_tmp.ind_list = ind_list_tmp;
#endif

    /* Save state of metadata bitstream buffer */
    bit_pos_start = hMetaData->nb_bits_tot;
@@ -871,8 +923,12 @@ ivas_error ivas_spar_md_enc_process(
            strat = cs[i];
            if ( strat != NO_STRAT )
            {
#ifndef ARITH_HUFF_CODER_CHANGES
                reset_indices_enc( &hMetaData_tmp, MAX_BITS_METADATA );

#else
                reset_indices_enc( &hMetaData_tmp, hMdEnc->wc_strat );
#endif
                ivas_write_spar_md_bitstream( hMdEnc, num_bands, bands_bw, &hMetaData_tmp, hEncoderConfig->ivas_total_brate, strat, qsi, planarCP );

                if ( hMetaData->nb_bits_tot == bit_pos_start || hMetaData_tmp.nb_bits_tot < ( hMetaData->nb_bits_tot - bit_pos_start ) )
+4 −2
Original line number Diff line number Diff line
@@ -674,6 +674,10 @@ typedef struct ivas_spar_md_enc_state_t
    ivas_huff_coeffs_t huff_coeffs;
    int16_t table_idx;
    int16_t spar_hoa_md_flag;
#ifdef ARITH_HUFF_CODER_CHANGES
    int16_t wc_strat;
    Indice* wc_coarse_strat_buff;
#endif
} ivas_spar_md_enc_state_t;

/* PCA structure */
@@ -1041,8 +1045,6 @@ typedef struct encoder_config_structure
    int16_t Opt_AGC_ON;                             /* flag indicating AGC operation in SBA */
#endif
#endif


} ENCODER_CONFIG, *ENCODER_CONFIG_HANDLE;