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

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

?? dec_dtx.c

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

#define MAX_31                      (Word32)0x3FFFFFFF
#define L_FRAME                     256   /* Frame size                          */
#define RX_SPEECH_LOST              2
#define RX_SPEECH_BAD               3
#define RX_SID_FIRST                4
#define RX_SID_UPDATE               5
#define RX_SID_BAD                  6
#define RX_NO_DATA                  7
#define ISF_GAP                     128   /* 50                                  */
#define D_DTX_MAX_EMPTY_THRESH      50
#define GAIN_FACTOR                 75
#define ISF_FACTOR_LOW              256
#define ISF_FACTOR_STEP             2
#define ISF_DITH_GAP                448
#define D_DTX_HANG_CONST            7     /* yields eight frames of SP HANGOVER  */
#define D_DTX_ELAPSED_FRAMES_THRESH (24 + 7 - 1)
#define RANDOM_INITSEED             21845 /* own random init value               */


/*
 * D_DTX_reset
 *
 * Parameters:
 *    st             O: state struct
 *
 * Function:
 *    Initializes state memory
 *
 * Returns:
 *    non-zero with error, zero for ok
 */
int D_DTX_reset(D_DTX_State *st, const Word16 *isf_init)
{
   Word32 i;

   if(st == (D_DTX_State*)NULL)
   {
      return(-1);
   }
   st->mem_since_last_sid = 0;
   st->mem_true_sid_period_inv = (1 << 13);   /* 0.25 in Q15 */
   st->mem_log_en = 3500;
   st->mem_log_en_prev = 3500;

   /* low level noise for better performance in  DTX handover cases */
   st->mem_cng_seed = RANDOM_INITSEED;
   st->mem_hist_ptr = 0;

   /* Init isf_hist[] and decoder log frame energy */
   memcpy(st->mem_isf, isf_init, M * sizeof(Word16));
   memcpy(st->mem_isf_prev, isf_init, M * sizeof(Word16));

   for(i = 0; i < D_DTX_HIST_SIZE; i++)
   {
      memcpy(&st->mem_isf_buf[i * M], isf_init, M * sizeof(Word16));
      st->mem_log_en_buf[i] = 3500;
   }
   st->mem_dtx_hangover_count = D_DTX_HANG_CONST;
   st->mem_dec_ana_elapsed_count = 127;
   st->mem_sid_frame = 0;
   st->mem_valid_data = 0;
   st->mem_dtx_hangover_added = 0;
   st->mem_dtx_global_state = SPEECH;
   st->mem_data_updated = 0;
   st->mem_dither_seed = RANDOM_INITSEED;
   st->mem_cn_dith = 0;

   return(0);
}


/*
 * D_DTX_init
 *
 * Parameters:
 *    st           I/O: state struct
 *
 * Function:
 *    Allocates state memory and initializes state memory
 *
 * Returns:
 *    non-zero with error, zero for ok
 */
int D_DTX_init(D_DTX_State **st, const Word16 *isf_init)
{
   D_DTX_State *s;

   if(st == (D_DTX_State**)NULL)
   {
      return(-1);
   }

   *st = NULL;

   /* allocate memory */
   if((s = (D_DTX_State*)malloc(sizeof(D_DTX_State))) == NULL)
   {
      return(-1);
   }

   D_DTX_reset(s, isf_init);
   *st = s;

   return(0);
}


/*
 * D_DTX_exit
 *
 * Parameters:
 *    state        I/0: State struct
 *
 * Function:
 *    The memory used for state memory is freed
 *
 * Returns:
 *    void
 */
void D_DTX_exit(D_DTX_State **st)
{
   if(st == NULL || *st == NULL)
   {
      return;
   }

   /* deallocate memory */
   free(*st);
   *st = NULL;

   return;
}


/*
 * D_DTX_rx_handler
 *
 * Parameters:
 *    st              I/O: State struct
 *    frame_type        I: Frame type
 *
 * Function:
 *    Analyze received frame
 *
 *    Table of new SPD synthesis states
 *
 *                          |       previous SPD_synthesis_state
 *    Incoming              |
 *    frame_type            | SPEECH       | DTX           | D_DTX_MUTE
 *    ---------------------------------------------------------------
 *    RX_SPEECH_GOOD ,      |              |               |
 *    RX_SPEECH_PR_DEGRADED | SPEECH       | SPEECH        | SPEECH
 *    ----------------------------------------------------------------
 *    RX_SPEECH_BAD,        | SPEECH       | DTX           | D_DTX_MUTE
 *    ----------------------------------------------------------------
 *    RX_SID_FIRST,         | DTX          | DTX/(D_DTX_MUTE)| D_DTX_MUTE
 *    ----------------------------------------------------------------
 *    RX_SID_UPDATE,        | DTX          | DTX           | DTX
 *    ----------------------------------------------------------------
 *    RX_SID_BAD,           | DTX          | DTX/(D_DTX_MUTE)| D_DTX_MUTE
 *    ----------------------------------------------------------------
 *    RX_NO_DATA,           | SPEECH       | DTX/(D_DTX_MUTE)| D_DTX_MUTE
 *    RX_SPARE              |(class2 garb.)|               |
 *    ----------------------------------------------------------------
 *
 * Returns:
 *    new state
 */
UWord8 D_DTX_rx_handler(D_DTX_State *st, UWord8 frame_type)
{
   UWord8 newState;
   UWord8 encState;

   /* DTX if SID frame or previously in DTX{_MUTE}
    * and (NO_RX OR BAD_SPEECH)
    */
   if((frame_type == RX_SID_FIRST) | (frame_type == RX_SID_UPDATE) |
      (frame_type == RX_SID_BAD) | (((st->mem_dtx_global_state == DTX) |
      (st->mem_dtx_global_state == D_DTX_MUTE)) & ((frame_type == RX_NO_DATA) |
      (frame_type == RX_SPEECH_BAD) | (frame_type == RX_SPEECH_LOST))))
   {
      newState = DTX;

      /* stay in mute for these input types */
      if((st->mem_dtx_global_state == D_DTX_MUTE) &
         ((frame_type == RX_SID_BAD) | (frame_type == RX_SID_FIRST) |
         (frame_type == RX_SPEECH_LOST) | (frame_type == RX_NO_DATA)))
      {
         newState = D_DTX_MUTE;
      }

      /* evaluate if noise parameters are too old                     */
      /* since_last_sid is reset when CN parameters have been updated */
      st->mem_since_last_sid = D_UTIL_saturate(st->mem_since_last_sid + 1);

      /* no update of sid parameters in DTX for a Word32 while */
      if(st->mem_since_last_sid > D_DTX_MAX_EMPTY_THRESH)
      {
         newState = D_DTX_MUTE;
      }
   }
   else
   {
      newState = SPEECH;
      st->mem_since_last_sid = 0;
   }

   /*
    * reset the decAnaElapsed Counter when receiving CNI data the first
    * time, to robustify counter missmatch after handover
    * this might delay the bwd CNI analysis in the new decoder slightly.
    */
   if((st->mem_data_updated == 0) & (frame_type == RX_SID_UPDATE))
   {
      st->mem_dec_ana_elapsed_count = 0;
   }

   /*
    * update the SPE-SPD DTX hangover synchronization
    * to know when SPE has added dtx hangover
    */
   st->mem_dec_ana_elapsed_count++;

   /* saturate */
   if(st->mem_dec_ana_elapsed_count > 127)
   {
      st->mem_dec_ana_elapsed_count = 127;
   }

   st->mem_dtx_hangover_added = 0;

   if((frame_type == RX_SID_FIRST) | (frame_type == RX_SID_UPDATE) |
      (frame_type == RX_SID_BAD) | (frame_type == RX_NO_DATA))
   {
      encState = DTX;
   }
   else
   {
      encState = SPEECH;
   }

   if(encState == SPEECH)
   {
      st->mem_dtx_hangover_count = D_DTX_HANG_CONST;
   }
   else
   {
      if(st->mem_dec_ana_elapsed_count > D_DTX_ELAPSED_FRAMES_THRESH)
      {
         st->mem_dtx_hangover_added = 1;
         st->mem_dec_ana_elapsed_count = 0;
         st->mem_dtx_hangover_count = 0;
      }
      else if(st->mem_dtx_hangover_count == 0)
      {
         st->mem_dec_ana_elapsed_count = 0;
      }
      else
      {
         st->mem_dtx_hangover_count--;
      }
   }

   if(newState != SPEECH)
   {
      /*
       * DTX or D_DTX_MUTE
       * CN data is not in a first SID, first SIDs are marked as SID_BAD
       *  but will do backwards analysis if a hangover period has been added
       *  according to the state machine above
       */
      st->mem_sid_frame = 0;
      st->mem_valid_data = 0;

      if(frame_type == RX_SID_FIRST)
      {
         st->mem_sid_frame = 1;
      }
      else if(frame_type == RX_SID_UPDATE)
      {
         st->mem_sid_frame = 1;
         st->mem_valid_data = 1;
      }
      else if(frame_type == RX_SID_BAD)
      {
         st->mem_sid_frame = 1;
         st->mem_dtx_hangover_added = 0;   /* use old data */
      }
   }

   return newState;

   /* newState is used by both SPEECH AND DTX synthesis routines */
}


/*
 * D_DTX_cn_dithering
 *
 * Parameters:
 *    isf             I/O: CN ISF vector
 *    L_log_en_int    I/O: energy parameter
 *    dither_seed     I/O: random seed
 *
 * Function:
 *    Confort noise dithering
 *
 * Returns:
 *    void
 */
static void D_DTX_cn_dithering(Word16 isf[M], Word32 *L_log_en_int,
                               Word16 *dither_seed)
{
   Word32 temp, temp1, i, dither_fac, rand_dith,rand_dith2;

   /* Insert comfort noise dithering for energy parameter */
   rand_dith = D_UTIL_random(dither_seed) >> 1;
   rand_dith2 = D_UTIL_random(dither_seed) >>1;
   rand_dith = rand_dith + rand_dith2;
   *L_log_en_int = *L_log_en_int + ((rand_dith * GAIN_FACTOR) << 1);

   if(*L_log_en_int < 0)
   {
      *L_log_en_int = 0;
   }

   /* Insert comfort noise dithering for spectral parameters (ISF-vector) */
   dither_fac = ISF_FACTOR_LOW;
   rand_dith = D_UTIL_random(dither_seed) >> 1;
   rand_dith2 = D_UTIL_random(dither_seed) >> 1;
   rand_dith = rand_dith + rand_dith2;
   temp = isf[0] + (((rand_dith * dither_fac) + 0x4000) >> 15);

   /* Make sure that isf[0] will not get negative values */
   if(temp < ISF_GAP)
   {
      isf[0] = ISF_GAP;
   }
   else
   {
      isf[0] = (Word16)temp;
   }

   for(i = 1; i < M - 1; i++)
   {
      dither_fac = dither_fac + ISF_FACTOR_STEP;
      rand_dith = D_UTIL_random(dither_seed) >> 1;
      rand_dith2 = D_UTIL_random(dither_seed) >> 1;
      rand_dith = rand_dith + rand_dith2;
      temp = isf[i] + (((rand_dith * dither_fac) + 0x4000) >> 15);
      temp1 = temp - isf[i - 1];

      /* Make sure that isf spacing remains at least ISF_DITH_GAP Hz */
      if(temp1 < ISF_DITH_GAP)
      {
         isf[i] = (Word16)(isf[i - 1] + ISF_DITH_GAP);
      }
      else
      {
         isf[i] = (Word16)temp;
      }
   }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲中文字幕精品| 国产精品美女久久久久久久| 精品美女在线观看| 日韩一区中文字幕| 全国精品久久少妇| 91美女福利视频| 久久久久久免费毛片精品| 亚洲国产中文字幕| 色综合天天综合在线视频| www国产亚洲精品久久麻豆| 婷婷开心激情综合| 欧日韩精品视频| 中文字幕日韩精品一区| 国产一区 二区 三区一级| 91麻豆精品国产91久久久更新时间 | 成人综合激情网| 日韩一区二区三区免费看 | 欧美综合一区二区| 国产精品入口麻豆原神| 黄页网站大全一区二区| 91精品国产综合久久精品| 亚洲精品一二三| 成人免费电影视频| 国产精品三级视频| 国产成人aaa| 国产亚洲精品中文字幕| 国产麻豆成人精品| 久久九九久久九九| 国产伦精品一区二区三区视频青涩| 日韩视频一区二区| 久草中文综合在线| 26uuu欧美日本| 国产乱码字幕精品高清av| 国产日韩欧美不卡在线| 国产精品69毛片高清亚洲| 日本一区二区视频在线| 豆国产96在线|亚洲| 国产精品网站在线观看| 大胆亚洲人体视频| 综合电影一区二区三区| 97精品久久久午夜一区二区三区 | 欧美大片在线观看一区二区| 美女mm1313爽爽久久久蜜臀| 日韩精品在线一区| 国产成人av一区二区三区在线| 久久综合久久99| 国产91丝袜在线播放九色| 国产精品久久久久久久久免费桃花| 成人免费观看视频| 亚洲综合无码一区二区| 欧美一区二区成人6969| 精品一区二区在线播放| 国产三级一区二区三区| 91在线国产福利| 一区二区三区精品| 欧美成人在线直播| 成人美女视频在线看| 一区二区久久久久久| 欧美一级理论性理论a| 国产伦精品一区二区三区免费迷| 综合色中文字幕| 欧美一区二区日韩| 成人三级伦理片| 天天av天天翘天天综合网| 日韩免费看网站| 成人国产亚洲欧美成人综合网| 亚洲综合视频在线| 精品福利一区二区三区| 91亚洲国产成人精品一区二区三 | 精品一区二区三区av| 国产精品国产馆在线真实露脸| 欧美三级资源在线| 国产很黄免费观看久久| 亚洲影院久久精品| 日韩欧美中文字幕公布| 91在线一区二区| 久久99在线观看| 一级精品视频在线观看宜春院 | 欧美激情一区三区| 欧美视频一区二区三区四区| 国产精品中文有码| 日韩国产欧美一区二区三区| 中文字幕日本乱码精品影院| 欧美一级xxx| 欧美在线999| 成人黄色大片在线观看| 国产在线视频一区二区三区| 亚洲成精国产精品女| 中文字幕av一区二区三区| 精品区一区二区| 7777精品久久久大香线蕉| 99久久夜色精品国产网站| 国内精品在线播放| 日本一区中文字幕| 亚洲成国产人片在线观看| 亚洲美女偷拍久久| 国产精品午夜春色av| 久久久久久久久久久电影| 91精品国产综合久久精品app| 在线国产亚洲欧美| 99久久精品一区二区| 国产91精品一区二区麻豆网站| 蜜桃精品在线观看| 麻豆视频一区二区| 青青草国产成人av片免费| 亚洲第一精品在线| 亚洲成人自拍网| 一区二区三区.www| 一区二区三区日韩精品| 一区二区三区中文字幕| 亚洲九九爱视频| 亚洲视频在线一区二区| 成人免费视频在线观看| 国产精品黄色在线观看| 国产精品入口麻豆九色| 自拍偷拍亚洲激情| 一区二区在线观看视频在线观看| 国产精品久久久久久久久果冻传媒| 久久久久久久综合日本| 日本一二三四高清不卡| 国产精品日韩精品欧美在线| 国产精品久久久久久久蜜臀| 综合久久综合久久| 一区二区三区四区av| 亚洲二区在线视频| 日本欧美一区二区| 六月丁香婷婷色狠狠久久| 精品一区二区精品| 国产精品99久久久久| 成人高清视频在线观看| 日本丶国产丶欧美色综合| 欧美日韩另类一区| 精品久久国产字幕高潮| 国产清纯美女被跳蛋高潮一区二区久久w| 精品国产制服丝袜高跟| 国产女同互慰高潮91漫画| 中文字幕一区二区三区在线播放 | 色天天综合久久久久综合片| 一本大道av一区二区在线播放| 欧美偷拍一区二区| 日韩欧美一级在线播放| 欧美韩日一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲一二三四久久| 久99久精品视频免费观看| 国产xxx精品视频大全| 欧美色精品在线视频| 日韩精品中文字幕在线不卡尤物 | 精品国产一区二区三区忘忧草| 国产亚洲欧洲一区高清在线观看| 亚洲欧洲精品一区二区精品久久久| 亚洲成人免费在线| 国产91丝袜在线播放九色| 欧美日韩精品一区二区在线播放| 2021久久国产精品不只是精品| 亚洲欧美色图小说| 国产一区欧美日韩| 精品视频免费在线| 欧美激情在线免费观看| 天堂精品中文字幕在线| 成人免费电影视频| 日韩免费成人网| 一区二区三区精品| 国产精品一区二区久激情瑜伽| 欧美怡红院视频| 国产精品美女久久久久av爽李琼| 亚洲大尺度视频在线观看| 成人午夜电影久久影院| 日韩欧美国产综合| 亚洲与欧洲av电影| 成人免费va视频| 精品国产乱码久久久久久免费 | 欧美日韩国产综合草草| 欧美国产亚洲另类动漫| 毛片av一区二区| 欧美剧在线免费观看网站| 中文字幕一区二区在线观看 | 亚洲国产精品激情在线观看| 日本不卡视频在线观看| 在线一区二区三区| 国产精品欧美经典| 国产精品亚洲午夜一区二区三区 | 久久影院午夜论| 爽爽淫人综合网网站| 色欧美片视频在线观看在线视频| 国产午夜亚洲精品羞羞网站| 免费av网站大全久久| 欧美日本韩国一区| 亚洲电影中文字幕在线观看| 91搞黄在线观看| 亚洲嫩草精品久久| 色诱视频网站一区| 亚洲裸体在线观看| 99精品国产热久久91蜜凸| 中文字幕一区二区三区不卡在线| 国产福利一区二区三区| 久久午夜色播影院免费高清 | 91热门视频在线观看| 国产精品高潮呻吟久久| 波多野结衣中文一区|