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

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

?? biariencode.c

?? h264標準的VC實現
?? C
字號:

/*!
 *************************************************************************************
 * \file biariencode.c
 *
 * \brief
 *    Routines for binary arithmetic encoding
 *
 * \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 <stdio.h>

#include "global.h"
#include "biariencode.h"

int binCount = 0;

/*!
 ************************************************************************
 * Macro for writing bytes of code
 ***********************************************************************
 */

#define put_byte() { \
                     Ecodestrm[(*Ecodestrm_len)++] = Ebuffer; \
                     Ebits_to_go = 8; \
                     while (eep->C > 7) { \
                       eep->C-=8; \
                       eep->E++; \
                     } \
                    } 

#define put_one_bit(b) { \
                         Ebuffer <<= 1; Ebuffer |= (b); \
                         if (--Ebits_to_go == 0) \
                           put_byte(); \
                       }

#define put_one_bit_plus_outstanding(b) { \
                                          put_one_bit(b); \
                                          while (Ebits_to_follow > 0) \
                                          { \
                                            Ebits_to_follow--; \
                                            put_one_bit(!(b)); \
                                          } \
                                         }


/*!
 ************************************************************************
 * \brief
 *    Allocates memory for the EncodingEnvironment struct
 ************************************************************************
 */
EncodingEnvironmentPtr arienco_create_encoding_environment()
{
  EncodingEnvironmentPtr eep;

  if ( (eep = (EncodingEnvironmentPtr) calloc(1,sizeof(EncodingEnvironment))) == NULL)
    no_mem_exit("arienco_create_encoding_environment: eep");

  return eep;
}



/*!
 ************************************************************************
 * \brief
 *    Frees memory of the EncodingEnvironment struct
 ************************************************************************
 */
void arienco_delete_encoding_environment(EncodingEnvironmentPtr eep)
{
  if (eep == NULL)
  {
    snprintf(errortext, ET_SIZE, "Error freeing eep (NULL pointer)");
    error (errortext, 200);
  }
  else
    free(eep);
}



/*!
 ************************************************************************
 * \brief
 *    Initializes the EncodingEnvironment for the arithmetic coder
 ************************************************************************
 */
void arienco_start_encoding(EncodingEnvironmentPtr eep,
                            unsigned char *code_buffer,
                            int *code_len, /* int *last_startcode, */ int slice_type )
{
  Elow = 0;
  Ebits_to_follow = 0;
  Ebuffer = 0;
  Ebits_to_go = 9; // to swallow first redundant bit

  Ecodestrm = code_buffer;
  Ecodestrm_len = code_len;
//  Ecodestrm_laststartcode = last_startcode;

  Erange = HALF-2;

  eep->C = 0;
  eep->B = *code_len;
  eep->E = 0;

}

/*!
 ************************************************************************
 * \brief
 *    Returns the number of currently written bits
 ************************************************************************
 */
int arienco_bits_written(EncodingEnvironmentPtr eep)
{
   return (8 * (*Ecodestrm_len /*-*Ecodestrm_laststartcode*/) + Ebits_to_follow + 8  - Ebits_to_go);
}


/*!
 ************************************************************************
 * \brief
 *    Terminates the arithmetic codeword, writes stop bit and stuffing bytes (if any)
 ************************************************************************
 */
void arienco_done_encoding(EncodingEnvironmentPtr eep)
{
  put_one_bit_plus_outstanding((Elow >> (B_BITS-1)) & 1);
  put_one_bit((Elow >> (B_BITS-2))&1);
  put_one_bit(1);

  stats->bit_use_stuffingBits[img->type]+=(8-Ebits_to_go);

  while (Ebits_to_go != 8)
    put_one_bit(0);

  eep->E= eep->E*8 + eep->C; // no of processed bins
  eep->B= (*Ecodestrm_len - eep->B); // no of written bytes
  eep->E -= (img->current_mb_nr-img->currentSlice->start_mb_nr);
  eep->E = (eep->E + 31)>>5;
  // eep->E now contains the minimum number of bytes for the NAL unit
}


/*!
 ************************************************************************
 * \brief
 *    Actually arithmetic encoding of one binary symbol by using
 *    the probability estimate of its associated context model
 ************************************************************************
 */
void biari_encode_symbol(EncodingEnvironmentPtr eep, signed short symbol, BiContextTypePtr bi_ct )
{
  register unsigned int range = Erange;
  register unsigned int low = Elow;
  unsigned int rLPS = rLPS_table_64x4[bi_ct->state][(range>>6) & 3];

  extern int cabac_encoding;
  
#if TRACE
//  if (cabac_encoding)
//    fprintf(p_trace, "%d  0x%04x  %d  %d\n", binCount++, Erange , bi_ct->state, bi_ct->MPS );
#endif
  
  if( cabac_encoding )
  {
    bi_ct->count++;
  }

  /* covers all cases where code does not bother to shift down symbol to be 
   * either 0 or 1, e.g. in some cases for cbp, mb_Type etc the code symply 
   * masks off the bit position and passes in the resulting value */

  if (symbol != 0) 
    symbol = 1;
  
  range -= rLPS;
  if (symbol != bi_ct->MPS) 
  {
    low += range;
    range = rLPS;
    
    if (!bi_ct->state)
      bi_ct->MPS = bi_ct->MPS ^ 1;               // switch LPS if necessary
    bi_ct->state = AC_next_state_LPS_64[bi_ct->state]; // next state
  } 
  else 
    bi_ct->state = AC_next_state_MPS_64[bi_ct->state]; // next state
 

  /* renormalisation */    
  while (range < QUARTER)
  {
    if (low >= HALF)
    {
      put_one_bit_plus_outstanding(1);
      low -= HALF;
    }
    else 
      if (low < QUARTER)
      {
        put_one_bit_plus_outstanding(0);
      }
      else
      {
        Ebits_to_follow++;
        low -= QUARTER;
      }
    low <<= 1;
    range <<= 1;
  }
  Erange = range;
  Elow = low;
  eep->C++;

}




/*!
 ************************************************************************
 * \brief
 *    Arithmetic encoding of one binary symbol assuming 
 *    a fixed prob. distribution with p(symbol) = 0.5
 ************************************************************************
 */
void biari_encode_symbol_eq_prob(EncodingEnvironmentPtr eep, signed short symbol)
{
  register unsigned int low = (Elow<<1);

  
#if TRACE
//  extern int cabac_encoding;
//  if (cabac_encoding)
//    fprintf(p_trace, "%d  0x%04x\n", binCount++, Erange );
#endif
  
  if (symbol != 0)
    low += Erange;

  /* renormalisation as for biari_encode_symbol; 
     note that low has already been doubled */ 
  if (low >= ONE)
  {
    put_one_bit_plus_outstanding(1);
    low -= ONE;
  }
  else 
    if (low < HALF)
    {
      put_one_bit_plus_outstanding(0);
    }
    else
    {
      Ebits_to_follow++;
      low -= HALF;
    }
    Elow = low;
    eep->C++;
    
}

/*!
 ************************************************************************
 * \brief
 *    Arithmetic encoding for last symbol before termination
 ************************************************************************
 */
void biari_encode_symbol_final(EncodingEnvironmentPtr eep, signed short symbol)
{
  register unsigned int range = Erange-2;
  register unsigned int low = Elow;
  
#if TRACE
//  extern int cabac_encoding;
//  if (cabac_encoding)
//    fprintf(p_trace, "%d  0x%04x\n", binCount++, Erange);
#endif
  
  if (symbol) {
    low += range;
    range = 2;
  }
  
  while (range < QUARTER)
  {
    if (low >= HALF)
    {
      put_one_bit_plus_outstanding(1);
      low -= HALF;
    }
    else 
      if (low < QUARTER)
      {
        put_one_bit_plus_outstanding(0);
      }
      else
      {
        Ebits_to_follow++;
        low -= QUARTER;
      }
      low <<= 1;
      range <<= 1;
  }
  Erange = range;
  Elow = low;
  eep->C++;
}



/*!
 ************************************************************************
 * \brief
 *    Initializes a given context with some pre-defined probability state
 ************************************************************************
 */
void biari_init_context (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;
  }
  
  ctx->count = 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱人伦精品一区二区在线观看| 大胆亚洲人体视频| 国产在线一区观看| 欧洲国产伦久久久久久久| 欧美哺乳videos| 亚洲综合精品自拍| 成人app在线| 久久久www成人免费无遮挡大片| 一区二区视频免费在线观看| 国产98色在线|日韩| 日韩女优av电影| 亚洲国产成人av网| 日本丶国产丶欧美色综合| 国产精品欧美经典| 九九九精品视频| 欧美一区二区三区婷婷月色| 一区二区三区在线视频免费| 成人a区在线观看| 久久久久久99精品| 国产又粗又猛又爽又黄91精品| 在线不卡a资源高清| 一区二区三区av电影| 99精品久久久久久| 国产精品高潮呻吟| 成人av中文字幕| 国产精品人妖ts系列视频| 国产一区二区女| 久久久www免费人成精品| 国产自产v一区二区三区c| 欧美电影免费提供在线观看| 视频一区二区国产| 91精品国产日韩91久久久久久| 亚洲第一主播视频| 精品视频在线免费观看| 婷婷综合久久一区二区三区| 久久久亚洲精品一区二区三区| 精品在线免费观看| 国产欧美一区二区三区在线看蜜臀 | 激情另类小说区图片区视频区| 欧美系列日韩一区| 午夜精品免费在线观看| 日韩一区国产二区欧美三区| 日韩高清在线不卡| 欧美一级免费大片| 激情文学综合插| 国产精品丝袜在线| 色天天综合色天天久久| 亚洲成人一区二区在线观看| 91精品国产91热久久久做人人| 久久精品久久精品| 国产亚洲成年网址在线观看| 成人91在线观看| 亚洲国产精品久久久久婷婷884| 欧美巨大另类极品videosbest | 欧美一级国产精品| 国产精品69久久久久水密桃| 国产精品国产精品国产专区不蜜| 91免费国产视频网站| 首页国产丝袜综合| 久久青草国产手机看片福利盒子| 成人亚洲一区二区一| 一区二区三区不卡视频| 精品国产一区二区三区久久久蜜月| 国产夫妻精品视频| 亚洲高清三级视频| 国产午夜精品一区二区三区四区| 91在线小视频| 强制捆绑调教一区二区| 国产精品久久久久aaaa| 制服丝袜中文字幕一区| 风间由美一区二区三区在线观看| 亚洲自拍偷拍欧美| 国产欧美va欧美不卡在线| 欧美在线观看一区| 高清视频一区二区| 蜜臀va亚洲va欧美va天堂| 亚洲欧洲精品天堂一级| 精品少妇一区二区三区视频免付费| av中文一区二区三区| 男男成人高潮片免费网站| 亚洲欧美另类久久久精品2019 | 欧美日韩综合在线免费观看| 激情欧美一区二区| 午夜精品成人在线视频| 国产精品伦一区| 亚洲成人自拍偷拍| 欧美激情一二三区| 日韩欧美色电影| 在线一区二区三区四区五区| 国产电影精品久久禁18| 日本中文字幕一区二区有限公司| 中文字幕一区视频| 久久久午夜精品| 日韩一区二区三区免费看 | 丝袜亚洲另类欧美| 一级做a爱片久久| 国产精品美女久久久久久久久久久| 91精品国产欧美一区二区| 91激情在线视频| 不卡的电影网站| 风间由美一区二区三区在线观看 | 日本一区二区免费在线观看视频 | 国产一区二区三区日韩| 日韩主播视频在线| 亚洲无人区一区| 一级精品视频在线观看宜春院| 欧美国产日韩精品免费观看| 精品欧美乱码久久久久久1区2区 | 国产乱码精品一区二区三| 蜜臀av一级做a爰片久久| 亚洲一区二区三区四区在线观看| 国产精品麻豆久久久| 国产精品久久久久久久久免费丝袜| 久久久欧美精品sm网站| 久久综合av免费| 久久久久九九视频| 国产精品视频一二三区| 国产精品人妖ts系列视频| 中文字幕在线一区| 亚洲欧美激情插| 亚洲一区二区av在线| 亚洲五月六月丁香激情| 视频一区视频二区在线观看| 日韩av电影免费观看高清完整版在线观看| 亚洲第一狼人社区| 美女脱光内衣内裤视频久久网站| 奇米888四色在线精品| 久久91精品久久久久久秒播| 激情综合网av| 成人va在线观看| 在线视频欧美精品| 91精品国产91久久久久久最新毛片| 91精品国产麻豆国产自产在线 | 久久精品人人做人人爽人人| 中文一区一区三区高中清不卡| 国产精品入口麻豆原神| 一二三四区精品视频| 午夜电影一区二区三区| 久久99国产精品成人| 99麻豆久久久国产精品免费优播| 中文欧美字幕免费| 亚洲人吸女人奶水| 日韩成人精品在线| 丁香五精品蜜臀久久久久99网站| 9i看片成人免费高清| 欧美中文字幕亚洲一区二区va在线| 欧美久久久久中文字幕| 久久久久久久久免费| 亚洲黄色片在线观看| 美女国产一区二区三区| 成人少妇影院yyyy| 欧美日韩在线直播| 欧美激情一区二区三区在线| 亚洲一区二区在线免费观看视频| 久久www免费人成看片高清| va亚洲va日韩不卡在线观看| 欧美日韩国产大片| 国产精品国产自产拍高清av王其| 亚洲已满18点击进入久久| 国产精品综合视频| 欧美久久久久久久久| 亚洲欧洲性图库| 久久国产精品无码网站| 99久久精品久久久久久清纯| 日韩午夜精品视频| 亚洲一区二区高清| 成人涩涩免费视频| 欧美xxxx老人做受| 亚洲高清视频在线| 91麻豆免费观看| 国产欧美日韩亚州综合 | 亚洲一区二区三区四区在线免费观看 | 欧洲日韩一区二区三区| 久久久91精品国产一区二区精品 | 日韩一二在线观看| 亚洲综合视频在线观看| 高清在线不卡av| 肉丝袜脚交视频一区二区| av动漫一区二区| 久久久久久一二三区| 免费的成人av| 91精品国产麻豆国产自产在线| 亚洲精品国产视频| 99久久国产免费看| 国产精品色噜噜| 成人午夜看片网址| 久久精品视频网| 国产精品一区二区91| 精品黑人一区二区三区久久| 日韩精品一级中文字幕精品视频免费观看| 91首页免费视频| 亚洲日本一区二区| 色综合欧美在线| 一区二区三区在线观看国产| 99热国产精品| 亚洲欧美日韩人成在线播放| jizzjizzjizz欧美| 国产精品久久看| 色偷偷一区二区三区| 最新国产精品久久精品|