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

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

?? ezw.c

?? VC小波應用 視頻編碼播放 EZW2 WAVLETS TRANSFORMER
?? C
?? 第 1 頁 / 共 2 頁
字號:

	printf("\n");
	//釋放編碼器占據(jù)的數(shù)據(jù)空間
	for (i=0; i< 4; i++){
		BasicCoderDealloc(DominantPassCoder[i]);
	}
	BasicCoderDealloc(SubordinateListCoder);
	free(DomList);
	free(SubList);
	//刪除零樹圖占據(jù)的數(shù)據(jù)空間
	MapDealloc(map);
	SubbandSymbolDealloc(ztmap);
}

/*----------------------------------------------------------------------------*/	
/*----------------------------------------------------------------------------*/	
/* as described in "A Fast Technique For Identifying Zerotrees In 
 * The EZW Algorithm", ...
 */
void EZW2BuildZerotreeMap(WTRANSFORM *transform, SubbandSymbol *ztmap)
{
	int i, j;
	int n, temp;

	for (n=transform->nSubbands-1; n>=0; n--){
		if (n>=transform->nSubbands-3){
			//由最高頻帶開始
			for (j=0; j<transform->subbandVSize[n]; j++){
				for (i=0; i<transform->subbandHSize[n]; i++){

					temp = log2((int)fabs(transform->subbandPtr[n]
										[j*transform->subbandHSize[n]+i]));
					
					if (temp==0){
						ztmap->subbandPtr[n][j*ztmap->subbandHSize[n]+i] = 0;
					}
					else{
						ztmap->subbandPtr[n][j*ztmap->subbandHSize[n]+i] = 1<<temp;
					}
				}
			}
		}
		else if (n==0){
			//低頻帶部分
			for (j=0; j<transform->subbandVSize[0]; j++){
				for (i=0; i<transform->subbandHSize[0]; i++){

					temp = log2((int)fabs(transform->subbandPtr[0]
										[j*transform->subbandHSize[0]+i]));

					ztmap->subbandPtr[0][j*ztmap->subbandHSize[0]+i] 
						= 	  ztmap->subbandPtr[1][j*ztmap->subbandHSize[1] + i]
							| ztmap->subbandPtr[2][j*ztmap->subbandHSize[2] + i]
							| ztmap->subbandPtr[3][j*ztmap->subbandHSize[3] + i];

					if (temp!=0){
						ztmap->subbandPtr[0][j*ztmap->subbandHSize[0]+i] 
						= (1<<temp) 
							| ztmap->subbandPtr[0][j*ztmap->subbandHSize[0]+i];
					}
				}
			}
		}
		else{
			for (j=0; j<transform->subbandVSize[n]; j++){
				for (i=0; i<transform->subbandHSize[n]; i++){

					temp = log2((int)fabs(transform->subbandPtr[n]
										[j*transform->subbandHSize[n]+i]));
					
					ztmap->subbandPtr[n][j*ztmap->subbandHSize[n]+i] 
						= 	  ztmap->subbandPtr[n+3]
								[2*j*ztmap->subbandHSize[n+3] + 2*i]
							| ztmap->subbandPtr[n+3]
								[2*j*ztmap->subbandHSize[n+3] + 2*i+1]
							| ztmap->subbandPtr[n+3]
								[(2*j+1)*ztmap->subbandHSize[n+3] + 2*i]
							| ztmap->subbandPtr[n+3]
								[(2*j+1)*ztmap->subbandHSize[n+3] + 2*i+1];
					
					if (temp!=0){
						ztmap->subbandPtr[n][j*ztmap->subbandHSize[n]+i] 
						= (1<<temp)
							| ztmap->subbandPtr[n][j*ztmap->subbandHSize[n]+i];
							
					}
				}
			}
			
		}
	}
}

/*----------------------------------------------------------------------------*/	
/*----------------------------------------------------------------------------*/	
void EncodeDominantPassMortonScan(DLNode *DomList,SLNode *SubList,
											 int *SubListSize, WTRANSFORM *transform, 
											 MAP *map, int threshold, 
											 ArithEncoder *encoder, 
											 BasicCoder **DominantPassCoder, 
											 SubbandSymbol *ztmap, int ByteBudget)
{
	int i, j, m, n;
	DLNode node;
	char NodeStatus;
	Boolean HighestSubband=FALSE;
	int IZCount;
	BasicCoder *Coder;
	Boolean ParentSignificant;
	Boolean PreviousCoeffSignificant;
	Boolean CurrentCoeffSignificant = FALSE;
	int DomListSize=0, DomListIndex;

	/* initialize LL_0 subband */
	for (j=0; j<transform->subbandVSize[0]; j+=2){
		for (i=0; i<transform->subbandHSize[0]; i+=2){
			/* begin quad_coeff */
			for (m=0; m<4; m++){
				node.x = i + ScanOrderX[m];
				node.y = j + ScanOrderY[m];
				node.scale = 0;
				node.orientation = 0;
				
				NodeStatus = MapGetNodeSymbol(map, node.scale, node.orientation, 
															node.x, node.y);
				
				/* output code */
				if (!NodeStatus){
					/* not a significant coeff in the previous dominant pass */
					PreviousCoeffSignificant = CurrentCoeffSignificant;
					
					CurrentCoeffSignificant = FALSE;
					EncodeNode(SubList, SubListSize, transform, &node, ztmap, threshold);						
					
					if (node.code == POS || node.code == NEG){
						MapSetNodeSymbol(map, node.scale, node.orientation, 
							node.x, node.y, 1);
						CurrentCoeffSignificant = TRUE;
					}
					
					if (ROUND(ArithEncoderNBitsOutput(encoder)/8.0) > ByteBudget-1){
						EndEncoding = TRUE;
						return;
					}
					
					/* perform context switching */
					ParentSignificant = BASEBAND_PARENT_SIGNIFICANT;
					
					if (ParentSignificant && PreviousCoeffSignificant){
						Coder = DominantPassCoder[0];
					}
					else if (ParentSignificant){
						Coder = DominantPassCoder[1];
					}
					else if (PreviousCoeffSignificant){
						Coder = DominantPassCoder[2];
					}
					else{
						Coder = DominantPassCoder[3];
					}
					
					BasicCoderEncode(Coder, encoder, node.code, TRUE);
					
				}
				else{
				/* no code since the node is already significant in previous pass */
					CurrentCoeffSignificant = TRUE;
				}
				
				if (node.code!=ZTR || NodeStatus){
					/* insert the offsprings - do the LH_1 first */
					/* LH_0 subband in the main list */
					DomList[DomListSize].x = node.x;
					DomList[DomListSize].y = node.y;
					DomList[DomListSize].scale = 1;
					DomList[DomListSize].orientation = 0;
					DomListSize++;
				}
			}
			/* end quad_coeff */
		}
	}
	
	/* add the HL_1 and HH_1 etries into the list */
	m = DomListSize;

	/* HL_1 */
	for (i=0; i<m; i++){
		DomList[DomListSize].x = DomList[i].x;
		DomList[DomListSize].y = DomList[i].y;
		DomList[DomListSize].scale = 1;
		DomList[DomListSize].orientation = 1;
		DomListSize++;
	}
	
	/* HH_1 */
	for (i=0; i<m; i++){
		DomList[DomListSize].x = DomList[i].x;
		DomList[DomListSize].y = DomList[i].y;
		DomList[DomListSize].scale = 1;
		DomList[DomListSize].orientation = 2;
		DomListSize++;
	}

	/* start the scanning */
	DomListIndex = 0;
	do{
		if (DomListIndex < DomListSize){
			node = DomList[DomListIndex];
		
			NodeStatus = MapGetNodeSymbol(map, node.scale, node.orientation, 
									node.x, node.y);
			
			if (!NodeStatus){
				PreviousCoeffSignificant = CurrentCoeffSignificant;
				CurrentCoeffSignificant = FALSE;
				EncodeNode(SubList, SubListSize, transform, &node, ztmap, threshold);

				if (node.code == POS || node.code == NEG){
					MapSetNodeSymbol(map, node.scale, node.orientation, 
											node.x, node.y, 1);
					CurrentCoeffSignificant = TRUE;
				}

				if (ROUND(ArithEncoderNBitsOutput(encoder)/8.0) > ByteBudget-1){
					EndEncoding = TRUE;
					return;
				}

				
				if ((node.scale == transform->nsteps) && !HighestSubband){
					/* prevent entering the code again */
					HighestSubband = TRUE;
					/* switch to 3 symbols */
					for (i=0; i<4;i++){
						IZCount = ContextGetProb(DominantPassCoder[i]->context, IZ);
						ContextPutValue(DominantPassCoder[i]->context, -IZCount, IZ);
						ContextPutValue(DominantPassCoder[i]->context, IZCount, ZTR);
					}
				}
				

				/* check if parent is significant by looking at the map */
				/* special treatment for scale 1 subbands */
				if (node.scale==1){
					if (MapGetNodeSymbol(map, 0, 0, node.x, node.y)){
						ParentSignificant = TRUE; 
					}
					else{
						ParentSignificant = FALSE;
					}
				}
				else{
					if (MapGetNodeSymbol(map, node.scale - 1, node.orientation, 
												node.x>>1, node.y>>1)){
						ParentSignificant = TRUE;
					}
					else{
						ParentSignificant = FALSE;
					}
				}
				
				/* perform context switching */
				if (ParentSignificant && PreviousCoeffSignificant){
					Coder = DominantPassCoder[0];
				}
				else if (ParentSignificant){
					Coder = DominantPassCoder[1];
				}
				else if (PreviousCoeffSignificant){
					Coder = DominantPassCoder[2];
				}
				else{
					Coder = DominantPassCoder[3];
				}

				BasicCoderEncode(Coder, encoder, node.code, TRUE);
				
			}
			else{
				CurrentCoeffSignificant = TRUE;
			}

			
			/* check if need to insert children */
			if ((node.code != ZTR || NodeStatus) && node.scale<transform->nsteps){
				i = node.x<<1;
				j = node.y<<1;
				node.scale = node.scale+1;
				
				/* same orientation */
				for (m=0; m<4; m++){
					DomList[DomListSize].x = i+ScanOrderX[m];
					DomList[DomListSize].y = j+ScanOrderY[m];
					DomList[DomListSize].scale = node.scale;
					DomList[DomListSize].orientation = node.orientation;
					DomListSize++;
				}
			}

			DomListIndex++;
		}
		else{
			break;
		}		
	}while(1);

	return;
}


