📄 g7231_tame.c
字号:
#include "typedef.h"
#include "G7231_basop.h"
#include "G7231_cst_lbc.h"
#include "G7231_lbccodec.h"
#include "G7231_coder.h"
#include "G7231_exc_lbc.h"
#include "G7231_tame.h"
#include "G7231_tab_lbc.h"
#include "intrindefs.h"
void G7231Update_Err(
Word16 Olp, Word16 AcLg, Word16 AcGn
)
{
Word16 *ptr_tab;
Word16 i, iz, temp1, temp2;
Word16 Lag;
Word32 Worst1, Worst0, L_temp;
Word16 beta;
Lag = Olp - (Word16)G7231Pstep + AcLg;
/* Select Quantization tables */
i = 0 ;
ptr_tab = G7231tabgain85;
if ( G7231CodStat.WrkRate == Rate63 ) {
if ( Olp >= (Word16) (G7231SubFrLen-2) ) ptr_tab = G7231tabgain170;
}
else {
ptr_tab = G7231tabgain170;
}
beta = ptr_tab[(int)AcGn]; /* beta = gain * 8192 */
if(Lag <= (G7231SubFrLen/2)) {
Worst0 = G7231L_mls(G7231CodStat.Err[0], beta);
Worst0 = G7231L_shl(Worst0, 2);
Worst0 = G7231L_add(G7231Err0, Worst0);
Worst1 = Worst0;
}
else {
iz = G7231mult(Lag, 1092); /* Lag / 30 */
temp1 = G7231add(iz, 1);
temp2 = G7231sub(G7231shl(temp1, 5), G7231shl(temp1, 1)); /* 30 (iz+1) */
if(temp2 != Lag) {
if(iz == 1) {
Worst0 = G7231L_mls(G7231CodStat.Err[0], beta);
Worst0 = G7231L_shl(Worst0, 2);
Worst0 = G7231L_add(G7231Err0, Worst0);
Worst1 = G7231L_mls(G7231CodStat.Err[1], beta);
Worst1 = G7231L_shl(Worst1, 2);
Worst1 = G7231L_add(G7231Err0, Worst1);
if(Worst0 > Worst1) Worst1 = Worst0;
else Worst0 = Worst1;
}
else {
Worst0 = G7231L_mls(G7231CodStat.Err[iz-2], beta);
Worst0 = G7231L_shl(Worst0, 2);
Worst0 = G7231L_add(G7231Err0, Worst0);
L_temp = G7231L_mls(G7231CodStat.Err[iz-1], beta);
L_temp = G7231L_shl(L_temp, 2);
L_temp = G7231L_add(G7231Err0, L_temp);
if(L_temp > Worst0) Worst0 = L_temp;
Worst1 = G7231L_mls(G7231CodStat.Err[iz], beta);
Worst1 = G7231L_shl(Worst1, 2);
Worst1 = G7231L_add(G7231Err0, Worst1);
if(L_temp > Worst1) Worst1 = L_temp;
}
}
else { /* Lag % SubFrLen = 0 */
Worst0 = G7231L_mls(G7231CodStat.Err[iz-1], beta);
Worst0 = G7231L_shl(Worst0, 2);
Worst0 = G7231L_add(G7231Err0, Worst0);
Worst1 = G7231L_mls(G7231CodStat.Err[iz], beta);
Worst1 = G7231L_shl(Worst1, 2);
Worst1 = G7231L_add(G7231Err0, Worst1);
}
}
for(i=4; i>=2; i--) {
G7231CodStat.Err[i] = G7231CodStat.Err[i-2];
}
G7231CodStat.Err[0] = Worst0;
G7231CodStat.Err[1] = Worst1;
return;
}
Word16 G7231Test_Err(
Word16 Lag1, Word16 Lag2
)
{
int i, i1, i2;
Word16 zone1, zone2;
Word32 Acc, Err_max;
Word16 iTest;
i2 = Lag2 + G7231ClPitchOrd/2;
zone2 = G7231mult( (Word16) i2, (Word16) 1092);
i1 = - G7231SubFrLen + 1 + Lag1 - G7231ClPitchOrd/2;
if(i1 <= 0) i1 = 1;
zone1 = G7231mult( (Word16) i1, (Word16) 1092);
Err_max = -1L;
for(i=zone2; i>=zone1; i--) {
Acc = G7231L_sub(G7231CodStat.Err[i], Err_max);
if(Acc > 0L) {
Err_max = G7231CodStat.Err[i];
}
}
Acc = G7231L_sub(Err_max, G7231ThreshErr);
if((Acc > 0L) || (G7231CodStat.SinDet < 0 ) ) {
iTest = 0;
}
else {
Acc = G7231L_negate(Acc);
Acc = G7231L_shr(Acc, G7231DEC);
iTest = G7231extract_l(Acc);
}
return(iTest);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -