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

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

?? biaridecod.c

?? jm_frext22.ZIP的壓縮文件,主要用于嵌入式系統圖象的編解碼的開發.
?? C
字號:

/*!
 *************************************************************************************
 * \file biaridecod.c
 *
 * \brief
 *    binary arithmetic decoder routines
 * \date
 *    21. Oct 2000
 * \author
 *    Main contributors (see contributors.h for copyright, address and affiliation details)
 *    - Detlev Marpe                    <marpe@hhi.de>
 *    - Gabi Blaettermann               <blaetter@hhi.de>
 *************************************************************************************
 */

#include <stdlib.h>

#include "global.h"
#include "memalloc.h"

extern int symbolCount;

int binCount = 0;

#define Dbuffer         (dep->Dbuffer)
#define Dbits_to_go     (dep->Dbits_to_go)
#define Dcodestrm       (dep->Dcodestrm)
#define Dcodestrm_len   (dep->Dcodestrm_len)

#define B_BITS    10  // Number of bits to represent the whole coding interval
#define HALF      (1 << (B_BITS-1))
#define QUARTER   (1 << (B_BITS-2))

/* Range table for  LPS */ 
const byte rLPS_table_64x4[64][4]=
{
  { 128, 176, 208, 240},
  { 128, 167, 197, 227},
  { 128, 158, 187, 216},
  { 123, 150, 178, 205},
  { 116, 142, 169, 195},
  { 111, 135, 160, 185},
  { 105, 128, 152, 175},
  { 100, 122, 144, 166},
  {  95, 116, 137, 158},
  {  90, 110, 130, 150},
  {  85, 104, 123, 142},
  {  81,  99, 117, 135},
  {  77,  94, 111, 128},
  {  73,  89, 105, 122},
  {  69,  85, 100, 116},
  {  66,  80,  95, 110},
  {  62,  76,  90, 104},
  {  59,  72,  86,  99},
  {  56,  69,  81,  94},
  {  53,  65,  77,  89},
  {  51,  62,  73,  85},
  {  48,  59,  69,  80},
  {  46,  56,  66,  76},
  {  43,  53,  63,  72},
  {  41,  50,  59,  69},
  {  39,  48,  56,  65},
  {  37,  45,  54,  62},
  {  35,  43,  51,  59},
  {  33,  41,  48,  56},
  {  32,  39,  46,  53},
  {  30,  37,  43,  50},
  {  29,  35,  41,  48},
  {  27,  33,  39,  45},
  {  26,  31,  37,  43},
  {  24,  30,  35,  41},
  {  23,  28,  33,  39},
  {  22,  27,  32,  37},
  {  21,  26,  30,  35},
  {  20,  24,  29,  33},
  {  19,  23,  27,  31},
  {  18,  22,  26,  30},
  {  17,  21,  25,  28},
  {  16,  20,  23,  27},
  {  15,  19,  22,  25},
  {  14,  18,  21,  24},
  {  14,  17,  20,  23},
  {  13,  16,  19,  22},
  {  12,  15,  18,  21},
  {  12,  14,  17,  20},
  {  11,  14,  16,  19},
  {  11,  13,  15,  18},
  {  10,  12,  15,  17},
  {  10,  12,  14,  16},
  {   9,  11,  13,  15},
  {   9,  11,  12,  14},
  {   8,  10,  12,  14},
  {   8,   9,  11,  13},
  {   7,   9,  11,  12},
  {   7,   9,  10,  12},
  {   7,   8,  10,  11},
  {   6,   8,   9,  11},
  {   6,   7,   9,  10},
  {   6,   7,   8,   9},
  {   2,   2,   2,   2}
};



const unsigned short AC_next_state_MPS_64[64] =    
{
  1,2,3,4,5,6,7,8,9,10,
  11,12,13,14,15,16,17,18,19,20,
  21,22,23,24,25,26,27,28,29,30,
  31,32,33,34,35,36,37,38,39,40,
  41,42,43,44,45,46,47,48,49,50,
  51,52,53,54,55,56,57,58,59,60,
  61,62,62,63
};


const unsigned short AC_next_state_LPS_64[64] =    
{
  0, 0, 1, 2, 2, 4, 4, 5, 6, 7,
  8, 9, 9,11,11,12,13,13,15,15, 
  16,16,18,18,19,19,21,21,22,22,
  23,24,24,25,26,26,27,27,28,29,
  29,30,30,30,31,32,32,33,33,33,
  34,34,35,35,35,36,36,36,37,37, 
  37,38,38,63
};

