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

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

?? arithmetic_codec.cpp

?? 算術編碼程序源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
void Arithmetic_Codec::stop_decoder(void)
{
  if (mode != 2) AC_Error("invalid to stop decoder");
  mode = 0;
}


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - Static bit model implementation - - - - - - - - - - - - - - - - - - - - -

Static_Bit_Model::Static_Bit_Model(void)
{
  least_probable_bit = 0;
  shift_a = shift_b = 2;                                           // pm = 0.5
}

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

void Static_Bit_Model::set_probability_0(double p0)
{
  if ((p0 < 0.0001)||(p0 > 0.9999)) AC_Error("invalid bit probability");

  if (p0 < 0.5)                                   // define least probable bit
    least_probable_bit = 0;
  else {
    least_probable_bit = 1;
    p0 = 1.0 - p0;
  }
  
  const double ProbThr[64] = {                       // probability thresholds
    1.000000000, 0.436829205, 0.343297135, 0.296716418,
    0.265429157, 0.217670149, 0.171498704, 0.148324226,
    0.132682629, 0.108718131, 0.085722481, 0.074155662,
    0.066335033, 0.054334924, 0.042855429, 0.037076405,
    0.033166108, 0.027161937, 0.021426357, 0.018537866,
    0.016582720, 0.013579645, 0.010712850, 0.009268851,
    0.008291278, 0.006789498, 0.005356344, 0.004634405,
    0.004145619, 0.003394669, 0.002678152, 0.002317198,
    0.002072805, 0.001697315, 0.001339071, 0.001158598,
    0.001036401, 0.000848652, 0.000669534, 0.000579299,
    0.000518200, 0.000424325, 0.000334767, 0.000289649,
    0.000259100, 0.000212162, 0.000167383, 0.000144825,
    0.000129550, 0.000106081, 0.000083692, 0.000072412,
    0.000064775, 0.000053040, 0.000041846, 0.000036206,
    0.000032387, 0.000026520, 0.000020923, 0.000018103,
    0.000016194, 0.000013260, 0.000010461, 0.000009052 };

  unsigned u = 0, n = 64, m = 32;         // find optimal values of bit shifts

  do {
    if (p0 < ProbThr[m])
      u = m;
    else
      n = m;
  } while ((m = (u + n) >> 1) != u);

  shift_a = 2 + (u >> 2);
  shift_b = shift_a + (u & 0x3);
}


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - Adaptive bit model implementation - - - - - - - - - - - - - - - - - - - -

Adaptive_Bit_Model::Adaptive_Bit_Model(void)
{
  reset();
}

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

void Adaptive_Bit_Model::reset(void)
{
                                       // initialization to equiprobable model
  least_probable_bit  = 0;
  lpb_count = 1;
  bit_count = 2;
  mpb_prob  = 1U << (BM__LengthShift - 1);
  update_cycle = bits_until_update = 4;         // start with frequent updates
}

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

void Adaptive_Bit_Model::update(void)
{
                               // halve counts when a top threshold is reached

  if ((bit_count += update_cycle) >= BM__MaxCount) {
    bit_count = (bit_count + 1) >> 1;
    lpb_count = (lpb_count + 1) >> 1;
    if (lpb_count == bit_count) ++bit_count;
  }
                                                     // test most probable bit
  unsigned mpb_count = bit_count - lpb_count;
  if (mpb_count < lpb_count) {
    mpb_count = lpb_count;
    lpb_count = bit_count - mpb_count;
    least_probable_bit ^= 1;
  }
                                           // compute scaled bit 0 probability
  unsigned scale = 0x80000000U / bit_count;
  mpb_prob = (mpb_count * scale) >> (31 - BM__LengthShift);

                                             // set frequency of model updates
  update_cycle = (5 * update_cycle) >> 2;
  if (update_cycle > 64) update_cycle = 64;
  bits_until_update = update_cycle;
}


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - Static data model implementation  - - - - - - - - - - - - - - - - - - -

Static_Data_Model::Static_Data_Model(void)
{
  data_symbols = 0;
  distribution = 0;
}

