?? g729a_gainpred.c
字號:
#include "../Common/typedef.h"
#include "../Include/G729A_basic_op.h"
#include "../Include/G729A_ld8a.h"
#include "../Include/G729A_tab_ld8a.h"
#include "../Include/G729A_oper_32b.h"
void G729AGain_predict(Word16 past_qua_en[], Word16 code[], Word16 L_subfr, Word16 *gcode0, Word16 *exp_gcode0)
{
Word16 i, exp, frac;
Word32 L_tmp;
L_tmp = 0;
for(i=0; i<L_subfr; i++)
L_tmp = _sadd(L_tmp, _smpy(code[i], code[i]));
G729ALog2(L_tmp, &exp, &frac);
L_tmp = _sadd(_smpy(exp, -24660), _smpy(_smpy(frac, -24660)>>16, 1));
L_tmp = _sadd(L_tmp, _smpy(32588, 32));
L_tmp = G729AL_shl(L_tmp, 10);
for(i=0; i<4; i++)
L_tmp = _sadd(L_tmp, _smpy(G729A_pred[i], past_qua_en[i]));
*gcode0 = L_tmp>>16;
L_tmp = G729AL_mult(*gcode0, 5439);
L_tmp = G729AL_shr(L_tmp, 8);
G729AL_Extract(L_tmp, &exp, &frac);
*gcode0 = G729Aextract_l(G729APow2(14, frac));
*exp_gcode0 = G729Asub_s(14,exp);
}
void G729AGain_update(Word16 past_qua_en[], Word32 L_gbk12)
{
Word16 i, tmp;
Word16 exp, frac;
Word32 L_acc;
for(i=3; i>0; i--){
past_qua_en[i] = past_qua_en[i-1];
}
G729ALog2( L_gbk12, &exp, &frac );
L_acc = G729AL_Comp( G729Asub_s(exp,13), frac);
tmp = G729Aextract_h( G729AL_shl( L_acc,13 ) );
past_qua_en[0] = G729Amult( tmp, 24660 );
}
void G729AGain_update_erasure(Word16 past_qua_en[])
{
Word16 i, av_pred_en;
Word32 L_tmp;
L_tmp = 0;
for(i=0; i<4; i++)
L_tmp = _sadd( L_tmp, (Word32)past_qua_en[i]);
av_pred_en = (Word16)_sshvr(L_tmp, 2);
av_pred_en = _ssub( av_pred_en, 4096 );
if( G729Asub_s(av_pred_en, -14336) < 0 )
{
av_pred_en = -14336;
}
for(i=3; i>0; i--)
{
past_qua_en[i] = past_qua_en[i-1];
}
past_qua_en[0] = av_pred_en;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -