亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? g729a_qua_gain.c

?? DSP上優化的G.729A代碼
?? C
字號:
#include "../Common/typedef.h"
#include "../Include/G729A_basic_op.h"
#include "../Include/G729A_oper_32b.h"
#include "../Include/G729A_ld8a.h"
#include "../Include/G729A_tab_ld8a.h"

static void G729AGbk_presel(Word16 best_gain[], Word16 *cand1, Word16 *cand2, Word16 gcode0);

Word16 G729AQua_gain(Word16 code[], Word16 g_coeff[], Word16 exp_coeff[], Word16 L_subfr, Word16 *gain_pit, Word16 *gain_cod, Word16 tameflag)
{
	Word16  i, j, index1, index2;
	Word16  cand1, cand2;
	Word16  exp, gcode0, exp_gcode0, gcode0_org, e_min ;
	Word16  nume, denom, inv_denom;
	Word16  exp1,exp2,exp_nume,exp_denom,exp_inv_denom,sft,tmp;
	Word16  g_pitch, g2_pitch, g_code, g2_code, g_pit_cod;
	Word16  coeff[5], coeff_lsf[5];
	Word16  exp_min[5];
	Word32  L_gbk12;
	Word32  L_tmp, L_dist_min, L_temp, L_tmp1, L_tmp2, L_acc, L_accb;
	Word16  best_gain[2];
	
	static Word16 past_qua_en[4] = { -14336, -14336, -14336, -14336 };
	
	G729AGain_predict( past_qua_en, code, L_subfr, &gcode0, &exp_gcode0 );
	
	L_tmp1 = _smpy( g_coeff[0], g_coeff[2] );
	exp1   = _sadd( _sadd( exp_coeff[0], exp_coeff[2] ), 1-2 );
	L_tmp2 = _smpy( g_coeff[4], g_coeff[4] );
	exp2   = _sadd( _sadd( exp_coeff[4], exp_coeff[4] ), 1 );
	L_tmp = (exp1 > exp2) ? (_ssub(_sshvr(L_tmp1, _ssub(exp1,exp2)), L_tmp2)) : (_ssub(L_tmp1, _sshvr(L_tmp2, _ssub(exp2,exp1))));
	exp = _min2(exp1, exp2);
	
	sft = G729Anorm_l( L_tmp );
	denom = G729Aextract_h( G729AL_shl(L_tmp, sft) );
	exp_denom = G729Asub_s( G729Aadd_s( exp, sft ), 16 );
	
	inv_denom = G729Adiv_s(16384,denom);
	inv_denom = G729Anegate( inv_denom );
	exp_inv_denom = G729Asub_s( 14+15, exp_denom );
	
	L_tmp1 = _smpy( g_coeff[2], g_coeff[1] );
	exp1   = _sadd( exp_coeff[2], exp_coeff[1] );
	L_tmp2 = _smpy( g_coeff[3], g_coeff[4] );
	exp2   = _sadd( _sadd( exp_coeff[3], exp_coeff[4] ), 1 );
	L_tmp = (exp1 > exp2) ? (_ssub(_sshvr(L_tmp1, _sadd(_ssub(exp1,exp2),1)), _sshvr(L_tmp2,1))) : (_ssub(_sshvr(L_tmp1,1 ), _sshvr(L_tmp2, _sadd(_ssub(exp2,exp1),1))));
	exp = (exp1 > exp2) ? _ssub(exp2,1) : _ssub(exp1,1);
	
	sft = G729Anorm_l( L_tmp );
	nume = G729Aextract_h( G729AL_shl(L_tmp, sft) );
	exp_nume = G729Asub_s( G729Aadd_s( exp, sft ), 16 );
	
	sft = G729Asub_s( G729Aadd_s( exp_nume, exp_inv_denom ), (9+16-1) );
	L_acc = G729AL_shr( G729AL_mult( nume,inv_denom ), sft );
	best_gain[0] = G729Aextract_h( L_acc );             
	best_gain[0] = (tameflag == 1) ? best_gain[0] : _min2(best_gain[0], G729A_GPCLIP2);
	
	L_tmp1 = G729AL_mult( g_coeff[0], g_coeff[3] );
	exp1   = G729Aadd_s( exp_coeff[0], exp_coeff[3] ) ;
	L_tmp2 = G729AL_mult( g_coeff[1], g_coeff[4] );
	exp2   = G729Aadd_s( G729Aadd_s( exp_coeff[1], exp_coeff[4] ), 1 );
	L_tmp = (exp1 > exp2) ? (_ssub(_sshvr(L_tmp1, _sadd(_ssub(exp1,exp2),1)), _sshvr(L_tmp2, 1))) : (_ssub(_sshvr(L_tmp1, 1), _sshvr(L_tmp2, _sadd(_ssub(exp2,exp1), 1))));
	exp = (exp1 > exp2) ? _ssub(exp2, 1) : _ssub(exp1, 1);
	
	sft = G729Anorm_l( L_tmp );
	nume = G729Aextract_h( G729AL_shl(L_tmp, sft) );
	exp_nume = G729Asub_s( G729Aadd_s( exp, sft ), 16 );
	
	sft = G729Asub_s( G729Aadd_s( exp_nume, exp_inv_denom ), (2+16-1) );
	L_acc = G729AL_shr( G729AL_mult( nume,inv_denom ), sft );
	best_gain[1] = G729Aextract_h( L_acc );            
	
	if( G729Asub_s(exp_gcode0,4) >= 0 )
	{
		gcode0_org = G729Ashr_s( gcode0, G729Asub_s(exp_gcode0,4) );
	}
	else
	{
		L_acc = G729AL_deposit_l( gcode0 );
		L_acc = G729AL_shl( L_acc, G729Asub_s( (4+16), exp_gcode0 ) );
		gcode0_org = G729Aextract_h( L_acc );              
	}
		
	G729AGbk_presel(best_gain, &cand1, &cand2, gcode0_org );
	
	exp_min[0] = G729Aadd_s( exp_coeff[0], 13 );
	exp_min[1] = G729Aadd_s( exp_coeff[1], 14 );
	exp_min[2] = G729Aadd_s( exp_coeff[2], G729Asub_s( G729Ashl_s( exp_gcode0, 1 ), 21 ) );
	exp_min[3] = G729Aadd_s( exp_coeff[3], G729Asub_s( exp_gcode0, 3 ) );
	exp_min[4] = G729Aadd_s( exp_coeff[4], G729Asub_s( exp_gcode0, 4 ) );
	
	e_min = exp_min[0];
	for(i=1; i<5; i++)
	{
		if( G729Asub_s(exp_min[i], e_min) < 0 )
		{
			e_min = exp_min[i];
		}
	}
	
	for(i=0; i<5; i++)
	{
		j = G729Asub_s( exp_min[i], e_min );
		L_tmp = G729AL_deposit_h( g_coeff[i] );
		L_tmp = G729AL_shr( L_tmp, j );          
		G729AL_Extract( L_tmp, &coeff[i], &coeff_lsf[i] );          
	}
	
	L_dist_min = G729AMAX_32;
	
	index1 = cand1;
	index2 = cand2;
	
	if(tameflag == 1)
	{
		for(i=0; i<G729A_NCAN1; i++)
		{
			for(j=0; j<G729A_NCAN2; j++)
			{
				g_pitch = G729Aadd_s( G729A_gbk1[cand1+i][0], G729A_gbk2[cand2+j][0] );     
				if(g_pitch < G729A_GP0999) 
				{
					L_acc = G729AL_deposit_l( G729A_gbk1[cand1+i][1] );
					L_accb = G729AL_deposit_l( G729A_gbk2[cand2+j][1] );               
					L_tmp = G729AL_add( L_acc,L_accb );
					tmp = G729Aextract_l( G729AL_shr( L_tmp,1 ) );                     
					
					g_code   = G729Amult( gcode0, tmp );          
					g2_pitch = G729Amult(g_pitch, g_pitch);                       
					g2_code  = G729Amult(g_code,  g_code);   
					g_pit_cod= G729Amult(g_code,  g_pitch);      
					
					L_tmp = G729AMpy_32_16(coeff[0], coeff_lsf[0], g2_pitch);
					L_tmp = G729AL_add(L_tmp, G729AMpy_32_16(coeff[1], coeff_lsf[1], g_pitch) );
					L_tmp = G729AL_add(L_tmp, G729AMpy_32_16(coeff[2], coeff_lsf[2], g2_code) );
					L_tmp = G729AL_add(L_tmp, G729AMpy_32_16(coeff[3], coeff_lsf[3], g_code) );
					L_tmp = G729AL_add(L_tmp, G729AMpy_32_16(coeff[4], coeff_lsf[4], g_pit_cod) );
					
					L_temp = G729AL_sub(L_tmp, L_dist_min);
					
					if( L_temp < 0L ){
						L_dist_min = L_tmp;
						index1 = G729Aadd_s(cand1,i);
						index2 = G729Aadd_s(cand2,j);
					}
				}
			}
		}
		
	}
	else
	{
		for(i=0; i<G729A_NCAN1; i++)
		{
			for(j=0; j<G729A_NCAN2; j++)
			{
				g_pitch = G729Aadd_s( G729A_gbk1[cand1+i][0], G729A_gbk2[cand2+j][0] );    
				L_acc = G729AL_deposit_l( G729A_gbk1[cand1+i][1] );
				L_accb = G729AL_deposit_l( G729A_gbk2[cand2+j][1] );            
				L_tmp = G729AL_add( L_acc,L_accb );
				tmp = G729Aextract_l( G729AL_shr( L_tmp,1 ) );                   
				
				g_code   = G729Amult( gcode0, tmp );          
				g2_pitch = G729Amult(g_pitch, g_pitch);                       
				g2_code  = G729Amult(g_code,  g_code);       
				g_pit_cod= G729Amult(g_code,  g_pitch);      
				
				L_tmp = G729AMpy_32_16(coeff[0], coeff_lsf[0], g2_pitch);
				L_tmp = G729AL_add(L_tmp, G729AMpy_32_16(coeff[1], coeff_lsf[1], g_pitch) );
				L_tmp = G729AL_add(L_tmp, G729AMpy_32_16(coeff[2], coeff_lsf[2], g2_code) );
				L_tmp = G729AL_add(L_tmp, G729AMpy_32_16(coeff[3], coeff_lsf[3], g_code) );
				L_tmp = G729AL_add(L_tmp, G729AMpy_32_16(coeff[4], coeff_lsf[4], g_pit_cod) );
				
				L_temp = G729AL_sub(L_tmp, L_dist_min);
				
				if( L_temp < 0L ){
					L_dist_min = L_tmp;
					index1 = G729Aadd_s(cand1,i);
					index2 = G729Aadd_s(cand2,j);
				}
				
			}
		}
	}
	*gain_pit = G729Aadd_s( G729A_gbk1[index1][0], G729A_gbk2[index2][0] );   
	
	L_acc = G729AL_deposit_l( G729A_gbk1[index1][1] );
	L_accb = G729AL_deposit_l( G729A_gbk2[index2][1] );
	L_gbk12 = G729AL_add( L_acc, L_accb );                         
	tmp = G729Aextract_l( G729AL_shr( L_gbk12,1 ) );                    
	L_acc = G729AL_mult(tmp, gcode0);                 
	
	L_acc = G729AL_shl(L_acc, G729Aadd_s( G729Anegate(exp_gcode0),(-12-1+1+16) ));
	*gain_cod = G729Aextract_h( L_acc );                            
	
	G729AGain_update( past_qua_en, L_gbk12 );
	
	return( G729Aadd_s( G729A_map1[index1]*(Word16)G729A_NCODE2, G729A_map2[index2] ) );
	
}

