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

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

?? coder_bpbf_zt.c

?? 用C++語言實現(xiàn)的基于小波分析的源代碼,實現(xiàn)了小波分析的諸多算法
?? C
字號:

/*****

BP Binary Fast ZeroTree

*****/

//#define ZT_STATS

#include <stdio.h>
#include <stdlib.h>
#include <crblib/inc.h>
#include <crblib/arithc.h>
#include "coder.h"

extern int tune_param;

#define	VAL_CONTEXTS		16
#define	VAL_CONTEXT_MAX		(VAL_CONTEXTS -1)
#define SHAPE_BASE			VAL_CONTEXTS
#define SHAPE(x)			(SHAPE_BASE<<(x))
#define NUM_SHAPES			2
#define NUM_CONTEXTS		(VAL_CONTEXTS<<NUM_SHAPES)

#define TOTMAX			4000
#define INC				30

#define P0_INIT			8
#define P1_INIT			0

#define bitModel(bit,P0,PT)		do { PT += INC; if (!(bit)) P0 += INC;  if ( PT > TOTMAX ) { PT >>= 1; P0 >>= 1; P0++; PT += 2; } } while(0)
#define bitEnc(bit,ari,P0,PT)	do { arithEncBit(ari,P0,PT,bit);	bitModel(bit,P0,PT); } while(0)
#define bitDec(bit,ari,P0,PT)	do { bit = arithDecBit(ari,P0,PT);	bitModel(bit,P0,PT); } while(0)

void coderBPBFZT_encodeBandZT(coder *me,int *band,int width,int height,int bits,int fullw,int **rows);
void coderBPBFZT_decodeBandZT(coder *me,int *band,int width,int height,int bits,int fullw,int **rows);

typedef struct {
	int stats_p0[NUM_CONTEXTS],stats_pt[NUM_CONTEXTS];
	int zeros_p0[NUM_CONTEXTS],zeros_pt[NUM_CONTEXTS];
} myInfo;

void coderBPBFZT_init(coder *c)
{
myInfo *d;
int i;

	if ( (d = new(myInfo)) == NULL )
		errexit("ozero init failed");

	c->data = d;

	for(i=0;i<NUM_CONTEXTS;i++) {
		d->stats_p0[i] = P0_INIT+1; d->stats_pt[i] = 2+P0_INIT+P1_INIT;
		d->zeros_p0[i] = 1; d->zeros_pt[i] = 2;
	}

}

void coderBPBFZT_free(coder *c)
{
	if ( c->data ) {
		myInfo *d;

		d = c->data;
		free(d);
		c->data = NULL;
	}
}

coder coderBPBFZT = {
		"BP Bin Fast ZT",
		coderBPBFZT_init,
		coderBPBFZT_free,
		NULL,NULL,NULL,NULL,
		coderBPBFZT_encodeBandZT,
		coderBPBFZT_decodeBandZT
	};

/**********

lazy way to pass the state from getStats to fixStats
	and also interacts with the codeBand()

these are re-initialized at each codeBand() call, so this is
	quite re-entrant as long as we aren't multi-threaded
	(that is, no more than one call to codeBand() at a time)

*********/

static int VD,donemask,nextmask;

static int mcontext(int *dp,int x,int y,int fullw)
{
int N,W;
int context;

	VD	= (*dp)&donemask;	// current val already done

	if ( y == 0 ) {
		N = VD;
		if ( x == 0 ) W = VD; else W = (dp[-1]) & nextmask;
	} else if ( x == 0 ) {
		W = VD;
		N  = (dp[-fullw])	& nextmask;
	} else {
		N = (dp[-fullw])		& nextmask;
		W = (dp[-1])			& nextmask;
	}

	context = min(VAL_CONTEXT_MAX, ((VD + N + W)>>2));

	/** shapes help almost 0.1 bpp **/

	if ( N > VD ) context += VAL_CONTEXTS; 
	if ( W > VD ) context += VAL_CONTEXTS+VAL_CONTEXTS;

return context;
}

void coderBPBFZT_encodeBandZT(coder *me,int *band,int width,int height,int bits,int fullw,int **rows)
{
int x,y,bit,context;
int *dp;
arithInfo *ari = me->arith;
int *stats_p0,*stats_pt;
int *zeros_p0,*zeros_pt;
int bitmask;
bool bottom;
#ifdef ZT_STATS
int zt_kids=0,zt_root=0,zt_on=0,zt_isolated=0;
#endif

	stats_p0 = ((myInfo *)me->data)->stats_p0;
	stats_pt = ((myInfo *)me->data)->stats_pt;
	zeros_p0 = ((myInfo *)me->data)->zeros_p0;
	zeros_pt = ((myInfo *)me->data)->zeros_pt;

	if ( width == (fullw >>1) ) bottom = true;
	else bottom = false;

	bitmask = 1<<bits;
	for(x=bitmask,nextmask=0; x<(1<<CODE_MAX_BPN) ;x<<=1) nextmask += x;
	donemask = nextmask - bitmask;

	dp = band;
	for(y=0;y<height;y++) {	
		for(x=0;x<width;x++) {
			if ( dp[x] & FLAG_CHILD_ZERO ) {
				dp[x] -= FLAG_CHILD_ZERO;	// it's a zerotree child, don't code
#ifdef ZT_STATS
zt_kids ++;
#endif
				continue;
			} else {
				context = mcontext(dp+x,x,y,fullw);

				bit = ((dp[x])&bitmask)?1:0;
				bitEnc(bit,ari,stats_p0[context],stats_pt[context]);
				if ( ! bit  ) {
					if ( ! bottom ) { // at bottom theres no need for zt/isolated flags
						// send : zerotree root/isolate zero
						if ( dp[x] & FLAG_ISOLATED_ZERO ) {
							dp[x] -= FLAG_ISOLATED_ZERO;
							bitEnc(0,ari,zeros_p0[context],zeros_pt[context]);			
#ifdef ZT_STATS
zt_isolated ++;
#endif
						} else {
							bitEnc(1,ari,zeros_p0[context],zeros_pt[context]);	
#ifdef ZT_STATS
zt_root ++;
#endif
						}
					}
				} 
#ifdef ZT_STATS
else zt_on ++;
#endif
			}
		}
		dp += fullw;
	}

#ifdef ZT_STATS
		if ( ! bottom ) {
		int zt_tot;
		zt_tot = zt_kids+zt_root+zt_on+zt_isolated;
		if ( zt_tot != width*height ) { dbf(); errputs("error : didn't scan all pels!"); }
		printf("zt_kids=%2.1f,zt_root=%2.1f,zt_on=%2.1f,zt_isolated=%2.1f,coded=%2.1f\n",
				zt_kids*100.0/zt_tot,zt_root*100.0/zt_tot,zt_on*100.0/zt_tot,zt_isolated*100.0/zt_tot,(zt_tot - zt_kids)*100.0/zt_tot);
		} else {
		int zt_tot;
		zt_tot = zt_kids+zt_on;
		zt_isolated = width*height - zt_tot;
		printf("zt_kids=%2.1f,zt_root=%2.1f,zt_on=%2.1f,zt_isolated=%2.1f,coded=%2.1f\n",
				zt_kids*100.0/zt_tot,zt_root*100.0/zt_tot,zt_on*100.0/zt_tot,zt_isolated*100.0/zt_tot,(zt_tot - zt_kids)*100.0/zt_tot);
		}
#endif

}

