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

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

?? dec_gain.c

?? Linux 影片撥放解碼 Video DVD
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 *===================================================================
 *  3GPP AMR Wideband Floating-point Speech Codec
 *===================================================================
 */
#include <memory.h>
#include "typedef.h"
#include "dec_util.h"

#define L_SUBFR         64       /* Subframe size */
#define L_LTPHIST       5
#define ONE_PER_3       10923
#define ONE_PER_LTPHIST 6554
#define UP_SAMP         4
#define L_INTERPOL2     16

extern const Word16 D_ROM_inter4_2[];
extern const Word16 D_ROM_pdown_unusable[];
extern const Word16 D_ROM_pdown_usable[];
extern const Word16 D_ROM_cdown_unusable[];
extern const Word16 D_ROM_cdown_usable[];
extern const Word16 D_ROM_qua_gain6b[];
extern const Word16 D_ROM_qua_gain7b[];

/*
 * D_GAIN_init
 *
 * Parameters:
 *    mem         O: static memory
 *
 * Function:
 *    Initialisation of 2nd order quantiser energy predictor.
 *
 * Returns:
 *    void
 */
void D_GAIN_init(Word16 *mem)
{

   /* 4nd order quantizer energy predictor (init to -14.0 in Q10) */
   mem[0] = -14336;   /* past_qua_en[0] */
   mem[1] = -14336;   /* past_qua_en[1] */
   mem[2] = -14336;   /* past_qua_en[2] */
   mem[3] = -14336;   /* past_qua_en[3] */
   /*
    * mem[4] = 0;       past_gain_pit
    * mem[5] = 0;       past_gain_code
    * mem[6] = 0;       prev_gc
    * mem[7 - 11] = 0;  pbuf[i]
    * mem[12 - 16] = 0; gbuf[i]
    * mem[17 - 21] = 0; pbuf2[i]
    */
   memset(&mem[4], 0, 18 * sizeof(Word16));

   mem[22] = 21845;   /* seed */
   return;
}


/*
 * D_GAIN_median
 *
 * Parameters:
 *    buf            I: previous gains
 *
 * Function:
 *    Median of gains
 *
 * Returns:
 *    median of 5 previous gains
 */
static Word16 D_GAIN_median(Word16 x[])
{
   Word16 x1, x2, x3, x4, x5;
   Word16 tmp;
   x1 = x[ - 2];
   x2 = x[ - 1];
   x3 = x[0];
   x4 = x[1];
   x5 = x[2];

   if(x2 < x1)
   {
      tmp = x1;
      x1 = x2;
      x2 = tmp;
   }

   if(x3 < x1)
   {
      tmp = x1;
      x1 = x3;
      x3 = tmp;
   }

   if(x4 < x1)
   {
      tmp = x1;
      x1 = x4;
      x4 = tmp;
   }

   if(x5 < x1)
   {
      x5 = x1;
   }

   if(x3 < x2)
   {
      tmp = x2;
      x2 = x3;
      x3 = tmp;
   }

   if(x4 < x2)
   {
      tmp = x2;
      x2 = x4;
      x4 = tmp;
   }

   if(x5 < x2)
   {
      x5 = x2;
   }

   if(x4 < x3)
   {
      x3 = x4;
   }

   if(x5 < x3)
   {
      x3 = x5;
   }

   return(x3);
}


/*
 * D_GAIN_decode
 *
 * Parameters:
 *    index             I: Quantization index
 *    nbits             I: number of bits (6 or 7)
 *    code              I: Innovative code vector
 *    L_subfr           I: Subframe size
 *    gain_pit          O: (Q14) Quantized pitch gain
 *    gain_code         O: (Q16) Quantized codebook gain
 *    bfi               I: Bad frame indicator
 *    prev_bfi          I: Previous BF indicator
 *    state             I: State of BFH
 *    unusable_frame    I: UF indicator
 *    vad_hist          I: number of non-speech frames
 *    mem             I/O: static memory (4 words)
 *
 *
 * Function:
 *    Decoding of pitch and codebook gains
 *
 * Returns:
 *    void
 */
void D_GAIN_decode(Word16 index, Word16 nbits, Word16 code[], Word16 *gain_pit,
                   Word32 *gain_cod, Word16 bfi, Word16 prev_bfi,
                   Word16 state, Word16 unusable_frame, Word16 vad_hist,
                   Word16 *mem)
{

   Word32 gcode0, qua_ener, L_tmp;
   const Word16 * p;
   Word16 *past_gain_pit, *past_gain_code, *past_qua_en, *prev_gc;
   Word16 *gbuf, *pbuf, *pbuf2;
   Word16 i, tmp, exp, frac, exp_gcode0, gcode_inov;
   Word16 g_code;

   past_qua_en = mem;
   past_gain_pit = mem + 4;
   past_gain_code = mem + 5;
   prev_gc = mem + 6;
   pbuf = mem + 7;
   gbuf = mem + 12;
   pbuf2 = mem + 17;

   /*
    * Find energy of code and compute:
    *
    *    L_tmp = 1.0 / sqrt(energy of code/ L_subfr)
    */
   L_tmp = D_UTIL_dot_product12(code, code, L_SUBFR, &exp);
   exp = (Word16)(exp - (18 + 6));   /* exp: -18 (code in Q9), -6 (/L_subfr) */
   D_UTIL_normalised_inverse_sqrt(&L_tmp, &exp);

   if(exp > 3)
   {
      L_tmp <<= (exp - 3);
   }
   else
   {
      L_tmp >>= (3 - exp);
   }

   gcode_inov = (Word16)(L_tmp >>16);   /* g_code_inov in Q12 */

   /*
    * Case of erasure.
    */
   if(bfi != 0)
   {
      tmp = D_GAIN_median(&pbuf[2]);
      *past_gain_pit = tmp;

      if(*past_gain_pit > 15565)
      {
         *past_gain_pit = 15565;   /* 0.95 in Q14 */
      }

      if(unusable_frame != 0)
      {
         *gain_pit =
            (Word16)((D_ROM_pdown_unusable[state] * *past_gain_pit) >> 15);
      }
      else
      {
         *gain_pit =
            (Word16)((D_ROM_pdown_usable[state] * *past_gain_pit) >> 15);
      }

      tmp = D_GAIN_median(&gbuf[2]);

      if(vad_hist > 2)
      {
         *past_gain_code = tmp;
      }
      else
      {
         if(unusable_frame != 0)
         {
            *past_gain_code =
               (Word16)((D_ROM_cdown_unusable[state] * tmp) >> 15);
         }
         else
         {
            *past_gain_code =
               (Word16)((D_ROM_cdown_usable[state] * tmp) >> 15);
         }
      }

      /* update table of past quantized energies */
      L_tmp = past_qua_en[0] + past_qua_en[1]+ past_qua_en[2] + past_qua_en[3];
      qua_ener = L_tmp >> 2;
      qua_ener = qua_ener - 3072;   /* -3 in Q10 */

      if(qua_ener < - 14336)
      {
         qua_ener = -14336;   /* -14 in Q10 */
      }

      past_qua_en[3] = past_qua_en[2];
      past_qua_en[2] = past_qua_en[1];
      past_qua_en[1] = past_qua_en[0];
      past_qua_en[0] = (Word16)qua_ener;

      for(i = 1; i < 5; i++)
      {
         gbuf[i - 1] = gbuf[i];
      }
      gbuf[4] = *past_gain_code;

      for(i = 1; i < 5; i++)
      {
         pbuf[i - 1] = pbuf[i];
      }
      pbuf[4] = *past_gain_pit;

      /* adjust gain according to energy of code */
      /* past_gain_code(Q3) * gcode_inov(Q12) => Q16 */
      *gain_cod = (*past_gain_code * gcode_inov) << 1;

      return;
   }

   /*
    * Compute gcode0.
    *  = Sum(i=0,1) pred[i]*past_qua_en[i] + mean_ener - ener_code
    */

   /* MEAN_ENER in Q24 = 0x1e000000 */
   /* MA prediction coeff = {0.5, 0.4, 0.3, 0.2} in Q13 */
   L_tmp = 0xF000000 + (4096 * past_qua_en[0]); /* Q13*Q10 -> Q24 */
   L_tmp = L_tmp + (3277 * past_qua_en[1]);     /* Q13*Q10 -> Q24 */
   L_tmp = L_tmp + (2458 * past_qua_en[2]);     /* Q13*Q10 -> Q24 */
   L_tmp = L_tmp + (1638 * past_qua_en[3]);     /* Q13*Q10 -> Q24 */
   gcode0 = L_tmp >> 15;               /* From Q24 to Q8 */

   /*
    * gcode0 = pow(10.0, gcode0/20)
    *        = pow(2, 3.321928*gcode0/20)
    *        = pow(2, 0.166096*gcode0)
    */
   L_tmp = (gcode0 * 5443) >> 7;
   /* *0.166096 in Q15 -> Q24, From Q24 to Q16 */
   D_UTIL_l_extract(L_tmp, &exp_gcode0, &frac);
   /* Extract exponant of gcode0  */
   gcode0 = D_UTIL_pow2(14, frac); /* Put 14 as exponant so that */

   /*
    * output of Pow2() will be:
    * 16384 < Pow2() <= 32767
    */
   exp_gcode0 = (Word16)(exp_gcode0 - 14);

   /* Read the quantized gains */
   if(nbits == 6)
   {
      p = &D_ROM_qua_gain6b[(index << 1)];
   }
   else
   {
      p = &D_ROM_qua_gain7b[(index << 1)];
   }

   *gain_pit = *p++; /* selected pitch gain in Q14 */
   g_code = *p++;    /* selected code gain in Q11  */
   L_tmp = g_code * gcode0;
   exp_gcode0 += 5;

   if(exp_gcode0 >= 0)
   {
      *gain_cod = L_tmp << exp_gcode0;    /* gain of code in Q16 */
   }
   else
   {
      *gain_cod = L_tmp >> -exp_gcode0;   /* gain of code in Q16 */
   }

   if(prev_bfi == 1)
   {
      L_tmp = (*prev_gc * 5120) << 1;  /* prev_gc(Q3) * 1.25(Q12) = Q16 */

      /* if((*gain_cod > ((*prev_gc) * 1.25)) && (*gain_cod > 100.0)) */
      if((*gain_cod > L_tmp) & (*gain_cod > 6553600))
      {
         *gain_cod = L_tmp;
      }
   }

   /* keep past gain code in Q3 for frame erasure (can saturate) */
   L_tmp = (*gain_cod + 0x1000) >> 13;

   if(L_tmp < 32768)
   {
      *past_gain_code = (Word16)L_tmp;
   }
   else
   {
      *past_gain_code = 32767;
   }

   *past_gain_pit = *gain_pit;
   *prev_gc = *past_gain_code;

   for(i = 1; i < 5; i++)
   {
      gbuf[i - 1] = gbuf[i];
   }
   gbuf[4] = *past_gain_code;

   for(i = 1; i < 5; i++)
   {
      pbuf[i - 1] = pbuf[i];
   }
   pbuf[4] = *past_gain_pit;

   for(i = 1; i < 5; i++)
   {
      pbuf2[i - 1] = pbuf2[i];
   }
   pbuf2[4] = *past_gain_pit;

   /* adjust gain according to energy of code */
   D_UTIL_l_extract(*gain_cod, &exp, &frac);
   L_tmp = D_UTIL_mpy_32_16(exp, frac, gcode_inov);

   if(L_tmp < 0xFFFFFFF)
   {
      *gain_cod = (L_tmp << 3);   /* gcode_inov in Q12 */
   }
   else
   {
      *gain_cod = 0x7FFFFFFF;
   }

   /*
    * qua_ener = 20*log10(g_code)
    *          = 6.0206*log2(g_code)
    *          = 6.0206*(log2(g_codeQ11) - 11)
    */
   L_tmp = (Word32)(g_code);
   D_UTIL_log2(L_tmp, &exp, &frac);
   exp = (Word16)(exp - 11);
   L_tmp = D_UTIL_mpy_32_16(exp, frac, 24660);   /* x 6.0206 in Q12 */
   qua_ener = L_tmp >>3;   /* result in Q10 */

   /* update table of past quantized energies */
   past_qua_en[3] = past_qua_en[2];
   past_qua_en[2] = past_qua_en[1];
   past_qua_en[1] = past_qua_en[0];
   past_qua_en[0] = (Word16)qua_ener;

   return;
}


/*
 * D_GAIN_adaptive_control
 *
 * Parameters:
 *    sig_in            I: postfilter input signal
 *    sig_out         I/O: postfilter output signal
 *    l_trm             I: subframe size
 *
 * Function:
 *    Adaptive gain control is used to compensate for
 *    the gain difference between the non-emphasized excitation and
 *    emphasized excitation.
 *
 * Returns:
 *    void
 */
void D_GAIN_adaptive_control(Word16 *sig_in, Word16 *sig_out, Word16 l_trm)
{
   Word32 s, temp, i, exp;
   Word32 gain_in, gain_out, g0;

   /* calculate gain_out with exponent */
   temp = sig_out[0] >> 2;
   s = temp * temp;

   for(i = 1; i < l_trm; i++)
   {
      temp = sig_out[i] >> 2;
      s += temp * temp;
   }

   s <<= 1;

   if(s == 0)
   {
      return;
   }
   exp = (D_UTIL_norm_l(s) - 1);

   if(exp >= 0)
   {
      gain_out = ((s << exp) + 0x8000) >> 16;
   }
   else
   {
      gain_out = ((s >> -exp) + 0x8000) >> 16;
   }

   /* calculate gain_in with exponent */
   temp = sig_in[0] >> 2;
   s = temp * temp;

   for(i = 1; i < l_trm; i++)
   {
      temp = sig_in[i] >> 2;
      s += temp * temp;
   }

   s <<= 1;

   if(s == 0)
   {
      g0 = 0;
   }
   else
   {
      i = D_UTIL_norm_l(s);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品伦理一区二区| 一区二区三区在线播| 91美女视频网站| 激情综合色综合久久| 一区二区三区四区高清精品免费观看 | 亚洲同性gay激情无套| 91精品国产色综合久久ai换脸| 不卡一区二区三区四区| 麻豆成人综合网| 亚洲国产成人高清精品| 国产精品不卡一区| 久久综合色8888| 制服丝袜一区二区三区| 日本乱码高清不卡字幕| www.欧美色图| 国产风韵犹存在线视精品| 奇米影视在线99精品| 午夜视频一区在线观看| 一区二区三区影院| 亚洲久草在线视频| 国产精品无码永久免费888| 337p日本欧洲亚洲大胆精品| 欧美一区二区免费视频| 欧美人伦禁忌dvd放荡欲情| 在线免费观看日韩欧美| 91亚洲国产成人精品一区二区三| 成人一区二区视频| 国产精品一区免费视频| 国产真实精品久久二三区| 免费在线成人网| 免费的国产精品| 蜜乳av一区二区| 麻豆久久久久久久| 免费观看在线综合| 美女视频黄 久久| 蜜桃av噜噜一区| 极品美女销魂一区二区三区免费| 美国十次了思思久久精品导航| 日本中文字幕一区| 欧美a级理论片| 久久99久久精品欧美| 久久99九九99精品| 九一九一国产精品| 国产成人午夜视频| 成人伦理片在线| av一区二区不卡| 一本久久a久久精品亚洲| 91九色最新地址| 色吊一区二区三区| 欧美巨大另类极品videosbest| 欧美二区在线观看| 精品国产一区二区三区不卡 | 亚洲欧美另类久久久精品| 亚洲视频一区在线| 亚洲国产精品久久人人爱 | 久久国产免费看| 国模一区二区三区白浆| 床上的激情91.| 色综合中文字幕国产| 欧美系列一区二区| 欧美一区二区三区小说| 久久久久9999亚洲精品| 国产精品乱码一区二三区小蝌蚪| 亚洲欧美日韩成人高清在线一区| 亚洲成av人片一区二区梦乃| 久久国产尿小便嘘嘘尿| 成人免费的视频| 欧美综合久久久| 精品乱码亚洲一区二区不卡| 国产精品天美传媒沈樵| 亚洲国产综合视频在线观看| 久久av中文字幕片| hitomi一区二区三区精品| 欧美精品久久99| 久久精品一区二区三区不卡| 一区二区三区免费在线观看| 免费人成在线不卡| 不卡视频免费播放| 91精品视频网| 18成人在线视频| 久久99最新地址| 91黄色激情网站| 久久精品一级爱片| 亚洲成人av资源| 成人av综合在线| 日韩一区二区三区电影| 日韩美女啊v在线免费观看| 日韩1区2区日韩1区2区| 99re6这里只有精品视频在线观看| 欧美日韩国产小视频在线观看| 国产女人aaa级久久久级| 舔着乳尖日韩一区| 99re这里只有精品首页| 日韩欧美一级片| 一区二区在线观看不卡| 国产一区二区美女诱惑| 欧美精品在线视频| 中文字幕一区二区三区不卡在线| 乱一区二区av| 欧美精品丝袜久久久中文字幕| 国产精品天天摸av网| 经典三级一区二区| 欧美高清dvd| 一区二区三区四区蜜桃| 成人在线视频一区二区| 精品国产凹凸成av人导航| 亚洲国产精品久久久久婷婷884| 成人精品在线视频观看| 26uuu国产一区二区三区| 亚洲综合自拍偷拍| 懂色av一区二区在线播放| 日韩欧美国产wwwww| 亚洲成人7777| 色素色在线综合| 国产精品视频第一区| 精品中文字幕一区二区| 欧美日本一区二区| 亚洲老妇xxxxxx| 99re66热这里只有精品3直播 | 国产成人精品一区二区三区四区 | 久久精品国产澳门| 欧美伦理电影网| 亚洲成人一区在线| 欧美最猛性xxxxx直播| 亚洲精品一卡二卡| 一本大道久久a久久综合婷婷| 中文字幕av不卡| 粉嫩一区二区三区性色av| 久久综合999| 国产在线精品一区二区三区不卡 | 欧美r级电影在线观看| 奇米影视一区二区三区| 欧美一区二区国产| 久久精品国产亚洲5555| 精品国产三级a在线观看| 久久草av在线| 久久久综合视频| 国产成人亚洲综合色影视| 欧美国产精品一区二区三区| 成人ar影院免费观看视频| 日韩毛片精品高清免费| 91看片淫黄大片一级在线观看| 1000部国产精品成人观看| 色综合久久综合| 亚洲国产一区二区三区| 欧美精品成人一区二区三区四区| 日av在线不卡| 久久噜噜亚洲综合| 不卡区在线中文字幕| 一区二区三区色| 91麻豆精品国产无毒不卡在线观看| 日韩电影免费在线观看网站| 精品电影一区二区| 国产成人无遮挡在线视频| 国产精品三级在线观看| 一本一本久久a久久精品综合麻豆| 亚洲国产wwwccc36天堂| 欧美一级精品在线| 丰满少妇在线播放bd日韩电影| 国产精品国产三级国产aⅴ原创| 91免费国产视频网站| 午夜影院久久久| 久久精品人人做人人爽人人| 99久久久免费精品国产一区二区| 亚洲午夜久久久久久久久电影网| 91精品国产综合久久久久久漫画| 国产美女在线观看一区| 国产精品成人免费| 91精品国产一区二区| 国产91精品久久久久久久网曝门 | 一区二区三区日韩| 欧美一级高清片| 波多野结衣中文一区| 性做久久久久久免费观看欧美| 欧美精品一区二区三区在线| av一区二区久久| 免费在线观看精品| 亚洲精品一二三区| 2024国产精品视频| 欧美在线高清视频| 国产成人免费视频网站高清观看视频 | 日本精品一级二级| 韩国女主播一区| 亚洲一区二区三区国产| 久久久久久免费网| 欧美另类高清zo欧美| caoporn国产一区二区| 久久狠狠亚洲综合| 亚洲一区二区三区中文字幕在线| 久久精品夜夜夜夜久久| 91精品国产综合久久香蕉麻豆 | 欧美日韩综合色| 国v精品久久久网| 肉肉av福利一精品导航| 1000部国产精品成人观看| 精品欧美一区二区三区精品久久| 欧美性xxxxxx少妇| 99re这里只有精品首页| 国产精品亚洲成人| 裸体健美xxxx欧美裸体表演|