/************************************************************************
 * M a c r o s
 ************************************************************************
 */

#define get_byte(){                                         \
                    Dbuffer = Dcodestrm[(*Dcodestrm_len)++];\
                    Dbits_to_go = 7;                        \
                  }


/************************************************************************
 ************************************************************************
                      init / exit decoder
 ************************************************************************
 ************************************************************************/


/*!
 ************************************************************************
 * \brief
 *    Allocates memory for the DecodingEnvironment struct
 * \return DecodingContextPtr
 *    allocates memory
 ************************************************************************
 */
DecodingEnvironmentPtr arideco_create_decoding_environment()
{
  DecodingEnvironmentPtr dep;

  if ((dep = calloc(1,sizeof(DecodingEnvironment))) == NULL)
    no_mem_exit("arideco_create_decoding_environment: dep");
  return dep;
}


/*!
 ***********************************************************************
 * \brief
 *    Frees memory of the DecodingEnvironment struct
 ***********************************************************************
 */
void arideco_delete_decoding_environment(DecodingEnvironmentPtr dep)
{
  if (dep == NULL)
  {
    snprintf(errortext, ET_SIZE, "Error freeing dep (NULL pointer)");
    error (errortext, 200);
  }
  else
    free(dep);
}


/*!
 ************************************************************************
 * \brief
 *    Initializes the DecodingEnvironment for the arithmetic coder
 ************************************************************************
 */
void arideco_start_decoding(DecodingEnvironmentPtr dep, unsigned char *cpixcode,
                            int firstbyte, int *cpixcode_len, int slice_type )
{
 
  int value = 0;

  Dcodestrm = cpixcode;
  Dcodestrm_len = cpixcode_len;
  *Dcodestrm_len = firstbyte;
 
  {
    int i;
    Dbits_to_go = 0;
    for (i = 0; i < B_BITS -1 ; i++) // insertion of redundant bit
    {
      if (--Dbits_to_go < 0)
        get_byte();
      value = (value<<1)  | ((Dbuffer >> Dbits_to_go) & 0x01);
    }
  }
  dep->Drange = HALF-2;
  dep->Dvalue = value;
}


/*!
 ************************************************************************
 * \brief
 *    arideco_bits_read
 ************************************************************************
 */
int arideco_bits_read(DecodingEnvironmentPtr dep)
{
  return 8 * ((*Dcodestrm_len)-1) + (8 - Dbits_to_go) - 16;
}


/*!
 ************************************************************************
 * \brief
 *    arideco_done_decoding():
 ************************************************************************
 */
void arideco_done_decoding(DecodingEnvironmentPtr dep)
{
  (*Dcodestrm_len)++;
}



/*!
 ************************************************************************
 * \brief
 *    biari_decode_symbol():
 * \return
 *    the decoded symbol
 ************************************************************************
 */
unsigned int biari_decode_symbol(DecodingEnvironmentPtr dep, BiContextTypePtr bi_ct )
{
  register unsigned int bit = bi_ct->MPS;
  register unsigned int value = dep->Dvalue;
  register unsigned int range = dep->Drange;
  register unsigned int rLPS = rLPS_table_64x4[bi_ct->state][(range>>6) & 0x03];

#if TRACE
  fprintf(p_trace, "%d  0x%04x  %d  %d\n", binCount++, dep->Drange, bi_ct->state, bi_ct->MPS );
#endif

  range -= rLPS;

  if (value < range) /* MPS */ 
    bi_ct->state = AC_next_state_MPS_64[bi_ct->state]; // next state
  else              /* LPS */
  {
    value -= range;
    range = rLPS;
    bit = !bit;
    if (!bi_ct->state)       // switch meaning of MPS if necessary  
      bi_ct->MPS ^= 0x01;              
    bi_ct->state = AC_next_state_LPS_64[bi_ct->state]; // next state 
  }
  
  while (range < QUARTER)
  {
    /* Double range */
    range <<= 1;
    if (--Dbits_to_go < 0) 
      get_byte();   
    /* Shift in next bit and add to value */
    value = (value << 1) | ((Dbuffer >> Dbits_to_go) & 0x01);

  }
  
  dep->Drange = range;
  dep->Dvalue = value;

  return(bit);
}


/*!
 ************************************************************************
 * \brief
 *    biari_decode_symbol_eq_prob():
 * \return
 *    the decoded symbol
 ************************************************************************
 */
