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

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

?? ac_bitplanecoding.c

?? CCSDS空間圖像圖像壓縮標準c源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
Implementation of CCSDS 122.0-B-1 Recommended Standard
Please note:
(1)	Before you download and use the program, you must read and agree the license agreement carefully. 
(2)	We supply the source code and program WITHOUT ANY WARRANTIES. The users will be responsible 
        for any loses or damages caused by the use of the source code and the program. 

Author: 
Hongqiang Wang
Department of Electrical Engineering
University of Nebraska-Lincoln
Email: hqwang@bigred.unl.edu, hqwang@eecomm.unl.edu

Your comment and suggestions are welcome. Please report bugs to me via email and I would greatly appreciate it. 
Jan. 21, 2007
*/ 


#include <malloc.h>
#include <math.h>
#include "global.h"

extern void BlockScanEncode(StructCodingPara *PtrCoding, 	 BitPlaneBits *BlockInfo);

extern void StagesEnCoding(StructCodingPara *PtrCoding,   BitPlaneBits *BlockInfo);

extern void StagesDeCoding(StructCodingPara *PtrCoding,   BitPlaneBits *BlockInfo);

void ACDepthEncoder(StructCodingPara *PtrCoding,	BitPlaneBits *BlockInfo);

short ACDepthDecoder(StructCodingPara *PtrCoding,	 BitPlaneBits *BlockInfo);

void ACGaggleEncoding(StructCodingPara *PtrCoding, 
					  BitPlaneBits *BlockInfo, 
					  int StartIndex,
					  int gaggles, 
					  int Max_k, 
					  int ID_Length)
{
	int i = 0; 
	int k = 0; 
	int min_k = 0;
	int temp_DC = 0;
		
	DWORD32 min_bits = 0xFFFF; 
	DWORD32 total_bits = 0; 

	if (gaggles == 0)
		return;
	
	if(PtrCoding->PtrHeader->Header.Part3.OptACSelect == TRUE)
	{
		//calculate  the uncoded:
		WORD16 uncoded_bits = PtrCoding->N * gaggles;
		for ( k = 0; k <= Max_k; k ++)
		{
			total_bits = k * gaggles;

			for (i = StartIndex; i < StartIndex + gaggles; i ++)
				total_bits += ((BlockInfo[i].MappedAC >> k ) + 1);			
			
			if( total_bits < min_bits)
			{
				min_bits = total_bits;
				min_k = k;
			}
		}

		if (min_bits < uncoded_bits)
		{
			// Get the one that gives the minimum number of bits. 
			BitsOutput(PtrCoding, min_k, ID_Length);
			if(StartIndex == 1)
				BitsOutput(PtrCoding, BlockInfo[0].MappedAC, PtrCoding->N);
			for (i = StartIndex; i < StartIndex + gaggles; i ++)
			{
				temp_DC = BlockInfo[i].MappedAC;
				temp_DC >>= min_k;	
				temp_DC++;
				// determine the length of the symbol
				BitsOutput(PtrCoding, 1, temp_DC);	
			}
			
			for (i = StartIndex; i < StartIndex + gaggles; i ++)
				BitsOutput(PtrCoding, BlockInfo[i].MappedAC, min_k);
		}
		else
		{		
			UCHAR8 ones = ~0;			
			BitsOutput(PtrCoding, ones, ID_Length);			
			if(StartIndex == 1)
				BitsOutput(PtrCoding, BlockInfo[0].MappedAC, PtrCoding->N);
			for (i = StartIndex; i < StartIndex + gaggles; i ++)
				BitsOutput(PtrCoding, BlockInfo[i].MappedAC, PtrCoding->N);
			return;
		}
	}
	else
	{
		// Using so called Heuristic procedure. 
		int delta = 0;
		for (i = StartIndex; i < StartIndex + gaggles; i ++)
			delta += BlockInfo[i].MappedAC;
		if (64 *  delta >= 23 * gaggles * PtrCoding->N)
		{
			// uncoded/
			UCHAR8 ones = ~0;			
			BitsOutput(PtrCoding, ones, ID_Length);
			for (i = StartIndex; i < StartIndex + gaggles; i ++)
				BitsOutput(PtrCoding, BlockInfo[i].MappedAC, PtrCoding->N);
			return;
		}
		else if (207 * gaggles > 128 * delta)
		{
			k = 0;
		}
		else if (gaggles * (1<<(PtrCoding->N - 5)) <= 128 * delta + 49 * gaggles)
		{
			k = PtrCoding->N - 2;
		}
		else
		{
			long sum = 128 * delta + 49 * gaggles; 
			k = 0;
			while (gaggles * (1 << (k + 7)) <= sum)
				k++;
			k--;
		}	
		min_k = k; 
		BitsOutput(PtrCoding, min_k, ID_Length);

		if(StartIndex == 1)
			BitsOutput(PtrCoding, BlockInfo[0].MappedAC, PtrCoding->N);

		for (i = StartIndex; i < StartIndex + gaggles; i ++)
		{
			temp_DC = BlockInfo[i].MappedAC;
			temp_DC >>= min_k;	
			temp_DC++;
			// determine the length of the symbol
			BitsOutput(PtrCoding, 1, temp_DC);	
		}	
		for (i = StartIndex; i < StartIndex + gaggles; i ++)
			BitsOutput(PtrCoding, BlockInfo[i].MappedAC, min_k);
	}	
}




void DPCM_ACMapper(BitPlaneBits *BlockInfo,
				   int size,
				   short N)
{
	short *diff_AC;
	short theta = 0;  
	long i;
	int X_Min = 0;
	int X_Max = ((1 << N) - 1) ;

	diff_AC = (short *)calloc(size,sizeof(short)); 
	diff_AC[0] = BlockInfo[0].BitMaxAC;
	BlockInfo[0].MappedAC = BlockInfo[0].BitMaxAC;
	for(i = 1; i < size; i ++)
		diff_AC[i] = BlockInfo[i].BitMaxAC - BlockInfo[i-1].BitMaxAC;

	for ( i = 1; i < size; i ++)
	{
		theta = min(BlockInfo[i-1].BitMaxAC - X_Min, X_Max - BlockInfo[i-1].BitMaxAC);
		if (diff_AC[i] >= 0 && diff_AC[i] <= theta)
		{
			BlockInfo[i].MappedAC = 2 * diff_AC[i];
		}
		else if(diff_AC[i] < 0 && diff_AC[i] >= -theta)
		{
			BlockInfo[i].MappedAC = - 2 * diff_AC[i] - 1;
		}
		else
		{
			BlockInfo[i].MappedAC = theta + abs(diff_AC[i]);
		}
	}
	free(diff_AC);
	return;
}



void ACDepthEncoder(StructCodingPara *PtrCoding,
					BitPlaneBits *BlockInfo)
{
	SINT GaggleStartIndex; 
	UCHAR8 Max_k; 
	UCHAR8 ID_Length;
	UINT32 index = 0;
	UINT32 bit_num= 0;
	UINT32 counter = 0;
	UCHAR8 gaggles ; // initial value is 15.

	DOUBLE4 temp; 	

	temp = log10(1 + PtrCoding->PtrHeader->Header.Part1.BitDepthAC_5Bits) / log10(2);

	if (temp - (short)temp > 0 )			
	{
		PtrCoding->N = (UCHAR8)(temp + 1);
	}
	else
	{
		PtrCoding->N = (UCHAR8)temp;
	}

	DPCM_ACMapper(BlockInfo, PtrCoding->PtrHeader->Header.Part3.S_20Bits, PtrCoding->N);

	if ( PtrCoding->N == 2) 
	{
		Max_k = 0;
		ID_Length = 1;
	}
	else if (PtrCoding->N <=4)
	{
		Max_k = 2;
		ID_Length = 2;	
	}
	else if (PtrCoding->N <=5)
	{
		Max_k = 6;
		ID_Length = 3;	
	}
	else 
	{
		ErrorMsg(BPE_DATA_ERROR);	
	}

	// determine which one results in the minimum bits used. 
	// adaptive entropy coder. We will select the one results in
	// the minimum number of bits. 
	
	gaggles = GAGGLE_SIZE - 1;

	if (PtrCoding->PtrHeader->Header.Part3.S_20Bits < gaggles)
		gaggles = (UCHAR8) (PtrCoding->PtrHeader->Header.Part3.S_20Bits - 1);
	// output the first reference symbol:

	GaggleStartIndex = 1;

	ACGaggleEncoding(PtrCoding, BlockInfo, GaggleStartIndex,
		gaggles, Max_k, ID_Length);

	if(PtrCoding->SegmentFull == TRUE) 
		return;

	GaggleStartIndex += gaggles;
	gaggles = GAGGLE_SIZE;	

	while(PtrCoding->PtrHeader->Header.Part3.S_20Bits - GaggleStartIndex >= gaggles)
	{		 
		ACGaggleEncoding(PtrCoding, BlockInfo, GaggleStartIndex,	gaggles, Max_k, ID_Length);

		GaggleStartIndex += gaggles;

		if(PtrCoding->SegmentFull == TRUE) 
			return;
	}	
	gaggles = (UCHAR8)(PtrCoding->PtrHeader->Header.Part3.S_20Bits - GaggleStartIndex);		

	ACGaggleEncoding(PtrCoding, BlockInfo, GaggleStartIndex, gaggles, Max_k, ID_Length);

	return;
}



void ACBpeEncoding(StructCodingPara *PtrCoding,    BitPlaneBits *BlockInfo)
{
	WORD16 i = 0;
	UCHAR8 BitPlane = 0;

////////////////////////////////////////////////////////////////////////////////////////
	// The link nodes PlaneSym are used to coding of the bit planes. Contains a 
	// Link data structure. It encodes more than 16 blocks at this time. 
	// Need to modify it to encode up to 16 blocks only. May 20 2004
	if (PtrCoding->PtrHeader->Header.Part1.BitDepthAC_5Bits != 0) 
		// Bit plane scan is not necessary if BitDepthAC = 0. 
	{
		if (PtrCoding->PtrHeader->Header.Part1.BitDepthAC_5Bits == 1)
		{ //only the lowest bit plane has valud AC component manitude.
			for ( i = 0; i < PtrCoding->PtrHeader->Header.Part3.S_20Bits; i++)
				BitsOutput(PtrCoding, BlockInfo[i].BitMaxAC, 1);	
		}
		else
		{				
			// returned is the mapped ac value. 
			ACDepthEncoder(PtrCoding, BlockInfo);
		}
			
			// 3.2 Family tree scaning sequence in a segment. 

		for ( BitPlane = PtrCoding->PtrHeader->Header.Part1.BitDepthAC_5Bits ; 
		BitPlane > 0; BitPlane --)
		{
			PtrCoding->BitPlane = BitPlane;
			if((PtrCoding->PtrHeader->Header.Part2.BitPlaneStop_5Bits == BitPlane)
				&&(PtrCoding->PtrHeader->Header.Part1.Part2Flag == TRUE))
				return;

/////////////////////////////////////////////////////////////////////////
//////////////////////////  Stage 0   ///////////////////////////////////	
// encode the DC component (single bit only)
			if (PtrCoding->PtrHeader->Header.Part4.DWTType == INTEGER_WAVELET)
			{
				if ((BitPlane <= PtrCoding->QuantizationFactorQ) && 
					(PtrCoding->QuantizationFactorQ >
					PtrCoding->PtrHeader->Header.Part4.CustomWtLL3_2bits ) && 
					PtrCoding->PtrHeader->Header.Part4.CustomWtLL3_2bits < BitPlane)
				{						
					// output the DC bits that have been shifted out
					for(i = 0; i < PtrCoding->PtrHeader->Header.Part3.S_20Bits;i++)
						BitsOutput(PtrCoding, ((BlockInfo[i].DCRemainder >> (BitPlane - 1)) & 0x01), 1);
				}
			}
			else
			{
				if (BitPlane <= PtrCoding->QuantizationFactorQ) 
				{
					// output the DC bits that have been shifted out
					for(i = 0; i < PtrCoding->PtrHeader->Header.Part3.S_20Bits;i++)
						BitsOutput(PtrCoding, ((BlockInfo[i].DCRemainder >> (BitPlane - 1)) & 0x01), 1);
				}
			}
					
/////////////////////////////////////////////////////////////////////////					
		
			if(PtrCoding->SegmentFull == TRUE) 
				return;

			BlockScanEncode(PtrCoding, BlockInfo);	

			if(PtrCoding->SegmentFull == TRUE) 
				return;

			// ***************************  4. Stages coding *********************************//
			StagesEnCoding(PtrCoding, BlockInfo);		

			if(PtrCoding->SegmentFull == TRUE) 
				return;

		}		
	}
}



void CheckUsefill(StructCodingPara * PtrCoding)
{

	if(PtrCoding->PtrHeader->Header.Part2.SegByteLimit_27Bits != 0 
		&& PtrCoding->PtrHeader->Header.Part2.UseFill == TRUE)
	{
		if((PtrCoding->PtrHeader->Header.Part2.SegByteLimit_27Bits << 3) < 
			PtrCoding->Bits->SegBitCounter)
		{ 
			int RemainderBits = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一级大片在线| 日韩欧美中文字幕一区| 成人综合激情网| 国产主播一区二区三区| 国产一区二区三区视频在线播放| 蜜臀久久99精品久久久画质超高清 | 国产精品国产自产拍在线| 久久久精品国产免大香伊| 精品捆绑美女sm三区| 久久久久亚洲综合| 国产欧美久久久精品影院| 日本一区二区三区四区 | 成人动漫一区二区在线| www.一区二区| 色播五月激情综合网| 欧美日韩在线直播| 日韩欧美一区在线观看| 久久天堂av综合合色蜜桃网 | 成人不卡免费av| 97精品电影院| 欧美一级片在线观看| 国产午夜精品一区二区三区四区| 国产精品国产三级国产专播品爱网 | 91麻豆精品国产无毒不卡在线观看| 91麻豆精品久久久久蜜臀| 久久久精品人体av艺术| 依依成人精品视频| 九色porny丨国产精品| 成人av在线播放网址| 欧美日韩国产一区| 国产精品免费aⅴ片在线观看| 亚洲第一会所有码转帖| 国产成人一级电影| 91超碰这里只有精品国产| 欧美国产成人精品| 日本欧美一区二区三区| 波多野结衣在线aⅴ中文字幕不卡| 欧美在线你懂得| 国产亚洲欧美日韩日本| 亚洲丰满少妇videoshd| 成人免费福利片| 日韩免费福利电影在线观看| 中文字幕中文字幕在线一区 | 久久精品一区二区三区av| 亚洲精品精品亚洲| 国产福利精品导航| 日韩一级大片在线| 夜夜夜精品看看| 国产成人自拍高清视频在线免费播放| 欧美无砖砖区免费| 国产精品精品国产色婷婷| 极品美女销魂一区二区三区 | 91麻豆精品国产| 亚洲欧洲成人自拍| 麻豆精品国产传媒mv男同| 在线观看成人免费视频| 国产精品色眯眯| 国产福利精品导航| 精品国产凹凸成av人网站| 日韩制服丝袜av| 欧美日韩在线三级| 亚洲码国产岛国毛片在线| 丁香激情综合五月| 久久久久88色偷偷免费 | 中文字幕精品三区| 国产精品一二三| 精品国产第一区二区三区观看体验 | 精品久久久久久久久久久久久久久| 亚洲激情六月丁香| 色哦色哦哦色天天综合| 亚洲欧美国产高清| gogo大胆日本视频一区| 国产精品美女久久久久久久 | 国产一区二区h| 久久久美女艺术照精彩视频福利播放| 狂野欧美性猛交blacked| 日韩色在线观看| 久久精品国产亚洲5555| 欧美电视剧在线观看完整版| 久久国产精品露脸对白| 久久久国产综合精品女国产盗摄| 国产一区二区三区精品欧美日韩一区二区三区 | 日韩电影一区二区三区四区| 欧美精品xxxxbbbb| 久久精品av麻豆的观看方式| 亚洲精品一线二线三线| 粉嫩aⅴ一区二区三区四区| 亚洲欧洲精品一区二区三区 | 日韩一区二区在线观看视频播放| 日韩精品一级中文字幕精品视频免费观看| 欧美人与禽zozo性伦| 久久不见久久见中文字幕免费| 久久久精品综合| 色婷婷久久一区二区三区麻豆| 亚洲成人av电影在线| 精品久久久久99| 成人午夜在线免费| 亚洲图片自拍偷拍| 欧美变态口味重另类| a美女胸又www黄视频久久| 亚洲第一综合色| 国产色爱av资源综合区| 欧美午夜电影在线播放| 国产伦精品一区二区三区视频青涩| 国产精品久久久久久久久快鸭 | 奇米在线7777在线精品| 久久久精品免费免费| 91久久精品一区二区三区| 极品少妇xxxx偷拍精品少妇| 中文字幕一区二区三区不卡| 欧美一区二区视频观看视频 | 美女网站视频久久| 国产精品国产自产拍高清av王其| 在线欧美小视频| 国产99久久久国产精品| 日韩中文字幕区一区有砖一区| 欧美极品aⅴ影院| 91麻豆精品91久久久久久清纯| 国产老妇另类xxxxx| 亚洲电影一区二区| 中文乱码免费一区二区| 91精品国产91久久久久久最新毛片| 国产一区久久久| 日韩专区中文字幕一区二区| 亚洲色图制服诱惑| 久久久久免费观看| 欧美一区二区精品在线| 欧美性色综合网| www.99精品| 免费在线观看不卡| 亚洲午夜久久久| 亚洲同性同志一二三专区| 精品91自产拍在线观看一区| 欧美亚日韩国产aⅴ精品中极品| 国产精品99久| 国产在线精品一区二区| 日本亚洲三级在线| 亚洲国产一区二区三区| 亚洲人成精品久久久久| 国产精品电影院| 国产欧美日韩在线看| 久久久久久久综合色一本| 欧美哺乳videos| 日韩欧美国产小视频| 欧美一区二区视频观看视频 | 国产福利一区在线| 国产一区二区三区黄视频| 精品一区二区三区久久| 奇米色一区二区| 美女国产一区二区| 美女在线视频一区| 久久爱另类一区二区小说| 久久99精品久久久久婷婷| 免费精品99久久国产综合精品| 日日摸夜夜添夜夜添亚洲女人| 午夜视频在线观看一区| 亚洲自拍偷拍麻豆| 亚洲国产精品久久一线不卡| 一区二区三区精品在线| 亚洲成国产人片在线观看| 日韩精品一二区| 久久国产精品免费| 国产成人一级电影| 91麻豆国产在线观看| 欧美性做爰猛烈叫床潮| 欧美一区二区三区日韩视频| 欧美成人伊人久久综合网| 日本一区二区免费在线观看视频| 国产精品电影一区二区| 亚洲影视在线播放| 毛片av一区二区| 成人国产在线观看| 欧美色涩在线第一页| 日韩免费看网站| 中文字幕亚洲精品在线观看| 亚洲超碰97人人做人人爱| 国内精品免费**视频| 91在线观看免费视频| 91精品黄色片免费大全| 国产午夜精品一区二区三区嫩草| 中文字幕佐山爱一区二区免费| 丝袜亚洲另类欧美| 成人激情文学综合网| 欧美视频第二页| 国产亚洲精品精华液| 亚洲 欧美综合在线网络| 国产成a人亚洲| 欧美一区二区三区四区视频| 国产亚洲一区二区三区在线观看| 亚洲人成影院在线观看| 韩国视频一区二区| 欧美挠脚心视频网站| 国产精品久久久久毛片软件| 日本午夜精品视频在线观看| av不卡一区二区三区| 欧美tickling网站挠脚心| 一区av在线播放| 成人亚洲一区二区一| 5858s免费视频成人| 亚洲人成电影网站色mp4|