static void G729AGbk_presel(Word16 best_gain[], Word16 *cand1, Word16 *cand2, Word16 gcode0)
{
	Word16    acc_h;
	Word16    sft_x,sft_y;
	Word32    L_acc,L_preg,L_cfbg,L_tmp,L_tmp_x,L_tmp_y;
	Word32 L_temp;
	
	L_cfbg = _smpy( G729A_coef[0][0], best_gain[0] );        
	L_acc = _sshvr( G729A_L_coef[1][1], 15 );                     
	L_acc = _sadd( L_cfbg , L_acc );
	acc_h = L_acc >> 16;                            
	L_preg = _smpy(acc_h, gcode0 );                      
	L_acc = _sshl( (Word32)best_gain[1], 7 );        
	L_acc = _ssub( L_acc, L_preg );
	acc_h = _sshl( L_acc,2 ) >> 16;              
	L_tmp_x = _smpy( acc_h, G729A_INV_COEF );
	
	L_acc = _sshvr( G729A_L_coef[0][1], 10 );                   
	L_acc = _ssub( L_cfbg, L_acc );                     
	acc_h = L_acc >> 16;                            
	acc_h = G729Amult( acc_h, gcode0 );                       
	L_tmp = _smpy( acc_h, G729A_coef[1][0] );                   
	
	L_preg = _smpy( G729A_coef[0][0], best_gain[1] );          
	L_acc = _ssub( L_tmp, _sshvr(L_preg,3) );             
	
	acc_h = _sshl( L_acc,2 ) >> 16;              
	L_tmp_y = _smpy( acc_h, G729A_INV_COEF );
	
	sft_y = (14+4+1)-16;          
	sft_x = (15+4+1)-15;       
	
	if(gcode0>0)
	{
		*cand1 = 0 ;
		
		do
		{
			L_temp = G729AL_sub( L_tmp_y, G729AL_shr(G729AL_mult(G729A_thr1[*cand1],gcode0),sft_y));
			if(L_temp >0L  )
			{
				(*cand1) =G729Aadd_s(*cand1,1);
			}
			else               break ;			
		} while(G729Asub_s((*cand1),(G729A_NCODE1-G729A_NCAN1))<0) ;
		*cand2 = 0 ;
		
		do
		{
			L_temp = G729AL_sub( L_tmp_x , G729AL_shr(G729AL_mult(G729A_thr2[*cand2],gcode0),sft_x));
			if( L_temp >0L) 
			{
				(*cand2) =G729Aadd_s(*cand2,1);
			}
			else               break ;
		} while(G729Asub_s((*cand2),(G729A_NCODE2-G729A_NCAN2))<0) ;
	}
	else
	{
		*cand1 = 0 ;
		
		do
		{
			L_temp = G729AL_sub(L_tmp_y ,G729AL_shr(G729AL_mult(G729A_thr1[*cand1],gcode0),sft_y));
			if( L_temp <0L)
			{
				(*cand1) =G729Aadd_s(*cand1,1);
			}
			else               break ;
		} while(G729Asub_s((*cand1),(G729A_NCODE1-G729A_NCAN1))) ;
		*cand2 = 0 ;
		
		do
		{
			L_temp =G729AL_sub(L_tmp_x ,G729AL_shr(G729AL_mult(G729A_thr2[*cand2],gcode0),sft_x));
			if( L_temp <0L)
			{
				(*cand2) =G729Aadd_s(*cand2,1);
			}
			else               break ;
		} while(G729Asub_s( (*cand2),(G729A_NCODE2-G729A_NCAN2))) ;
	}
	
	return ;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲蜜臀av乱码久久精品蜜桃| 欧美一区二区三区在线看 | 欧美zozo另类异族| 理论电影国产精品| 日韩女优制服丝袜电影| 国产原创一区二区| 久久亚洲精华国产精华液 | 久久久激情视频| www.日本不卡| 亚洲高清在线精品| 日韩一区在线看| 欧美亚洲自拍偷拍| 免费人成网站在线观看欧美高清| 日韩免费电影一区| 成人中文字幕在线| 亚洲一级二级三级在线免费观看| 欧美精品久久99久久在免费线| 麻豆91免费观看| 国产精品免费免费| 在线视频你懂得一区二区三区| 日韩中文字幕麻豆| 国产欧美日韩亚州综合 | 国产一区二区毛片| 综合久久久久综合| 91精品国产一区二区人妖| 国产精品77777| 亚洲一区二区视频在线观看| 日韩欧美一二三四区| 99综合电影在线视频| 午夜精品影院在线观看| 欧美激情在线免费观看| 欧美午夜电影网| 国产精品69久久久久水密桃| 亚洲精品视频一区| 久久久蜜桃精品| 精品视频1区2区3区| 国产99精品国产| 日韩福利视频导航| 国产精品成人免费| 亚洲精品一区二区三区香蕉| 欧美在线一区二区| 成人不卡免费av| 免费观看在线综合色| 亚洲综合在线视频| 国产精品污www在线观看| 欧美一区二区高清| 色噜噜夜夜夜综合网| 大美女一区二区三区| 久久精品国产99国产精品| 亚洲精品高清视频在线观看| 日韩国产精品久久久久久亚洲| 久久久午夜精品| 日韩精品在线一区二区| 在线观看一区二区视频| 成人av电影在线| 免费看日韩a级影片| 亚洲成a人在线观看| 国产精品久久久久7777按摩| 久久这里只有精品视频网| 欧美日韩视频在线一区二区 | 中文字幕亚洲区| 久久影院电视剧免费观看| 欧美一区二区三区精品| 欧美亚洲国产一卡| 欧美在线制服丝袜| 色综合久久天天| 91美女片黄在线观看| 国产不卡免费视频| 国产一区二区三区在线看麻豆| 久久国产人妖系列| 免费在线欧美视频| 日本系列欧美系列| 亚洲电影视频在线| 亚洲一级二级在线| 亚洲在线观看免费视频| 日韩美女视频一区二区| 日韩毛片在线免费观看| 亚洲欧洲日韩在线| 亚洲欧美另类综合偷拍| 亚洲免费观看高清完整版在线 | 国产精品99久久久久久有的能看| 久久99精品久久久久久国产越南 | 一本一道久久a久久精品| 色综合久久天天| 欧美综合久久久| 欧美人牲a欧美精品| 91精品国产综合久久婷婷香蕉| 6080日韩午夜伦伦午夜伦| 日韩欧美在线综合网| 久久亚洲影视婷婷| 国产女人aaa级久久久级| 国产精品久99| 亚洲男女一区二区三区| 亚洲成人三级小说| 另类综合日韩欧美亚洲| 国产精品乡下勾搭老头1| 北条麻妃一区二区三区| 欧洲日韩一区二区三区| 91精品国产综合久久久久| 亚洲国产视频a| 视频一区中文字幕国产| 国产一区二三区好的| av在线这里只有精品| 欧美性做爰猛烈叫床潮| 日韩欧美国产午夜精品| 国产女人18毛片水真多成人如厕| 成人欧美一区二区三区在线播放| 亚洲亚洲人成综合网络| 麻豆精品久久精品色综合| 粉嫩av一区二区三区在线播放| 色综合天天综合网国产成人综合天| 欧美婷婷六月丁香综合色| 欧美电视剧免费全集观看| 国产精品国产自产拍在线| 亚洲一区二区三区四区在线免费观看| 美女视频一区二区三区| 99精品视频一区二区三区| 91精品国产综合久久婷婷香蕉| 中文字幕欧美三区| 日本中文一区二区三区| 成人黄色一级视频| 91超碰这里只有精品国产| 国产精品午夜在线| 亚洲成av人综合在线观看| 国产高清精品在线| 欧美日韩亚洲不卡| 国产精品初高中害羞小美女文| 美腿丝袜亚洲色图| 日本久久电影网| 久久久www成人免费无遮挡大片| 亚洲成人动漫在线免费观看| 国产精品小仙女| 91麻豆精品久久久久蜜臀| 国产精品传媒视频| 狠狠色丁香婷婷综合| 欧美日韩免费观看一区二区三区| 久久―日本道色综合久久| 99久久99久久精品国产片果冻| 日韩欧美视频在线| 一区二区在线观看视频| 国产精品99久久久久久有的能看| 欧美久久一二区| 亚洲欧美国产77777| 国产伦精品一区二区三区免费| 7777精品伊人久久久大香线蕉| 亚洲天天做日日做天天谢日日欢 | 一区二区三区欧美日韩| 国产乱对白刺激视频不卡| 欧美一区二区三区在线| 亚洲一区二区综合| 色综合天天综合色综合av| 国产欧美一区二区精品仙草咪| 免播放器亚洲一区| 欧美人成免费网站| 亚洲地区一二三色| 91免费看片在线观看| **欧美大码日韩| 成人一区在线观看| 日本一区二区高清| 懂色av一区二区夜夜嗨| 国产亚洲一本大道中文在线| 极品瑜伽女神91| 欧美精品一区二区三区久久久| 蜜臀国产一区二区三区在线播放 | 中文字幕一区二区不卡 | 美女国产一区二区三区| 3d动漫精品啪啪一区二区竹菊| 亚洲影视在线播放| 欧美日韩免费在线视频| 午夜成人免费视频| 欧美三级韩国三级日本三斤| 亚洲国产一区二区a毛片| 欧美日韩免费观看一区二区三区| 亚洲一区视频在线| 欧美日本在线看| 日韩国产在线观看一区| 欧美一区二区在线视频| 免费亚洲电影在线| wwwwxxxxx欧美| 国产成人精品综合在线观看| 国产精品国产三级国产aⅴ无密码| 成人国产电影网| 亚洲视频1区2区| 欧美日韩一区中文字幕| 日本特黄久久久高潮| 日韩精品一区二区三区视频| 国产精品自拍网站| 国产精品卡一卡二| 色婷婷国产精品| 日韩主播视频在线| 久久亚洲精品国产精品紫薇| 日韩免费视频一区| 国产精品一级片在线观看| 国产精品国产三级国产专播品爱网 | 国产精品国产成人国产三级| 欧洲视频一区二区| 毛片不卡一区二区| 国产精品丝袜一区| 在线视频国内自拍亚洲视频| 久久精品99国产国产精|