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

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

?? arcode.c

?? 此代碼是C編的EWZ的測試程序,大家可以嘗試對這個包里lena.pgm進行圖像壓縮處理.
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "arcode.h"

const double ZERO_ENT=-1.0;
const double OneLog2=1.4426950408889634074;

const int CodeValueBits = 16;
const int TopValue      = 65535L;  // 2^CodeValueBits - 1
const long FirstQtr     = 16384L;  // (TopValue + 1) / 4
const long Half         = 32768L;  // 2 * FirstQtr
const long ThirdQtr     = 49152L;  // 3 * FirstQtr

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
void  HistoBiReset(HistoBi *h, int c0, int c1)
{

	if ((c0+c1)<=h->MaxCount){
		if (c0){
			h->c0 = c0;
		}
		else{
			h->c0 = 1;
		}
		if (c1){
			h->c1 = c1;
		}
		else{
			h->c1 = 1;
		}
	}	
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
HistoBi* HistoBiAlloc(int MaxCount, int c0, int c1)
{
	HistoBi* h;
	if ((h=(HistoBi*)malloc(sizeof(HistoBi)))==NULL){
		return NULL;
	}
	h->MaxCount = MaxCount;
	HistoBiReset(h, c0, c1);

	return h;
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
void HistoBiDealloc(HistoBi *h)
{
	if (h!=NULL){
		free(h);
	}
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
int HistoBiGetCount0(HistoBi *h)
{
	return h->c0;
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
int HistoBiGetCount1(HistoBi *h)
{
	return h->c1;
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
int HistoBiGetTotal(HistoBi *h)
{
	return (h->c0+h->c1);
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
double HistoBiGetProb0(HistoBi *h)
{
	if (h->c0 && h->c1){
		return (double)(h->c0)/(double)(h->c0+h->c1);
	}
	else{
		return ZERO_ENT;
	}
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
double HistoBiGetProb1(HistoBi *h)
{
	if (h->c0 && h->c1){
		return (double)(h->c1)/(double)(h->c0+h->c1);
	}
	else{
		return ZERO_ENT;
	}
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
double HistoBiGetEntropy0(HistoBi *h)
{
	if (h->c0 && h->c1){
		return -log((double)(h->c0)/(double)(h->c0+h->c1)) * OneLog2;
	}
	else{
		return ZERO_ENT;
	}
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
double HistoBiGetEntropy1(HistoBi *h)
{
	if (h->c0 && h->c1){
		return -log((double)(h->c1)/(double)(h->c0+h->c1)) * OneLog2;
	}
	else{
		return ZERO_ENT;
	}
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
int HistoBiGetMin(HistoBi * h)
{
	return (h->c0 < h->c1? h->c0 : h->c1);
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
double HistoBiBitCost(HistoBi *h, int bit)
{
	if (bit){
		return HistoBiGetEntropy1(h);
	}
	else{
		return HistoBiGetEntropy0(h);
	}
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
void HistoBiScale(HistoBi *h)
{
	h->c0 = (h->c0+1) >> 1;
	h->c1 = (h->c1+1) >> 1;
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
void HistoBiUpdate(HistoBi *h, int bit)
{
	if ((h->c0+h->c1) >= h->MaxCount){
		HistoBiScale(h);
	}

	if (bit == 0){
		h->c0++;
	}
	else{
		h->c1++;
	}
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
void HistoBiTestTotal(HistoBi *h)
{
	if ((h->c0+h->c1) == h->MaxCount){
		HistoBiScale(h);
	}
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
void HistoBiTaubScale(HistoBi *h, int MinThre, int TotalThre, int TruncFlag)
{
	assert((MinThre > 0) && (TotalThre > 2));

	if (TruncFlag){
		while ((HistoBiGetMin(h) > MinThre) && (HistoBiGetTotal(h) > TotalThre)){
			/* truncation */
			h->c0 >>= 1;
			h->c1 >>= 1;
		}
	}
	else{
		while ((HistoBiGetMin(h) > MinThre) && (HistoBiGetTotal(h) > TotalThre)){
			/* ceiling */
			HistoBiScale(h);
		}
	}
}


/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
Histo *HistoAlloc(int MaxCount, int nSymbols)
{   
   int i;
   Histo *h;

	if((h=(Histo *)malloc(sizeof(Histo)))==NULL){
		return NULL;
	}

	h->Tree=NULL;
	h->ResetCount = 0;
	h->nSymbols=nSymbols;
   h->TotalFreq=0;

	i=1;
	while(h->nSymbols > i){
		i<<=1;
	}
	
   h->p2half=i>>1;

   if ((h->Tree = (int *)calloc(h->nSymbols, sizeof(int)))==NULL){
      free(h);
      return NULL;
   }

   for (i=0; i<h->nSymbols; i++){
		HistoPutValue(h, 1, i);
	}

	h->MaxCount = MaxCount;

   return h;
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
int HistoCopy(Histo *s, Histo *d)
{
   int i;

   if (s==NULL || d==NULL && (s->nSymbols!=d->nSymbols)){
      return 0;
   }

	d->ResetCount  = s->ResetCount;
	d->nSymbols    = s->nSymbols;
   d->TotalFreq   = s->TotalFreq;
   d->p2half      = s->p2half;
   d->MaxCount    = s->MaxCount;

   for (i=0; i<d->nSymbols; i++){
		d->Tree[i] = s->Tree[i];
	}	

   return 1;
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
void HistoReset(Histo *h)
{
   int i;

   for (i=0; i<h->nSymbols; i++){
      h->Tree[i] = 0;
   }
   h->TotalFreq=0;

   for (i=0; i<h->nSymbols; i++){
		HistoPutValue(h, 1, i);
	}
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
void HistoDealloc(Histo *h)
{
   if (h!=NULL){
      if (h->Tree!=NULL){
         free(h->Tree);
         h->Tree=NULL;
      }
		free(h);
	}
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
int HistoGetCumul(Histo *h, int ix)
{
   int sum;

	if (ix<0){
		return 0;
	}

	sum = h->Tree[0];

   while(ix>0){
      sum += h->Tree[ix];
      ix = ix & (ix-1);		
   }

   return sum;
}


/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
void HistoPutValue(Histo *h, int val, int ix)
{
   assert(ix>=0);

	if (ix==0){
		h->Tree[0]+=val;
	}
	else{
		while(ix < h->nSymbols){
			h->Tree[ix] += val;
			ix = 2*ix - (ix & (ix-1));
		}
	}

   h->TotalFreq+=val;
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
int HistoGetProb(Histo *h, int ix)
{
   int val, parent;

	assert(ix>=0 && ix<h->nSymbols);

	val = h->Tree[ix];

   if (ix>0){
      parent= ix & (ix-1);
      ix = ix-1;
      while (parent != ix ){
         val -= h->Tree[ix];
         ix = ix & (ix -1);
      }
   }

   return val;
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
void HistoScaleDown(Histo *h)
{
   int i;
	
   for (i=h->nSymbols-1; i>=0; i--){
		HistoPutValue(h, -HistoGetProb(h, i)/2, i);
   }
	h->ResetCount++;
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
int HistoGetSymbol(Histo *h, int CumFreq)
{
   int baseIx, testIx, half;

   if (CumFreq<h->Tree[0]){
      return 0;
   }
   
	CumFreq = CumFreq - h->Tree[0] + 1;
	baseIx=0;
   half = h->p2half;

   while (half>0){
      testIx = baseIx+half;

		/* 26/09/02 - the first condition has to be tested first */
		if (testIx < h->nSymbols){
			if (CumFreq > h->Tree[testIx] ){
				baseIx = testIx;
				CumFreq -= h->Tree[testIx];
			}
      }
      half>>=1;
   }
   return baseIx+1;
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
void HistoUpdate(Histo *h, int val, int ix)
{
   if (h->TotalFreq > h->MaxCount){
      HistoScaleDown(h);
   }

   HistoPutValue(h, val, ix);
}
/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/


/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
/* Arithmetic Encoder Functions */
/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
static void AREncoderBitPlusFollow(AREncoder *ar, int b)
{
	ar->BitBuffer >>= 1;
	
	if (b){
		ar->BitBuffer |= 0x80;
	}
  
	if (!(--ar->BitIndex)) {
		ar->ByteCounter++;  
		ar->BitIndex = 8;
		
		if (putc(ar->BitBuffer, ar->f) == EOF){ 
			ARCoderError("Fail to write.");
		}
	}
	
	while (ar->BitsToFollow > 0){
		ar->BitsToFollow--;  
		ar->BitBuffer >>= 1;
		
		if (!b){ 
			ar->BitBuffer |= 0x80;
		}
		if (!(--ar->BitIndex)){
			ar->ByteCounter++;  
			ar->BitIndex = 8;
			if (putc(ar->BitBuffer, ar->f) == EOF){ 
				ARCoderError("Fail to write.");
			}
		}
	}
}

/*--------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------*/
static void AREncoderUpdateInterval(AREncoder *ar)
{
	++ar->SymbolCounter;

	for (;;){

		if (ar->High < Half){
			AREncoderBitPlusFollow(ar, 0);
		}
		else if (ar->Low >= Half) {
				AREncoderBitPlusFollow(ar, 1);
				ar->Low -= Half;  
				ar->High -= Half; 
		}
		else if ((ar->Low >= FirstQtr) && (ar->High < ThirdQtr)){
			ar->BitsToFollow++;  
			ar->Low -= FirstQtr;  
			ar->High -= FirstQtr; 
		}
		else{
			break;
		}
		

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品福利久久久| 国产在线麻豆精品观看| 精品一区二区三区在线播放| 99re热这里只有精品视频| 在线电影欧美成精品| 国产精品久久久久久久久动漫| 日韩不卡一区二区| 色婷婷精品久久二区二区蜜臀av| 久久久不卡网国产精品一区| 日韩福利视频导航| 日本乱人伦aⅴ精品| 国产精品乱码一区二三区小蝌蚪| 另类的小说在线视频另类成人小视频在线 | 欧美专区在线观看一区| 国产欧美一区二区精品久导航| 日本欧美一区二区| 5858s免费视频成人| 亚洲一区二区三区四区在线| 97久久精品人人做人人爽50路| 久久精品夜色噜噜亚洲aⅴ| 麻豆视频一区二区| 8v天堂国产在线一区二区| 亚洲午夜视频在线| 欧洲色大大久久| 亚洲最色的网站| 日本久久一区二区三区| 伊人婷婷欧美激情| 色偷偷久久人人79超碰人人澡 | 成人av网站在线观看免费| 久久女同精品一区二区| 国产麻豆视频一区| 久久综合久久99| 国产高清久久久| 国产日韩欧美精品一区| 成人精品小蝌蚪| 中文字幕中文在线不卡住| 不卡av电影在线播放| 国产精品福利一区二区| 91色在线porny| 亚洲精品伦理在线| 欧美日韩高清一区| 日本vs亚洲vs韩国一区三区 | 欧美做爰猛烈大尺度电影无法无天| 中文字幕在线观看不卡| 在线精品视频一区二区| 亚洲成av人片一区二区| 51精品视频一区二区三区| 麻豆久久一区二区| 国产亚洲一区字幕| 色哟哟欧美精品| 天堂影院一区二区| 久久久精品一品道一区| 91在线观看地址| 日韩不卡免费视频| 中文字幕不卡在线观看| 在线看日本不卡| 韩国女主播一区| 亚洲人成伊人成综合网小说| 欧美日韩高清不卡| 岛国精品一区二区| 亚洲第一综合色| 久久久91精品国产一区二区精品 | 欧美精品123区| 国产精品综合二区| 亚洲综合丁香婷婷六月香| 日韩欧美www| 91丨九色丨尤物| 日av在线不卡| 一色屋精品亚洲香蕉网站| 3d动漫精品啪啪一区二区竹菊| 国产九色sp调教91| 亚洲h动漫在线| 国产精品午夜在线观看| 宅男在线国产精品| 99久久久国产精品免费蜜臀| 免费观看一级特黄欧美大片| 亚洲欧洲精品天堂一级| 精品久久一区二区| 欧美色图片你懂的| 高清不卡在线观看| 麻豆国产91在线播放| 国产一区免费电影| 亚洲一卡二卡三卡四卡五卡| 国产亚洲成av人在线观看导航| 欧美日韩成人一区| 色婷婷综合久久久中文一区二区| 激情久久五月天| 婷婷综合在线观看| 亚洲欧美日韩在线不卡| 国产午夜精品在线观看| 91精品国产综合久久小美女| 色综合久久中文综合久久97| 国产精品911| 蜜臀a∨国产成人精品| 亚洲一二三四久久| 亚洲色图另类专区| 中文欧美字幕免费| 久久品道一品道久久精品| 日韩网站在线看片你懂的| 欧美性生活一区| 色香蕉成人二区免费| av不卡一区二区三区| 高清不卡一区二区| 国产激情视频一区二区三区欧美 | 欧美日韩视频第一区| 91免费国产在线观看| 成人免费毛片高清视频| 国产电影一区在线| 国产精品69毛片高清亚洲| 国产在线精品不卡| 国内欧美视频一区二区 | 国产91精品在线观看| 国产在线精品一区二区三区不卡| 精品一二三四区| 国产又黄又大久久| 国产99一区视频免费| 粉嫩欧美一区二区三区高清影视| 国产精品一卡二卡在线观看| 老司机精品视频导航| 国模冰冰炮一区二区| 国产风韵犹存在线视精品| 成人中文字幕电影| 99久久夜色精品国产网站| 色婷婷亚洲一区二区三区| 欧美视频一区二| 日韩欧美一区二区不卡| 久久久精品综合| 亚洲人成电影网站色mp4| 亚洲精品免费一二三区| 亚洲超碰精品一区二区| 免费人成黄页网站在线一区二区| 精品一区二区三区蜜桃| 成人精品视频一区二区三区| 91丨九色丨蝌蚪富婆spa| 欧美日韩精品一区二区三区蜜桃| 欧美一区二区三区视频| 国产夜色精品一区二区av| 亚洲欧美在线视频| 午夜精品久久一牛影视| 国产麻豆精品在线观看| 91麻豆国产自产在线观看| 欧美久久久一区| 国产三级精品视频| 一区二区三区在线视频免费 | 日韩一区二区三区在线| 国产午夜精品美女毛片视频| 亚洲色图视频网| 麻豆精品一二三| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 激情综合色综合久久综合| 粉嫩高潮美女一区二区三区 | 久久免费偷拍视频| 亚洲人成7777| 国产一区二区三区免费观看| 色综合久久久久综合体| 欧美一二三在线| ...中文天堂在线一区| 另类调教123区| 欧美制服丝袜第一页| 国产欧美一区二区三区沐欲| 午夜影院久久久| 99久久精品免费看国产| 精品国产免费一区二区三区四区| 亚洲日本电影在线| 国产激情偷乱视频一区二区三区 | 中文字幕精品一区二区三区精品 | 69av一区二区三区| 亚洲欧美综合在线精品| 国产在线视频一区二区| 欧美日韩亚洲高清一区二区| 国产精品欧美综合在线| 激情图片小说一区| 欧美日韩性生活| 一区二区三区国产精品| 成人午夜av影视| 欧美xxxx在线观看| 五月激情综合网| 日本高清不卡在线观看| 中文一区一区三区高中清不卡| 老汉av免费一区二区三区 | 色呦呦网站一区| 中文字幕av一区二区三区高| 久久电影国产免费久久电影| 欧美日韩国产综合视频在线观看| 亚洲欧洲制服丝袜| 91丨九色丨黑人外教| 国产精品蜜臀av| 成人短视频下载 | 精品国产一区二区三区久久影院| 天堂午夜影视日韩欧美一区二区| 色视频一区二区| 亚洲摸摸操操av| 99精品视频在线观看免费| 久久免费的精品国产v∧| 另类小说一区二区三区| 欧美一区二区三区视频在线| 日韩av中文字幕一区二区| 欧美日韩精品高清| 日日夜夜精品视频天天综合网| 欧美蜜桃一区二区三区|