⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 huffinit.c

📁 jpeg and mpeg 编解码技术源代码
💻 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 + -