unsigned int biari_decode_symbol_eq_prob(DecodingEnvironmentPtr dep)
{
  register unsigned int bit = 0;
  register unsigned int value  = (dep->Dvalue<<1);

#if TRACE
  fprintf(p_trace, "%d  0x%04x\n", binCount++, dep->Drange );
#endif

  if (--Dbits_to_go < 0) 
    get_byte(); 
  /* Shift in next bit and add to value */  
  value |= (Dbuffer >> Dbits_to_go) &  0x01;  
  if (value >= dep->Drange) 
  {
    bit = 1;
    value -= dep->Drange;
  }

  dep->Dvalue = value;

  return(bit);
}

/*!
 ************************************************************************
 * \brief
 *    biari_decode_symbol_final():
 * \return
 *    the decoded symbol
 ************************************************************************
 */
unsigned int biari_decode_final(DecodingEnvironmentPtr dep)
{
  register unsigned int value  = dep->Dvalue;
  register unsigned int range  = dep->Drange - 2;

#if TRACE
  fprintf(p_trace, "%d  0x%04x\n", binCount++, dep->Drange );
#endif
    
  if (value >= range) 
  {
    return 1;
  }
  else
  {
    while (range < QUARTER)
    {
    /* Double range */
      range <<= 1;
      if (--Dbits_to_go < 0) 
        get_byte();   
      /* Shift in next bit and add to value */
      value = (value << 1) | ((Dbuffer >> Dbits_to_go) & 0x01);
    } 
    dep->Dvalue = value;
    dep->Drange = range;
    return 0;
  }
}



/*!
 ************************************************************************
 * \brief
 *    Initializes a given context with some pre-defined probability state
 ************************************************************************
 */
