📄 huffinit.c
字号:
#include <math.h>
#include "all.h"
void
huffbookinit(void)
{
int i;
hufftab(&book[1], book1, 4, 1, HUF1SGN);
hufftab(&book[2], book2, 4, 1, HUF2SGN);
hufftab(&book[3], book3, 4, 2, HUF3SGN);
hufftab(&book[4], book4, 4, 2, HUF4SGN);
hufftab(&book[5], book5, 2, 4, HUF5SGN);
hufftab(&book[6], book6, 2, 4, HUF6SGN);
hufftab(&book[7], book7, 2, 7, HUF7SGN);
hufftab(&book[8], book8, 2, 7, HUF8SGN);
hufftab(&book[9], book9, 2, 12, HUF9SGN);
hufftab(&book[10], book10, 2, 12, HUF10SGN);
hufftab(&book[11], book11, 2, 16, HUF11SGN);
hufftab(&book[BOOKSCL], bookscl, 1, 60, 1);
for(i = 0; i < TEXP; i++){
exptable[i] = pow( 2.0, 0.25*i);
}
maxfac = TEXP;
for(i = 0; i < MAX_IQ_TBL; i++){
iq_exp_tbl[i] = pow(i, 4./3.);
}
infoinit(&samp_rate_info[mc_info.sampling_rate_idx]);
}
void
infoinit(SR_Info *sip)
{
int i, j, k, n, ws;
short *sfbands;
Info *ip;
/* long block info */
ip = &only_long_info;
win_seq_info[ONLY_LONG_WINDOW] = ip;
ip->islong = 1;
ip->nsbk = 1;
ip->bins_per_bk = LN2;
for (i=0; i<ip->nsbk; i++) {
ip->sfb_per_sbk[i] = sip->nsfb1024;
ip->sectbits[i] = LONG_SECT_BITS;
ip->sbk_sfb_top[i] = sip->SFbands1024;
}
ip->sfb_width_128 = NULL;
ip->num_groups = 1;
ip->group_len[0] = 1;
ip->group_offs[0] = 0;
/* short block info */
ip = &eight_short_info;
win_seq_info[EIGHT_SHORT_WINDOW] = ip;
ip->islong = 0;
ip->nsbk = NSHORT;
ip->bins_per_bk = LN2;
for (i=0; i<ip->nsbk; i++) {
ip->sfb_per_sbk[i] = sip->nsfb128;
ip->sectbits[i] = SHORT_SECT_BITS;
ip->sbk_sfb_top[i] = sip->SFbands128;
}
/* construct sfb width table */
ip->sfb_width_128 = sfbwidth128;
for (i=0, j=0, n=sip->nsfb128; i<n; i++) {
k = sip->SFbands128[i];
sfbwidth128[i] = k - j;
j = k;
}
/* common to long and short */
for (ws=0; ws<NUM_WIN_SEQ; ws++) {
if ((ip = win_seq_info[ws]) == NULL)
continue;
ip->sfb_per_bk = 0;
k = 0;
n = 0;
for (i=0; i<ip->nsbk; i++) {
/* compute bins_per_sbk */
ip->bins_per_sbk[i] = ip->bins_per_bk / ip->nsbk;
/* compute sfb_per_bk */
ip->sfb_per_bk += ip->sfb_per_sbk[i];
/* construct default (non-interleaved) bk_sfb_top[] */
sfbands = ip->sbk_sfb_top[i];
for (j=0; j < ip->sfb_per_sbk[i]; j++)
ip->bk_sfb_top[j+k] = sfbands[j] + n;
n += ip->bins_per_sbk[i];
k += ip->sfb_per_sbk[i];
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -