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

📄 intensity.c

📁 JPEG-MPEG編解碼技術書集的代碼
💻 C
字号:

#include <math.h>
#include "all.h"

/*
 * if (chan==RIGHT) { 
 *  do IS decoding for this channel (scale left ch. values with
 *  factor(SFr-SFl) )
 *  reset all lpflags for which IS is on
 *  pass decoded IS values to predict
 * }
 */
void
intensity( MC_Info *mip, Info *info, int widx, int ch,
    byte *group, byte *cb_map, short *factors, 
    int *lpflag, Float *coef[Chans] )
{
    Ch_Info *cip = &mip->ch_info[ch];
    Float   *left, *right, *r, *l, scale;
    int     cb, sign_sfb, sfb, n, nn, b, bb, nband;
    short   *band;
    
    if (!(cip->cpe && !cip->ch_is_left))
	return;
	
    right = coef[ ch ];
    left  = coef[ cip->paired_ch ];
    
    /* Intensity goes by group */
    bb = 0;
    for (b = 0; b < info->nsbk; ) {
	nband = info->sfb_per_sbk[b];
	band = info->sbk_sfb_top[b];

	b = *group++;		/* b = index of last sbk in group */
	for (; bb < b; bb++) {	/* bb = sbk index */
	    n = 0;
	    for (sfb = 0; sfb < nband; sfb++){
		nn = band[sfb];	/* band is offset table, nn is last coef in band */
		cb = cb_map[sfb];
		if (cb == INTENSITY_HCB  ||  cb == INTENSITY_HCB2) {
		    /* found intensity code book */ 
		    /* disable prediction (only important for long blocks) */
		    lpflag[1+sfb] = 0;
		    
	            sign_sfb = (cb == INTENSITY_HCB) ? 1 : -1;
	            scale = sign_sfb * pow( 0.5, 0.25*(factors[sfb]) );

		    /* reconstruct right intensity values */
		    r = right + n;
		    l = left + n;
		    for (; n < nn; n++) {	/* n is coef index */
			*r++ = *l++ * scale;
		    }
		}
		n = nn;
	    }
	    right += info->bins_per_sbk[bb];
	    left += info->bins_per_sbk[bb];
	    factors += nband;
	}
	cb_map += info->sfb_per_sbk[bb-1];
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -