Commit 454f16b7 authored by vaclav's avatar vaclav
Browse files

Merge branch 'ARITH_HUFF_CODER_CHANGES_formal_improvements' into 'main'

Arith huff coder changes formal improvements

See merge request !706
parents 64f3259c 544d452a
Loading
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1005,13 +1005,13 @@ typedef enum

#define IVAS_SPAR_HOA3_NP_CHS                   8                           /* number of higher order non-planar channels */

#define SPAR_NUM_CODING_STRAT_BITS              ( 3 )
#define SPAR_NUM_CODING_STRAT_BITS              3

/* AGC constants */
#define AGC_BITS_PER_CH                         3
#define AGC_EMAX                                0
#define AGC_SIGNALLING_BITS                     1
#define IVAS_SPAR_ARITH_OVERSHOOT_BITS               (16)
#define IVAS_SPAR_ARITH_OVERSHOOT_BITS          16

/* Common SPAR metadata constants */
#define IVAS_ACTIVEW_DM_F_SCALE                 0.5f
+9 −7
Original line number Diff line number Diff line
@@ -312,12 +312,18 @@ void ivas_dirac_config_bands(
    return;
}

/*-------------------------------------------------------------------*
 * ivas_sba_get_max_md_bits()
 *
 * Return maximum SBA DirAC metadata bit-budget and nominal bit-budget
 *-------------------------------------------------------------------*/

void ivas_get_dirac_sba_max_md_bits(
    const int32_t sba_total_brate,
    int16_t *bits_frame_nominal,
    int16_t *metadata_max_bits,
    int16_t *qmetadata_max_bit_req,
    int16_t nbands )
    const int16_t nbands )
{
    if ( sba_total_brate <= IVAS_13k2 )
    {
@@ -375,6 +381,7 @@ void ivas_get_dirac_sba_max_md_bits(
    return;
}


/*-------------------------------------------------------------------------
 * ivas_dirac_sba_config()
 *
@@ -448,12 +455,7 @@ ivas_error ivas_dirac_sba_config(
            return error;
        }
    }
    ivas_get_dirac_sba_max_md_bits(
        sba_total_brate,
        &hQMetaData->bits_frame_nominal,
        &hQMetaData->metadata_max_bits,
        &hQMetaData->qmetadata_max_bit_req,
        hQMetaData->q_direction[0].cfg.nbands );
    ivas_get_dirac_sba_max_md_bits( sba_total_brate, &hQMetaData->bits_frame_nominal, &hQMetaData->metadata_max_bits, &hQMetaData->qmetadata_max_bit_req, hQMetaData->q_direction[0].cfg.nbands );

    return error;
}
+119 −31
Original line number Diff line number Diff line
@@ -110,17 +110,21 @@ ivas_error mct_enc_reconfigure(
    Encoder_Struct *st_ivas,                                    /* i/o: IVAS encoder structure                  */
    const uint16_t b_nchan_change                               /* i  : flag indicating different channel count */
);

ivas_error ivas_spar_md_enc_init
(
    ivas_spar_md_enc_state_t *hMdEnc,                           /* o  : MD encoder handle                       */
    const ENCODER_CONFIG_HANDLE hEncoderConfig,                 /* i  : configuration structure                 */
    const int16_t sba_order                                     /* i  : Ambisonic (SBA) order                   */
);

ivas_error ivas_sba_enc_reconfigure( 
    Encoder_Struct *st_ivas                                     /* i/o: IVAS encoder structure                  */
);
/*! r: maximum SBA metadata bit-budget */
int16_t ivas_sba_get_max_md_bits(
    Encoder_Struct *st_ivas );
    Encoder_Struct *st_ivas                                     /* i/o: IVAS encoder structure                  */
);

void destroy_sce_enc(
    SCE_ENC_HANDLE hSCE                                         /* i/o: SCE encoder structure                   */
@@ -3557,7 +3561,8 @@ void ivas_get_dirac_sba_max_md_bits(
    int16_t *bits_frame_nominal,
    int16_t *metadata_max_bits,
    int16_t *qmetadata_max_bit_req,
    int16_t nbands );
    const int16_t nbands 
);

