📄 intensity.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 + -