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

📄 owng729.c

📁 G.729 and G.723.1 codecs x86 (and x86_64) Linux and FreeBSD source code for Asterisk open source PBX
💻 C
📖 第 1 页 / 共 3 页
字号:
/*/////////////////////////////////////////////////////////////////////////////////                  INTEL CORPORATION PROPRIETARY INFORMATION//     This software is supplied under the terms of a license agreement or//     nondisclosure agreement with Intel Corporation and may not be copied//     or disclosed except in accordance with the terms of that agreement.//          Copyright(c) 2005-2007 Intel Corporation. All Rights Reserved.////     Intel(R) Integrated Performance Primitives//     USC - Unified Speech Codec interface library//// By downloading and installing USC codec, you hereby agree that the// accompanying Materials are being provided to you under the terms and// conditions of the End User License Agreement for the Intel(R) Integrated// Performance Primitives product previously accepted by you. Please refer// to the file ippEULA.rtf or ippEULA.txt located in the root directory of your Intel(R) IPP// product installation for more information.//// A speech coding standards promoted by ITU, ETSI, 3GPP and other// organizations. Implementations of these standards, or the standard enabled// platforms may require licenses from various entities, including// Intel Corporation.////// Purpose: G.729/A/B/D/E speech codec: Miscellaneous.//*/#include <ipps.h>#include "owng729.h"#include "vadg729.h"#include <ippdefs.h>#if defined(__ICL ) && defined(_IPP_A6)    #include <xmmintrin.h>#endif#define     ZEROcrossBegin  120#define     VADinitFrame    32#define     ZEROcrossEnd    200static __ALIGN32 CONST Ipp16s t[GAIN_NUM+1] = {820,26<<1,26};static __ALIGN32 CONST Ipp16s t1[GAIN_NUM+1] = {0,0,1};static __ALIGN32 CONST Ipp16s energyLogTable[17] = { 2000+466, 2000+520, 2000+571, 2000+619, 2000+665, 2000+708, 2000+749,    2789, 2000+827, 2000+863, 2000+898, 2000+931, 2000+964, 2000+995, 3000+25, 3000+54, 3000+83};static __ALIGN32 CONST Ipp32s wlag_bwd[BWLPCF_DIM]={    2100000000+47252352,   2100000000+47202688,   2100000000+47120000,   2100000000+47004032,   2100000000+46855040,    2100000000+46673024,   2100000000+46457728,   2100000000+46209536,   2100000000+45928192,   2100000000+45613952,    2100000000+45266432,   2100000000+44886016,   2100000000+44472704,   2100000000+44026240,   2100000000+43546880,    2100000000+43034624,   2100000000+42489344,   2100000000+41911296,   2100000000+41300224,   2100000000+40656512,    2100000000+39979776,   2100000000+39270400,   2100000000+38528128,   2100000000+37753344,   2100000000+36945920,    2100000000+36105600,   2100000000+35232896,   2100000000+34327552,   2100000000+33389696,   2100000000+32419328};__ALIGN32 CONST Ipp16s presetOldA[LPF_DIM+1]={ (1<<12), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};__ALIGN32 CONST Ipp16s presetLSP[LPF_DIM]={ 3*10000, 26*1000,21*1000, 15*1000, 8*1000, 0*1000,    -8*1000,-15*1000,-21*1000,-26*1000};__ALIGN32 CONST Ipp16s resetPrevLSP[LPF_DIM] = { 2000+339, 4000+679,7000+18, 9000+358, 11000+698,    14000+37, 16000+377,18000+717, 21000+56, 23000+396};__ALIGN32 CONST Ipp16s SIDgain[32] = {    (1<<1), (1<<2)+1,  (1<<3), (1<<3)+5,    (1<<4)+(1<<2), (1<<5), 5*10, (1<<6),    8*10,  100+1,  100+27,  100+60,    200+01,  200+53,  300+18,  400+1,    500+5,  600+35,  800, 1000+7,    1000+268, 1000+596, 2000+10, 2000+530,    3000+185, 4000+9, 5000+48, 6000+355,    8*1000,10000+71,12000+679,15000+962};__ALIGN32 CONST Ipp16s areas[L_prevExcitat-1+3] = {    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,    3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,    3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0};__ALIGN32 CONST Ipp16s LUT1[CDBK1_DIM]={        5,        1,        4,        7,        3,        0,        6,        2};__ALIGN32 CONST Ipp16s LUT2[CDBK2_DIM]={        4,        6,        0,        2,        12,        14,        8,        10,        15,        11,        9,        13,        7,        3,        1,        5};static __ALIGN32 CONST Ipp16s logTable[33]={    0,1455,2866,4236,5568,6863,8124,9352,10549,11716,12855,13967,15054,16117,17156,18172,19167,20142,21097,22033,22951,23852,24735,25603,26455,27291,28113,28922,29716,30497,31266,32023, IPP_MAX_16S};__ALIGN32 CONST Ipp16s cngCache[CNG_STACK_SIZE][LP_SUBFRAME_DIM]={    {/* 0 */86,-609,391,173,-80,-718,-47,559,235,676,-4,-110,5,-521,-506,-300,256,-727,-527,-9,-38,60,-69,-263,661,-722,-154,1500,303,-511,-272,-866,938,179,91,833,4,-698,933,-573*1    },    {/* 1 */225,547,-292,-470,302,264,728,-578,-294,332,1589,-845,487,241,241,775,83,-523,-242,188,-992,602,650,-48,332,542,-153,581,-39,323,931,25,-59,-569,-192,-178,-238,-596,60,482*1},{/*2*/-57,-821,254,-1,365,-278,21,-371,-12,-536,11,1020,-166,455,-798,74,-95,133,152,-647,199,-476,-209,-633,-306,-350,-859,118,436,-511,-260,68,379,63,50,755,33,-674,585,-383*1},{/*3*/1140,589,364,-527,-516,-83,-220,1154,-27,878,-707,-1166,557,-626,437,-317,-810,15,654,115,-34,-273,-570,-380,-185,-464,863,-268,271,464,-169,-571,312,-47,-592,-779,-64,49,616,646*1},{/*4*/259,-1109,-623,852,406,757,-493,911,1032,-480,630,937,-421,-214,184,-92,-883,-491,-293,382,-864,735,221,-1223,-878,394,192,723,101,-1004,130,-434,535,127,549,-88,-86,201,935,739*1},{/*5*/-937,-304,-546,-350,572,460,626,-690,-128,-471,103,347,549,-539,443,199,41,1282,-400,404,-114,-642,644,-576,1106,-677,505,333,119,151,-307,-455,-517,-204,-254,-378,-800,-208,150,-462*1},{/*6*/-497,770,-829,-271,-722,281,1105,-392,-212,15,192,-290,523,486,-1010,37,-55,-356,1085,75,-408,51,331,338,486,169,1338,312,-443,512,-1016,-1,387,-970,-73,-91,-94,-691,-443,44*1},{/*7*/993,-320,-251,208,577,376,150,-71,-254,657,-890,-255,-478,9,215,-342,-93,482,391,-334,387,-486,152,-229,452,179,8,-29,100,-1109,-39,780,-155,-252,9,-364,709,188,-358,-387*1},{/*8*/-49,-395,248,506,25,-9,-461,-148,68,-166,-179,-BW_EXP_FACT ,-434,156,72,1009,-455,-65,-1246,772,-509,-319,477,-1034,942,420,-393,201,-200,102,242,-133,-1885,777,-692,-498,-531,-117,-121,128*1},{/*9*/-828,402,-490,-144,1216,806,-62,-588,-483,539,-305,345,217,111,315,-419,-266,-476,-760,194,-910,-200,52,646,-177,429,705,-597,-629,-127,685,47,-216,182,-518,20,-476,-182,-858,344*1},{/*10*/-250,903,-395,-654,-483,-491,-260,-400,-493,-636,-414,79,-278,-46,1193,781,160,-255,-561,172,311,-753,470,-214,173,1022,-324,-375,772,-52,131,711,1082,635,297,486,81,521,688,484*1},{/*11*/-492,537,420,213,-1076,170,-115,-362,485,-102,469,-330,605,235,126,-201,-202,667,-122,-1001,-914,-340,-273,-168,-505,284,-329,-264,-1,1005,-288,761,-424,-227,360,-679,272,-338,-431,26*1},{/*12*/345,156,94,317,-549,-809,208,-1432,574,-783,803,-654,640,748,341,1117,-349,-314,360,807,165,-383,-1190,-558,648,-485,-211,604,-950,-106,223,-313,493,-272,-910,273,-145,43,-28,316*1},{/*13*/838,-630,164,-588,-38,566,-24,-495,-49,67,653,-563,291,431,145,234,984,636,-10,358,492,-856,-326,835,-159,53,-289,-897,-459,-223,-925,-228,-406,-146,-696,-232,-2,-230,396,117*1},{/*14*/75,505,-74,-735,473,-128,-588,23,584,486,-365,494,406,-211,81,-348,-571,339,240,571,723,602,-402,-847,-830,-448,205,1032,-112,263,-1013,62,-193,685,554,-683,973,-1228,808,843*1},{/*15*/301,-392,-151,1056,702,-671,-470,-199,174,-343,-694,-847,-769,82,-821,138,-593,602,683,-318,192,195,748,-677,48,395,-116,-429,-511,-332,-371,-84,-463,-452,493,356,-830,1061,-594,381*1},{/*16*/64,-830,609,447,379,-460,1164,-222,149,-633,-362,100,-624,-327,129,391,106,-52,75,-375,-219,190,1014,-148,447,-623,-128,1070,570,67,747,-815,-364,-298,-459,-1197,207,328,352,-74*1},{/*17*/-258,-552,-344,654,-342,540,517,-125,439,-63,-319,-41,-477,-315,222,-628,-528,810,-422,-352,-228,-274,311,277,425,-493,-141,745,-107,151,-240,30,226,636,524,690,-114,-64,105,167*1},{/*18*/381,506,-475,-1123,4,-264,539,780,362,215,242,346,433,-619,-344,137,215,-204,-705,-361,-290,-1102,-331,-634,964,-239,268,-172,-629,335,-446,515,-463,622,89,-111,-584,620,335,0*1},{/*19*/-692,-1027,628,210,309,446,-371,450,-643,478,261,-237,550,607,-1058,707,302,319,-234,-300,-361,128,-337,-188,-417,32,679,-491,136,545,256,837,272,129,-72,726,-519,-190,-303,-314*1},{/*20*/-1242,-123,-605,31,408,-336,-1018,57,491,442,-440,-460,29,165,107,14,48,-145,621,-55,34,26,80,-157,-11,-348,-494,222,-89,-241,-75,-456,-198,-167,311,-141,-340,-124,154,141*1},{/*21*/780,-100,322,286,592,505,-201,-213,-779,437,139,-873,-263,-302,-192,356,94,846,-172,-112,-222,811,201,285,327,-409,-99,9,203,-1276,-46,86,944,768,870,2,-12,605,-421,271*1},{/*22*/-962,-727,353,-376,-452,-993,-48,238,-229,502,286,53,217,684,-179,-421,1400,67,-421,-158,-266,697,74,840,341,528,-232,15,-365,-442,-313,-587,690,-163,341,60,-80,-173,196,-94*1},{/*23*/145,200,230,265,338,-543,726,81,1138,-167,295,-518,-13,-206,-553,2,-557,-1174,-792,-405,-492,515,88,-1229,-332,763,-983,92,949,-428,89,484,-235,12,234,461,214,549,-38,533*1},{/*24*/-343,-121,-317,252,724,234,-35,591,734,556,-296,385,-311,335,434,148,-365,81,-403,390,-450,308,-1273,89,-568,-10,898,267,307,-359,-36,-98,637,-229,1047,-496,424,-130,561,-413*1},{/*25*/144,-10,402,-892,-531,235,-353,-471,169,-705,267,-211,-314,244,216,-110,66,8,1028,-170,-225,125,145,-389,-677,-431,-899,255,760,-122,-54,740,-12,1050,630,40,-943,-497,131,-307*1},{/*26*/557,805,-1268,-640,-477,660,-910,351,762,738,-839,29,-336,17,-33,-68,839,-993,998,-966,189,-242,-308,409,-236,220,147,471,74,-117,-199,246,97,-231,-832,756,343,-1144,294,467*1},{/*27*/284,762,-803,-282,309,-22,293,262,429,827,462,-121,-890,-1301,214,103,-1090,252,-961,424,-681,-148,7,328,335,-451,-464,-183,-600,365,184,-87,-416,254,417,106,-135,-786,233,-118*1},{/*28*/-149,359,96,-264,974,-639,179,2,16,380,229,237,563,342,-776,-73,53,-239,-278,98,24,171,701,-276,-38,-474,-401,343,-131,-128,-1022,-95,255,-837,-140,-52,610,-555,199,-42*1},{/*29*/682,6,184,-31,671,19,-675,413,-525,-129,353,-326,-856,-436,198,822,188,-392,394,787,49,517,-593,591,-251,-783,307,236,826,-194,536,-280,206,746,-932,69,451,-521,1,257*1},{/*30*/233,912,-316,-473,856,-10,419,510,-346,-707,-159,-1356,-299,355,0,75,-541,106,-130,193,-46,-432,-547,24,160,-233,283,590,-433,-835,-1222,869,733,836,568,347,-436,-342,535,-462*1},{/*31*/-754,1201,-390,137,254,505,-102,-511,-689,418,-229,474,-1,938,251,-494,-752,19,-196,171,-384,-805,-36,419,81,-508,221,252,-383,-116,61,-332,274,373,510,-819,-510,-67,542,325*1},};__ALIGN32 CONST Ipp16s cngSeedOut[CNG_STACK_SIZE]={    -26766,    5273,  -20980,   12987,   20566,    2637,  -17200,  -25649,    24058,  -31807,   27220,    6819,  -31650,  -27403,   23192,    9015,    18306,    4585,   -3684,   -5749,   -5274,  -29027,   21344,   24991,    29706,   24337,   25572,   16243,  -23186,  -26811,  -14552,   -2297};__ALIGN32 CONST Ipp32s cngInvSqrt[CNG_STACK_SIZE]={    320863, 323781, 388729, 303149, 269026, 324406, 304813, 391279,    300993, 335038, 312683, 356481, 286752, 349341, 292467, 315662,    323859, 418904, 340163, 350720, 452932, 342818, 349410, 315175,    357434, 352913, 286583, 332201, 413044, 346627, 309243, 358885};__ALIGN32 CONST Ipp16s gammaFac1[2*(LPF_DIM+1)]={IPP_MAX_16S,24000+576,18000+432,13000+824,10000+368,7000+776,5000+832,4000+374,3000+281,2000+461,1000+846,IPP_MAX_16S,24000+576,18000+432,13000+824,10000+368,7000+776,5000+832,4000+374,3000+281,2000+461,1000+846};__ALIGN32 CONST Ipp16s g729gammaFac2_pst[LPF_DIM+1] = {    IPP_MAX_16S,  BWF2_PST,  9000+912,  5000+451,  2000+998, 1000+649,  900+7,  400+99,  200+74,  100+51,   83};__ALIGN32 CONST Ipp16s g729gammaFac1_pst[LPF_DIM+1] = {    IPP_MAX_16S,  BWF2, 16000+57, 11200+40,  7800+68,  5500+8, 3800+56, 2600+99, 1800+89, 1300+22,  900+25};static __ALIGN32 CONST Ipp16s gStats[6] ={400<<4,400<<3,400*6,400<<2,400<<1,400};static __ALIGN32 CONST Ipp16s gThrs[6]  ={955,819,614,410,205,0};static __ALIGN32 CONST Ipp16s gStats1[6]={400<<4,400<<3,400<<2,400<<1,400};/* /////////////////////////////////////////////////////////////////////////////////////////  Name:        updateExcErr_G729//  Purpose:     update excitation error//  Parameters://  pSrcDst - coder error*/void updateExcErr_G729( Ipp16s val, Ipp32s indx, Ipp32s *pSrcDst) {    Ipp32s   i, area1, area2, L_tmp, L_tmp1=0, tmp = 0;    Ipp16s high, low;    L_tmp = -1;    if(indx < LP_SUBFRAME_DIM) {        high   = (Ipp16s)(pSrcDst[0] >> 16);        low    = (Ipp16s)((pSrcDst[0]>>1) & IPP_MAX_16S);        tmp    = high*val + ((low*val)>>15);        tmp    = (tmp << 2) + (Ipp32s)BWF_HARMONIC;        L_tmp  = IPP_MAX(L_tmp,tmp);        high   = (Ipp16s)(tmp >> 16);        low    = (Ipp16s)((tmp>>1) & IPP_MAX_16S);        L_tmp1 = high*val + ((low*val)>>15);        L_tmp1 = ShiftL_32s(L_tmp1, 2);        L_tmp1 = Add_32s(L_tmp1, (Ipp32s)BWF_HARMONIC);        L_tmp  = IPP_MAX(L_tmp,L_tmp1);    } else {        area1 = areas[indx-LP_SUBFRAME_DIM];        area2 = areas[indx-1];        for(i = area1; i <= area2; i++) {            high   = (Ipp16s)(pSrcDst[i] >> 16);            low    = (Ipp16s)((pSrcDst[i]>>1) & IPP_MAX_16S);            L_tmp1 = high*val + ((low*val)>>15);            L_tmp1 = (L_tmp1 << 2) + (Ipp32s)BWF_HARMONIC;            L_tmp  = IPP_MAX(L_tmp,L_tmp1);        }    }    for(i=3; i>=1; i--) {        pSrcDst[i] = pSrcDst[i-1];    }    pSrcDst[0] = L_tmp;    return;}Ipp16s calcErr_G729(Ipp32s val, Ipp32s *pSrc) {    Ipp16s i, area1;    area1 = areas[IPP_MAX(0, val - LP_SUBFRAME_DIM - 10)];    for(i=areas[val + 10 - 2]; i>=area1; i--) {        if(pSrc[i] > 983040000)            return 1; /* Error threshold improving BWF_HARMONIC. * 60000.   */    }    return 0;}/* /////////////////////////////////////////////////////////////////////////////////////////  Name:    Log2_G729//  Purpose: update excitation error//  Parameters://   pDst1   - log2 integer part.    0<=val<=30//   pDst2   - log2 fractional part. 0<=val<1//   pSrcDst - coder error*/void Log2_G729(Ipp32s val, Ipp16s *pDst1, Ipp16s *pDst2) {    Ipp16s order, i, j;    Ipp32s   L_tmp;    if( val <= 0 ) {        pDst1[0] = pDst2[0] = 0;        return;    }    order    = Exp_32s(val);    val    <<= order;    pDst1[0] = (Ipp16s)(30 - order);    i        = (Ipp16s)(val>>25);    j        = (Ipp16s)((val >> 10) & IPP_MAX_16S);    i       -= 32;    L_tmp    = logTable[i]<<15;    L_tmp   -= (logTable[i] - logTable[i+1]) * j;    pDst2[0] = (Ipp16s)(L_tmp >> 15);    return;}void NoiseExcitationFactorization_G729B_16s(const Ipp16s *pSrc,                                            Ipp32s val1, Ipp16s val2, Ipp16s *pDst, Ipp32s len) {    Ipp32s   order, L_tmp;    Ipp16s high, low, tmp1;    high = (Ipp16s)(val1>>16);    low = (Ipp16s)((val1>>1)&IPP_MAX_16S);    tmp1 = (Ipp16s)(((val2 * 19043)+BWF_HARMONIC)>>15);    tmp1 = (Ipp16s)(tmp1 + val2);    L_tmp = high*tmp1 + ((low*tmp1)>>15);    order = Norm_32s_I(&L_tmp);    tmp1 = (Ipp16s)(L_tmp>>16);

⌨️ 快捷键说明

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