void biari_init_context (struct img_par* img, BiContextTypePtr ctx, const int* ini)
{
  int pstate;

  pstate = ((ini[0]* max(0,img->qp) )>>4) + ini[1];
  pstate = min (max ( 1, pstate), 126);

  if ( pstate >= 64 )
  {
    ctx->state  = pstate - 64;
    ctx->MPS    = 1;
  }
  else
  {
    ctx->state  = 63 - pstate;
    ctx->MPS    = 0;
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩电影在线观看网站| 亚洲欧美自拍偷拍色图| 国产河南妇女毛片精品久久久| 亚洲国产精品精华液ab| 欧美视频你懂的| 久久国产日韩欧美精品| ...xxx性欧美| 日韩欧美美女一区二区三区| 成人一区在线观看| 午夜视频在线观看一区二区| 国产午夜精品一区二区三区嫩草| 在线国产亚洲欧美| 国产在线精品一区在线观看麻豆| 欧美www视频| 色激情天天射综合网| 国产一区二区三区最好精华液| 亚洲精品国产第一综合99久久 | 欧美va亚洲va香蕉在线| 色综合天天综合狠狠| 国产伦精品一区二区三区免费迷 | 亚洲免费高清视频在线| 精品捆绑美女sm三区| 色综合色综合色综合色综合色综合 | 日韩中文字幕不卡| 国产精品久久久久久久久晋中| 91精品国模一区二区三区| 91丨porny丨最新| 国产一区二区三区精品视频| 五月天激情综合网| 亚洲精品中文字幕乱码三区| 久久精品一区八戒影视| 欧美午夜寂寞影院| av在线免费不卡| 国产综合色在线| 日韩国产精品久久| 亚洲精品国产无套在线观 | 亚洲一级片在线观看| 日韩欧美久久久| 在线不卡中文字幕播放| 色天使色偷偷av一区二区| 麻豆freexxxx性91精品| 天天av天天翘天天综合网色鬼国产| 国产精品久久免费看| 欧美精品一区二区三区蜜桃| 日韩一区二区三| 91麻豆精品国产91久久久久久久久| 色综合咪咪久久| 99国产精品国产精品久久| 国产成a人亚洲| 国产精品77777竹菊影视小说| 青椒成人免费视频| 亚洲男人电影天堂| 亚洲欧洲日本在线| 亚洲视频每日更新| 99视频精品全部免费在线| 国产高清不卡一区二区| 成人av在线资源网站| 97精品超碰一区二区三区| 在线欧美日韩精品| 91精品国产91久久综合桃花| 欧美mv日韩mv国产| 中文字幕一区二区三区不卡| 亚洲精品中文字幕在线观看| 日韩国产在线一| 国产999精品久久久久久绿帽| 91影视在线播放| 欧美日韩国产一二三| 日韩精品一区二区在线| 中文字幕制服丝袜一区二区三区| 夜夜嗨av一区二区三区网页 | 日韩美女在线视频| 国产精品美日韩| 午夜精品福利在线| 国产精品一二三四区| 91久久一区二区| 精品国一区二区三区| 亚洲精选视频免费看| 久久国产麻豆精品| 91麻豆高清视频| 日韩欧美成人一区二区| 国产精品伦一区二区三级视频| 午夜欧美2019年伦理| 国产成人免费在线观看不卡| 欧美日韩专区在线| 国产日产亚洲精品系列| 天天色天天操综合| 99riav久久精品riav| 日韩欧美国产一区二区三区| 日韩理论在线观看| 国产最新精品精品你懂的| 欧美色中文字幕| 中文在线一区二区| 蜜桃一区二区三区在线| 91福利视频在线| 国产精品久久三| 国产综合色在线视频区| 欧美精品九九99久久| 亚洲欧美电影一区二区| 国产一区二区三区免费在线观看| 欧美老肥妇做.爰bbww| 综合在线观看色| 成人综合在线观看| 日韩欧美123| 午夜精品免费在线观看| 91麻豆视频网站| 中文字幕免费不卡在线| 久久不见久久见免费视频7| 欧美日高清视频| 亚洲美女视频在线| 成人性生交大片免费看在线播放| 日韩一级片网站| 亚洲福利视频三区| 在线精品观看国产| 亚洲欧美一区二区久久| 国产成人aaa| 国产亚洲综合性久久久影院| 久久国产人妖系列| 91精品国产91久久久久久一区二区 | 亚洲欧美日韩系列| 国产1区2区3区精品美女| 精品成人在线观看| 精品一区二区三区免费观看| 欧美一区二区视频在线观看2020 | heyzo一本久久综合| 久久麻豆一区二区| 精品写真视频在线观看| 日韩欧美亚洲一区二区| 在线观看亚洲精品视频| 亚洲视频在线观看一区| 99久久精品国产毛片| 中文字幕乱码一区二区免费| 成人高清在线视频| 中文字幕一区二区三区四区不卡 | 7777精品伊人久久久大香线蕉的 | 国产精品羞羞答答xxdd| 久久亚洲二区三区| 国产乱对白刺激视频不卡| 精品国产乱码久久久久久闺蜜 | 亚洲精品视频一区二区| www.爱久久.com| 国产精品国产三级国产三级人妇 | 97久久精品人人爽人人爽蜜臀| 国产精品久线在线观看| 99久久久精品免费观看国产蜜| 亚洲欧洲精品天堂一级| 色一区在线观看| 亚洲国产aⅴ成人精品无吗| 欧美日韩一级大片网址| 日韩电影在线免费观看| 亚洲精品一区二区三区四区高清 | 国产乱人伦精品一区二区在线观看| 久久久精品国产免大香伊| 国产99精品视频| 亚洲乱码国产乱码精品精的特点| 色一情一伦一子一伦一区| 午夜精品久久久久久久久| 精品国产91久久久久久久妲己| 国产麻豆精品视频| 亚洲欧美偷拍卡通变态| 欧美日韩高清一区| 国产剧情一区二区三区| 国产精品电影一区二区| 欧美图区在线视频| 欧美日韩中文字幕一区| 久久国产夜色精品鲁鲁99| 国产精品女人毛片| 欧美精品在线一区二区| 国产美女久久久久| 亚洲综合色区另类av| 精品成人免费观看| 99精品久久免费看蜜臀剧情介绍| 香蕉加勒比综合久久| 久久九九久精品国产免费直播| 97成人超碰视| 精品亚洲成a人在线观看| 亚洲精品欧美激情| 欧美成人精品高清在线播放| www.日韩精品| 奇米影视一区二区三区| 国产精品二区一区二区aⅴ污介绍| 欧美高清你懂得| 成人午夜电影小说| 青娱乐精品视频| 中文字幕在线不卡| 精品久久久久久久一区二区蜜臀| 91丨porny丨最新| 国产一区二区三区免费看| 亚洲一区二区中文在线| 久久久久99精品一区| 欧美日韩视频在线观看一区二区三区 | 欧美高清激情brazzers| 99热精品一区二区| 久久99久久精品| 亚洲一区二区三区四区在线观看| 国产喂奶挤奶一区二区三区| 亚洲精品成人在线| 国产欧美视频在线观看| 91精品国产麻豆国产自产在线| 91视频在线观看| 国产精品亚洲一区二区三区妖精|