blob: 6cd9759515815684a31e33f4b1b37168a8d98ce8 [file] [log] [blame]
#ifndef LOOP_PVT_H
#define LOOP_PVT_H
#define IXMAX_VAL 8206 /* ix always <= 8191+15. see count_bits() */
#define PRECALC_SIZE (IXMAX_VAL+2)
extern FLOAT masking_lower;
extern int convert_mdct, convert_psy, reduce_sidechannel;
extern unsigned nr_of_sfb_block[6][3][4];
extern int pretab[21];
struct scalefac_struct
{
int l[1+SBMAX_l];
int s[1+SBMAX_s];
};
extern struct scalefac_struct scalefac_band;
extern struct scalefac_struct sfBandIndex[6];
extern FLOAT8 pow43[PRECALC_SIZE];
#define Q_MAX 256
extern FLOAT8 pow20[Q_MAX];
extern FLOAT8 ipow20[Q_MAX];
#ifdef RH_ATH
extern FLOAT8 ATH_mdct_long[576], ATH_mdct_short[192];
#endif
FLOAT8 ATHformula(lame_global_flags *gfp,FLOAT8 f);
void compute_ath(lame_global_flags *gfp,FLOAT8 ATH_l[SBPSY_l],FLOAT8 ATH_s[SBPSY_l]);
void ms_convert(FLOAT8 xr[2][576],FLOAT8 xr_org[2][576]);
void on_pe(lame_global_flags *gfp,FLOAT8 pe[2][2],III_side_info_t *l3_side,
int targ_bits[2],int mean_bits, int gr);
void reduce_side(int targ_bits[2],FLOAT8 ms_ener_ratio,int mean_bits);
void outer_loop( lame_global_flags *gfp,
FLOAT8 xr[576], /*vector of the magnitudees of the spectral values */
int bits,
FLOAT8 noise[4],
III_psy_xmin *l3_xmin, /* the allowed distortion of the scalefactor */
int l3_enc[576], /* vector of quantized values ix(0..575) */
III_scalefac_t *scalefac, /* scalefactors */
gr_info *,
FLOAT8 xfsf[4][SBPSY_l],
int ch);
void iteration_init( lame_global_flags *gfp,III_side_info_t *l3_side, int l3_enc[2][2][576]);
int inner_loop( lame_global_flags *gfp,FLOAT8 xrpow[576],
int l3_enc[576],
int max_bits,
gr_info *cod_info);
int calc_xmin( lame_global_flags *gfp,FLOAT8 xr[576],
III_psy_ratio *ratio,
gr_info *cod_info,
III_psy_xmin *l3_xmin);
int scale_bitcount( III_scalefac_t *scalefac, gr_info *cod_info);
int scale_bitcount_lsf( III_scalefac_t *scalefac, gr_info *cod_info);
int calc_noise1( FLOAT8 xr[576],
int ix[576],
gr_info *cod_info,
FLOAT8 xfsf[4][SBPSY_l],
FLOAT8 distort[4][SBPSY_l],
III_psy_xmin *l3_xmin,
III_scalefac_t *,
FLOAT8 *noise, FLOAT8 *tot_noise, FLOAT8 *max_noise);
int loop_break( III_scalefac_t *scalefac, gr_info *cod_info);
void amp_scalefac_bands(FLOAT8 xrpow[576],
gr_info *cod_info,
III_scalefac_t *scalefac,
FLOAT8 distort[4][SBPSY_l]);
void quantize_xrpow( FLOAT8 xr[576],
int ix[576],
gr_info *cod_info );
void quantize_xrpow_ISO( FLOAT8 xr[576],
int ix[576],
gr_info *cod_info );
int
new_choose_table( int ix[576],
unsigned int begin,
unsigned int end, int * s );
int bin_search_StepSize2(lame_global_flags *gfp,int desired_rate, int start, int ix[576],
FLOAT8 xrspow[576], gr_info * cod_info);
int count_bits(lame_global_flags *gfp,int *ix, FLOAT8 xr[576], gr_info *cod_info);
int quant_compare(int type,
int best_over,FLOAT8 best_tot_noise,FLOAT8 best_over_noise,FLOAT8 best_max_over,
int over,FLOAT8 tot_noise, FLOAT8 over_noise,FLOAT8 max_noise);
int VBR_compare(
int best_over,FLOAT8 best_tot_noise,FLOAT8 best_over_noise,FLOAT8 best_max_over,
int over,FLOAT8 tot_noise, FLOAT8 over_noise,FLOAT8 max_noise);
void best_huffman_divide(int gr, int ch, gr_info *cod_info, int *ix);
void best_scalefac_store(lame_global_flags *gfp,int gr, int ch,
int l3_enc[2][2][576],
III_side_info_t *l3_side,
III_scalefac_t scalefac[2][2]);
int init_outer_loop(
lame_global_flags *gfp,
FLOAT8 xr[576], /* could be L/R OR MID/SIDE */
gr_info *cod_info);
#define LARGE_BITS 100000
#endif