void coderBPBFZT_decodeBandZT(coder *me,int *band,int width,int height,int bits,int fullw,int **rows)
{
int x,y,bit,context;
int *dp;
arithInfo *ari = me->arith;
int *stats_p0,*stats_pt;
int *zeros_p0,*zeros_pt;
int bitmask;
int offwidth,offheight;
bool bottom;

	stats_p0 = ((myInfo *)me->data)->stats_p0;
	stats_pt = ((myInfo *)me->data)->stats_pt;
	zeros_p0 = ((myInfo *)me->data)->zeros_p0;
	zeros_pt = ((myInfo *)me->data)->zeros_pt;

	if ( width == (fullw >>1) ) bottom = true;
	else bottom = false;

	offheight	= (band - rows[0])/fullw;
	offwidth	= (band - rows[0]) - fullw*offheight;

	bitmask = 1<<bits;
	for(x=bitmask,nextmask=0; x<(1<<CODE_MAX_BPN) ;x<<=1) nextmask += x;
	donemask = nextmask - bitmask;

	dp = band;
	for(y=0;y<height;y++) {
		for(x=0;x<width;x++) {
			if ( dp[x] & FLAG_ALREADY_DECODED ) {	
				dp[x] -= FLAG_ALREADY_DECODED;
				continue;
			} else {
				context = mcontext(dp+x,x,y,fullw);

				bitDec(bit,ari,stats_p0[context],stats_pt[context]);
				if ( bit ) dp[x] += bitmask;
				else if ( ! bottom ) {	// at bottom there's no need for zt/isolated flags
					bitDec(bit,ari,zeros_p0[context],zeros_pt[context]);
					if ( bit ) {
						int bx,by,tx,ty,n;
						bx = (offwidth + x)<<1;
						by = (offheight+ y)<<1;
						n = 2;

						// <> could unroll as a switch on levels

						while( bx < fullw && by < fullw ) {
							for(tx=bx;tx<(bx+n);tx+=2) {
								for(ty=by;ty<(by+n);ty+=2) {
									rows[ty  ][tx  ]	+= FLAG_ALREADY_DECODED;
									rows[ty  ][tx+1]	+= FLAG_ALREADY_DECODED;
									rows[ty+1][tx  ]	+= FLAG_ALREADY_DECODED;
									rows[ty+1][tx+1]	+= FLAG_ALREADY_DECODED;
								}
							}

							bx += bx; by += by; n += n;
						}
					}
				}
			}
		}
		dp += fullw;
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本sm残虐另类| 天堂av在线一区| 成人永久免费视频| 欧美极品少妇xxxxⅹ高跟鞋| 国产成人精品亚洲777人妖| 国产亚洲精品精华液| 丰满放荡岳乱妇91ww| 亚洲欧美怡红院| 欧美性欧美巨大黑白大战| 午夜视频在线观看一区| 欧美一区二区三区不卡| 韩国中文字幕2020精品| 中文字幕不卡在线播放| 色av成人天堂桃色av| 性做久久久久久免费观看欧美| 欧美一区二区三区在线观看| 精品无人码麻豆乱码1区2区 | 国产综合色产在线精品| 久久久久久久综合| 一本大道久久a久久综合婷婷| 亚洲高清久久久| 欧美xxxxxxxxx| 91小视频在线免费看| 天天影视网天天综合色在线播放 | 免费观看久久久4p| 国产精品国产三级国产aⅴ无密码| 欧美中文字幕一区二区三区亚洲| 蜜臀av亚洲一区中文字幕| 国产日韩在线不卡| 在线亚洲欧美专区二区| 国内久久精品视频| 一区二区三区小说| 久久综合给合久久狠狠狠97色69| 91看片淫黄大片一级| 国精产品一区一区三区mba视频 | 欧美日韩精品免费观看视频| 国产综合色精品一区二区三区| 亚洲精品免费在线| 欧美精品一区二区三区蜜臀| 欧美视频在线观看一区二区| 国产精品一区久久久久| 天天av天天翘天天综合网色鬼国产| 久久久美女毛片| 91精品国产综合久久福利| 9色porny自拍视频一区二区| 久久精品久久精品| 亚洲成人黄色影院| 国产精品国模大尺度视频| 日韩精品一区二区三区蜜臀| 欧美怡红院视频| a美女胸又www黄视频久久| 国内精品伊人久久久久av影院| 亚洲福利视频三区| 中文字幕在线不卡一区二区三区| 欧美不卡在线视频| 欧美裸体bbwbbwbbw| 色综合久久久久久久久| 国产成人免费视频精品含羞草妖精 | 国产一区二区影院| 日本aⅴ精品一区二区三区| 一区二区三区视频在线看| 中文欧美字幕免费| 精品国产乱码久久久久久图片| 欧美日本一道本| 精品1区2区3区| 色噜噜狠狠色综合中国| 成人美女视频在线观看| 国产成人精品影院| 国产剧情在线观看一区二区| 精品综合免费视频观看| 老司机精品视频线观看86| 日韩av电影免费观看高清完整版 | 亚洲成人午夜电影| 一级做a爱片久久| 亚洲精品成人少妇| 亚洲免费av高清| 一区二区三区四区激情| 亚洲免费观看视频| 一区二区三区精品| 亚洲一区欧美一区| 亚洲五码中文字幕| 天天色综合天天| 乱中年女人伦av一区二区| 久久99最新地址| 国产精品一二三区| 国产91在线看| 91丨porny丨首页| 91福利区一区二区三区| 91国内精品野花午夜精品| 欧美中文字幕亚洲一区二区va在线| 色偷偷成人一区二区三区91| 欧美午夜精品电影| 日韩西西人体444www| 日韩女优制服丝袜电影| 久久久久久久久久久久久久久99 | 中文字幕第一区二区| 亚洲女爱视频在线| 亚洲网友自拍偷拍| 久久精品国产一区二区| 国产东北露脸精品视频| www.日本不卡| 欧美丝袜丝交足nylons| 日韩欧美一区在线| 国产精品日韩精品欧美在线| 一区二区三区91| 美女视频黄频大全不卡视频在线播放 | 粉嫩高潮美女一区二区三区 | 欧美图区在线视频| 精品国产三级a在线观看| 国产精品视频线看| 亚洲成人av资源| 国产一区二区导航在线播放| 色网综合在线观看| 精品日韩99亚洲| 亚洲色图欧美在线| 理论片日本一区| 91亚洲精品乱码久久久久久蜜桃| 欧美精品第1页| 国产精品伦理在线| 日本视频中文字幕一区二区三区| 国产一区二区视频在线| 色88888久久久久久影院按摩| 欧美一级高清片在线观看| 中文字幕中文字幕一区二区| 日本欧美在线看| 91视视频在线观看入口直接观看www | 国产欧美日韩三区| 午夜精品在线看| eeuss鲁一区二区三区| 欧美一区在线视频| 亚洲区小说区图片区qvod| 激情丁香综合五月| 欧美日韩国产片| 国产精品初高中害羞小美女文| 秋霞成人午夜伦在线观看| 91亚洲精品久久久蜜桃| 久久综合五月天婷婷伊人| 亚洲自拍另类综合| 不卡的电视剧免费网站有什么| 日韩免费观看高清完整版| 亚洲在线一区二区三区| eeuss国产一区二区三区| 久久先锋影音av鲁色资源网| 青青青爽久久午夜综合久久午夜 | 亚洲va欧美va人人爽| 成人免费电影视频| 久久久久久黄色| 免费久久精品视频| 欧美精品自拍偷拍动漫精品| 亚洲黄色性网站| 99re热这里只有精品免费视频| 久久久久国产成人精品亚洲午夜| 青草av.久久免费一区| 欧美日韩国产综合一区二区 | 91高清视频免费看| 亚洲欧美一区二区在线观看| 不卡一卡二卡三乱码免费网站| 久久精品欧美一区二区三区麻豆| 美日韩黄色大片| 91精品国产91综合久久蜜臀| 亚洲成av人片在www色猫咪| 日本精品一区二区三区高清 | 亚洲国产综合色| 欧美在线观看视频一区二区 | 5566中文字幕一区二区电影| 亚洲狠狠丁香婷婷综合久久久| 99天天综合性| 中文字幕亚洲欧美在线不卡| 不卡电影一区二区三区| 国产精品国产自产拍高清av王其| 成人久久18免费网站麻豆 | 亚洲视频你懂的| 91在线免费看| 亚洲永久免费av| 欧美日韩国产免费一区二区| 天天操天天干天天综合网| 91精品国产综合久久福利| 青青草97国产精品免费观看无弹窗版| 欧美一区二区三区免费观看视频 | 国产露脸91国语对白| 国产调教视频一区| 成人一级黄色片| 一区二区高清在线| 欧美精品一二三| 久久精品国产一区二区三| ww亚洲ww在线观看国产| 成人国产电影网| 亚洲一区二区高清| 欧美一区二区精品久久911| 激情文学综合网| 中文字幕一区三区| 在线观看av不卡| 久久国产尿小便嘘嘘| 国产三级欧美三级日产三级99| 99久久久无码国产精品| 午夜不卡av在线| 久久久久久久精| 在线观看av不卡| 国内精品伊人久久久久av影院| 欧美高清一级片在线观看|