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

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

?? coder_sh_o1.c

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

//#define PACK_SIGNS	//helps about 0.007
//#define LOG
//#define DEBUG

/*********

SH_O1 : Static-Huff Order1	(not sigbit)

	(similar to _o1_sb_ the older arithcoder version)

compression is surprisingly competitive (off 0.1 bpp from bitplane) on
	hi-fi files (quantizer < 4) (at large quant, the probability of zero
	becomes too large for us).

at large quantizer (eg. 20) the histogram looks like :
	P(0) = 99.98 %
	P(1) = 00.02 %
	P(>1) = zero
Huffman does not handle this well.  We could compensate by run-lengthing
the zeros.

speed is much worse than anticipated (only slightly better than BP).

all arrays need to be self-extending !!! (copy order1-huff)

**********/

#include <stdio.h>
#include <stdlib.h>
#include <crblib/inc.h>
#include <crblib/bbitio.h>
#include <crblib/lbitio.h>
#include <crblib/codeutil.h>
#include <crblib/crc32.h>
#include <crblib/runtrans.h>
#include <crblib/huffa.h>
#include <crblib/intmath.h>

#include "coder.h"

extern int tune_param;

#define SH_FLUSH_QUANTUM 	(1<<17)	/** <> decreasing this hurts a lot, unfortunately! **/
#define MERGE_LEN			(1<<11)

#define ORDER1_RAWS			2
#define ORDER1_ALPHABET		(16 + ORDER1_RAWS)	/** # of bits **/

#define CN_MAX_PREV			2
#define CN_MAX_PARENT		4
#define CODE_CONTEXTS 		(1 + CN_MAX_PREV + (CN_MAX_PREV+1)*CN_MAX_PARENT)

/*** the protos and structs ******/

void coderSH_O1_init(coder *c);
void coderSH_O1_free(coder *c);
void coderSH_O1_flush(coder *c);
void coderSH_O1_encodeBand(coder *me,int *band,int w,int h,int fullw,int *parent);
void coderSH_O1_decodeBand(coder *me,int *band,int w,int h,int fullw,int *parent);

coder coderSH_O1 = {
		"StatHuff O1",
		coderSH_O1_init,
		coderSH_O1_free,
		coderSH_O1_encodeBand,
		coderSH_O1_decodeBand,
		NULL,NULL,NULL,NULL,NULL,NULL,
		coderSH_O1_flush
	};

typedef struct {
	coder *coder;
	int coded_pels;
	ubyte * comp_ptr;
	bitInfo * signs_bi;
		ubyte * signs_array;
	ubyte ** sigbits_array;
	ubyte ** sigbits;
	ubyte * merge_array;
} myInfo;

static void coderSH_O1_getHunk(myInfo *mi);
static void coderSH_O1_putHunk(myInfo *mi);

static void encode_val(myInfo *mi,int sym,int context);
static int decode_val(myInfo *mi,int context);

static int mcontext(int *cur_ptr,int parent,int x,int y,int width,int height,int fullw);

/********* the functions *********/

void coderSH_O1_init(coder *c)
{
myInfo *d;
int i,alloc_len;

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

	d->coder = c;
	c->data = d;

	d->coded_pels = 0;
	d->comp_ptr = c->w->comp;

	alloc_len = c->w->width * c->w->height * c->w->planes;

	if ( (d->signs_array = newarray(ubyte,alloc_len)) == NULL )
		errexit("malloc failed");
	if ( (d->merge_array = newarray(ubyte,alloc_len)) == NULL )
		errexit("malloc failed");

	if ( (d->sigbits_array = newarray(ubyte *,CODE_CONTEXTS)) == NULL )
		errexit("malloc failed");
	if ( (d->sigbits = newarray(ubyte *,CODE_CONTEXTS)) == NULL )
		errexit("malloc failed");

	for(i=0;i<CODE_CONTEXTS;i++) {
		if ( (d->sigbits_array[i] = newarray(ubyte,alloc_len)) == NULL )
			errexit("malloc failed");
		d->sigbits[i] = d->sigbits_array[i];
	}

	if ( (d->signs_bi = BitIO_Init(d->signs_array)) == NULL )
		errexit("bitio init failed");

return;
}

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

		if ( d->coded_pels > 0 )
			coderSH_O1_putHunk(d);
	}
}

