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

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

?? codeimage.c

?? 好東西呢
?? C
字號:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <crblib/inc.h>
#include <crblib/codeutil.h>

#include "image.h"
#include "coder.h"
#include "codezt.h"
#include "codeimage.h"
#include "quantim.h"

/******

coder.c has no idea what an "image" is.
image.c has no idea what a "coder is.

only this module (and main.c) know about both.

********/

int packed_H_Size(image *im,const coder *coder_template,int levels);
int packed_L_Size(image *im,int levels);
int packedImageSize(image *im,const coder *coder_template,int levels);
int packedImageStopErr(image *im,const coder *coder_template,int levels,int stopSize);
void encodeDeltaIm(coder * encoder,image *im,image *wavelet);
void encodeImage(coder * encoder,image *im,int levels);
void decodeImage(coder * decoder,image *im,int levels);
void encodeLL(coder * encoder,image *im);
void decodeLL(coder * decoder,image *im);


void encodeLL(coder * encoder,image *im)
{
int p;
	for(p=0;p<(im->planes);p++)
		coder_encodeDPCM(encoder,im->data[p][0],im->width,im->height,0);
}
void decodeLL(coder * decoder,image *im)
{
int p;
	for(p=0;p<(im->planes);p++)
		coder_decodeDPCM(decoder,im->data[p][0],im->width,im->height,0);
}

void encodeImage(coder * encoder,image *im,int levels)
{
int p,l,sizeX,sizeY;
int **rows;

	if ( encoder->encodeSubbandBP )
		errexit("error : this coder is for wavelet packets only");

	if ( encoder->encodeBandZT ) {
		encodeImageZT(encoder,im,levels);
		return;
	}

	encoder->w->stopline = - 1;

	/** the LL band is already sent **/

	if ( encoder->encodeBandBP ) {
		int val,top_val,top_bitpn,bitmask;
		int *dp,x,y;

		/** <> ; different top_val per plane? **/

		top_val = 0;

		for(p=0;p<(im->planes);p++) {
			rows = im->data[p];

			sizeX = (im->width) >> levels;
			sizeY = (im->height) >> levels;
			for(y=0;y<sizeY;y++) {
				dp = rows[y] + sizeX;
				for(x=sizeX;x<im->width;x++) {
					val = *dp++; if ( val < 0 ) val = -val;
					if ( val > top_val ) 
						top_val = val;
				}
			}
			dp = rows[y];
			for(x=(im->height-sizeY)*(im->width);x--;) {
				val = *dp++; if ( val < 0 ) val = -val;
				if ( val > top_val ) 
					top_val = val;
			}
		}

		for(top_bitpn=0;(1<<(top_bitpn+1))<=top_val;top_bitpn++) ;

		cu_putExpanding_ari(top_bitpn,encoder->arith,16,8);
		top_val = 1<<top_bitpn;

		for(bitmask = top_val;bitmask>=1;bitmask>>=1) {
			for (l = levels; l > 0; l--) {
				sizeX = (im->width) >> l;
				sizeY = (im->height) >> l;

				for(p=0;p<(im->planes);p++) {
					rows = im->data[p];

					if ( ! coder_timetostop(encoder) )
						encoder->encodeBandBP(encoder,rows[0] + sizeX,	sizeX, sizeY, im->width,
							rows[0] + (sizeX>>1),bitmask); 
					if ( ! coder_timetostop(encoder) )
						encoder->encodeBandBP(encoder,rows[sizeY],		sizeX, sizeY, im->width,
							rows[(sizeY>>1)],bitmask);
					if ( ! coder_timetostop(encoder) )
						encoder->encodeBandBP(encoder,rows[sizeY]+sizeX,	sizeX, sizeY, im->width,
							rows[(sizeY>>1)]+ (sizeX>>1),bitmask);
				}
			}
		}
	} else {
		for (l = levels; l > 0; l--) {
			sizeX = (im->width) >> l;
			sizeY = (im->height) >> l;

			for(p=0;p<(im->planes);p++) {
				rows = im->data[p];

				if ( ! coder_timetostop(encoder) )
					encoder->encodeBand(encoder,rows[0] + sizeX,	sizeX, sizeY, im->width,
						rows[0] + (sizeX>>1)); 
				if ( ! coder_timetostop(encoder) )
					encoder->encodeBand(encoder,rows[sizeY],		sizeX, sizeY, im->width,
						rows[(sizeY>>1)]);
				if ( ! coder_timetostop(encoder) )
					encoder->encodeBand(encoder,rows[sizeY]+sizeX,	sizeX, sizeY, im->width,
						rows[(sizeY>>1)]+ (sizeX>>1)); 
			}
		}
	}

	if ( encoder->w->stopline < 0 ) encoder->w->stopline = im->height + 1;
}

void decodeImage(coder * decoder,image *im,int levels)
{
int p,l,sizeX,sizeY;
int **rows;

	if ( decoder->decodeBandZT ) {
		decodeImageZT(decoder,im,levels);
		return;
	}

	if ( decoder->decodeBandBP ) {
		int top_val,top_bitpn,bitmask;

		top_bitpn = cu_getExpanding_ari(decoder->arith,16,8);
		top_val = 1<<top_bitpn;

		for(bitmask = top_val;bitmask>=1;bitmask>>=1) {
			for (l = levels; l > 0; l--) {
				sizeX = (im->width) >> l;
				sizeY = (im->height) >> l;

				for(p=0;p<(im->planes);p++) {
					rows = im->data[p];

					if ( ! coder_timetostopd(decoder,0) )
						decoder->decodeBandBP(decoder,rows[0] + sizeX,	sizeX, sizeY, im->width,
							rows[0] + (sizeX>>1),bitmask); 
					if ( ! coder_timetostopd(decoder,0) )
						decoder->decodeBandBP(decoder,rows[sizeY],		sizeX, sizeY, im->width,
							rows[(sizeY>>1)],bitmask);
					if ( ! coder_timetostopd(decoder,0) )
						decoder->decodeBandBP(decoder,rows[sizeY]+sizeX,	sizeX, sizeY, im->width,
							rows[(sizeY>>1)]+ (sizeX>>1),bitmask); 
				}
			}
		}
	} else {

		for (l = levels; l > 0; l--) {
			sizeX = (im->width) >> l;
			sizeY = (im->height) >> l;

			for(p=0;p<(im->planes);p++) {
				rows = im->data[p];

				if ( ! coder_timetostopd(decoder,0) )
					decoder->decodeBand(decoder,rows[0] + sizeX,	sizeX, sizeY, im->width,
						rows[0] + (sizeX>>1)); 
				if ( ! coder_timetostopd(decoder,0) )
					decoder->decodeBand(decoder,rows[sizeY],		sizeX, sizeY, im->width,
						rows[(sizeY>>1)]);
				if ( ! coder_timetostopd(decoder,0) )
					decoder->decodeBand(decoder,rows[sizeY]+sizeX,	sizeX, sizeY, im->width,
						rows[(sizeY>>1)]+ (sizeX>>1)); 
			}
		}
	}
}




void encodeDeltaIm(coder * encoder,image *im,image *wavelet)
{
int p,sizeX,sizeY,x,y; //,r
int *context,*aptr,*bptr;

	if ( ! encoder->encodeBand ) {
		errputs("error : no encoder->encodeBand ");
		return;
	}

	for(p=0;p<(im->planes);p++) {
		sizeX = im->width>>1;	sizeY = im->height>>1;

		context  = wavelet->data[p][sizeY] + sizeX;

		aptr = context; bptr =wavelet->data[p][0] + sizeX;
		for(y=0;y<sizeY;y++) {
			for(x=sizeX;x--;) *aptr++ += *bptr++;
			aptr += im->width - sizeX; bptr += im->width - sizeX;
		}
		aptr = context; bptr =wavelet->data[p][sizeY];
		for(y=0;y<sizeY;y++) {
			for(x=sizeX;x--;) *aptr++ += *bptr++;
			aptr += im->width - sizeX; bptr += im->width - sizeX;
		}
		encoder->encodeBand(encoder,im->data[p][0],im->width,im->height,im->width,context);

		/** average the three big bands in wavelet **/
	}
}

int mseBand(int * plane,int sizeX,int sizeY,int fullW)
{
int x,y;
int *dp;
int mse;

	mse = 0;

	dp = plane;
	for(y=0;y<sizeY;y++) {
		for(x=0;x<sizeX;x++) {
			mse += (*dp) * (*dp);	dp++;
		}
		dp += fullW - sizeX;
	}

return mse;
}

void waveletImage(image *im,wavelet *wave,int transform,
		int qtype,int qflags,double quantizer,
		const coder *coder_template,int stoplen)
{
	wave->transform = transform;
	smartfree(wave->qi);

	wave->qi = doTransQuantIm(im,wave->levels,wave->transform,
		qtype,qflags,quantizer,
		stoplen,coder_template);
	encodeWavelet(im,wave,coder_template,stoplen);
}

void imageWavelet(image *im,wavelet *wave)
{
	decodeWavelet(im,wave);
	deTransQuantIm(im,wave->levels,wave->transform,wave->qi);
}

image * makeImageWavelet(wavelet *wave)
{
image *im;
	if ( (im = newImage(wave->width,wave->height,wave->planes)) == NULL) return NULL;
	imageWavelet(im,wave);
return im;
}

wavelet * makeWavelet(image *im,const coder *coder_template,int levels,int stoplen)
{
wavelet *wavelet;

	if ( (wavelet = newWavelet(im,levels)) == NULL ) return NULL;
	encodeWavelet(im,wavelet,coder_template,stoplen);

return wavelet;
}

void encodeWaveletLL(image *im,wavelet *wavelet)
{
coder *encoder;
	encoder = coder_create_write(NULL,wavelet,LONG_MAX);
	encodeLL(encoder,im);
	coder_flush_write(encoder);
	coder_destroy(encoder); 
}


void decodeWaveletLL(wavelet *wavelet,image *im)
{
coder *decoderLL;
	if ( (decoderLL = coder_create_read(wavelet)) == NULL )
		errexit("decoder_create LL failed!");

	decodeLL(decoderLL,im);

	coder_flush_read(decoderLL);
	coder_destroy(decoderLL);
}

void encodeWavelet(image *im,wavelet *wavelet,const coder *coder_template,int stoplen)
{
coder *encoder;
	if ( (encoder = coder_create_write(coder_template,wavelet,stoplen)) == NULL )
		errexit("coder_create_write failed!");

	encoder->init(encoder);
	encodeImage(encoder,im,wavelet->levels);
	coder_flush_write(encoder);
	encoder->free(encoder);
	coder_destroy(encoder);
}

void decodeWavelet(image *im,wavelet *wavelet)
{
coder *decoder;
	if ( (decoder = coder_create_read(wavelet)) == NULL )
		errexit("decoder_create main failed!");

	decoder->init(decoder);

	decodeImage(decoder,im,wavelet->levels);

	decoder->free(decoder);
	coder_flush_read(decoder);
	coder_destroy(decoder);
}

void encodeWaveletAndLL(image *im,wavelet *wavelet,const coder *coder_template,int stoplen)
{
coder *encoder;
int p;

	if ( (encoder = coder_create_write(coder_template,wavelet,stoplen)) == NULL )
		errexit("coder_create_write failed!");

	encoder->init(encoder);

	for(p=0;p<(im->planes);p++)
		coder_encodeDPCM(encoder,im->data[p][0],
			(im->width)>>(wavelet->levels),(im->height)>>(wavelet->levels),
			im->width - ((im->width)>>(wavelet->levels)));

	encodeImage(encoder,im,wavelet->levels);
	coder_flush_write(encoder);
	encoder->free(encoder);
	coder_destroy(encoder);
}

void decodeWaveletAndLL(image *im,wavelet *wavelet)
{
coder *decoder;
int p;

	if ( (decoder = coder_create_read(wavelet)) == NULL )
		errexit("decoder_create main failed!");

	decoder->init(decoder);

	for(p=0;p<(im->planes);p++)
		coder_decodeDPCM(decoder,im->data[p][0],
			(im->width)>>(wavelet->levels),(im->height)>>(wavelet->levels),
			im->width - ((im->width)>>(wavelet->levels)));

	decodeImage(decoder,im,wavelet->levels);

	decoder->free(decoder);
	coder_flush_read(decoder);
	coder_destroy(decoder);
}


int packedImageStopErr(image *im,const coder *coder_template,int levels,int stopSize)
{
int p,l,sizeX,sizeY,err;
int **rows;
coder *encoder;
wavelet *wavelet;

/** son of a bitch this is a pain in the ass **/

	stopSize -= packed_L_Size(im,levels);

	wavelet = newWavelet(im,levels);
	encoder = coder_create_write(coder_template,wavelet,stopSize);
	encoder->init(encoder);

	if ( ! encoder->encodeBand ) {
		errputs("error : no encoder->encodeBand ");
		return 0;
	}

	encoder->w->stopline = -1;

	err = 0;

	for(p=0;p<(im->planes);p++) {
		rows = im->data[p];
		for (l = levels; l > 0; l--) {
			sizeX = (im->width) >> l;
			sizeY = (im->height) >> l;

			if ( coder_timetostop(encoder) ) {
				err += mseBand(rows[0] + sizeX,	sizeX, sizeY, im->width);
			} else {
				encoder->encodeBand(encoder,rows[0] + sizeX,	sizeX, sizeY, im->width,
					rows[0] + (sizeX>>1)); 
				if ( coder_timetostop(encoder) ) {
					err += mseBand(rows[0] + sizeX + encoder->w->stopline*im->width,	sizeX, sizeY - encoder->w->stopline, im->width);
				}				
			}

			if ( coder_timetostop(encoder) ) {
				err += mseBand(rows[sizeY],	sizeX, sizeY, im->width);
			} else {
				encoder->encodeBand(encoder,rows[sizeY],		sizeX, sizeY, im->width,
					rows[(sizeY>>1)]);
				if ( coder_timetostop(encoder) ) {
					err += mseBand(rows[sizeY] + encoder->w->stopline*im->width,	sizeX, sizeY - encoder->w->stopline, im->width);
				}				
			}

			if ( coder_timetostop(encoder) ) {
				err += mseBand(rows[sizeY] + sizeX,	sizeX, sizeY, im->width);
			} else {
				encoder->encodeBand(encoder,rows[sizeY]+sizeX,	sizeX, sizeY, im->width,
					rows[(sizeY>>1)]+ (sizeX>>1)); 
				if ( coder_timetostop(encoder) ) {
					err += mseBand(rows[sizeY] + sizeX + encoder->w->stopline*im->width,	sizeX, sizeY - encoder->w->stopline, im->width);
				}				
			}
		}
	}

	coder_flush_write(encoder);
	encoder->free(encoder);
	coder_destroy(encoder);
	freeWavelet(wavelet);

return err;
}

int packedImageSize(image *im,const coder *coder_template,int levels)
{
return( packed_H_Size(im,coder_template,levels) + packed_L_Size(im,levels) );
}

int packed_H_Size(image *im,const coder *coder_template,int levels)
{
int complen;
wavelet *wavelet;

	wavelet = makeWavelet(im,coder_template,levels,LONG_MAX);
	complen = wavelet->complen - 2;
	freeWavelet(wavelet);

return complen;
}

int packed_L_Size(image *im,int levels)
{
int complen;
image *ll_band;
int ll_width,ll_height;
wavelet *wavelet;

	ll_width = im->width>>levels;
	ll_height = im->height>>levels;

	if ( (ll_band = newImage(ll_width,ll_height,im->planes)) == NULL )
		errexit("newImage failed");

	patchImage(im,ll_band,0,0,ll_width,ll_height,0,0);

	wavelet = newWavelet(ll_band,0);

	encodeWaveletLL(ll_band,wavelet);

	complen = wavelet->complen - 2;

	freeWavelet(wavelet);
	freeImage(ll_band);

return complen;
}

int packed_LLband_Size(image *ll_band)
{
int complen;
wavelet *wavelet;

	wavelet = newWavelet(ll_band,0);

	encodeWaveletLL(ll_band,wavelet);

	complen = wavelet->complen - 2;

	freeWavelet(wavelet);

return complen;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亲近乱来精品视频| 中文字幕一区二区不卡| 日韩精品中文字幕在线不卡尤物| 波波电影院一区二区三区| 精品亚洲成a人| 国产福利一区二区三区视频| 丁香一区二区三区| 91一区一区三区| 69堂精品视频| 国产精品免费视频一区| 亚洲综合色区另类av| 日产欧产美韩系列久久99| 国产精品一级片| 欧美日韩在线直播| 久久亚洲欧美国产精品乐播| 久久久.com| 免费高清在线视频一区·| 在线一区二区观看| 久久久亚洲午夜电影| 三级影片在线观看欧美日韩一区二区| 美女视频一区二区三区| 色一情一乱一乱一91av| 91精品国产综合久久国产大片| 日韩亚洲欧美成人一区| 久久国产精品99精品国产 | 国产成人精品免费在线| 欧美一区日韩一区| 夜夜嗨av一区二区三区中文字幕| 国产又黄又大久久| 26uuu久久综合| 首页国产欧美久久| 国产传媒一区在线| 在线不卡免费av| 一区二区成人在线视频 | 欧美xxxxx牲另类人与| 亚洲mv大片欧洲mv大片精品| 成人av免费在线观看| 国产亚洲福利社区一区| 久久国产日韩欧美精品| 日韩欧美国产综合| 国产在线不卡视频| 欧美日韩国产天堂| 国内欧美视频一区二区| 国产日韩欧美精品电影三级在线| 国产精品一区二区在线观看网站| 久久日一线二线三线suv| 日韩福利电影在线| 欧美日韩中字一区| 一区二区三区欧美激情| 不卡一区二区中文字幕| 国产精品不卡一区| 色视频一区二区| 天堂蜜桃一区二区三区| 欧美日本在线播放| 国产成人精品免费网站| 中文av一区特黄| 91.麻豆视频| 99久久er热在这里只有精品15 | 国产婷婷色一区二区三区四区| 国产伦精一区二区三区| 亚洲人吸女人奶水| 日韩欧美中文字幕精品| aaa欧美色吧激情视频| 天天操天天干天天综合网| 久久久精品国产免大香伊| 欧美在线制服丝袜| 国产乱子轮精品视频| 午夜精品久久久| 欧美刺激午夜性久久久久久久| av一区二区三区四区| 美女一区二区久久| 亚洲国产成人av好男人在线观看| 久久精品亚洲国产奇米99| 777午夜精品视频在线播放| 97成人超碰视| www.欧美.com| 成人动漫视频在线| 在线观看国产日韩| 日本道色综合久久| 欧美一区二区三区男人的天堂| 在线观看亚洲专区| 69堂成人精品免费视频| 精品日韩一区二区三区| 国产午夜精品在线观看| 精品久久久久一区二区国产| 久久久久高清精品| 一区二区三区视频在线看| 亚洲电影中文字幕在线观看| 美女视频一区二区三区| 91免费版pro下载短视频| 欧美狂野另类xxxxoooo| 久久国内精品自在自线400部| 成人久久18免费网站麻豆| 色综合久久中文综合久久97| 欧美一区二区三区性视频| 中文一区二区完整视频在线观看| 偷偷要91色婷婷| 国产精品一区二区三区网站| 国产性天天综合网| 欧美tickling挠脚心丨vk| 日本一区二区三区免费乱视频 | 亚洲日本在线观看| √…a在线天堂一区| 亚洲最新视频在线播放| 国模套图日韩精品一区二区| 91免费精品国自产拍在线不卡| 一本色道久久综合精品竹菊| 欧美日韩免费观看一区二区三区| 精品国产免费久久| 亚洲丶国产丶欧美一区二区三区| 国产夫妻精品视频| 欧美午夜免费电影| 国产精品色眯眯| 精品亚洲porn| 欧美一级夜夜爽| 香蕉加勒比综合久久| 成人黄色a**站在线观看| 精品国产一区二区在线观看| 亚洲欧美日韩系列| 色悠久久久久综合欧美99| 国产女主播视频一区二区| 亚洲成人在线网站| 欧美色成人综合| 国产色产综合产在线视频| 亚洲国产综合视频在线观看| 国产一区视频网站| 欧美一区二区三区视频在线观看| 亚洲香蕉伊在人在线观| 欧美日韩国产电影| 青青草国产成人99久久| 91精品免费观看| 久久99久久久久| 国产日韩欧美麻豆| 波多野结衣一区二区三区| 日韩精品最新网址| 91麻豆精东视频| 国产精品人成在线观看免费| 国产一区二区不卡| 国产精品九色蝌蚪自拍| 色综合视频在线观看| 日韩黄色小视频| 久久九九影视网| 91在线无精精品入口| 午夜欧美在线一二页| 久久精品一区二区三区av| 97se亚洲国产综合在线| 麻豆国产91在线播放| 国产精品网站在线播放| 91蝌蚪porny| 国产麻豆精品在线观看| 一区二区理论电影在线观看| 日韩欧美中文字幕公布| 日韩欧美自拍偷拍| 不卡视频一二三| 韩国欧美国产一区| 夜夜嗨av一区二区三区四季av | 久久精品这里都是精品| 色哟哟一区二区三区| 亚洲综合色丁香婷婷六月图片| 亚洲成精国产精品女| 欧美日精品一区视频| 国产一区在线精品| 日本不卡一二三区黄网| 亚洲色图清纯唯美| 欧美成人激情免费网| 色88888久久久久久影院野外| 麻豆精品一区二区| 亚洲五月六月丁香激情| 亚洲天堂2016| 亚洲欧美日本在线| 中文字幕人成不卡一区| 亚洲三级久久久| 一区免费观看视频| 国产精品传媒视频| 欧美va亚洲va| 91精品欧美综合在线观看最新| 欧美一区二区三区四区高清| 欧美精品 国产精品| 欧美一二三区在线观看| 欧美大黄免费观看| 一区二区三区在线视频观看58| 国产精品久久午夜夜伦鲁鲁| 国产精品黄色在线观看 | 亚洲高清不卡在线观看| 午夜精彩视频在线观看不卡| 日本欧洲一区二区| 精品一区二区三区欧美| 久久成人综合网| 成人黄色电影在线| 欧美伊人精品成人久久综合97 | 国产精品免费网站在线观看| 亚洲精品一二三区| 人人精品人人爱| 99精品一区二区三区| 欧美日韩精品一区二区在线播放 | 日韩精品一级二级| 成年人网站91| 欧美激情艳妇裸体舞| 天堂一区二区在线| 色狠狠色噜噜噜综合网|