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

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

?? dpcmprocess.cpp

?? 采用DPCM壓縮算法的工程文件
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
		position +=41;
		Q1--;
		if (Q2 < 0) {
			position +=45;
			Q2 = ABS(Q2)-1;
		}
		if (Q3 <0) {
			position +=5;
			Q3 =ABS(Q3)-1;
		}
		position +=81*Q1 + 9*Q2 + Q3;
	}else if (Q2 != 0) {
		PO_OR_NE(Q2);
		MAKE_FIRST_POSITIVE(Q1,Q2,Q3);
		position +=5;
		Q2--;
		if (Q3 < 0) {
			position +=5;
			Q3 =ABS(Q3)-1;
		}
		position +=9*Q2 + Q3;
	}else {
		PO_OR_NE(Q3);
		MAKE_FIRST_POSITIVE(Q1,Q2,Q3);
		position +=Q3;
	}
	return position;
	
}

int CDpcmProcess::Get_Errval(j_compress_ptr cinfo, int Ra, PIXEL Rb, int Rc, PIXEL Rd, PIXEL *x)
{
	UNI_TYPE D1,D2,D3;
	UNI_TYPE Q1,Q2,Q3,Q;
	int px;
	
	UNI_TYPE sign=1,errval,errval_coded;
	predic_structure_ptr pre=&cinfo->pre;
	
	/*Caculate the context bin and the predic value px.*/
	D1=Rd-Rb;
	D2=Rb-Rc;
	D3=Rc-Ra;
	QUAN_GRAD(D1,Q1);
	QUAN_GRAD(D2,Q2);
	QUAN_GRAD(D3,Q3);
	Q=Find_Bin(Q1,Q2,Q3,&sign);
	PREDICTION(Rb,Ra,Rc,px);
		
	/*Correct the prediction*/
	px +=sign*pre->C[Q];
	if (px >255) px=255;
	if (px<0) px=0;
	errval=(*x - px)*sign;
	if (errval >=0) errval=(errval+NEAR)/(2*NEAR+1);
	else errval=-(NEAR-errval)/(2*NEAR+1);
	errval_coded=errval;
	px=px+sign*errval*(2*NEAR+1);
	if (px<0) px=0;
	if (px>255) px=255;
	*x=px;
	if (errval<0 ) errval +=256;
	if (errval >= 128) errval -=256;
	
	/*Update the N[Q], B[Q],C[Q]to accomplish  context self-adaption*/
	pre->B[Q] +=errval*(2*NEAR+1);
	if (pre->N[Q]==pre->reset) {
		pre->B[Q] >>=1;
		pre->N[Q] >>=1;
	}
	pre->N[Q] +=1;
	
	/* Do bias estimation for NEXT pixel */
	/* Bias cancelation tries to put error in (-1,0] (A.6.2)*/	
	if  ( pre->B[Q] <= -pre->N[Q] ) {
		if (pre->C[Q] > -128)
			--pre->C[Q];
		if ( (pre->B[Q] += pre->N[Q]) <= -pre->N[Q] ) 
			pre->B[Q] = -pre->N[Q]+1;
	} else if ( pre->B[Q] > 0 ) {
		if (pre->C[Q] < 127)
			++pre->C[Q];
		if ( (pre->B[Q] -= pre->N[Q]) > 0 )
			pre->B[Q] = 0;
	}
	/*printf("C[%d]=%d\n",Q,pre->C[Q]);*/
	return errval_coded;
	
}

void * CDpcmProcess::Alloc_One_Row(j_compress_ptr cinfo, size_t size_object)
{
	void *buffer_ptr; 
	buffer_ptr=cinfo->buffer[cinfo->buffer_count++]=(void *) 
		malloc(size_object);
	
	return buffer_ptr;	
}

JSAMPARRAY CDpcmProcess::Alloc_Sarray(JDIMENSION samplesperrow, JDIMENSION numrows, j_compress_ptr cinfo)
{
	JSAMPARRAY result;
	JSAMPROW workspace;
	int currow;
	
	
	
	/* Get space for row pointers (small object) */
	result = (JSAMPARRAY)Alloc_One_Row(cinfo,((size_t) numrows) * SIZEOF(JSAMPROW));
	
	/* Get the rows themselves (large objects) */
	currow = 0;
	while (currow < (int)numrows) {
		workspace = (JSAMPROW)Alloc_One_Row(cinfo,((size_t) (samplesperrow)
			* SIZEOF(JSAMPLE)));
		result[currow++] = workspace;
		
	}
	
	return result;
}

void CDpcmProcess::Free_Mem(j_compress_ptr cinfo)
{
	int i;
	
	for (i=0;i<cinfo->buffer_count;i++)		
		free(cinfo->buffer[i]);
}

void CDpcmProcess::Input_Image_Data(j_compress_ptr cinfo)
{
	int j,input_lines;
	JSAMPARRAY in_array=cinfo->inbuffer;
	input_lines=1;
	
	for(j=0;j<input_lines;j++)
		JFREAD(cinfo->inputfile,in_array[j],cinfo->image_width);	
}

void CDpcmProcess::Compress_Data(j_compress_ptr cinfo, int i)
{ 
	JSAMPARRAY in_array=cinfo->inbuffer;	
	
	/*dipose a row of image*/      
    Encode_Row (cinfo,in_array[0],i);
}

void CDpcmProcess::Initial_Decoder(j_compress_ptr cinfo)
{
	arith_entropy_ptr e = (arith_entropy_ptr) cinfo->entropy;
	int data;
	data=Get_Byte(cinfo);
	e->c +=(data<<8);
	e->c <<=8;
	data=Get_Byte(cinfo);
	e->c +=(data<<8);
	e->c <<=8;
}

void CDpcmProcess::Decode_Row(j_compress_ptr cinfo , int i)
{
	arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy;
	unsigned char * st;
	unsigned char context_a=0;
	int num;
	int v, m,sign,Ra=0,Rc=0,predic_val=0;


	entropy->context=0;
	/* Encode the MCU data blocks */
	for (num = 0; num < cinfo->image_width; num++) {

		/* Sections F.1.4.1 & F.1.4.4.1: Encoding of DC coefficients */


		/*printf("%x ",entropy->context);*/ 
		/* Table F.4: Point to statistics bin S0 for DC coefficient coding */
		st =entropy->dc_stats + entropy->context*5+entropy->context_b[num];

		/*predic_val=last_val+((entropy->val_b[num]-Rc)>>1);*/
		/*predic_val=entropy->val_b[num]+RIGHT_SHIFT(last_val-Rc,1);*/
		/*predic_val=RIGHT_SHIFT(Ra+entropy->val_b[num],1);*/

		/*    if (i==0)
		printf("num:%d bin:%d *st:%x laval:%d pre:%d\n",num,context_a,*st,last_val,predic_val);*/


		/* Figure F.4: Encode_DC_DIFF */
		if ((Arith_Decode(cinfo,st)) == 0) {
			entropy->context = 0;	                /* zero diff category */
			v=0; 
		} else {
			sign=Arith_Decode(cinfo, st+1);
			st +=2;   st +=sign;
			if ((m = Arith_Decode(cinfo, st)) != 0) {
				if ( entropy->context_b[num]>8 )
					st=entropy->dc_stats+129;
				else
					st = entropy->dc_stats + 100;   /* Table H.3: X1 = X1_context(Db)*/
				/*st=entropy->dc_stats+20;*/
				while (Arith_Decode(cinfo, st)) {
					m <<=1;
					st += 1;
				}
			}


			if (m < (int) (((INT32) 1 << cinfo->arith_dc_L) >> 1))
				entropy->context = 0;		   /* zero diff category */
			else if (m > (int) (((INT32) 1 << cinfo->arith_dc_U)>>1 ))
				entropy->context = 12 + (sign * 4); /* large diff category */
			else
				entropy->context = 4 + (sign * 4);  /* small diff category */
			/* Figure F.24: Decoding the magnitude bit pattern of v */
			v = m;
			st += 14;
			while (m >>= 1)
				if (Arith_Decode(cinfo, st)) v |= m;
			/* Section F.1.4.4.1.2: Establish dc_context conditioning category */

			v += 1; if (sign) v = -v;

		}

		predic_val=Return_Pixel_Val(cinfo,Ra,entropy->val_b[num],Rc,entropy->val_b[num+1],v);
		/*if (i==0)
		printf("row[%d]:%x v:%d\n",num,predic_val,v);*/    
		entropy->context_b[num]=entropy->context;
		Rc=entropy->val_b[num];
		Ra=entropy->val_b[num]=predic_val;
		Emit_Byte(cinfo,predic_val);
	}
}