Static_Data_Model::~Static_Data_Model(void)
{
  delete [] distribution;
}

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

void Static_Data_Model::set_distribution(unsigned number_of_symbols,
                                  const double probability[])
{
  if ((number_of_symbols < 2) || (number_of_symbols > (1 << 11)))
    AC_Error("invalid number of data symbols");

  if (data_symbols != number_of_symbols) {     // assign memory for data model
    data_symbols = number_of_symbols;
    most_probable_symbol = data_symbols - 1;
    delete [] distribution;
    distribution = new unsigned[3*data_symbols];
    rank = distribution + data_symbols;
    data = rank + data_symbols;
    if (distribution == 0) AC_Error("cannot assign model memory");
  }
                           // sort symbols by probability using insertion sort
  unsigned i, k;
  double p = 1.0 / double(data_symbols);     // value for uniform distribution

  if (probability == 0)
    for (k = 0; k < data_symbols; k++) data[k] = k;
  else 
    for (k = 0; k < data_symbols; k++) {
      unsigned s = k;
      double t = probability[k];
      for (i = k; i > 0; i--) {
        if (t >= probability[data[i-1]]) break;
        data[i] = data[i-1];
      }
      data[i] = s;
    }
                               // compute cumulative distribution, first tests
  unsigned c = 0;
  double sum = 0.0, threshold = 0.26;

  for (i = 0; i < data_symbols; i++) {
    k = data[i];
    rank[k] = i;
    if (probability) p = probability[k];
    if ((p < 0.0001) || (p > 0.9999)) AC_Error("invalid symbol probability");
    distribution[i] = unsigned(sum * (1 << DM__LengthShift));
    sum += p;
    while (sum > threshold) {
      first_tests[c++] = i;
      threshold += 0.25;
    }
  }
  if (first_tests[0] == first_tests[1]) --first_tests[0]; 

  if ((sum < 0.9999) || (sum > 1.0001)) AC_Error("invalid probabilities");
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - Adaptive data model implementation  - - - - - - - - - - - - - - - - - -

Adaptive_Data_Model::Adaptive_Data_Model(void)
{
  data_symbols = 0;
  distribution = 0;
}

Adaptive_Data_Model::Adaptive_Data_Model(unsigned number_of_symbols)
{
  data_symbols = 0;
  distribution = 0;
  set_alphabet(number_of_symbols);
}

Adaptive_Data_Model::~Adaptive_Data_Model(void)
{
  delete [] distribution;
}

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

void Adaptive_Data_Model::set_alphabet(unsigned number_of_symbols)
{
  if ((number_of_symbols < 2) || (number_of_symbols > (1 << 11)))
    AC_Error("invalid number of data symbols");

  if (data_symbols != number_of_symbols) {     // assign memory for data model
    data_symbols = number_of_symbols;
    most_probable_symbol = data_symbols - 1;
    delete [] distribution;
    distribution = new unsigned[4*data_symbols];
    symbol_count = distribution + data_symbols;
    rank = symbol_count + data_symbols;
    data = rank + data_symbols;
    if (distribution == 0) AC_Error("cannot assign model memory");
  }

  reset();                                                 // initialize model
}

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

void Adaptive_Data_Model::update(void)
{
                               // halve counts when a top threshold is reached

  if ((total_count += update_cycle) >= DM__MaxCount) {
    total_count = 0;
    for (unsigned n = 0; n < data_symbols; n++)
      total_count += (symbol_count[n] = (symbol_count[n] + 1) >> 1);
  }

  unsigned i, k;                                  // update sorting of symbols

  for (k = 1; k < data_symbols; k++)
    if (symbol_count[k] < symbol_count[k-1]) {
      unsigned t = symbol_count[k];
      symbol_count[k]  = symbol_count[k-1];
      unsigned s = data[k];
      data[k] = data[k-1];
      for (i = k - 1; i > 0; i--) {
        if (t >= symbol_count[i-1]) break;
        symbol_count[i]  = symbol_count[i-1];
        data[i] = data[i-1];
      }
      symbol_count[i]  = t;
      data[i] = s;
    }
                               // compute cumulative distribution, first tests
  unsigned sum = 0, c = 0;
  unsigned d = (total_count + 3) >> 2, threshold = d + 1;
  unsigned scale = 0x80000000U / total_count;

  for (i = 0; i < data_symbols; i++) {
    rank[data[i]] = i;
    distribution[i] = (scale * sum) >> (31 - DM__LengthShift);
    sum += symbol_count[i];
    while (sum > threshold) {
      first_tests[c++] = i;
      threshold += d;
    }
  }
  if (first_tests[0] == first_tests[1]) --first_tests[0]; 

                                             // set frequency of model updates
  update_cycle = (5 * update_cycle) >> 2;
  unsigned max_cycle = (data_symbols + 6) << 3;
  if (update_cycle > max_cycle) update_cycle = max_cycle;
  symbols_until_update = update_cycle;
}

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

void Adaptive_Data_Model::reset(void)
{
  if (data_symbols == 0) return;

                      // restore probability estimates to uniform distribution
  total_count = 0;
  update_cycle = data_symbols;
  for (unsigned k = 0; k < data_symbols; k++) {
    data[k] = k;
    symbol_count[k] = 1;
  }
  update();
  symbols_until_update = update_cycle = (data_symbols + 6) >> 1;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
毛片一区二区三区| 日韩美女主播在线视频一区二区三区| 91一区二区三区在线观看| 在线亚洲精品福利网址导航| 欧美mv日韩mv国产网站| 亚洲一区二区精品3399| 国产一区视频网站| 欧美日韩精品久久久| 中文字幕日韩一区二区| 蜜桃久久久久久久| 欧美无乱码久久久免费午夜一区| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲一区电影777| 成人av网址在线| 精品久久久久久久久久久久久久久| 一区二区三区成人| aaa国产一区| 精品制服美女丁香| 国产欧美日韩三区| 久久久综合视频| 五月婷婷激情综合| 色综合久久66| 亚洲天堂av一区| 成人小视频免费观看| 日韩美女一区二区三区四区| 午夜精品福利一区二区三区av| 色偷偷88欧美精品久久久| 日韩美女视频19| 99久久亚洲一区二区三区青草| 国产精品美女久久久久久久久久久| 国产精品综合二区| 国产三级久久久| 成人av免费网站| 亚洲男同1069视频| 在线观看亚洲一区| 视频一区二区欧美| 欧美一区二区视频观看视频| 日韩国产精品久久久| 337p亚洲精品色噜噜| 日日摸夜夜添夜夜添精品视频| 欧美疯狂性受xxxxx喷水图片| 性久久久久久久久| 欧美一卡2卡三卡4卡5免费| 日韩在线卡一卡二| 欧美刺激脚交jootjob| 黄色资源网久久资源365| 久久午夜羞羞影院免费观看| 国产91精品久久久久久久网曝门| 中文字幕av一区二区三区高| 99久久亚洲一区二区三区青草| 亚洲与欧洲av电影| 日韩午夜精品视频| 成人一区二区三区在线观看| 国产精品久久久久久久久果冻传媒| 99久久久久免费精品国产| 国产精品色在线观看| 91一区一区三区| 久久99久久99精品免视看婷婷| 精品国产一二三| av在线免费不卡| 亚洲一区二区三区国产| 日韩午夜中文字幕| 国产美女在线观看一区| 最近日韩中文字幕| 欧美少妇xxx| 国产一区二区三区| 国产精品福利电影一区二区三区四区| 日本电影亚洲天堂一区| 亚洲成人动漫av| 国产香蕉久久精品综合网| 粗大黑人巨茎大战欧美成人| 五月激情综合婷婷| 久久噜噜亚洲综合| 欧美在线一区二区三区| 日本欧美大码aⅴ在线播放| 欧美韩国日本一区| 欧美视频在线播放| 岛国精品一区二区| 亚洲1区2区3区视频| 国产精品三级久久久久三级| 欧美日韩一区二区三区四区五区| 极品美女销魂一区二区三区免费| 国产精品福利在线播放| www.av亚洲| 日韩精品久久理论片| 日本韩国欧美一区二区三区| 久久99精品久久只有精品| 国产丝袜在线精品| 日韩三级视频中文字幕| 精品中文字幕一区二区小辣椒| 亚洲女同女同女同女同女同69| 欧美日韩色一区| 懂色中文一区二区在线播放| 日韩精品欧美精品| 亚洲婷婷综合久久一本伊一区| 久久综合给合久久狠狠狠97色69| 在线看国产一区二区| 成人黄页在线观看| 免费一级片91| 亚洲成人一区在线| 国产亚洲综合av| 日韩色视频在线观看| 在线视频中文字幕一区二区| 成人高清av在线| 免费观看一级特黄欧美大片| 亚洲国产成人av网| 中文字幕亚洲电影| 亚洲欧洲日韩在线| 337p日本欧洲亚洲大胆色噜噜| 日韩一区二区免费在线观看| 91麻豆国产福利精品| 国产suv精品一区二区883| 日韩av在线发布| 亚洲第一主播视频| 亚洲人精品午夜| 日韩欧美一级在线播放| 欧美精品1区2区3区| 884aa四虎影成人精品一区| 99综合电影在线视频| 成人爱爱电影网址| caoporn国产精品| 成人高清视频在线| 91麻豆视频网站| 91老师国产黑色丝袜在线| 精品国产髙清在线看国产毛片 | 国产亚洲精品aa| 精品对白一区国产伦| 日韩三级av在线播放| 精品久久久久久久久久久久久久久久久| 欧美日韩午夜在线| 日韩一区二区三区视频| 91.麻豆视频| 欧美精品一区二区三区蜜桃视频 | 97超碰欧美中文字幕| 成人国产精品免费网站| 色视频一区二区| 欧美丝袜自拍制服另类| 欧美一区日韩一区| 日韩欧美国产午夜精品| 久久久不卡网国产精品二区| 久久亚洲免费视频| 亚洲精品少妇30p| 亚洲欧洲国产日韩| 日韩国产欧美三级| 粉嫩一区二区三区性色av| 成人中文字幕电影| 在线观看日韩高清av| 精品视频1区2区3区| 久久夜色精品国产噜噜av| 国产情人综合久久777777| 一区二区三区在线视频观看58| 伊人性伊人情综合网| 精品一区二区三区久久| 国产美女av一区二区三区| 欧美亚洲综合另类| 日韩精品一区二区三区在线观看| 中文字幕在线观看不卡| 中文字幕不卡在线播放| 日韩—二三区免费观看av| 裸体在线国模精品偷拍| 懂色av中文字幕一区二区三区| 欧美日韩一区中文字幕| 欧美精品一区二区三区在线| 亚洲综合成人网| 蜜桃一区二区三区在线| 91成人网在线| 欧美videofree性高清杂交| 亚洲一区二区综合| 国内精品久久久久影院一蜜桃| 在线免费亚洲电影| 欧美精品一区二区三区高清aⅴ| 亚洲影院免费观看| 午夜精品久久久久久不卡8050| 国模一区二区三区白浆| 欧美性猛交xxxx黑人交| 欧美精品一区二区三区久久久| 亚洲综合免费观看高清完整版在线| 理论电影国产精品| 精品视频在线免费观看| 亚洲国产精品高清| 狠狠色综合播放一区二区| 色久优优欧美色久优优| 久久色在线视频| 亚洲国产精品一区二区www在线| 91在线免费看| 久久久精品免费免费| 狠狠色丁香久久婷婷综合丁香| 欧美一级日韩免费不卡| 综合激情网...| 99视频一区二区三区| 日韩一级视频免费观看在线| 日韩和的一区二区| 91网站最新地址| 国产精品美女久久久久高潮| 日日嗨av一区二区三区四区| 欧美日韩一区二区不卡| 亚洲精品自拍动漫在线| 欧美一区二区啪啪| 午夜精品影院在线观看| 97国产精品videossex|