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

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

?? viterbi27.c

?? Viterbi編碼解碼算法
?? C
字號:
/* K=7 r=1/2 Viterbi decoder with Intel SIMD
 * May 2001, Phil Karn, KA9Q
 */
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include "viterbi27.h"
#include "parity.h"

static int V27_init;

int cpu_features(void);

#if defined(MMX)
/*
  Branch metric lookup tables, indexed by state and input symbol
  Mettab27_1 is for the first symbol, Mettab27_2 for the second
  The first index is the input symbol (0-15)
  The second index is the state number
*/
unsigned char Mettab27_1[16][32] __attribute__((aligned(32)));
unsigned char Mettab27_2[16][32] __attribute__((aligned(32)));

#else
unsigned char Branchtab27_1[32] __attribute__ ((aligned(32)));
unsigned char Branchtab27_2[32] __attribute__ ((aligned(32)));
#endif

/* Create a new instance of a Viterbi decoder */
struct v27 *create_viterbi27(int len){
  void *blk;
  struct v27 *vp;
  int state;

  if(!V27_init){
    /* Check that CPU has required features */
#if defined(SSE2)
    if(!(cpu_features() & (1 << 26))){
      fprintf(stderr,"CPU does not support SSE2 instructions\n");
      exit(1);
    }
#elif defined(SSE)
    if(!(cpu_features() & (1 << 25))){
      fprintf(stderr,"CPU does not support SSE instructions\n");
      exit(1);
    }
#elif defined(MMX)
    if(!(cpu_features() & (1 << 23))){
      fprintf(stderr,"CPU does not support MMX instructions\n");
      exit(1);
    }
#endif
    /* Initialize metric tables */
    for(state=0;state < 32;state++){
#ifdef MMX
      int symbol;
      for(symbol = 0;symbol < 16;symbol++){
	Mettab27_1[symbol][state] = parity((2*state) & V27POLYA) ? (15-symbol):symbol;
	Mettab27_2[symbol][state] = parity((2*state) & V27POLYB) ? (15-symbol):symbol;
      }
#else
      Branchtab27_1[state] = parity((2*state) & V27POLYA) ? 15:0;
      Branchtab27_2[state] = parity((2*state) & V27POLYB) ? 15:0;
#endif
    }
    V27_init = 1;
  }
  /* Malloc only guarantees 8-byte alignment, but we want to ensure that
   * the path metric arrays are on 32-byte boundaries. At least 16-byte
   * alignment is mandatory in the SSE2 version, but the Pentium III
   * cache line size is 32 bytes
   */
  blk = malloc(sizeof(struct v27)+32);
  if((int)blk & 31){
    /* Not on 32-byte boundary; shift up */
    vp = (struct v27 *)(((int)blk + 32) & ~31);
  } else {
    vp = (struct v27 *)blk;
  }
  vp->alloc_blk = blk; /* Record original pointer from malloc for use by free() */

  /* The decisions only need be 32-bit aligned */
#if defined(MMX)
  vp->dp = vp->decisions = malloc((len+6)*64);
#else
  vp->dp = vp->decisions = malloc((len+6)*8);
#endif

  vp->old_metrics = vp->metrics1;
  vp->new_metrics = vp->metrics2;
  return vp;
}

/* Initialize Viterbi decoder for start of new frame */
int init_viterbi27(struct v27 *vp,int starting_state){
  memset(vp->metrics1,60,64);
  vp->old_metrics = vp->metrics1;
  vp->new_metrics = vp->metrics2;
  vp->dp = vp->decisions;
  vp->old_metrics[starting_state & 63] = 0; /* Bias known start state */
  return 0;
}

/* Do Viterbi chainback */
int chainback_viterbi27(
      struct v27 *vp,
      unsigned char *data, /* Decoded output data */
      unsigned int nbits, /* Number of data bits */
      unsigned int endstate){ /* Terminal encoder state */

  int k;
  decision_t *decisions = vp->decisions;

  /* Make room beyond the end of the encoder register so we can
   * accumulate a full byte of decoded data
   */
  endstate %= 64;
  endstate <<= 2;
  decisions += 6; /* Look past tail */

  while(nbits-- != 0){
    k = EXTRACT_DECISION(&decisions[nbits],endstate >> 2);
    /* The store into data[] only needs to be done every 8 bits.
     * But this avoids a conditional branch, and the writes will
     * combine in the cache anyway
     */
    data[nbits>>3] = endstate = (endstate >> 1) | (k << 7);
  }
  return 0;
}

/* Delete instance of a Viterbi decoder */
void delete_viterbi27(struct v27 *vp){
  if(vp != NULL){
    free(vp->metrics1);
    free(vp->metrics2);
    free(vp->decisions);
    free(vp->alloc_blk);
  }
}
/* C-language butterfly */
#define BFLY(i) {\
char metric,m0,m1,decision;\
    metric = ((Branchtab27_1[i] ^ sym1) + (Branchtab27_2[i] ^ sym2) + 1)/2;\
    m0 = vp->old_metrics[i] + metric;\
    m1 = vp->old_metrics[i+32] + (15 - metric);\
    decision = (m0-m1) > 0;\
    vp->new_metrics[2*i] = decision ? m1 : m0;\
    vp->dp->w[i/16] |= decision << ((2*i)&31);\
    m0 -= (metric+metric-15);\
    m1 += (metric+metric-15);\
    decision = (m0-m1) > 0;\
    vp->new_metrics[2*i+1] = decision ? m1 : m0;\
    vp->dp->w[i/16] |= decision << ((2*i+1)&31);\
}

#if !defined(MMX) && !defined(SSE) & !defined(SSE2)
int update_viterbi27(struct v27 *vp,unsigned char sym1,
     unsigned char sym2){

  unsigned char *tmp;
  vp->dp->w[0] = vp->dp->w[1] = 0;

  BFLY(0);
  BFLY(1);
  BFLY(2);
  BFLY(3);
  BFLY(4);
  BFLY(5);
  BFLY(6);
  BFLY(7);
  BFLY(8);
  BFLY(9);
  BFLY(10);
  BFLY(11);
  BFLY(12);
  BFLY(13);
  BFLY(14);
  BFLY(15);
  BFLY(16);
  BFLY(17);
  BFLY(18);
  BFLY(19);
  BFLY(20);
  BFLY(21);
  BFLY(22);
  BFLY(23);
  BFLY(24);
  BFLY(25);
  BFLY(26);
  BFLY(27);
  BFLY(28);
  BFLY(29);
  BFLY(30);
  BFLY(31);

  vp->dp++;
  tmp = vp->old_metrics;
  vp->old_metrics = vp->new_metrics;
  vp->new_metrics = tmp;
  
  return 0;
}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产激情av| 蜜桃精品视频在线观看| 日本亚洲天堂网| 99久久久精品免费观看国产蜜| 在线观看亚洲成人| 国产三级久久久| 蜜桃久久精品一区二区| 欧美日韩一区二区三区视频| 中文字幕在线观看一区二区| 韩国一区二区在线观看| 欧美日韩一区二区三区四区| 亚洲精选一二三| 成人网在线免费视频| 精品国内二区三区| 蜜乳av一区二区| 91精品国产欧美一区二区18| 一区二区成人在线视频| 99久精品国产| 国产精品成人免费| 成人午夜激情影院| 亚洲国产精品av| 成人国产电影网| 国产精品视频免费| 成人va在线观看| 国产精品久久久久久久久免费相片 | 欧美伦理视频网站| 亚洲一区二区3| 欧美在线不卡一区| 亚洲福中文字幕伊人影院| 在线观看中文字幕不卡| 亚洲成人免费电影| 7777精品伊人久久久大香线蕉的| 亚洲成a人v欧美综合天堂下载 | 欧美成人在线直播| 麻豆成人免费电影| 久久久久久综合| 国产高清视频一区| 综合久久综合久久| 色偷偷久久一区二区三区| 夜夜爽夜夜爽精品视频| 欧美性极品少妇| 日韩av在线播放中文字幕| 日韩一区二区三区三四区视频在线观看| 午夜影院久久久| 欧美变态tickling挠脚心| 国产一区二区三区av电影| 中文字幕电影一区| 色欧美日韩亚洲| 日本中文字幕不卡| 久久久久免费观看| 欧美在线观看禁18| 国产一区二区电影| 18欧美乱大交hd1984| 精品视频一区二区不卡| 精品无人码麻豆乱码1区2区| 欧美国产国产综合| 欧美亚男人的天堂| 久久超碰97人人做人人爱| 国产精品欧美久久久久无广告| 欧美在线一区二区| 国内精品免费在线观看| 亚洲男人的天堂av| 日韩免费高清视频| 91网上在线视频| 麻豆精品久久久| ...av二区三区久久精品| 91精品国产欧美一区二区成人| 成人免费黄色大片| 日韩avvvv在线播放| 最新国产の精品合集bt伙计| 欧美日韩国产123区| 成人99免费视频| 蜜桃视频第一区免费观看| 亚洲精品美国一| 久久久亚洲精华液精华液精华液| 欧美在线观看18| 国产91综合一区在线观看| 亚洲gay无套男同| 国产精品素人一区二区| 欧美日韩高清不卡| 94-欧美-setu| 激情图片小说一区| 日韩电影在线观看电影| 亚洲精品久久嫩草网站秘色| 久久久99精品久久| 51久久夜色精品国产麻豆| 9色porny自拍视频一区二区| 免费欧美在线视频| 亚洲国产日日夜夜| 亚洲欧洲日韩一区二区三区| 精品国产污污免费网站入口| 欧美日韩免费电影| 在线国产电影不卡| 色中色一区二区| 99久久99久久精品免费看蜜桃| 激情图区综合网| 免费成人av在线| 日韩国产精品91| 日韩电影在线观看一区| 午夜国产精品一区| 一个色妞综合视频在线观看| 亚洲欧美视频一区| 日韩美女精品在线| 亚洲人成在线观看一区二区| 国产精品国产三级国产三级人妇| 欧美精品一区二区三区蜜桃视频 | 国产精品久久久久久一区二区三区| 欧美大度的电影原声| 欧美一区二区三区四区久久| 欧美亚洲高清一区二区三区不卡| 一本大道av一区二区在线播放| 91一区二区三区在线播放| 不卡一区二区三区四区| 成人午夜碰碰视频| 91同城在线观看| 大陆成人av片| 99re在线精品| 91福利国产成人精品照片| 在线观看免费亚洲| 欧美私人免费视频| 6080日韩午夜伦伦午夜伦| 欧美一区二区三区公司| 日韩一级片在线播放| 日韩精品一区二区三区视频 | 欧美v日韩v国产v| 欧美变态口味重另类| 久久精品免视看| 一区二区中文视频| 亚洲3atv精品一区二区三区| 日韩电影一区二区三区| 国产专区综合网| 成人福利视频网站| 色8久久人人97超碰香蕉987| 欧美色综合网站| 欧美一级高清片| 欧美激情中文字幕| 一区二区视频在线| 热久久免费视频| 国产成人av自拍| 一本大道久久a久久精二百| 制服丝袜激情欧洲亚洲| 久久综合色综合88| 亚洲男人电影天堂| 麻豆一区二区99久久久久| 国产久卡久卡久卡久卡视频精品| 92精品国产成人观看免费| 91精品国产综合久久精品麻豆| 337p日本欧洲亚洲大胆色噜噜| 亚洲婷婷国产精品电影人久久| 亚洲成人av一区| 成人自拍视频在线| 91精品国产入口在线| 国产精品美女久久福利网站| 亚洲一区二区视频在线观看| 国产在线精品国自产拍免费| 色偷偷久久一区二区三区| 欧美电视剧在线看免费| 尤物在线观看一区| 成人午夜视频在线| 538prom精品视频线放| 亚洲欧美日韩在线| 狠狠色狠狠色综合日日91app| 日本高清免费不卡视频| 久久一夜天堂av一区二区三区| 亚洲一区二区三区视频在线播放| 精品一区二区免费在线观看| 欧美综合色免费| 国产精品久久久久久户外露出| 日韩精品一二区| 在线视频欧美精品| 中文幕一区二区三区久久蜜桃| 蜜桃久久久久久久| 欧美日韩高清在线| 一区二区三区在线视频观看58| 国产成人亚洲综合色影视| 91精品国产品国语在线不卡| 亚洲国产综合91精品麻豆| 丰满亚洲少妇av| 久久精品在这里| 韩国一区二区在线观看| 欧美成人女星排行榜| 欧美a级理论片| 欧美二区三区91| 香蕉成人啪国产精品视频综合网| 99久久伊人网影院| 国产精品久久久久婷婷二区次| 国产一二三精品| 久久精品人人爽人人爽| 捆绑调教一区二区三区| 91 com成人网| 午夜国产精品一区| 欧美片网站yy| 日韩精品三区四区| 日韩一区二区在线看片| 三级欧美韩日大片在线看| 欧美猛男超大videosgay| 日日骚欧美日韩| 欧美一区二区三区四区久久| 欧美aaaaaa午夜精品| 日韩免费一区二区|