⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 global.h

📁 CCSDS空间图像图像压缩标准c源代码
💻 H
字号:
/* this header file defines global marco variabls and constans. Most c files
include this file*/

#include <stdio.h>

#define BUFFER_LENGTH 150
#define TRUE 1
#define FALSE 0
#define MAX_SYMBOLS_IN_BLOCK 22

#define INTEGER_WAVELET 1
#define FLOAT_WAVELET 0
#define GAGGLE_SIZE 16

#define NOTRANSPOSE 0
#define TRANSPOSE 1

typedef unsigned char UCHAR8;
typedef unsigned int UINT32;
typedef unsigned long DWORD32;
typedef unsigned short WORD16;
typedef unsigned char BOOL;
 
typedef signed int SINT;
typedef signed char SCHAR;
typedef signed long SLONG;
typedef double DOUBLE4;


#define ERR_MSG(err) BpeErrorMsg[err]
#define AMPLITUDE(a) ((a) >=0 ? (a): -(a))


#define BPE_OK            0
#define BPE_STREAM_END    1
#define BPE_FILE_ERROR   (2)
#define BPE_STREAM_ERROR (3)
#define BPE_DATA_ERROR   (4)
#define BPE_MEM_ERROR    (5)
#define BPE_BLOCKSCAN_CODING_ERROR    (6)
#define BPE_DYNAMICAL_RANGE_ERROR (7)
#define BPE_RATE_ERROR    (8)  
#define BPE_RATE_UNREACHABLE (9)
#define BPE_WAVELET_INVALID (10)
#define BPE_IMAGE_SIZE_WRONG (11)
#define BPE_SCALLING_FILE_ERROR (12)
#define BPE_INVALID_HEADER (13)
#define BPE_INVALID_CODING_PARAMETERS (14)
#define BPE_PATTERNING_CODING_ERROR (15) 
#define BPE_RICE_CODING_ERROR (16) 
#define BPE_STAGE_CODING_ERROR (17) 

#define	ENUM_NONE 0
#define	ENUM_TYPE_P 1
#define	ENUM_TRAN_B 2// Ds = 1 or 0.
#define	ENUM_TRAN_D 3 // i = 0, 1, 2.
#define	ENUM_TYPE_CI 4 
#define	ENUM_TRAN_GI 5
#define	ENUM_TRAN_HI 6 // i = 0, 1, 2. j = 0, 1, 2, 3; four bits
#define	ENUM_TYPE_HIJ 7

#define BLOCK_SIZE 8
#define NEGATIVE_SIGN 1
#define POSITIVE_SIGN 0

#define max(a,b)    (((a) > (b)) ? (a) : (b))
#define min(a,b)    (((a) < (b)) ? (a) : (b))
#define SIGN(var) ((var < 0) ? NEGATIVE_SIGN : POSITIVE_SIGN)


// restrictions on the coding parameters
#define IMAGE_WIDTH_MAX (1 << 20)
#define IMAGE_WIDTH_MIN 17
#define IMAGE_ROWS_MIN 17
#define SEGMENT_S_MIN 16
#define SEGMENT_S_MAX (1 << 20)
#define SEGBYTE_MAX (1 << 27)
#define DCDEPTH_MAX (1 << 5)
#define ACDEPTH_MAX (1 << 5)
//////////////////////////////////////////////////////////////////////////////

typedef struct BITSTREAM
{
	DWORD32 SegBitCounter;
	DWORD32 TotalBitCounter;
	UINT32 ByteBuffer_4Bytes;
	UINT32 CodeWordAlighmentBits;
	UCHAR8 CodeWord_Length;
	FILE *F_Bits;
} BitStream;

typedef struct SYMBOLDETAILS
{ 
	UCHAR8 sym_val : 4;
	UCHAR8 sym_len : 4;
	UCHAR8 sym_mapped_pattern : 4;
	UCHAR8 sign : 4;	
	UCHAR8 type : 3;
}StrSymbolDetails;

typedef struct TYPEC
{ 
	UCHAR8 TypeC: 4;
}StrTypeC;

typedef struct TRANH
{ 
	UCHAR8 TranH: 4;
}StrTranH;

typedef struct TRANHI
{ 
	UCHAR8 TranH: 4;
}StrTranHI;

typedef struct TYPEHIJ
{ 
	StrTranHI TypeHij[4];
}StrTypeHij;

typedef struct PARENTREFINE
{
	UCHAR8 ParentRefSymbol : 4;
	UCHAR8 ParentSymbolLength: 2;
}ParentRefine;

typedef struct CHILDRENREF
{
	WORD16 ChildrenRefSymbol : 12;
	UCHAR8 ChildrenSymbolLength: 4;
}ChildrenRefine;

typedef struct GRANDCHILDREDREF
{
	WORD16 GrandChildrenRefSymbol : 16;
	UCHAR8 GrandChildrenSymbolLength: 5;
}GrandChildrenRefine;

typedef struct REFINEMENTBIT
{ 
	ParentRefine RefineParent;	
	ChildrenRefine RefineChildren;	
	GrandChildrenRefine RefineGrandChildren[3];
}StrRefine;

typedef struct PLANEHIT
{
	UCHAR8 TypeP : 3; // i = 0, 1, 2.
	UCHAR8 TranB : 1; // Ds = 1 or 0. 
	UCHAR8 TranD : 3; // i = 0, 1, 2.
	StrTypeC TypeCi[3];
	UCHAR8 TranGi : 3;	
	StrTranH TranHi[3];
	StrTypeHij TypeHij[3];
}PlaneHit;