ivas_error ivas_dirac_sba_config(
    IVAS_QMETADATA_HANDLE hQMetaData,                           /* i/o: q_metadata handle                                    */
@@ -4349,8 +4354,7 @@ int16_t ivas_get_sba_num_TCs(
void ivas_spar_set_bitrate_config(
    ivas_spar_md_com_cfg *pSpar_md_cfg,                         /* i/o: SPAR MD config. handle                  */
    const int16_t table_idx,                                    /* i  : config. table index                     */
	const int16_t num_bands                                     /* i  : number of bands                         */
    ,
	const int16_t num_bands,                                    /* i  : number of bands                         */
    const int16_t dirac2spar_md_flag,
    const int16_t enc_flag,
    const int16_t pca_flag,
@@ -4863,27 +4867,111 @@ int16_t ivas_get_bits_to_encode(
    int32_t val 
);

void ivas_huffman_encode( ivas_huffman_cfg_t *huff_cfg, int16_t in, int16_t *hcode, int16_t *hlen );
void ivas_spar_huff_coeffs_com_init( ivas_huff_coeffs_t *pHuff_coeffs, ivas_spar_md_com_cfg *pSpar_cfg, const int16_t table_idx, const int16_t enc_dec );
void ivas_spar_arith_coeffs_com_init( ivas_arith_coeffs_t *pArith_coeffs, ivas_spar_md_com_cfg *pSpar_cfg, const int16_t table_idx, const int16_t enc_dec );
void ivas_huffman_encode( 
    ivas_huffman_cfg_t *huff_cfg, 
    int16_t in, 
    int16_t *hcode, 
    int16_t *hlen 
);

void ivas_spar_huff_coeffs_com_init( 
    ivas_huff_coeffs_t *pHuff_coeffs, 
    ivas_spar_md_com_cfg *pSpar_cfg, 
    const int16_t table_idx, 
    const int16_t enc_dec 
);

void ivas_spar_arith_coeffs_com_init( 
    ivas_arith_coeffs_t *pArith_coeffs,
    ivas_spar_md_com_cfg *pSpar_cfg,
    const int16_t table_idx, 
    const int16_t enc_dec 
);

int16_t ivas_arith_encode_cmplx_cell_array(
ivas_arith_t *pArith_re, ivas_arith_t *pArith_re_diff, const int16_t *pDo_diff, const int16_t nB, int16_t *pSymbol_re, int16_t *pSymbol_old_re, ivas_cell_dim_t *pCell_dims, BSTR_ENC_HANDLE hMetaData, const int16_t any_diff 
  , int32_t wc_strat_arith
);
ivas_error ivas_huffman_decode( ivas_huffman_cfg_t *huff_cfg, Decoder_State *st0, int16_t *dec_out );
void ivas_arith_decode_cmplx_cell_array( ivas_arith_t *pArith_re, ivas_arith_t *pArith_re_diff, Decoder_State *st0, ivas_cell_dim_t *pCell_dims, int16_t *pDo_diff, const int16_t nB, int16_t *pSymbol_re, int16_t *pSymbol_re_old );

void ivas_ari_start_decoding_14bits_ext_1_lfe( Decoder_State *st, Tastat *s, int16_t *extra_bits_read );
uint16_t ivas_ari_decode_14bits_bit_ext_1_lfe( Decoder_State *st, Tastat *s, const uint16_t *cum_freq, int16_t *extra_bits_read );
void ivas_ari_done_decoding_14bits_ext_1_lfe( Decoder_State *st, const int16_t extra_bits_read );
void ivas_ari_done_encoding_14bits( BSTR_ENC_HANDLE hBstr, Tastat *s );
void ivas_ari_encode_14bits_ext( BSTR_ENC_HANDLE hBstr, Tastat *s, int32_t symbol, const uint16_t *cum_freq );

void ivas_wrap_arround( int16_t *pArr, const int16_t min_val, const int16_t max_val, const int16_t length );
void ivas_get_cum_freq_model( const int16_t *pFreq_model, const int16_t length, int16_t *pCum_freq_model );
int16_t ivas_map_num_pred_r_to_idx( const int16_t num_quant_points_pred_r, const int16_t active_w_flag );
int16_t ivas_map_num_drct_r_to_idx( const int16_t num_quant_points_drct_r );
int16_t ivas_map_num_decd_r_to_idx( const int16_t num_quant_points_decd_r );

    ivas_arith_t *pArith_re, 
    ivas_arith_t *pArith_re_diff, 
    const int16_t *pDo_diff, 
    const int16_t nB, 
    int16_t *pSymbol_re, 
    int16_t *pSymbol_old_re, 
    ivas_cell_dim_t *pCell_dims, 
    BSTR_ENC_HANDLE hMetaData, 
    const int16_t any_diff 
    , 
    const int16_t wc_strat_arith
);

ivas_error ivas_huffman_decode( 
    ivas_huffman_cfg_t *huff_cfg, 
    Decoder_State *st0, 
    int16_t *dec_out 
);

void ivas_arith_decode_cmplx_cell_array( 
    ivas_arith_t *pArith_re, 
    ivas_arith_t *pArith_re_diff, 
    Decoder_State *st0,
    ivas_cell_dim_t *pCell_dims, 
    int16_t *pDo_diff, const int16_t nB, 
    int16_t *pSymbol_re,
    int16_t *pSymbol_re_old 
);

void ivas_ari_start_decoding_14bits_ext_1_lfe( 
    Decoder_State *st,
    Tastat *s, 
    int16_t *extra_bits_read 
);

uint16_t ivas_ari_decode_14bits_bit_ext_1_lfe( 
    Decoder_State *st, Tastat *s, 
    const uint16_t *cum_freq, 
    int16_t *extra_bits_read 
);

void ivas_ari_done_decoding_14bits_ext_1_lfe( 
    Decoder_State *st, 
    const int16_t extra_bits_read 
);

void ivas_ari_done_encoding_14bits( 
    BSTR_ENC_HANDLE hBstr, Tastat *s 
);

void ivas_ari_encode_14bits_ext( 
    BSTR_ENC_HANDLE hBstr, 
    Tastat *s, 
    int32_t symbol, 
    const uint16_t *cum_freq 
);

void ivas_wrap_arround( 
    int16_t *pArr, 
    const int16_t min_val,
    const int16_t max_val, 
    const int16_t length 
);

void ivas_get_cum_freq_model( 
    const int16_t *pFreq_model, 
    const int16_t length, 
    int16_t *pCum_freq_model 
);

int16_t ivas_map_num_pred_r_to_idx( 
    const int16_t num_quant_points_pred_r, 
    const int16_t active_w_flag 
);

int16_t ivas_map_num_drct_r_to_idx( 
    const int16_t num_quant_points_drct_r 
);

int16_t ivas_map_num_decd_r_to_idx( 
    const int16_t num_quant_points_decd_r 
);

/* Quantization utilities */
void ivas_quantise_real_values(
+4 −2
Original line number Diff line number Diff line
@@ -2125,8 +2125,7 @@ int16_t ivas_get_bits_to_encode(
void ivas_spar_set_bitrate_config(
    ivas_spar_md_com_cfg *pSpar_md_cfg, /* i/o: SPAR MD config. handle  */
    const int16_t table_idx,            /* i  : config. table index     */
    const int16_t num_bands             /* i  : number of bands         */
    ,
    const int16_t num_bands,            /* i  : number of bands         */
    const int16_t dirac2spar_md_flag,
    const int16_t enc_flag,
    const int16_t pca_flag,
@@ -2142,6 +2141,7 @@ void ivas_spar_set_bitrate_config(
    int16_t n_input, n_dmx, n_dec;
    int16_t quant_strat;
    int16_t bands_bw;

    pSpar_md_cfg->nchan_transport = ivas_spar_br_table_consts[table_idx].nchan_transport;

    for ( i = 0; i < pSpar_md_cfg->nchan_transport; i++ )
@@ -2180,6 +2180,7 @@ void ivas_spar_set_bitrate_config(

    pSpar_md_cfg->tgt_bits_per_blk -= md_coding_bits_header;
    pSpar_md_cfg->max_bits_per_blk -= md_coding_bits_header;

    if ( ivas_total_brate < IVAS_24k4 )
    {
        bands_bw = 2;
@@ -2261,6 +2262,7 @@ void ivas_spar_set_bitrate_config(
        }
        pSpar_md_cfg->max_md_bits_spar = pSpar_md_cfg->max_bits_per_blk + agc_bits + pca_bits;
    }

    return;
}

lib_dec/ivas_spar_md_dec.c

100644 → 100755
+2 −3
Original line number Diff line number Diff line
@@ -486,9 +486,8 @@ ivas_error ivas_spar_md_dec_init(
    ivas_sba_get_spar_hoa_ch_ind( num_channels, hDecoderConfig->ivas_total_brate, hMdDec->HOA_md_ind );

    hMdDec->spar_md.num_bands = ( hMdDec->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND );
    ivas_spar_set_bitrate_config( &hMdDec->spar_md_cfg, hMdDec->table_idx, hMdDec->spar_md.num_bands,
                                  hMdDec->spar_hoa_dirac2spar_md_flag,
                                  0, 0, 0 );

    ivas_spar_set_bitrate_config( &hMdDec->spar_md_cfg, hMdDec->table_idx, hMdDec->spar_md.num_bands, hMdDec->spar_hoa_dirac2spar_md_flag, 0, 0, 0 );

    nchan_transport = hMdDec->spar_md_cfg.nchan_transport;

Loading