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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? arithmetic_codec.cpp

?? 算術(shù)編碼程序源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號(hào):
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
//                       ****************************                        -
//                        ARITHMETIC CODING EXAMPLES                         -
//                       ****************************                        -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
// Fast arithmetic coding implementation                                     -
// -> 32-bit variables, 32-bit product, periodic updates, sorted symbols     -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
// Version 1.00  -  April 25, 2004                                           -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
//                                  WARNING                                  -
//                                 =========                                 -
//                                                                           -
// The only purpose of this program is to demonstrate the basic principles   -
// of arithmetic coding. It is provided as is, without any express or        -
// implied warranty, without even the warranty of fitness for any particular -
// purpose, or that the implementations are correct.                         -
//                                                                           -
// Permission to copy and redistribute this code is hereby granted, provided -
// that this warning and copyright notices are not removed or altered.       -
//                                                                           -
// Copyright (c) 2004 by Amir Said (said@ieee.org) &                         -
//                       William A. Pearlman (pearlw@ecse.rpi.edu)           -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//                                                                           -
// A description of the arithmetic coding method used here is available in   -
//                                                                           -
// Lossless Compression Handbook, ed. K. Sayood                              -
// Chapter 5: Arithmetic Coding (A. Said), pp. 101-152, Academic Press, 2003 -
//                                                                           -
// A. Said, Introduction to Arithetic Coding Theory and Practice             -
// HP Labs report HPL-2004-76  -  http://www.hpl.hp.com/techreports/         -
//                                                                           -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


// - - Inclusion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

#include <stdlib.h>
#include "arithmetic_codec.h"


// - - Constants - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

const unsigned AC__MinLength = 0x01000000U;   // threshold for renormalization
const unsigned AC__MaxLength = 0xFFFFFFFFU;      // maximum AC interval length

                                           // Maximum values for binary models
const unsigned BM__LengthShift = 13;     // length bits discarded before mult.
const unsigned BM__MaxCount    = 1 << BM__LengthShift;  // for adaptive models

                                          // Maximum values for general models
const unsigned DM__LengthShift = 15;     // length bits discarded before mult.
const unsigned DM__MaxCount    = 1 << DM__LengthShift;  // for adaptive models


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - Static functions  - - - - - - - - - - - - - - - - - - - - - - - - - - -

static void AC_Error(const char * msg)
{
  fprintf(stderr, "\n\n -> Arithmetic coding error: ");
  fputs(msg, stderr);
  fputs("\n Execution terminated!\n", stderr);
  exit(1);
}


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - Coding implementations  - - - - - - - - - - - - - - - - - - - - - - - -

inline void Arithmetic_Codec::propagate_carry(void)
{
  unsigned char * p;            // carry propagation on compressed data buffer
  for (p = ac_pointer - 1; *p == 0xFFU; p--) *p = 0;
  ++*p;
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

inline void Arithmetic_Codec::renorm_enc_interval(void)
{
  do {                                          // output and discard top byte
    *ac_pointer++ = (unsigned char)(base >> 24);
    base <<= 8;
  } while ((length <<= 8) < AC__MinLength);        // length multiplied by 256
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

inline void Arithmetic_Codec::renorm_dec_interval(void)
{
  do {                                              // read least-signif. byte
    value = (value << 8) | unsigned(*++ac_pointer);
  } while ((length <<= 8) < AC__MinLength);        // length multiplied by 256
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

void Arithmetic_Codec::put_bit(unsigned bit)
{
#ifdef _DEBUG
  if (mode != 1) AC_Error("encoder not initialized");
#endif

  length >>= 1;                                              // halve interval
  if (bit) {
    unsigned init_base = base;
    base += length;                                               // move base
    if (init_base > base) propagate_carry();               // overflow = carry
  }

  if (length < AC__MinLength) renorm_enc_interval();        // renormalization
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

unsigned Arithmetic_Codec::get_bit(void)
{
#ifdef _DEBUG
  if (mode != 2) AC_Error("decoder not initialized");
#endif

  length >>= 1;                                              // halve interval
  unsigned bit = (value >= length);                              // decode bit
  if (bit) value -= length;                                       // move base

  if (length < AC__MinLength) renorm_dec_interval();        // renormalization

  return bit;                                         // return data bit value
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

void Arithmetic_Codec::put_bits(unsigned data, unsigned bits)
{
#ifdef _DEBUG
  if (mode != 1) AC_Error("encoder not initialized");
  if ((bits < 1) || (bits > 20)) AC_Error("invalid number of bits");
  if (data >= (1U << bits)) AC_Error("invalid data");
#endif

  unsigned init_base = base;
  base += data * (length >>= bits);            // new interval base and length

  if (init_base > base) propagate_carry();                 // overflow = carry
  if (length < AC__MinLength) renorm_enc_interval();        // renormalization
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

unsigned Arithmetic_Codec::get_bits(unsigned bits)
{
#ifdef _DEBUG
  if (mode != 2) AC_Error("decoder not initialized");
  if ((bits < 1) || (bits > 20)) AC_Error("invalid number of bits");
#endif

  unsigned s = value / (length >>= bits);      // decode symbol, change length

  value -= length * s;                                      // update interval
  if (length < AC__MinLength) renorm_dec_interval();        // renormalization

  return s;
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

void Arithmetic_Codec::encode(unsigned bit,
                              Static_Bit_Model & M)
{
#ifdef _DEBUG
  if (mode != 1) AC_Error("encoder not initialized");
#endif
            // multiplication approximated by two bit shifts and two additions

  unsigned x = length - (length >> M.shift_a) - (length >> M.shift_b);

                                                            // update interval
  if (M.least_probable_bit ^ (bit != 0))
    length  = x;                           // simplest case is the most common
  else {
    unsigned init_base = base;
    base   += x;
    length -= x;
    if (init_base > base) propagate_carry();               // overflow = carry
  }

  if (length < AC__MinLength) renorm_enc_interval();        // renormalization
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

unsigned Arithmetic_Codec::decode(Static_Bit_Model & M)
{
#ifdef _DEBUG
  if (mode != 2) AC_Error("decoder not initialized");
#endif
            // multiplication approximated by two bit shifts and two additions

  unsigned x = length - (length >> M.shift_a) - (length >> M.shift_b);

  unsigned mpb = (value < x);                                      // decision
                                                    // update & shift interval
  if (mpb)
    length  = x;
  else {
    value  -= x;                                  // shifted interval base = 0
    length -= x;
  }

  if (length < AC__MinLength) renorm_dec_interval();        // renormalization

  return mpb ^ M.least_probable_bit;                     // return decoded bit
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

void Arithmetic_Codec::encode(unsigned bit,
                              Adaptive_Bit_Model & M)
{
#ifdef _DEBUG
  if (mode != 1) AC_Error("encoder not initialized");
#endif

  unsigned x = M.mpb_prob * (length >> BM__LengthShift);     // product l x pm
                                                            // update interval
  if (M.least_probable_bit ^ (bit != 0))
    length = x;                            // simplest case is the most common
  else {
    ++M.lpb_count;
    unsigned init_base = base;
    base   += x;
    length -= x;
    if (init_base > base) propagate_carry();               // overflow = carry
  }

  if (length < AC__MinLength) renorm_enc_interval();        // renormalization

  if (--M.bits_until_update == 0) M.update();         // periodic model update
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

unsigned Arithmetic_Codec::decode(Adaptive_Bit_Model & M)
{
#ifdef _DEBUG
  if (mode != 2) AC_Error("decoder not initialized");
#endif

  unsigned x = M.mpb_prob * (length >> BM__LengthShift);     // product l x pm
  unsigned mpb = (value < x);                                      // decision
                                                            // update interval
  if (mpb)
    length = x;
  else {
    ++M.lpb_count;
    value  -= x;
    length -= x;
  }

  if (length < AC__MinLength) renorm_dec_interval();        // renormalization

  if (--M.bits_until_update) return mpb ^ M.least_probable_bit;  // return bit
                                                        
  unsigned bit = mpb ^ M.least_probable_bit;  // save bit value before changes
  M.update();                                         // periodic model update
  return bit;                                            // return decoded bit
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

void Arithmetic_Codec::encode(unsigned data,
                              Static_Data_Model & M)
{
#ifdef _DEBUG
  if (mode != 1) AC_Error("encoder not initialized");
  if (data >= M.data_symbols) AC_Error("invalid data symbol");
#endif

  unsigned x, init_base = base, s = M.rank[data];             // symbol = rank
                                                           // compute products
  if (s == M.most_probable_symbol) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩免费一区二区| 欧美精品vⅰdeose4hd| 午夜欧美大尺度福利影院在线看| 欧美精品一区二区三区在线| 色综合色狠狠综合色| 另类小说欧美激情| 亚洲一二三区不卡| 国产精品午夜春色av| 777色狠狠一区二区三区| 亚洲午夜一区二区| 色婷婷国产精品久久包臀| 欧美一区二区三区在线看| 精品久久五月天| 国产精品久久99| 国产黄色成人av| 精品国产乱码久久久久久久久| 一区二区在线电影| 色婷婷狠狠综合| 亚洲影院在线观看| 91高清在线观看| 亚洲你懂的在线视频| 色琪琪一区二区三区亚洲区| 国产精品福利一区| 在线欧美一区二区| 日韩制服丝袜av| 日韩一区和二区| 国产盗摄视频一区二区三区| 成人免费在线播放视频| 欧美自拍偷拍一区| 精品一区二区三区久久| 久久久激情视频| 色婷婷久久久久swag精品| 日本欧美肥老太交大片| 久久―日本道色综合久久| 成人激情免费网站| 国产精品视频一区二区三区不卡| 99麻豆久久久国产精品免费| 视频一区视频二区中文| 国产日韩在线不卡| 7777精品伊人久久久大香线蕉经典版下载 | 国产精品国产三级国产| 一本到高清视频免费精品| 亚洲高清不卡在线观看| 国产亚洲va综合人人澡精品 | 日韩欧美区一区二| 成人黄色小视频在线观看| 另类小说色综合网站| 亚洲一级电影视频| 国产精品毛片高清在线完整版| 日韩午夜精品视频| 国产高清久久久| 成人理论电影网| 色综合久久综合网欧美综合网| 成人国产精品免费观看| 色婷婷亚洲精品| 精品国产91亚洲一区二区三区婷婷| 福利电影一区二区三区| 国产精品一区二区三区网站| 日韩国产欧美在线观看| 国产精品中文字幕日韩精品 | 色94色欧美sute亚洲线路一久 | 一本色道a无线码一区v| 无码av中文一区二区三区桃花岛| 欧美韩国日本综合| 国产精品你懂的在线| 欧美精品一区二区三| 欧美一区二区三区白人| 精品一区二区影视| 久久99国产精品麻豆| 日本伊人精品一区二区三区观看方式| 国产精品乱码妇女bbbb| 国产三级久久久| 国产女人18水真多18精品一级做| 日韩三级视频在线看| yourporn久久国产精品| 国产成人精品网址| 99视频精品在线| 欧美伊人久久久久久午夜久久久久| 色哟哟一区二区在线观看| 99re在线视频这里只有精品| 99国产一区二区三精品乱码| 99久久国产综合色|国产精品| 91一区一区三区| 欧美日韩成人高清| 国产欧美一区二区三区沐欲| 亚洲欧美日韩系列| 国产精品一区二区三区99| 国产成人精品网址| 在线观看一区二区精品视频| 日韩限制级电影在线观看| 2020国产精品自拍| 亚洲黄网站在线观看| 日韩成人av影视| 另类小说一区二区三区| www.亚洲在线| 精品国产123| 亚洲影院久久精品| 成人综合婷婷国产精品久久蜜臀| 91色婷婷久久久久合中文| 欧美色大人视频| 久久精品欧美日韩| 午夜伦欧美伦电影理论片| 久久精品国产色蜜蜜麻豆| 色婷婷久久一区二区三区麻豆| 成人黄色一级视频| 久久久久久黄色| 美女视频网站黄色亚洲| 欧美日韩二区三区| 中文字幕一区在线| 国内成人精品2018免费看| 欧美挠脚心视频网站| 亚洲精品成a人| 国产剧情av麻豆香蕉精品| 欧美不卡激情三级在线观看| 中文字幕欧美日韩一区| 国产精品综合二区| 欧美一级xxx| 一区二区三区在线观看动漫| 91麻豆国产在线观看| 一个色综合av| 欧美一级日韩一级| 日韩精品三区四区| 色偷偷久久人人79超碰人人澡| 中文在线一区二区| 亚洲成人自拍网| 91麻豆精品国产91久久久久久久久 | 日本免费在线视频不卡一不卡二| 欧美色区777第一页| 三级欧美在线一区| 色综合久久久久综合| 亚洲高清免费观看高清完整版在线观看 | 亚洲午夜一区二区| 欧美日韩卡一卡二| 美女爽到高潮91| 国产精品乱码一区二区三区软件| 99久久精品国产一区| 亚洲色图制服丝袜| 在线成人av网站| 国产乱人伦偷精品视频免下载 | 男女男精品视频| 久久久久久久久一| 色综合网站在线| 久久99精品国产.久久久久久| 自拍偷拍国产亚洲| 国产精品全国免费观看高清| 国产女主播视频一区二区| 中文成人av在线| 中文字幕中文字幕在线一区| 国产精品美女久久久久久久久| 国产欧美一区二区三区鸳鸯浴| 久久精品人人做人人综合| 国产亚洲一本大道中文在线| 国产三级精品视频| 亚洲视频你懂的| 天天操天天色综合| 五月天亚洲婷婷| 国产成人午夜精品影院观看视频 | 日韩黄色免费电影| 蜜臀av性久久久久蜜臀av麻豆| 亚洲国产日韩精品| 中文一区在线播放| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美日产在线观看| 欧美日本精品一区二区三区| 色视频成人在线观看免| av在线不卡电影| 99re免费视频精品全部| 国产99久久精品| a级高清视频欧美日韩| 成人精品鲁一区一区二区| 高清国产一区二区| 91免费看片在线观看| 欧美影院一区二区| 678五月天丁香亚洲综合网| 在线播放中文一区| 精品国产1区二区| 国产精品久久久久aaaa| 亚洲欧美欧美一区二区三区| 一区二区三区日韩欧美| 国产欧美中文在线| 亚洲欧美另类在线| 亚洲国产成人av网| 国产电影精品久久禁18| 色综合久久中文字幕| 337p亚洲精品色噜噜狠狠| 久久久久久电影| 国产亲近乱来精品视频| 一区二区三区日韩欧美精品| 久久成人综合网| 99re这里都是精品| 精品播放一区二区| 国产高清在线观看免费不卡| 国产一区二区视频在线| 欧美酷刑日本凌虐凌虐| 日本午夜精品视频在线观看| 欧美日韩一区二区三区四区五区 | 国产精品久久三| 99国产精品99久久久久久| 国产日韩欧美一区二区三区乱码| 免费在线观看一区二区三区|