void coderSH_O1_free(coder *c)
{
	if ( c->data ) {
		myInfo *d;
		int i;

		d = c->data;

		if ( d->signs_bi ) BitIO_CleanUp(d->signs_bi);

		smartfree(d->signs_array);
		smartfree(d->merge_array);
		smartfree(d->sigbits);
		if( d->sigbits_array ) {
			for(i=0;i<CODE_CONTEXTS;i++) smartfree(d->sigbits_array[i]);
			free(d->sigbits_array);
		}

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

void coderSH_O1_encodeBand(coder *me,int *band,int width,int height,int fullw,int *parent)
{
int x,y;
int *dp,*pp,*dpp,*ppp;
myInfo *mi = ((myInfo *)me->data);

	dp = band;
	pp = parent;
	for(y=0;y<height;y++) {
		dpp = dp; ppp = pp;
		if ( coder_timetostop(me) ) { coder_didstop(me,y); return; }
		for(x=0;x<width;x++) {
			encode_val(mi,*dpp++, mcontext(dpp,*ppp,x,y,width,height,fullw) );

			if ( x&1 ) ppp++;
		}
		if ( y & 1 ) pp += fullw;
		dp += fullw;
	}

	mi->coded_pels += width*height;
	if ( mi->coded_pels >= SH_FLUSH_QUANTUM ) 
		coderSH_O1_putHunk(mi);
}

void coderSH_O1_decodeBand(coder *me,int *band,int width,int height,int fullw,int *parent)
{
int x,y;
int *dp,*pp,*dpp,*ppp;
myInfo *mi = ((myInfo *)me->data);

	if ( mi->coded_pels == 0 )
		coderSH_O1_getHunk(mi);

	dp = band;
	pp = parent;
	for(y=0;y<height;y++) {
		dpp = dp; ppp = pp;
		if ( coder_timetostopd(me,y) ) return;
		for(x=0;x<width;x++) {
			*dpp++ = decode_val(mi, mcontext(dpp,*ppp,x,y,width,height,fullw) );

			if ( x&1 ) ppp++;
		}
		if ( y & 1 ) pp += fullw;
		dp += fullw;
	}

	mi->coded_pels -= width*height;
}

static void coderSH_O1_putHunk(myInfo *mi)
{
int i,len,merged;
int n_signs;
struct LBitIOInfo * BII;
ubyte *merge_ptr;

/** flush out work bitios **/

	n_signs = BitIO_FlushWrite(mi->signs_bi);

/** write mi->coded_pels, other lengths **/

	if ( (BII = LBitIO_Init(mi->comp_ptr)) == NULL  )
		errexit("lbitio init failed!");

	cu_putExpanding_bii(mi->coded_pels,BII,15,4);
	cu_putExpanding_bii(n_signs,BII,12,4);

// huff mi->signs_array into mi->code_bi

#ifdef PACK_SIGNS
	O0HuffArrayBII(mi->signs_array,n_signs,BII,true);
#endif

// huff all the sigbits

	merge_ptr = mi->merge_array;
	merged = 0;

	for(i=0;i<CODE_CONTEXTS;i++) {
		len = mi->sigbits[i] - mi->sigbits_array[i];
		cu_putExpanding_bii(len,BII,12,4);
		if ( len <= MERGE_LEN ) {
			memcpy(merge_ptr,mi->sigbits_array[i],len);
			merge_ptr += len; merged += len;
		}
	}

	O0HuffArrayBII_RT(mi->merge_array,merged,BII,true);	

	for(i=0;i<CODE_CONTEXTS;i++) {
		len = mi->sigbits[i] - mi->sigbits_array[i];
		if ( len > MERGE_LEN ) {
			O0HuffArrayBII_RT(mi->sigbits_array[i],len,BII,true);	
		}
	}

	len = LBitIO_FlushWrite(BII);
	mi->comp_ptr += len;

#ifndef PACK_SIGNS
	memcpy(mi->comp_ptr,mi->signs_array,n_signs); 
	mi->comp_ptr += n_signs;
#endif

#ifdef DEBUG
	*((ulong *)mi->comp_ptr) = crc32(mi->merge_array,merged);
	mi->comp_ptr += 4;
#endif

#ifdef LOG
	printf("putHunk : %d -> %d\n",mi->coded_pels,len);
#endif

/** now reset for another pass **/

	BitIO_ResetArray(mi->signs_bi,mi->signs_array);

	for(i=0;i<CODE_CONTEXTS;i++) mi->sigbits[i] = mi->sigbits_array[i];

	mi->coded_pels = 0;

	/** fix up the main coding structures in case this is the last
	*	Hunk we're decoding
	***/

	arithEncodeReInit(mi->coder->arith,mi->comp_ptr);
}

static void coderSH_O1_getHunk(myInfo *mi)
{
int i,len,merged;
int n_signs;
struct LBitIOInfo * BII;
ubyte *merge_ptr;

/** read mi->coded_pels, other lengths **/

	if ( (BII = LBitIO_Init(mi->comp_ptr)) == NULL  )
		errexit("lbitio init failed!");

	LBitIO_InitRead(BII);

	mi->coded_pels = cu_getExpanding_bii(BII,15,4);
	n_signs = cu_getExpanding_bii(BII,12,4);

// dehuff mi->signs_array 

#ifdef PACK_SIGNS
	O0HuffArrayBII(mi->signs_array,n_signs,BII,false);
#endif

// huff all the sigbits

	merged = 0;

	for(i=0;i<CODE_CONTEXTS;i++) {
		mi->sigbits[i] = mi->sigbits_array[i] + cu_getExpanding_bii(BII,12,4);
		len = mi->sigbits[i] - mi->sigbits_array[i];
		if ( len <= MERGE_LEN ) merged += len;
	}

	O0HuffArrayBII_RT(mi->merge_array,merged,BII,false);
	merge_ptr = mi->merge_array;

	for(i=0;i<CODE_CONTEXTS;i++) {
		len = mi->sigbits[i] - mi->sigbits_array[i];
		if ( len <= MERGE_LEN ) {
			memcpy(mi->sigbits_array[i],merge_ptr,len);
			merge_ptr += len;
		} else {
			O0HuffArrayBII_RT(mi->sigbits_array[i],len,BII,false);	
		}
	}

// done

	len = LBitIO_GetPos(BII) - 4;	/* <> same as flushWrites' return? */
	mi->comp_ptr += len;

#ifndef PACK_SIGNS
	memcpy(mi->signs_array,mi->comp_ptr,n_signs); 
	mi->comp_ptr += n_signs;
#endif

#ifdef DEBUG
	/**/ {
	ulong crc;
	crc = *((ulong *)mi->comp_ptr); 
	mi->comp_ptr += 4;
	if ( crc == crc32(mi->merge_array,merged) ) {
		errputs("crc checked OK");
	} else {
		errputs("crc failed on signs Uh-Oh");
		dbf();
	}
	/**/ }
#endif

#ifdef LOG
	printf("getHunk : %d -> %d\n",len,mi->coded_pels);
#endif

/** get ready to read from this unpacked hunk **/

	for(i=0;i<CODE_CONTEXTS;i++) mi->sigbits[i] = mi->sigbits_array[i];

	BitIO_ResetArray(mi->signs_bi,mi->signs_array);
	BitIO_InitRead(mi->signs_bi);

	/** fix up the main coding structures in case this is the last
	*	Hunk we're decoding
	***/

	arithDecodeReInit(mi->coder->arith,mi->comp_ptr);
}

static void encode_val(myInfo *mi,int sym,int context)
{
	if ( sym == 0 ) { 	
		*(mi->sigbits[context])++ = 0;
		return;
	} else {
		int sign;

		if ( isneg(sym) ) { sign = 1; sym = -sym; }
		else sign = 0;

		while ( sym >= 0xFF ) {
			*(mi->sigbits[context])++ = 0xFF;
			sym -= 0xFF;
		}
		*(mi->sigbits[context])++ = sym;

		BitIO_WriteBit(mi->signs_bi,sign);
	}

}

static int decode_val(myInfo *mi,int context)
{
	if ( *(mi->sigbits[context]) == 0 ) {
		mi->sigbits[context]++;
		return 0;
	} else {
		int sign,sym,t;

		sym  = 0;
		do {
			t = *(mi->sigbits[context])++;
			sym += t;
		} while( t == 0xFF );

		BitIO_ReadBit(mi->signs_bi,sign);
		if ( sign ) sym = -sym;

		return sym;
	}
}

static int mcontext(int *cur_ptr,int parent,int x,int y,int width,int height,int fullw)
{
int neighbors;

	/** cur_ptr[0] is about to be coded **/

	if ( x==0 ) {
		if ( y == 0 ) {
			neighbors = 0;
		} else {
			neighbors = (cur_ptr[-fullw] + cur_ptr[-fullw+1]) >> 1;
		}
	} else if ( y == 0 ) {
		neighbors = cur_ptr[-1];
	} else if ( x == (width-1) ) {
		neighbors = (cur_ptr[-1] + cur_ptr[-fullw] + cur_ptr[-fullw] + cur_ptr[-fullw-1]) >> 2;
	} else {
		neighbors = (cur_ptr[-1] + cur_ptr[-fullw] + cur_ptr[-fullw+1] + cur_ptr[-fullw-1]) >> 2;
	}

parent = abs(parent);
neighbors = abs(neighbors);
parent = intlog2(parent+1);
neighbors = intlog2(neighbors);

return min(CN_MAX_PREV,neighbors) + (CN_MAX_PREV+1)*(min(CN_MAX_PARENT,parent));
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级二级三级蜜桃| 欧美中文字幕一区二区三区| 亚洲h在线观看| 亚洲欧洲另类国产综合| 国产肉丝袜一区二区| 亚洲精品一区二区三区99| 欧美一区二区网站| 欧美一区二区三区在线看| 欧美久久久久免费| 日韩午夜在线播放| 精品国产乱码久久久久久影片| 日韩三区在线观看| 欧美电视剧免费全集观看| 日韩欧美中文一区二区| 久久婷婷国产综合精品青草| 久久久久久9999| 亚洲人亚洲人成电影网站色| 亚洲最新在线观看| 视频一区二区三区在线| 久久福利资源站| 风间由美中文字幕在线看视频国产欧美| 国产精品123区| 91亚洲男人天堂| 欧美精品在欧美一区二区少妇| 欧美日韩国产片| 久久亚洲免费视频| 亚洲免费观看在线视频| 天天操天天综合网| 国产一区二区h| 91视视频在线观看入口直接观看www | 99在线精品免费| 91香蕉视频mp4| 在线播放日韩导航| 国产三级精品三级| 亚洲一区二区三区四区在线免费观看| 免费高清视频精品| 成人爱爱电影网址| 在线不卡欧美精品一区二区三区| 26uuuu精品一区二区| 国产精品全国免费观看高清| 亚洲大片一区二区三区| 国产成人综合网站| 欧美裸体bbwbbwbbw| 亚洲国产精品99久久久久久久久| 一区二区三区在线视频观看 | 国产成人免费视频精品含羞草妖精| 一本大道综合伊人精品热热| 91网站在线播放| 欧美一区二区成人6969| 中文字幕一区免费在线观看| 视频一区国产视频| 成人18视频在线播放| 欧美一卡二卡在线观看| 亚洲婷婷在线视频| 久久国产婷婷国产香蕉| 欧美在线一二三四区| 中文字幕乱码久久午夜不卡| 天堂在线一区二区| 99久久精品国产一区| 精品久久久久久综合日本欧美| 一区二区三区四区蜜桃| 福利电影一区二区| 日韩女优av电影| 亚洲国产精品嫩草影院| 91在线观看视频| 国产精品二区一区二区aⅴ污介绍| 强制捆绑调教一区二区| 欧美午夜精品久久久久久孕妇| 久久久高清一区二区三区| 奇米四色…亚洲| 欧美在线看片a免费观看| 1000精品久久久久久久久| 国产福利一区二区三区在线视频| 51午夜精品国产| 亚洲电影视频在线| 欧美在线看片a免费观看| 亚洲欧洲成人精品av97| 国产iv一区二区三区| 精品国产一区二区三区av性色| 日产国产高清一区二区三区| 欧美乱妇15p| 亚洲不卡在线观看| 欧美网站一区二区| 亚洲成人免费影院| 欧美三级韩国三级日本一级| 亚洲永久精品大片| 欧美性猛片aaaaaaa做受| 亚洲国产日日夜夜| 欧美性色黄大片| 亚洲一二三专区| 欧美高清www午色夜在线视频| 一区二区三区资源| 色哟哟一区二区在线观看| 中文字幕亚洲区| 色综合天天综合在线视频| 亚洲欧美激情一区二区| 国产成人av电影在线播放| 国产亚洲欧美激情| 国产99精品国产| 国产精品91一区二区| 1区2区3区国产精品| 国产不卡在线视频| 久久亚洲二区三区| 国产99久久久精品| 亚洲欧美自拍偷拍| 色成年激情久久综合| 亚洲精品免费在线观看| 欧美视频一区二区三区在线观看| 亚洲一区av在线| 91精品国产手机| 国产真实乱偷精品视频免| 亚洲国产精品二十页| 91在线播放网址| 天天影视网天天综合色在线播放| 欧美一区二区视频在线观看2022| 精品一二三四在线| 国产精品久久久久久久岛一牛影视 | 国产精品日韩精品欧美在线| 91天堂素人约啪| 日本系列欧美系列| 国产亲近乱来精品视频| 色综合久久综合中文综合网| av电影在线观看不卡| 午夜精品久久久久久久99樱桃| 精品国产精品网麻豆系列| 欧美视频一区二区三区四区| 成人美女视频在线观看| 精品无人码麻豆乱码1区2区| 男男成人高潮片免费网站| 午夜精品免费在线观看| 一区二区三区在线高清| 中文字幕日韩一区| 国产精品初高中害羞小美女文| 欧美激情在线免费观看| 久久久无码精品亚洲日韩按摩| 精品裸体舞一区二区三区| 日韩女优av电影在线观看| 日韩精品一区在线| 91精品国产综合久久福利软件| 欧美精品一卡二卡| 91精品啪在线观看国产60岁| 制服丝袜成人动漫| 日韩欧美一二三| 26uuu久久天堂性欧美| 国产视频一区二区在线| 国产女同性恋一区二区| 国产精品久久久久影院色老大| 国产精品麻豆一区二区| 日韩三级免费观看| 欧美精品一卡两卡| 欧美一级在线观看| 久久在线免费观看| 国产精品卡一卡二卡三| 亚洲午夜免费视频| 日韩高清在线不卡| 久久国产三级精品| 国产不卡高清在线观看视频| 成人免费观看视频| 欧美中文字幕亚洲一区二区va在线| 欧美日韩国产一区| 日韩精品自拍偷拍| 欧美极品aⅴ影院| 一区二区三区成人| 奇米一区二区三区av| 国产麻豆午夜三级精品| 91色视频在线| 666欧美在线视频| 久久久精品免费网站| 亚洲婷婷国产精品电影人久久| 亚洲国产精品久久久久婷婷884 | 国产精品网站在线观看| 一区二区高清视频在线观看| 青青草视频一区| av电影在线观看一区| 91麻豆精品国产自产在线| 国产精品你懂的在线欣赏| 婷婷开心激情综合| 丁香天五香天堂综合| 欧美日韩高清一区二区三区| 久久婷婷久久一区二区三区| 亚洲制服丝袜在线| 粉嫩av一区二区三区在线播放| 在线免费观看不卡av| 久久久久久久综合色一本| 亚洲一区精品在线| 成人午夜在线播放| 欧美一区二区啪啪| 亚洲视频 欧洲视频| 黄一区二区三区| 在线观看91视频| 国产日产欧美一区二区三区| 日韩精品一二三| 91伊人久久大香线蕉| 久久久精品tv| 日本强好片久久久久久aaa| 91丝袜高跟美女视频| 久久欧美一区二区| 人人爽香蕉精品| 欧美在线观看视频一区二区三区| 国产欧美日韩一区二区三区在线观看 |