/*----------------------------------------------------------------------------*/	
/*----------------------------------------------------------------------------*/	
void EncodeNode(SLNode *SubList, int *SubListSize, WTRANSFORM *transform, 
					 DLNode *node, SubbandSymbol *ztmap, int threshold)
{	
	double value;
	int idx;
	static i=0;
	
	if (node->scale==0){
		idx=0;
	}
	else{
		idx = 3*node->scale - 2 + node->orientation;
	}

	value = transform->subbandPtr[idx]
				[node->y*transform->subbandHSize[idx] + node->x];

	/* NOTE:
	 * We need to use integer conparison. Without rounding to integer,
	 * there may be some coefficients that are less than threshold by 
	 * 0.5, but are not being coded as significant. 
	 * Previous version of code ignore this and obtain less number of
	 * significant coefficients.
	 */
	if (ROUND(fabs(value))>=threshold){
		/*
		if (ROUND(fabs(value))==threshold){
			printf("%d\n", i++);
		}
		*/
		if (value>0.0){
			node->code = POS;
		}
		else{
			node->code = NEG;
		}
		
		/* put node into subordinate list */
		SubList[*SubListSize].x = node->x;
		SubList[*SubListSize].y = node->y;
		SubList[*SubListSize].scale = node->scale;
		SubList[*SubListSize].orientation = node->orientation;
		SubList[*SubListSize].qvalue = (int)(ROUND(fabs(value)));
		SubList[*SubListSize].rvalue = 3*(threshold>>1);
		(*SubListSize)++;

		/* set magnitude to 0 */
		transform->subbandPtr[idx]
				[node->y*transform->subbandHSize[idx] + node->x] = 0.0;
	}
	else{
		if ((ztmap->subbandPtr[idx][node->y*ztmap->subbandHSize[idx]+node->x]
				& threshold)==0){
			node->code = ZTR;
		}
		else{
			node->code = IZ;
		}
	}
}

