www.pudn.com > dip_1_1_bmp2jpeg.rar > global.h
#ifndef __GLOBAL__
#define __GLOBAL__
//////////////////////////////////////////////////////////////////////////
#define EOB 0x00
#define PI 3.14159265358979323846
//-------------------------------- 全局变量---------------------------------------
// DCT转换尺寸
static const BYTE myDCTSIZE = 8;
static const BYTE myDCTBLOCKSIZE = 64;
//量化后DC范围在-2^11 - 2^11 - 1之间,量化后AC范围在-2^10 - 2^10 - 1之间
static const INT my_AC_MAX_QUANTED = 1023; //量化后AC的最大值
static const INT my_AC_MIN_QUANTED = -1024; //量化后AC的最小值
static const INT my_DC_MAX_QUANTED = 2047; //量化后DC的最大值
static const INT my_DC_MIN_QUANTED = -2048; //量化后DC的最小值
// 存放DQT段的2个量化表
static BYTE myYQT[myDCTBLOCKSIZE]; // DCTBLOCKSIZE = 64 ;
static BYTE myUVQT[myDCTBLOCKSIZE];
// 存放2个FDCT变换要求格式的量化表
static FLOAT myYQT_DCT[myDCTBLOCKSIZE]; // DCTBLOCKSIZE = 64 ;
static FLOAT myUVQT_DCT[myDCTBLOCKSIZE];
static BYTE myVLI_TAB[4096];
static BYTE* mypVLITAB; //VLI_TAB的别名,使下标在-2048-2048
//正向 8x8 Z变换表
static const BYTE myFZBT[64] =
{
0, 1, 5, 6, 14,15,27,28,
2, 4, 7, 13,16,26,29,42,
3, 8, 12,17,25,30,41,43,
9, 11,18,24,31,40,44,53,
10,19,23,32,39,45,52,54,
20,22,33,38,46,51,55,60,
21,34,37,47,50,56,59,61,
35,36,48,49,57,58,62,63
};
static SHORT msk_sign[12] ={
0x0000,0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080,0x0100,0x0200,0x0400
};
// Y 分量 DC 系数码表
static BYTE STD_Y_DC_NR[16]={0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0}; // 各比特长度码字个数!
// UV 分量 DC 系数码表
static BYTE STD_UV_DC_NR[16]={0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0}; // 各比特长度码字个数!
// Y 分量 AC 系数码表
static BYTE STD_Y_AC_NR[16]={0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0X7D };// 各比特长度码字个数! 0X7D = 125
// UV 分量 AC 系数码表
static BYTE STD_UV_AC_NR[16]={0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0X77}; // 各比特长度码字个数! 0X77 = 119
static BYTE mySTD_Y_DC_NRCODES[17];
static BYTE mySTD_UV_DC_NRCODES[17];
static BYTE mySTD_Y_AC_NRCODES[17];
static BYTE mySTD_UV_AC_NRCODES[17];
//////////////////////////////////////////////////////////////////////////
typedef struct tagVLCTABLE {
BYTE sym1_val; // 码字中间格式的符号1, DC码表为(Size), AC码表为(RunLength, Size)
BYTE codeLen; // huffman 码字长度,最大为16,用一字节表示
UINT codeword; // huffman 码字的值,不超过16位,这里用32位记录
}VLCTABLE;
//定义四张Huffman码字表,码表按照码字的大小顺序排序;
static VLCTABLE VLCTAB_DC_Y[12];
static VLCTABLE VLCTAB_DC_UV[12];
static VLCTABLE VLCTAB_AC_Y[162];
static VLCTABLE VLCTAB_AC_UV[162];
/*
//DC系数Y分量码表
static VLCTABLE VLCTAB_DC_Y[12] = {
{0,2,0}, {1,3,2}, {2,3,3}, {3,3,4},
{4,3,5}, {5,3,6}, {6,4,14}, {7,5,30},
{8,6,62}, {9,7,126}, {10,8,254}, {11,9,510}
};
//DC系数UV分量码表
static VLCTABLE VLCTAB_DC_UV[12] = {
{0,2,0}, {1,2,1}, {2,2,2}, {3,3,6},
{4,4,14}, {5,5,30}, {6,6,62}, {7,7,126},
{8,8,254}, {9,9,510}, {10,10,1022},{11,11,2046}
};
//AC系数Y分量码表
static VLCTABLE VLCTAB_AC_Y[162] = {
{0x01,2,0}, {0x02,2,1}, {0x03,3,4}, {0x00,4,10}, {0x04,4,11}, {0x11,4,12},
{0x05,5,26}, {0x12,5,27}, {0x21,5,28}, {0x31,6,58}, {0x41,6,59}, {0x06,7,120},
{0x13,7,121}, {0x51,7,122}, {0x61,7,123}, {0x07,8,248}, {0x22,8,249}, {0x71,8,250},
{0x14,9,502}, {0x32,9,503}, {0x81,9,504}, {0x91,9,505}, {0xa1,9,506}, {0x08,10,1014},
{0x23,10,1015}, {0x42,10,1016}, {0xb1,10,1017}, {0xc1,10,1018}, {0x15,11,2038}, {0x52,11,2039},
{0xd1,11,2040}, {0xf0,11,2041}, {0x24,12,4084}, {0x33,12,4085}, {0x62,12,4086}, {0x72,12,4087},
{0x82,15,32704},{0x09,16,65410},{0x0a,16,65411},{0x16,16,65412}, {0x17,16,65413},{0x18,16,65414},
{0x19,16,65415},{0x1a,16,65416},{0x25,16,65417},{0x26,16,65418}, {0x27,16,65419},{0x28,16,65420},
{0x29,16,65421},{0x2a,16,65422},{0x34,16,65423},{0x35,16,65424}, {0x36,16,65425},{0x37,16,65426},
{0x38,16,65427},{0x39,16,65428},{0x3a,16,65429},{0x43,16,65430}, {0x44,16,65431},{0x45,16,65432},
{0x46,16,65433},{0x47,16,65434},{0x48,16,65435},{0x49,16,65436}, {0x4a,16,65437},{0x53,16,65438},
{0x54,16,65439},{0x55,16,65440},{0x56,16,65441},{0x57,16,65442}, {0x58,16,65443},{0x59,16,65444},
{0x5a,16,65445},{0x63,16,65446},{0x64,16,65447},{0x65,16,65448}, {0x66,16,65449},{0x67,16,65450},
{0x68,16,65451},{0x69,16,65452},{0x6a,16,65453},{0x73,16,65454}, {0x74,16,65455},{0x75,16,65456},
{0x76,16,65457},{0x77,16,65458},{0x78,16,65459},{0x79,16,65460}, {0x7a,16,65461},{0x83,16,65462},
{0x84,16,65463},{0x85,16,65464},{0x86,16,65465},{0x87,16,65466}, {0x88,16,65467},{0x89,16,65468},
{0x8a,16,65469},{0x92,16,65470},{0x93,16,65471},{0x94,16,65472}, {0x95,16,65473},{0x96,16,65474},
{0x97,16,65475},{0x98,16,65476},{0x99,16,65477},{0x9a,16,65478}, {0xa2,16,65479},{0xa3,16,65480},
{0xa4,16,65481},{0xa5,16,65482},{0xa6,16,65483},{0xa7,16,65484}, {0xa8,16,65485},{0xa9,16,65486},
{0xaa,16,65487},{0xb2,16,65488},{0xb3,16,65489},{0xb4,16,65490}, {0xb5,16,65491},{0xb6,16,65492},
{0xb7,16,65493},{0xb8,16,65494},{0xb9,16,65495},{0xba,16,65496}, {0xc2,16,65497},{0xc3,16,65498},
{0xc4,16,65499},{0xc5,16,65500},{0xc6,16,65501},{0xc7,16,65502}, {0xc8,16,65503},{0xc9,16,65504},
{0xca,16,65505},{0xd2,16,65506},{0xd3,16,65507},{0xd4,16,65508}, {0xd5,16,65509},{0xd6,16,65510},
{0xd7,16,65511},{0xd8,16,65512},{0xd9,16,65513},{0xda,16,65514}, {0xe1,16,65515},{0xe2,16,65516},
{0xe3,16,65517},{0xe4,16,65518},{0xe5,16,65519},{0xe6,16,65520}, {0xe7,16,65521},{0xe8,16,65522},
{0xe9,16,65523},{0xea,16,65524},{0xf1,16,65525},{0xf2,16,65526}, {0xf3,16,65527},{0xf4,16,65528},
{0xf5,16,65529},{0xf6,16,65530},{0xf7,16,65531},{0xf8,16,65532}, {0xf9,16,65533},{0xfa,16,65534}
};
//AC系数UV分量码表
static VLCTABLE VLCTAB_AC_UV[162] ={
{0x00,2,0}, {0x01,2,1}, {0x02,3,4}, {0x03,4,10}, {0x11,4,11}, {0x04,5,24},
{0x05,5,25}, {0x21,5,26}, {0x31,5,27}, {0x06,6,56}, {0x12,6,57}, {0x41,6,58},
{0x51,6,59}, {0x07,7,120}, {0x61,7,121}, {0x71,7,122}, {0x13,8,246}, {0x22,8,247},
{0x32,8,248}, {0x81,8,249}, {0x08,9,500}, {0x14,9,501}, {0x42,9,502}, {0x91,9,503},
{0xa1,9,504}, {0xb1,9,505}, {0xc1,9,506}, {0x09,10,1014}, {0x23,10,1015}, {0x33,10,1016},
{0x52,10,1017}, {0xf0,10,1018}, {0x15,11,2038}, {0x62,11,2039}, {0x72,11,2040}, {0xd1,11,2041},
{0x0a,12,4084}, {0x16,12,4085}, {0x24,12,4086}, {0x34,12,4087}, {0xe1,14,16352},{0x25,15,32706},
{0xf1,15,32707},{0x17,16,65416}, {0x18,16,65417},{0x19,16,65418}, {0x1a,16,65419},{0x26,16,65420},
{0x27,16,65421},{0x28,16,65422}, {0x29,16,65423},{0x2a,16,65424}, {0x35,16,65425},{0x36,16,65426},
{0x37,16,65427},{0x38,16,65428}, {0x39,16,65429},{0x3a,16,65430}, {0x43,16,65431},{0x44,16,65432},
{0x45,16,65433},{0x46,16,65434}, {0x47,16,65435},{0x48,16,65436}, {0x49,16,65437},{0x4a,16,65438},
{0x53,16,65439},{0x54,16,65440}, {0x55,16,65441},{0x56,16,65442}, {0x57,16,65443},{0x58,16,65444},
{0x59,16,65445},{0x5a,16,65446}, {0x63,16,65447},{0x64,16,65448}, {0x65,16,65449},{0x66,16,65450},
{0x67,16,65451},{0x68,16,65452}, {0x69,16,65453},{0x6a,16,65454}, {0x73,16,65455},{0x74,16,65456},
{0x75,16,65457},{0x76,16,65458}, {0x77,16,65459},{0x78,16,65460}, {0x79,16,65461},{0x7a,16,65462},
{0x82,16,65463},{0x83,16,65464}, {0x84,16,65465},{0x85,16,65466}, {0x86,16,65467},{0x87,16,65468},
{0x88,16,65469},{0x89,16,65470}, {0x8a,16,65471},{0x92,16,65472}, {0x93,16,65473},{0x94,16,65474},
{0x95,16,65475},{0x96,16,65476}, {0x97,16,65477},{0x98,16,65478}, {0x99,16,65479},{0x9a,16,65480},
{0xa2,16,65481},{0xa3,16,65482}, {0xa4,16,65483},{0xa5,16,65484}, {0xa6,16,65485},{0xa7,16,65486},
{0xa8,16,65487},{0xa9,16,65488}, {0xaa,16,65489},{0xb2,16,65490}, {0xb3,16,65491},{0xb4,16,65492},
{0xb5,16,65493},{0xb6,16,65494}, {0xb7,16,65495},{0xb8,16,65496}, {0xb9,16,65497},{0xba,16,65498},
{0xc2,16,65499},{0xc3,16,65500}, {0xc4,16,65501},{0xc5,16,65502}, {0xc6,16,65503},{0xc7,16,65504},
{0xc8,16,65505},{0xc9,16,65506}, {0xca,16,65507},{0xd2,16,65508}, {0xd3,16,65509},{0xd4,16,65510},
{0xd5,16,65511},{0xd6,16,65512}, {0xd7,16,65513},{0xd8,16,65514}, {0xd9,16,65515},{0xda,16,65516},
{0xe2,16,65517},{0xe3,16,65518}, {0xe4,16,65519},{0xe5,16,65520}, {0xe6,16,65521},{0xe7,16,65522},
{0xe8,16,65523},{0xe9,16,65524}, {0xea,16,65525},{0xf2,16,65526}, {0xf3,16,65527},{0xf4,16,65528},
{0xf5,16,65529},{0xf6,16,65530}, {0xf7,16,65531},{0xf8,16,65532}, {0xf9,16,65533},{0xfa,16,65534}
};
*/
//////////////////////////////////////////////////////////////////////////
#endif