/*
* The core arithmetic decoding routine (common in JPEG and JBIG).
* This needs to go as fast as possible.
* Machine-dependent optimization facilities
* are not utilized in this portable implementation.
* However, this code should be fairly efficient and
* may be a good base for further optimizations anyway.
*
* Return value is 0 or 1 (binary decision).
*
* Note: I've changed the handling of the code base & bit
* buffer register C compared to other implementations
* based on the standards layout & procedures.
* While it also contains both the actual base of the
* coding interval (16 bits) and the next-bits buffer,
* the cut-point between these two parts is floating
* (instead of fixed) with the bit shift counter CT.
* Thus, we also need only one (variable instead of
* fixed size) shift for the LPS/MPS decision, and
* we can get away with any renormalization update
* of C (except for new data insertion, of course).
*
* I've also introduced a new scheme for accessing
* the probability estimation state machine table,
* derived from Markus Kuhn's JBIG implementation.
*/

int CDpcmProcess::Arith_Decode(j_compress_ptr cinfo, unsigned char * st)
{
	extern const INT32 jaritab[];
	register arith_entropy_ptr e = (arith_entropy_ptr) cinfo->entropy;
	register unsigned char nl, nm;
	register INT32 qe, temp;
	register int sv, data,cx; 

	/* Fetch values from our compact representation of Table D.2:
	* Qe values and probability estimation state machine
	*/
	cx=(e->c>>16)&0x0000ffff;
	/*printf("%x",cx);*/
	sv = *st;
	qe = jaritab[sv & 0x7F];	/* => Qe_Value */
	nl = qe & 0xFF; qe =(qe>>8)&0x00ffffff ;	/* Next_Index_LPS + Switch_MPS */
	nm = qe & 0xFF; qe >>= 8;	/* Next_Index_MPS */

	/* Decode & estimation procedures per sections D.2.4 & D.2.5 */
	temp = e->a - qe;
	e->a = temp;
	/*temp <<= e->ct;*/
	if (cx >= temp) {
		cx -= temp;
		/* Conditional LPS (less probable symbol) exchange */
		if (e->a < qe) {
			e->a = qe;
			*st = (sv & 0x80) ^ nm;	/* Estimate_after_MPS */
		} else {
			e->a = qe;
			*st = (sv & 0x80) ^ nl;	/* Estimate_after_LPS */
			sv ^= 0x80;		/* Exchange LPS/MPS */
		}
	} else if (e->a < 0x8000L) {
		/* Conditional MPS (more probable symbol) exchange */
		if (e->a < qe) {
			*st = (sv & 0x80) ^ nl;	/* Estimate_after_LPS */
			sv ^= 0x80;		/* Exchange LPS/MPS */
		} else {
			*st = (sv & 0x80) ^ nm;	/* Estimate_after_MPS */
		}
	}

	e->c =(e->c & 0xFFFF)|(cx<<16);
	/* Renormalization & data input per section D.2.6 */
	while (e->a < 0x8000L) {
		if (e->ct == 0) {
			/* Need to fetch next data byte */
			e->ct=8;
			if (cinfo->unread_marker){
				printf("%x \n",cinfo->unread_marker);
				data = 0;
			}	
			else {
				data = Get_Byte(cinfo);	/* read next input byte */
				if (data==0xff) {
					if ((data=Get_Byte(cinfo))==0)
						data=0xff;
					else {
						cinfo->unread_marker=data;
						data=0;
					}
				}
				e->c +=(data<<8);
			}
		}
		e->a <<=1;
		e->c <<=1;
		e->ct--;
	} 

	return (sv >> 7);
}

int CDpcmProcess::Get_Byte(j_compress_ptr cinfo)
{
	jpeg_source_mgr * src = cinfo->src;
	int data;

	if (src->bytes_in_buffer == 0){
		printf("yes\n");
		Fill_Input_Buffer(cinfo);
	}
	src->bytes_in_buffer--;
	data=*src->next_input_byte++;
	return (data);
}

void CDpcmProcess::Fill_Input_Buffer(j_compress_ptr cinfo)
{
	jpeg_source_mgr *src =  cinfo->src;
	size_t nbytes;

	nbytes = JFREAD(cinfo->inputfile, cinfo->inbuffer[0], 4096);

	if (nbytes <= 0) {
		/* Insert a fake EOI marker to jump out the decoding programe*/
		cinfo->inbuffer[0][0] = (JOCTET) 0xFF;
		cinfo->inbuffer[0][1] = (JOCTET) 0xD9;
		nbytes = 2;

	}

	src->next_input_byte = cinfo->inbuffer[0];
	src->bytes_in_buffer = nbytes;
} 

int CDpcmProcess::Return_Pixel_Val(j_compress_ptr cinfo , int Ra, PIXEL Rb, int Rc, PIXEL Rd, int errval)
{
	UNI_TYPE D1,D2,D3;
	UNI_TYPE Q1,Q2,Q3,Q;
	int x;
	int px,nNear;

	UNI_TYPE sign=1,errval_coded;
	predic_structure_ptr pre=&cinfo->pre;
	nNear=pre->nNear;

	/*Caculate the context bin and the predic value px.*/
	D1=Rd-Rb;
	D2=Rb-Rc;
	D3=Rc-Ra;
	QUAN_GRAD(D1,Q1);
	QUAN_GRAD(D2,Q2);
	QUAN_GRAD(D3,Q3);
	Q=Find_Bin(Q1,Q2,Q3,&sign);
	PREDICTION(Rb,Ra,Rc,px);

	/*Correct the prediction*/
	px +=sign*pre->C[Q];
	if (px >255) px=255;
	if (px<0) px=0;
	errval_coded=errval;
	errval_coded *= (2*nNear+1);
	px=errval_coded*sign+px;
	if (px<0) px=0;
	if (px>255) px=255; 
	x=px; 
	if (errval<0 ) errval +=256;
	if (errval >= 128) errval -=256;

	/*Update the N[Q], B[Q],C[Q]to accomplish  context self-adaption*/
	pre->B[Q] +=errval*(2*nNear+1);
	if (pre->N[Q]==pre->reset) {
		pre->B[Q] >>=1;
		pre->N[Q] >>=1;
	}
	pre->N[Q] +=1;

	/* Do bias estimation for NEXT pixel */
	/* Bias cancelation tries to put error in (-1,0] (A.6.2)*/	
	if  ( pre->B[Q] <= -pre->N[Q] ) {
		if (pre->C[Q] > -128)
			--pre->C[Q];
		if ( (pre->B[Q] += pre->N[Q]) <= -pre->N[Q] ) 
			pre->B[Q] = -pre->N[Q]+1;
	} else if ( pre->B[Q] > 0 ) {
		if (pre->C[Q] < 127)
			++pre->C[Q];
		if ( (pre->B[Q] -= pre->N[Q]) > 0 )
			pre->B[Q] = 0;
	}
	/*printf("C[%d]=%d\n",Q,pre->C[Q]);*/
	return x; 
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久久精品| 午夜成人免费视频| 亚洲精品视频一区二区| 一区二区三区中文在线观看| 石原莉奈在线亚洲三区| 国产精品资源站在线| www.欧美.com| 9191精品国产综合久久久久久| 日韩精品一区二区三区视频| 国产偷v国产偷v亚洲高清| 亚洲欧美激情小说另类| 日韩高清中文字幕一区| 成人午夜私人影院| 欧美天堂一区二区三区| 久久久影视传媒| 一区二区三区四区激情 | 99国产一区二区三精品乱码| 欧美日韩国产综合久久| 欧美激情在线一区二区| 夜色激情一区二区| 国产精品自拍毛片| 欧美精品在线一区二区| 国产日韩欧美电影| 日韩黄色免费电影| 99久久er热在这里只有精品66| 91精品国产aⅴ一区二区| 国产精品久线观看视频| 日韩不卡免费视频| 91麻豆蜜桃一区二区三区| 欧美成人国产一区二区| 亚洲自拍偷拍欧美| 国产成人精品免费一区二区| 欧美在线免费观看视频| 国产欧美精品一区二区色综合| 午夜精品久久一牛影视| av午夜一区麻豆| 欧美精品一区二| 舔着乳尖日韩一区| 91久久精品一区二区| 久久精品一区二区三区不卡牛牛 | 欧美日韩成人一区| 国产精品大尺度| 国产一区在线精品| 日韩一级大片在线| 午夜欧美一区二区三区在线播放| 成人黄动漫网站免费app| 欧美成人精品高清在线播放 | 日韩一区二区三区高清免费看看| 日韩美女啊v在线免费观看| 激情图区综合网| 日韩一区二区精品在线观看| 亚洲最大成人网4388xx| aaa国产一区| 中文字幕乱码日本亚洲一区二区| 狠狠色丁香久久婷婷综合_中 | 日韩精品91亚洲二区在线观看| 色综合久久久久久久久| 国产精品国产三级国产普通话99 | 国产精品网友自拍| 国产一级精品在线| 精品久久久久久久久久久久包黑料| 亚洲二区视频在线| 欧美日韩综合在线免费观看| 亚洲女与黑人做爰| 99re亚洲国产精品| 中文字幕中文字幕在线一区| 国产99精品视频| 国产亚洲一区二区在线观看| 国产一区二区精品在线观看| 久久免费视频色| 国产在线一区二区| 久久精品夜色噜噜亚洲a∨| 久久精品二区亚洲w码| 日韩美女在线视频| 麻豆国产一区二区| 精品入口麻豆88视频| 久久精品国产亚洲aⅴ| 日韩无一区二区| 国产在线播精品第三| 久久伊99综合婷婷久久伊| 国产一区日韩二区欧美三区| 国产视频一区在线播放| 国产99一区视频免费| 国产精品激情偷乱一区二区∴| 99视频在线观看一区三区| 国产精品久久久久久妇女6080| a在线播放不卡| 亚洲日本丝袜连裤袜办公室| 欧美在线免费播放| 午夜精品久久一牛影视| 欧美va亚洲va| 国产传媒欧美日韩成人| 亚洲欧洲国产专区| 欧美视频在线观看一区二区| 日日夜夜一区二区| 欧美mv日韩mv国产网站app| 高清av一区二区| 亚洲色图19p| 欧美老肥妇做.爰bbww| 久久黄色级2电影| 国产片一区二区三区| 99麻豆久久久国产精品免费| 一区二区日韩电影| 91精品国产91久久综合桃花| 国产乱码字幕精品高清av | 99re66热这里只有精品3直播| 亚洲欧美激情插 | 久久精品99国产精品| 国产精品久久久爽爽爽麻豆色哟哟| 91豆麻精品91久久久久久| 日韩av电影免费观看高清完整版| 久久蜜桃av一区精品变态类天堂| 成人aaaa免费全部观看| 亚洲国产欧美日韩另类综合| 欧美xxxxx牲另类人与| 不卡的av电影| 亚洲成av人片在www色猫咪| 国产亚洲欧美激情| 91成人网在线| 韩国av一区二区三区| 一区二区激情视频| 精品盗摄一区二区三区| 91麻豆6部合集magnet| 麻豆国产精品777777在线| 国产精品每日更新在线播放网址| 欧美日韩你懂得| 国产福利一区二区三区视频| 亚洲国产精品一区二区尤物区| 精品成人一区二区三区| 色94色欧美sute亚洲线路一久 | 中文字幕免费观看一区| 欧美日韩精品专区| 风间由美一区二区av101 | 精品成人一区二区| 在线观看视频一区二区| 国产老肥熟一区二区三区| 亚洲国产aⅴ成人精品无吗| 久久久久久久久久电影| 欧美日韩1234| 成人黄色免费短视频| 久久97超碰国产精品超碰| 一区二区不卡在线播放 | 99视频超级精品| 久久精品国产99久久6| 一区二区三区在线观看欧美| 久久久www免费人成精品| 欧美日韩高清在线| 成人国产亚洲欧美成人综合网 | 国产精品视频在线看| 日韩亚洲电影在线| 在线看国产一区| 不卡的电影网站| 国产麻豆91精品| 青青青爽久久午夜综合久久午夜| 亚洲一级不卡视频| ...xxx性欧美| 国产亚洲欧美日韩在线一区| 精品国精品国产尤物美女| 91.com在线观看| 在线观看一区二区视频| 91在线无精精品入口| 国产一区欧美二区| 狠狠v欧美v日韩v亚洲ⅴ| 免费三级欧美电影| 日韩不卡手机在线v区| 午夜精品久久久久久久99水蜜桃| 亚洲免费av网站| 日韩久久一区二区| 国产精品国产三级国产有无不卡| 国产欧美日韩在线看| 久久久久久电影| 欧美精品一区二区三区高清aⅴ| 欧美一级高清片在线观看| 欧美日韩视频一区二区| 欧美亚洲一区二区在线| 91国偷自产一区二区使用方法| 成人精品视频一区| 国产91露脸合集magnet | 亚洲免费视频成人| 椎名由奈av一区二区三区| 日韩一区欧美一区| 亚洲激情网站免费观看| 亚洲欧美一区二区三区久本道91 | 在线观看免费成人| 在线精品亚洲一区二区不卡| 91色综合久久久久婷婷| 91久久精品一区二区三区| 欧美在线观看视频一区二区| 在线观看视频一区二区| 欧美日韩一区视频| 欧美精品1区2区3区| 欧美一区二区三区小说| 欧美刺激午夜性久久久久久久| 精品人在线二区三区| 欧美精品一区二区三| 亚洲国产高清不卡| 18成人在线观看| 亚洲午夜久久久久| 美女一区二区视频| 国产精品自在欧美一区|