/*----------------------------------------------------------------------------*/	
/*----------------------------------------------------------------------------*/	
void EncodeSubordinatePass(SLNode *SubList, int SubListSize, int threshold, 
							ArithEncoder *encoder, BasicCoder *SubordinateListCoder, 
							int ByteBudget)
{
	int i;

	if (threshold>0){
		for (i=0; i<SubListSize; i++){
			
			if (ROUND(ArithEncoderNBitsOutput(encoder)/8.0) > ByteBudget-1){
				EndEncoding = TRUE;
				break;
			}
			
			if ((SubList[i].qvalue & threshold) != 0){ 
				/* output '1' */
				BasicCoderEncode(SubordinateListCoder, encoder, 1, TRUE);
				SubList[i].rvalue += (threshold>>1);
			}
			else{
				/* output '0' */
				BasicCoderEncode(SubordinateListCoder, encoder, 0, TRUE);
				SubList[i].rvalue -= (threshold>>1);
			}
		}
	}
}

/*----------------------------------------------------------------------------*/	
/*----------------------------------------------------------------------------*/	
void EZW2Error(char *fmt, ...)
{
	va_list argptr;
	
	va_start( argptr, fmt );
	fprintf(stderr, "EZW2Error: " );
	vprintf( fmt, argptr );
	va_end( argptr );
	exit( -1 );
}