typedef struct BLOCKBITSHIT
{ 
	// Block address
	long **PtrBlockAddress;
	float **PtrBlockAddressFloating;

	//Bit plane and block information. 
	UCHAR8 BitPlane : 5;
	long BlockIndex : 20;
	// DC and AC_max information
	DWORD32 MappedDC;
	DWORD32 ShiftedDC;
	WORD16 DCRemainder; 
	float DecodingDCRemainder;
	WORD16 BitMaxAC;	
	WORD16 MappedAC;
	// status information ( hit history)
	//bit plane hit information.
	PlaneHit StrPlaneHitHistory;
	// code information. 
	StrSymbolDetails SymbolsBlock[MAX_SYMBOLS_IN_BLOCK];
	// refinement bits
	StrRefine RefineBits;

} BitPlaneBits;

//#define DEFAULT_DWORD 100000;

typedef struct HEADER_STRUCTURE_PART1
  {
	BOOL StartImgFlag : 1;  // 1 bits
	BOOL EngImgFlg : 1; // 1 bit
	UCHAR8 SegmentCount_8Bits : 8; //8 bits Senment count/ 
	UCHAR8 BitDepthDC_5Bits : 5; // 5 bits
	UCHAR8 BitDepthAC_5Bits : 5; // 5 bits
	BOOL Reserved : 1; // 1 bits
	BOOL Part2Flag : 1; // 1 bit
	BOOL Part3Flag : 1; // 1 bit
	BOOL Part4Flag : 1; //1 bit	
	UCHAR8 PadRows_3Bits : 3; // 3 bits replicate the last row so that new rows are integal of 8. 
	UCHAR8 Reserved_5Bits : 5; // 5 bits: 00000
}HeaderPart1;

typedef struct HEADER_STRUCTURE_PART2
{
	DWORD32 SegByteLimit_27Bits : 27; // 27 bits. 		
	BOOL DCstop : 1; //indicate whether the compressed output stops. 
	UCHAR8 BitPlaneStop_5Bits : 5; // 5 bits
	UCHAR8 StageStop_2Bits : 2; // 2 bits, transform input data quantication. 
	BOOL UseFill : 1;
	UCHAR8 Reserved_4Bits : 4; // 4 bits	
}HeaderPart2;


typedef struct HEADER_STRUCTURE_PART3
{
	DWORD32 S_20Bits : 20; //max number of blocks in a segment is limited to 2^20
	BOOL OptDCSelect : 1;
	BOOL OptACSelect : 1;
	UCHAR8 Reserved_2Bits : 2;
}HeaderPart3;

typedef struct HEADER_STRUCTURE_PART4
{
	BOOL DWTType : 1; 
	UCHAR8 Reserved_2Bits : 2; //
	BOOL SignedPixels : 1;
	UCHAR8 PixelBitDepth_4Bits : 4;
	DWORD32 ImageWidth_20Bits : 20; // maximum image width is limited 2^20
	BOOL TransposeImg : 1;
	UCHAR8 CodewordLength_2Bits : 2;
	BOOL Reserved : 1;
	BOOL CustomWtFlag : 1;
	UCHAR8 CustomWtHH1_2bits : 2;
	UCHAR8 CustomWtHL1_2bits : 2;
	UCHAR8 CustomWtLH1_2bits : 2;
	UCHAR8 CustomWtHH2_2bits : 2;
	UCHAR8 CustomWtHL2_2bits : 2;
	UCHAR8 CustomWtLH2_2bits : 2;
	UCHAR8 CustomWtHH3_2bits : 2;
	UCHAR8 CustomWtHL3_2bits : 2;
	UCHAR8 CustomWtLH3_2bits : 2;
	UCHAR8 CustomWtLL3_2bits : 2;
	WORD16 Reserved_11Bits : 11;
}HeaderPart4;
	
typedef struct HEADER
{
	HeaderPart1 Part1; 	 
	HeaderPart2 Part2;	 
	HeaderPart3 Part3;	 
	HeaderPart4 Part4;
}StructHeader;

typedef union HEADERUNION { 
	StructHeader Header;
	long Field[5];
}HeaderStruct;


typedef struct STR_STOPLOCATION { 
	char BitPlaneStopDecoding; // for find adjustment. 
	long BlockNoStopDecoding;
	short TotalBitsReadThisTime; 
	BOOL LocationFind;
	char X_LocationStopDecoding;
	char Y_LocationStopDecoding;
	unsigned char stoppedstage;
}StrStopLocation;


typedef struct CODINGPARAMETERS
{
	BitStream *Bits;
	UCHAR8 BitPlane;
	float BitsPerPixel;      // default coding BitsPerPixel, bits per pixels
	DWORD32 DecodingAllowedBitsSizeInSegment;      // for decoding purpose. 
	BOOL RateReached;
	StrStopLocation DecodingStopLocations;
	UCHAR8 QuantizationFactorQ:6;
	UINT32 BlockCounter;
	UINT32 block_index;
	UCHAR8 N;
	BOOL SegmentFull; 
	HeaderStruct * PtrHeader; 
	UINT32 ImageRows; 
	UINT32 ImageWidth; 
	UCHAR8 PadCols_3Bits;
	UCHAR8 PixelByteOrder:1; // default byte order. 1 means LSB first. 
	char InputFile[100];	
	char CodingOutputFile[100];
} StructCodingPara;

typedef struct BLOCKSTRING
{
	long **FreqBlkString;
	float ** FloatingFreqBlk;
	UINT32 Blocks;
	struct BLOCKSTRING *next;
	struct BLOCKSTRING *previous;
}StructFreBlockString;

 

void ErrorMsg(int err);
void BitsOutput(StructCodingPara *, 	DWORD32 ,  int );
short BitsRead(StructCodingPara *,   DWORD32 *,  short );

FILE *F_CodingInfo;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -