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

📄 jpegtypesandglobals.h

📁 JPEG压缩编码在TMS320VC5509的实现代码
💻 H
字号:
//JpegTypesAndGlobals.h
UINT ImageWidth;
UINT ImageHight;
UINT ImageWidthFixed;
UINT ImageHightFixed;
unsigned long ImageBufSize;
int OldDCY;//DC coefficients used for differential encoding
int OldDCCb;
int OldDCCr; 

#pragma DATA_SECTION(Rbuf,".onebuf");
BYTE Rbuf[64];

#pragma DATA_SECTION(Gbuf,".onebuf");	
BYTE Gbuf[64];

#pragma DATA_SECTION(Bbuf,".onebuf");
BYTE Bbuf[64];

int YDU[64];
int CbDU[64];
int CrDU[64];

const UINT ColorConvMatrix[3][3] = {
	{0x2645,0x4b22,0xe97},  //0.299    0.587    0.114
	{0xea68,0xd597,0x4000}, //-0.1687  -0.3313  0.5
	{0x4000,0xca68,0xF597}  //0.5      -0.4187  -0.0813
	};
	
const UINT zigzag[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
	};
	
#pragma DATA_SECTION(TmpCalBuf,".tmpbuf");
int TmpCalBuf[0x80];


const int LuminanceScaleTab[64] = {
	0x1000,0x1555,0x1555,0x1249,0x1555,0x1999,0x1000,0x1249,//8 , 6, 6, 7, 6, 5, 8, 7,
	0x1249,0x1249, 0xE38, 0xE38,0x1000, 0xCCC, 0xAAA, 0x666,//7 , 7, 9, 9, 8,10,12,20,
	 0x9D8, 0xAAA, 0xBA2, 0xBA2, 0xAAA, 0x51E, 0x71C, 0x6BC,//13,12,11,11,12,25,18,19,
	 0x888, 0x666, 0x469, 0x4EC, 0x421, 0x444, 0x469, 0x4EC,//15,20,29,26,31,30,29,26,
	 0x492, 0x492, 0x400, 0x38E, 0x2C8, 0x348, 0x400, 0x3C3,//28,28,32,36,46,39,32,34,
	 0x2E8, 0x3A8, 0x492, 0x492, 0x333, 0x253, 0x31F, 0x2E8,//44,35,28,28,40,55,41,44,
	 0x2AA, 0x29C, 0x276, 0x276, 0x276, 0x421, 0x348, 0x23E,//48,49,52,52,52,31,39,57,
	 0x219, 0x249, 0x28F, 0x222, 0x2C8, 0x282, 0x276, 0x28F //61,56,50,60,46,51,52,50
	};


const int ChrominanceScaleTab[64] = {
	0xE38,0xE38,0xE38,0xAAA,0xBA2,0xAAA,0x555,0x9D8,//9, 9, 9,12,11,12,24,13,
	0x9D8,0x555,0x28F,0x3E0,0x492,0x3E0,0x28F,0x28F,//13,24,50,33,28,33,50,50,
	0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,//50,50,50,50,50,50,50,50,
	0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,//50,50,50,50,50,50,50,50,
	0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,//50,50,50,50,50,50,50,50,
	0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,//50,50,50,50,50,50,50,50,
	0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,//50,50,50,50,50,50,50,50,
	0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,0x28F,0x28F	//50,50,50,50,50,50,50,50
	};


const BYTE JpegInfo[607] = {
	0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 
	0x00, 0x01, 0x00, 0x00, 0xFF, 0xDB, 0x00, 0x84, 0x00, 0x08, 0x06, 0x06, 0x07, 0x06, 0x05, 0x08, 
	0x07, 0x07, 0x07, 0x09, 0x09, 0x08, 0x0A, 0x0C, 0x14, 0x0D, 0x0C, 0x0B, 0x0B, 0x0C, 0x19, 0x12, 
	0x13, 0x0F, 0x14, 0x1D, 0x1A, 0x1F, 0x1E, 0x1D, 0x1A, 0x1C, 0x1C, 0x20, 0x24, 0x2E, 0x27, 0x20, 
	0x22, 0x2C, 0x23, 0x1C, 0x1C, 0x28, 0x37, 0x29, 0x2C, 0x30, 0x31, 0x34, 0x34, 0x34, 0x1F, 0x27, 
	0x39, 0x3D, 0x38, 0x32, 0x3C, 0x2E, 0x33, 0x34, 0x32, 0x01, 0x09, 0x09, 0x09, 0x0C, 0x0B, 0x0C, 
	0x18, 0x0D, 0x0D, 0x18, 0x32, 0x21, 0x1C, 0x21, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 
	0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 
	0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 
	0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0xFF, 0xC0, 0x00, 0x11, 0x08, 0x00, 
	0x08, 0x00, 0x08, 0x03, 0x01, 0x11, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xFF, 0xC4, 0x01, 
	0xA2, 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x10, 0x00, 
	0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, 0x7D, 0x01, 
	0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 
	0x71, 0x14, 0x32, 0x81, 0x91, 0xA1, 0x08, 0x23, 0x42, 0xB1, 0xC1, 0x15, 0x52, 0xD1, 0xF0, 0x24, 
	0x33, 0x62, 0x72, 0x82, 0x09, 0x0A, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x25, 0x26, 0x27, 0x28, 0x29, 
	0x2A, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 
	0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 
	0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 
	0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 
	0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 
	0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE1, 0xE2, 0xE3, 
	0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 
	0xFA, 0x01, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x11, 0x00, 
	0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, 0x00, 
	0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 
	0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xA1, 0xB1, 0xC1, 0x09, 0x23, 0x33, 0x52, 0xF0, 0x15, 
	0x62, 0x72, 0xD1, 0x0A, 0x16, 0x24, 0x34, 0xE1, 0x25, 0xF1, 0x17, 0x18, 0x19, 0x1A, 0x26, 0x27, 
	0x28, 0x29, 0x2A, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 
	0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 
	0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 
	0x89, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 
	0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 
	0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE2, 
	0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 
	0xFA, 0xFF, 0xDA, 0x00, 0x0C, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3F, 0x00
}; 


typedef struct _bitstream
{
	UINT Bitstream[514];
	UINT BitstreamLength;//它是以字为单位
	UINT LeftedWord;//最后一个没有添满的字,有效数据为从左到右
	UINT LeftedBitLength;//最后一个没有添满的字中有效数据的长度
}BIT_STREAM;

	
#pragma DATA_SECTION(OneBlockBitstream,".bitstream");
BIT_STREAM OneBlockBitstream;


typedef struct _DcCoffEncodeTab
{
	UINT BitStreamTab[12];
	UINT BitStreamLengthTab[12];
}DC_ENCODE_TAB;


const DC_ENCODE_TAB YDc_EncodeTab = {
	{0,2,3,4,5,6,0xe,0x1e,0x3e,0x7e,0xfe,0x1fe},
	{2,3,3,3,3,3, 4 ,  5 ,  6 ,  7 ,  8 ,   9 }
	};


const DC_ENCODE_TAB CrCbDc_EncodeTab = {
	{0,1,2,6,0xe,0x1e,0x3e,0x7e,0xfe,0x1fe,0x3fe,0x7fe},
	{2,2,2,3, 4 ,  5 ,  6 ,  7 ,  8 ,   9 ,  10 ,  11 }
	};

	
typedef struct _AcCoffEncodeTab
{
	UINT BitStreamTab[160];
	UINT BitStreamLengthTab[160];
}AC_ENCODE_TAB;


const AC_ENCODE_TAB YAc_EncodeTab = {
	{0x0,0x1,0x4,0xB,0x1A,0x78,0xF8,0x3F6,0xFF82,0xFF83,
	 0xC,0x1B,0x79,0x1F6,0x7F6,0xFF84,0xFF85,0xFF86,0xFF87,0xFF88,
	 0x1C,0xF9,0x3F7,0xFF4,0xFF89,0xFF8A,0xFF8B,0xFF8C,0xFF8D,0xFF8E,
	 0x3A,0x1F7,0xFF5,0xFF8F,0xFF90,0xFF91,0xFF92,0xFF93,0xFF94,0xFF95,
	 0x3B,0x3F8,0xFF96,0xFF97,0xFF98,0xFF99,0xFF9A,0xFF9B,0xFF9C,0xFF9D,
	 0x7A,0x7F7,0xFF9E,0xFF9F,0xFFA0,0xFFA1,0xFFA2,0xFFA3,0xFFA4,0xFFA5,
	 0x7B,0xFF6,0xFFA6,0xFFA7,0xFFA8,0xFFA9,0xFFAA,0xFFAB,0xFFAC,0xFFAD,
	 0xFA,0xFF7,0xFFAE,0xFFAF,0xFFB0,0xFFB1,0xFFB2,0xFFB3,0xFFB4,0xFFB5,
	 0x1F8,0x7FC0,0xFFB6,0xFFB7,0xFFB8,0xFFB9,0xFFBA,0xFFBB,0xFFBC,0xFFBD,
	 0x1F9,0xFFBE,0xFFBF,0xFFC0,0xFFC1,0xFFC2,0xFFC3,0xFFC4,0xFFC5,0xFFC6,
	 0x1FA,0xFFC7,0xFFC8,0xFFC9,0xFFCA,0xFFCB,0xFFCC,0xFFCD,0xFFCE,0xFFCF,
	 0x3F9,0xFFD0,0xFFD1,0xFFD2,0xFFD3,0xFFD4,0xFFD5,0xFFD6,0xFFD7,0xFFD8,
	 0x3FA,0xFFD9,0xFFDA,0xFFDB,0xFFDC,0xFFDD,0xFFDE,0xFFDF,0xFFE0,0xFFE1,
	 0x7F8,0xFFE2,0xFFE3,0xFFE4,0xFFE5,0xFFE6,0xFFE8,0xFFE8,0xFFE9,0xFFEA,
	 0xFFEB,0xFFEC,0xFFED,0xFFEE,0xFFEF,0xFFF0,0xFFF1,0xFFF2,0xFFF3,0xFFF4,
	 0xFFF5,0xFFF6,0xFFF7,0xFFF8,0xFFF9,0xFFFA,0xFFFB,0xFFFC,0xFFFD,0xFFFE},
	{0x2,0x2,0x3,0x4,0x5,0x7,0x8,0xA,0x10,0x10,
	 0x4,0x5,0x7,0x9,0xB,0x10,0x10,0x10,0x10,0x10,
	 0x5,0x8,0xA,0xC,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x6,0x9,0xC,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x6,0xA,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x7,0xB,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x7,0xC,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x8,0xB,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x9,0xF,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x9,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x9,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0xA,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0xA,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0xB,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10}
	 };


const AC_ENCODE_TAB CrCbAc_EncodeTab = {
	{0x1,0x4,0xA,0x18,0x19,0x38,0x78,0x1F4,0x3F6,0xFF4,
	 0xB,0x39,0xF6,0x1F5,0x7F6,0xFF5,0xFF88,0xFF89,0xFF8A,0xFF8B,
	 0x1A,0xF7,0x3F7,0xFF6,0x7FC2,0xFF8C,0xFF8D,0xFF8E,0xFF8F,0xFF90,
	 0x1B,0xF8,0x3F8,0xFF7,0xFF91,0xFF92,0xFF93,0xFF94,0xFF95,0xFF96,
	 0x3A,0x1F6,0xFF97,0xFF98,0xFF99,0xFF9A,0xFF9B,0xFF9C,0xFF9D,0xFF9E,
	 0x3B,0x3F9,0xFF9F,0xFFA0,0xFFA1,0xFFA2,0xFFA3,0xFFA4,0xFFA5,0xFFA6,
	 0x79,0x7F7,0xFFA7,0xFFA8,0xFFA9,0xFFAA,0xFFAB,0xFFAC,0xFFAD,0xFFAE,
	 0x7A,0x7F8,0xFFAF,0xFFB0,0xFFB1,0xFFB2,0xFFB3,0xFFB4,0xFFB5,0xFFB6,
	 0xF9,0xFFB7,0xFFB8,0xFFB9,0xFFBA,0xFFBB,0xFFBC,0xFFBD,0xFFBE,0xFFBF,
	 0x1F7,0xFFC0,0xFFC1,0xFFC2,0xFFC3,0xFFC4,0xFFC5,0xFFC6,0xFFC7,0xFFC8,
	 0x1F8,0xFFC9,0xFFCA,0xFFCB,0xFFCC,0xFFCD,0xFFCE,0xFFCF,0xFFD0,0xFFD1,
	 0x1F9,0xFFD2,0xFFD3,0xFFD4,0xFFD5,0xFFD6,0xFFD7,0xFFD8,0xFFD9,0xFFDA,
	 0x1FA,0xFFDB,0xFFDC,0xFFDD,0xFFDE,0xFFDF,0xFFE0,0xFFE1,0xFFE2,0xFFE3,
	 0x7F9,0xFFE4,0xFFE5,0xFFE6,0xFFE7,0xFFE8,0xFFE9,0xFFEA,0xFFEB,0xFFEC,
	 0x3FE0,0xFFED,0xFFEE,0xFFEF,0xFFF0,0xFFF1,0xFFF2,0xFFF3,0xFFF4,0xFFF5,
	 0x7FC3,0xFFF6,0xFFF7,0xFFF8,0xFFF9,0xFFFA,0xFFFB,0xFFFC,0xFFFD,0xFFFE},
	{0x2,0x3,0x4,0x5,0x5,0x6,0x7,0x9,0xA,0xC,
	 0x4,0x6,0x8,0x9,0xB,0xC,0x10,0x10,0x10,0x10,
	 0x5,0x8,0xA,0xC,0xF,0x10,0x10,0x10,0x10,0x10,
	 0x5,0x8,0xA,0xC,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x6,0x9,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x6,0xA,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x7,0xB,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x7,0xB,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x9,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x9,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x9,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0x9,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0xB,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0xE,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
	 0xF,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10}
	};


#pragma DATA_SECTION(YDCTzigzagQ,".tmpbuf");
int YDCTzigzagQ[64];	

#pragma DATA_SECTION(CbDCTzigzagQ,".tmpbuf");
int CbDCTzigzagQ[64];

#pragma DATA_SECTION(CrDCTzigzagQ,".tmpbuf");
int CrDCTzigzagQ[64];


#pragma DATA_SECTION(StrOperationSuccess,".notice");//操作成功
char StrOperationSuccess[] = "\n Operation Success \n ";

#pragma DATA_SECTION(StrFileNotOpenError,".notice");//文件没有打开
char StrFileNotOpenError[] = "\n Error ! File not open \n ";

#pragma DATA_SECTION(StrNotTrueColor,".notice");//不是24位真彩色
char StrNotTrueColor[] = "\n Error ! It is not a true color BMP file \n ";

//error message Table
#pragma DATA_SECTION(JpegErrorMessageTable,".notice");//操作成功
char *JpegErrorMessageTable[] = {
	StrOperationSuccess,//操作成功
	StrFileNotOpenError,//文件没有打开
	StrNotTrueColor,//不是24位真彩色
	StrFileNotOpenError,
	StrFileNotOpenError
	};

⌨️ 快捷键说明

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