/*----------------------------------------------------------------------------*/	
/*----------------------------------------------------------------------------*/	
void EZW2Warning(char *fmt, ...)
{
	va_list argptr;
	
	va_start( argptr, fmt );
	fprintf( stderr, "EZW2Warning: " );
	vprintf( fmt, argptr );
	va_end( argptr );
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人福利视频| 欧美亚洲愉拍一区二区| 色婷婷亚洲精品| 亚洲老司机在线| 欧美专区日韩专区| 视频一区国产视频| 555www色欧美视频| 久久97超碰国产精品超碰| 精品国产乱码久久久久久图片| 国产一区视频在线看| 欧美激情在线一区二区三区| 99视频热这里只有精品免费| 午夜精品在线看| 久久综合色婷婷| 97久久精品人人做人人爽| 亚洲国产毛片aaaaa无费看 | 精品国产免费久久 | 日韩视频中午一区| 国内不卡的二区三区中文字幕 | 美女精品一区二区| 久久精品一区二区| 91在线精品一区二区| 亚洲高清在线视频| 久久久久久夜精品精品免费| 97精品久久久午夜一区二区三区| 亚洲国产精品一区二区www在线 | jizz一区二区| 日本va欧美va瓶| 国产精品无圣光一区二区| 欧美日韩激情一区| 成人av电影观看| 天使萌一区二区三区免费观看| 国产女主播一区| 欧美日韩精品欧美日韩精品一综合| 国产一区二区福利视频| 亚洲成人资源在线| 欧美激情一区二区三区全黄| 欧美日本韩国一区二区三区视频 | 亚洲天堂精品视频| 欧美一区二区在线播放| 97精品超碰一区二区三区| 久久精品国产在热久久| 亚洲免费观看高清| 久久一区二区三区四区| 欧美性三三影院| 97久久精品人人做人人爽 | 精品毛片乱码1区2区3区| 91麻豆国产在线观看| 国产综合久久久久久鬼色| 亚洲一区在线视频| 国产精品美女久久久久av爽李琼| 日韩一级片网站| 欧美日本在线看| 欧美午夜精品免费| 成人动漫一区二区三区| 国产剧情一区二区三区| 久久精品国产精品亚洲精品 | 国产精品全国免费观看高清| 日韩精品一区二区三区在线观看 | 成人深夜视频在线观看| 久久机这里只有精品| 亚洲3atv精品一区二区三区| 亚洲精品欧美专区| 国产精品久久影院| 国产亚洲一区二区三区| 欧美成人精品二区三区99精品| 欧美精选午夜久久久乱码6080| 91视频一区二区三区| 成人深夜视频在线观看| 国产成人综合自拍| 国产suv精品一区二区883| 狠狠色丁香久久婷婷综合丁香| 蜜桃视频一区二区| 人人精品人人爱| 免费看精品久久片| 蜜芽一区二区三区| 免费观看一级欧美片| 婷婷中文字幕综合| 人妖欧美一区二区| 九九九精品视频| 国产最新精品精品你懂的| 国产黄色精品视频| 国产成人精品三级| 成人aa视频在线观看| 99久久精品国产网站| 91丝袜美腿高跟国产极品老师 | 91在线国内视频| 色综合天天综合网国产成人综合天| 99精品视频一区二区三区| 99久久精品国产毛片| 色噜噜夜夜夜综合网| 精品视频1区2区3区| 91麻豆精品国产91久久久资源速度| 欧美精品亚洲一区二区在线播放| 日韩你懂的在线观看| 久久久久久久国产精品影院| 中文字幕视频一区| 亚洲亚洲精品在线观看| 久久成人免费网站| 成人亚洲一区二区一| 欧美在线播放高清精品| 日韩欧美亚洲国产另类| 亚洲国产精品成人综合| 亚洲精品一二三区| 日本va欧美va精品| 国产高清无密码一区二区三区| 91在线视频在线| 日韩高清在线观看| 成人性生交大片| 国产精品一卡二卡| 国产精品白丝jk黑袜喷水| 国产成人综合视频| 色网站国产精品| 日韩精品一区在线| 亚洲欧美国产三级| 久久国产欧美日韩精品| 91香蕉视频mp4| 日韩视频免费观看高清完整版| 国产精品免费免费| 在线观看一区二区视频| 成人小视频免费在线观看| 欧美日韩一级视频| 国产喂奶挤奶一区二区三区| 亚洲国产精品久久人人爱蜜臀| 国产久卡久卡久卡久卡视频精品| 91久久精品一区二区二区| 欧美xfplay| 亚洲一区二区三区四区中文字幕| 国产精品一区二区在线播放| 国产精品沙发午睡系列990531| 国产成人在线电影| 日韩一区二区三区四区| 国产精品不卡一区| 国产成人av福利| 中文字幕免费观看一区| 韩国成人精品a∨在线观看| 欧美午夜片在线观看| 中文字幕精品三区| av不卡在线观看| 日韩高清电影一区| 久久久噜噜噜久久中文字幕色伊伊| 国产综合久久久久久久久久久久| 国产亲近乱来精品视频| 成人自拍视频在线观看| 亚洲日本一区二区| 欧美精品日日鲁夜夜添| 国产米奇在线777精品观看| 国产日产欧美一区二区视频| a在线欧美一区| 五月综合激情婷婷六月色窝| 久久综合色综合88| 色呦呦网站一区| 国产在线一区二区综合免费视频| 69堂国产成人免费视频| 午夜一区二区三区视频| 99综合电影在线视频| 亚洲欧美乱综合| 免费欧美日韩国产三级电影| 国产高清不卡二三区| 精品国产一二三区| 久久精品国产澳门| 日韩欧美激情四射| 奇米综合一区二区三区精品视频 | 欧美一级二级三级乱码| 亚洲一区二区三区在线| 色久综合一二码| 一区二区三区精品视频| 91官网在线免费观看| 亚洲精品菠萝久久久久久久| 色播五月激情综合网| 亚洲黄色性网站| 欧洲av在线精品| 亚洲永久免费视频| 欧美色图12p| 日韩不卡免费视频| 日韩一级免费一区| 国产在线精品不卡| 久久久精品tv| 成人激情小说乱人伦| 亚洲欧洲日韩在线| 日本道色综合久久| 亚洲第一激情av| 欧美一级艳片视频免费观看| 麻豆91精品91久久久的内涵| 日韩女优av电影在线观看| 国产成a人无v码亚洲福利| 国产精品成人网| 欧美少妇一区二区| 久久激情五月激情| 国产精品视频一区二区三区不卡| 99久久久免费精品国产一区二区| 亚洲国产乱码最新视频| 日韩视频在线一区二区| 粉嫩欧美一区二区三区高清影视| 国产精品久久久久久久午夜片 | 7777精品伊人久久久大香线蕉超级流畅| 天涯成人国产亚洲精品一区av| 精品久久久久久综合日本欧美| 成人av第一页| 日本视频在线一区|