📄 jpegfmt.h
字号:
//SLIDESHOW coeff buffer size: 0xC9700-0x7e900 =0x4ae00 = 306688 //THUMBNAIL coeff buffer size: 0x68700-0x1D880(360*224*1.5)=0x4ae80 =306816 #define JPEG_COEFFBUFF_SIZE_SLIDESHOW (JPEGFMT_BUFF_SIZE_SLIDESHOW_DEC_BASE-0x7e900)//306688 #define JPEG_COEFFBUFF_SIZE_THUMBNAIL (JPEGFMT_BUFF_SIZE_THUMBNAIL_DEC_BASE-0x1D880)//306816 //#define JPEG_COEFFBUFF_SIZE_THUMBNAIL (JPEGFMT_BUFF_SIZE_THUMBNAIL_DEC_BASE-0x7e900) #define JPEG_COEFFBUFF_SLIDESHOW_ADDR (JPEGFMT_BUFF_SLIDESHOW_DEC+0x7e900)//0x4024ca00 #define JPEG_COEFFBUFF_THUMBNAIL_ADDR (JPEGFMT_BUFF_THUMBNAIL_DEC+0x1D880)//0x404ec180 //#define JPEG_COEFFBUFF_THUMBNAIL_ADDR (JPEGFMT_BUFF_THUMBNAIL_DEC+0x07e900) #else//when DRAM_CONFIGURATION_TYPE_DVD == DRAM_SIZE_16 //THUMBNAIL total buffer size: 0x400DD000 + 0xe7000; size=231K DW //SLIDESHOW total buffer size: 0x400A0000 + 0x148000; size=328K DW //THUMBNAIL decoding buffer size: 231*1024*4 - 0x7e900 = 0xe7000 - 0x7e900 = 0x68700 =427776 //SLIDESHOW decoding buffer size: 328*1024*4 - 0x7e900 = 0x148000 - 0x7e900 = 0xC9700 =825088 //#define JPEGFMT_BUFF_THUMBNAIL_ST_ADDR (0x400DD000)//0x400dd000 //#define JPEGFMT_BUFF_SLIDESHOW_ST_ADDR (0x400A0000)//0x400a0000 //#define JPEGFMT_BUFF_THUMBNAIL_ST_ADDR //#define JPEGFMT_BUFF_SLIDESHOW_ST_ADDR //#define JPEGFMT_BUFF_THUMBNAIL_ST_ADDR (JPEGFMT_BUFF_SLIDESHOW_ST_ADDR+0xe7000) //#define JPEGFMT_BUFF_SLIDESHOW_END_ADDR (JPEGFMT_BUFF_SLIDESHOW_ST_ADDR+0x148000) #define JPEGFMT_BUFF_THUMBNAIL_ST_ADDR (DS_FRAMEBUF_THUMBNAIL_ST) #define JPEGFMT_BUFF_SLIDESHOW_ST_ADDR (DS_FRAMEBUF_SLIDESHOW_ST) #define JPEGFMT_BUFF_THUMBNAIL_END_ADDR (DS_FRAMEBUF_THUMBNAIL_END) #define JPEGFMT_BUFF_SLIDESHOW_END_ADDR (DS_FRAMEBUF_SLIDESHOW_END) //DISPLAY BUFFER STARTING ADDRESS #define JPEGFMT_BUFF_THUMBNAIL_DISP (JPEGFMT_BUFF_THUMBNAIL_ST_ADDR)//0x400dd000 #define JPEGFMT_BUFF_SLIDESHOW_DISP (JPEGFMT_BUFF_SLIDESHOW_ST_ADDR)//0x400a0000 #define JPEGFMT_BUFF_DISP0 (JPEGFMT_BUFF_SLIDESHOW_DISP)//0x400a0000 #define JPEGFMT_BUFF_DISP1 (JPEGFMT_BUFF_THUMBNAIL_DISP)//0x400dd000 //decoding + original buffer #define JPEGFMT_BUFF_THUMBNAIL_DEC (JPEGFMT_BUFF_THUMBNAIL_DISP + JPEG_DISPBUF_SIZE)//0x4015b900 #define JPEGFMT_BUFF_SLIDESHOW_DEC (JPEGFMT_BUFF_SLIDESHOW_DISP + JPEG_DISPBUF_SIZE)//0x4011e900 #define JPEGFMT_BUFF_SIZE_THUMBNAIL_DEC_BASE (0x68700)//427776 #define JPEGFMT_BUFF_SIZE_SLIDESHOW_DEC_BASE (0xC9700)//825088 //#define JPEGFMT_BUFF_SIZE_SLIDESHOW_DEC_BASE (0x68700) #define JPEGFMT_BUFF_SIZE_THUMBNAIL_DEC_PROG (0x1D880)// 360*224*1.5= 120960(0x1d880) #define JPEGFMT_BUFF_SIZE_SLIDESHOW_DEC_PROG (0x7E900)//518400 //#define JPEGFMT_BUFF_SIZE_SLIDESHOW_DEC_PROG (0x1D880) //SLIDESHOW coeff buffer size: 0xC9700-0x7e900 =0x4ae00 = 306688 //THUMBNAIL coeff buffer size: 0x68700-0x1D880(360*224*1.5)=0x4ae80 =306816 #define JPEG_COEFFBUFF_SIZE_SLIDESHOW (JPEGFMT_BUFF_SIZE_SLIDESHOW_DEC_BASE-0x7e900)//306688 #define JPEG_COEFFBUFF_SIZE_THUMBNAIL (JPEGFMT_BUFF_SIZE_THUMBNAIL_DEC_BASE-0x1D880)//306816 #define JPEG_COEFFBUFF_SLIDESHOW_ADDR (JPEGFMT_BUFF_SLIDESHOW_DEC+0x7e900)//0x4019d200 #define JPEG_COEFFBUFF_THUMBNAIL_ADDR (JPEGFMT_BUFF_THUMBNAIL_DEC+0x1D880)//0x40179180 //#define JPEG_COEFFBUFF_SIZE_SLIDESHOW (JPEGFMT_BUFF_SIZE_SLIDESHOW_DEC_BASE-0x1D880)#endif//#if(JPEG_TEST_16M== 1)#endif //16M*///---------------------------------------//senshong2.17a:16M solution//--------------------------------------- //THUMBNAIL total buffer size: 0x400A0000 + 0x1E8000; size=225K DW //SLIDESHOW total buffer size: 0x400A0000 + 0x181000; size=328K DW //THUMBNAIL decoding buffer size: 225*1024*4 - 0x7E900(640*432*1.5) = 0xe1000(921600) - 0x65400(414720) = 0x7BC00 =506880 //SLIDESHOW decoding buffer size: 328*1024*4 - 0xA8C00(640*432*1.5+640*432) = 0x148000(1343488) - 0xA8C00(691200) = 0x9f400 =652288 //THUMBNAIL coeff buffer size: 0x7BC00(506880) -0x36600 (464*320*1.5) = 0x7BC00(506880) - 0x36600(222720)=0x45600(284160) //SLIDESHOW coeff buffer size: 0x9f400(652288) - 0x5a300(592*416*1.5) = 0x9f400(652288) -0x5a300(369408)= 0x45100(282880)//--------------------------------------------------------// ----------------------------------//#if (DRAM_CONFIGURATION_TYPE_DVD == DRAM_SIZE_32)//#endif //32M// ----------------------------------// For 64M Solution////senshong 2.17 remove/*#if(JPEG_TEST_16M!=1 && DRAM_CONFIGURATION_TYPE_DVD!=DRAM_SIZE_16)//senshong2.16:avoid to simulate 16m,the define overlap 64m#if (DRAM_CONFIGURATION_TYPE_DVD == DRAM_SIZE_64 || DRAM_CONFIGURATION_TYPE_DVD == DRAM_SIZE_32) //old-fashioned declartions, for CT909A //Assume total buffer = DISP*2 + ORIG*2 // #define JPEGFMT_BUFF_TOTALSIZE (JPEG_ORIGBUF_SIZE * 2 + JPEG_DISPBUF_SIZE * 2) #define JPEGFMT_BUFF_START (DS_FRAMEBUF_ST) #define JPEGFMT_BUFF_DISP0 (JPEGFMT_BUFF_START) #define JPEGFMT_BUFF_ORIG (JPEGFMT_BUFF_START + JPEG_DISPBUF_SIZE) #define JPEGFMT_BUFF_TEMP (JPEGFMT_BUFF_ORIG + JPEG_ORIGBUF_SIZE) #define JPEGFMT_BUFF_DISP1 (JPEGFMT_BUFF_TEMP + JPEG_ORIGBUF_SIZE) #ifdef USE_EXTRA_INCOMING_BUFFER #define JPEG_DECBUFF_ADDR (DS_JPG_ORG_BUFF_ST) #define JPEG_DECBUFF_SIZE (DS_JPG_ORG_BUFF_END - DS_JPG_ORG_BUFF_ST) #define JPEG_COEFFBUFF_ADDR0 (JPEGFMT_BUFF_DISP0) #define JPEG_COEFFBUFF_ADDR1 (JPEGFMT_BUFF_ORIG) #define JPEG_COEFFBUFF_SIZE (JPEG_ORIGBUF_SIZE * 2 + JPEG_DISPBUF_SIZE) #else //USE_EXTRA_INCOMING_BUFFER #define JPEG_DECBUFF_ADDR0 (JPEGFMT_BUFF_DISP0) #define JPEG_DECBUFF_ADDR1 (JPEGFMT_BUFF_ORIG) //decoding buffer size for BASELINE #define JPEG_DECBUFF_SIZE_BASE (JPEG_ORIGBUF_SIZE * 2 + JPEG_DISPBUF_SIZE) //decoding buffer size for PROGRESSIVE: aligned to 32x #define JPEG_DECBUFF_SIZE_PROG (JPEG_ORIGBUF_SIZE * 2) //640x432x1.5*2 #define JPEG_COEFFBUFF_ADDR0 (JPEG_DECBUFF_ADDR0 + JPEG_DECBUFF_SIZE_PROG) #define JPEG_COEFFBUFF_ADDR1 (JPEG_DECBUFF_ADDR1 + JPEG_DECBUFF_SIZE_PROG) #define JPEG_COEFFBUFF_SIZE (JPEG_DECBUFF_SIZE_BASE - JPEG_DECBUFF_SIZE_PROG) #endif //USE_EXTRA_INCOMING_BUFFER*/ // // ----------------- // Adopt new buffer plan, resulting in: (1) new SC+FR _JPEGDEC_Operate() // applied, and (2) use the whole buffer allocated by MPEG-2 // // MPEG-2 buffer size = 720x576x1.5 = 0x97E00 --> 0x98000 (aligned to 0x800) /* #define JPEGFMT_BUFF_TOTALSIZE (DS_FRAMEBUF_SIZE * 3) #define JPEGFMT_BUFF_START (DS_FRAMEBUF_ST) #define JPEGFMT_BUFF_DISP0 (JPEGFMT_BUFF_START) #define JPEGFMT_BUFF_ORIG (JPEGFMT_BUFF_START + JPEG_DISPBUF_SIZE) #define JPEGFMT_BUFF_DISP1 (JPEGFMT_BUFF_START + JPEGFMT_BUFF_TOTALSIZE - JPEG_DISPBUF_SIZE) #ifdef USE_EXTRA_INCOMING_BUFFER #define JPEG_DECBUFF_ADDR (DS_JPG_ORG_BUFF_ST) #define JPEG_DECBUFF_SIZE (DS_JPG_ORG_BUFF_END - DS_JPG_ORG_BUFF_ST) #define JPEG_COEFFBUFF_ADDR0 (JPEGFMT_BUFF_DISP0) #define JPEG_COEFFBUFF_ADDR1 (JPEGFMT_BUFF_ORIG) #define JPEG_COEFFBUFF_SIZE (JPEGFMT_BUFF_TOTALSIZE - JPEG_DISPBUF_SIZE) #else //USE_EXTRA_INCOMING_BUFFER #define JPEG_DECBUFF_ADDR0 (JPEGFMT_BUFF_DISP0) #define JPEG_DECBUFF_ADDR1 (JPEGFMT_BUFF_ORIG) //decoding buffer size for BASELINE #define JPEG_DECBUFF_SIZE_BASE (JPEGFMT_BUFF_TOTALSIZE - JPEG_DISPBUF_SIZE) //decoding buffer size for PROGRESSIVE: aligned to 32x #define JPEG_DECBUFF_SIZE_PROG (JPEG_ORIGBUF_SIZE * 2) //640x432x1.5*2 #define JPEG_COEFFBUFF_ADDR0 (JPEG_DECBUFF_ADDR0 + JPEG_DECBUFF_SIZE_PROG) #define JPEG_COEFFBUFF_ADDR1 (JPEG_DECBUFF_ADDR1 + JPEG_DECBUFF_SIZE_PROG) #define JPEG_COEFFBUFF_SIZE (JPEG_DECBUFF_SIZE_BASE - JPEG_DECBUFF_SIZE_PROG) #endif //USE_EXTRA_INCOMING_BUFFER *///senshong2.17:remove //#endif //64M//#endif//#if(JPEG_TEST_16M!=1 && DRAM_CONFIGURATION_TYPE_DVD!=DRAM_SIZE_16)/*#if (DRAM_CONFIGURATION_TYPE_DVD == DRAM_SIZE_32) #define JPEGFMT_BUFF_START DS_FRAMEBUF_ST #define JPEGFMT_BUFF_DISP0 (JPEGFMT_BUFF_START) #define JPEGFMT_BUFF_ORIG (JPEGFMT_BUFF_START + JPEG_DISPBUF_SIZE)#ifdef SUPPORT_CT909S_JPU_MODIFICATIONS #define JPEGFMT_BUFF_DISP1 (JPEGFMT_BUFF_START + DS_FRAMEBUF_SIZE - JPEG_DISPBUF_SIZE)#else //SUPPORT_CT909S_JPU_MODIFICATIONS #define JPEGFMT_BUFF_TEMP (JPEGFMT_BUFF_ORIG + JPEG_ORIGBUF_SIZE) #define JPEGFMT_BUFF_DISP1 (JPEGFMT_BUFF_TEMP + JPEG_ORIGBUF_SIZE)#endif //SUPPORT_CT909S_JPU_MODIFICATIONS //tommy2.16: support progressive for 32M #define JPEGFMT_COEFFBUFF_ADDR (JPEGFMT_BUFF_ORIG + JPEG_ORIGBUF_SIZE) #define JPEGFMT_COEFFBUFF_SIZE (311040) //#define JPEGFMT_COEFFBUFF_SIZE ((DS_FRAMEBUF_SIZE - JPEG_ORIGBUF_SIZE) * 3) //312576 #undef JPEG_INCOMEBUFFSIZE //decoding buffer size #define JPEGFMT_DECBUFF_SIZE_BASELINE (JPEG_ORIGBUF_SIZE * 2 + JPEG_DISPBUF_SIZE) #define JPEGFMT_DECBUFF_SIZE_PROGRESSIVE (JPEG_DISPBUF_SIZE) #define JPEGFMT_DECBUFF_ADDR_PROGRESSIVE (JPEGFMT_BUFF_ORIG)#elif (DRAM_CONFIGURATION_TYPE_DVD == DRAM_SIZE_16) //tommy2.15: for 16M solution, re-define these settings //#define JPEGFMT_BUFF_START DS_FRAMEBUF_ST //#define JPEGFMT_BUFF_DISP0 (JPEGFMT_BUFF_START) //#define JPEGFMT_BUFF_ORIG (JPEGFMT_BUFF_START + JPEG_DISPBUF_SIZE) #undef JPEG_INCOMEBUFFSIZE //THUMBNAIL total buffer size: 0x400DD000 + 0x7E900; size=231K DW //SLIDESHOW total buffer size: 0x400A0000 + 0x7E900; size=328K DW //THUMBNAIL decoding buffer size: 231*1024*4 - 0x7e900 = 0xe7000 - 0x7e900 = 0x68700 //SLIDESHOW decoding buffer size: 328*1024*4 - 0x7e900 = 0x148000 - 0x7e900 = 0xC9700 //DISPLAY BUFFER STARTING ADDRESS #define JPEGFMT_DISPBUFF_ADDR_THUMBNAIL (0x400DD000) #define JPEGFMT_DISPBUFF_ADDR_SLIDESHOW (0x400A0000) //decoding + original buffer #define JPEGFMT_DECBUFF_ADDR_THUMBNAIL (0x400DD000 + JPEG_DISPBUF_SIZE) #define JPEGFMT_DECBUFF_ADDR_SLIDESHOW (0x400A0000 + JPEG_DISPBUF_SIZE) #define JPEGFMT_DECBUFF_SIZE_THUMBNAIL (0x68700) #define JPEGFMT_DECBUFF_SIZE_SLIDESHOW (0xC9700)//64M SOLUTION#else#ifndef SUPPORT_CT909S_JPU_MODIFICATIONS #define JPEGFMT_BUFF_START DS_FRAMEBUF_ST #define JPEGFMT_BUFF_DISP0 (JPEGFMT_BUFF_START) #define JPEGFMT_BUFF_ORIG (JPEGFMT_BUFF_START + JPEG_DISPBUF_SIZE) #define JPEGFMT_BUFF_TEMP (JPEGFMT_BUFF_ORIG + JPEG_ORIGBUF_SIZE) #define JPEGFMT_BUFF_DISP1 (JPEGFMT_BUFF_TEMP + JPEG_ORIGBUF_SIZE)#else //SUPPORT_CT909S_JPU_MODIFICATIONS #define JPEGFMT_BUFF_START DS_FRAMEBUF_ST #define JPEGFMT_BUFF_DISP0 (JPEGFMT_BUFF_START) #define JPEGFMT_BUFF_ORIG (JPEGFMT_BUFF_START + JPEG_DISPBUF_SIZE) #define JPEGFMT_BUFF_DISP1 (JPEGFMT_BUFF_START + DS_FRAMEBUF_SIZE - JPEG_DISPBUF_SIZE)#endif //SUPPORT_CT909S_JPU_MODIFICATIONS#endif*/// *** Constant Definition (from jpgpvt.h) ***//#define JPEGSAMPLEWIDTH (8)#define JPEGSAMPLESIZE (64)#define JPEGMAXHUFFMANTABLES (4)#define JPEGMAXQUANTIZATIONTABLES (4)#define JPEGMAXCOMPONENTSPERFRAME (255)#define JPEGMAXCOMPONENTSPERSCAN (4)#define JPEGMINSAMPLINGFREQUENCY (1)#define JPEGMAXSAMPLINGFREQUENCY (4)#define JPEGMAXHUFFMANCODELENGTH (16)#define JPEGMAXNUMBEROF8BITHUFFMANCODES (256)#define JPEGMAXNUMBEROFHUFFMANCODES (256)// *** Type Definition ***//typedef struct tagHUFFDECODER{ // 20040804 tommylin: maxcode and mincode have to be "signed" (short). // If they're "WORD" (unsigned short), we may encounter incorrect // comparison while executing decode() // Maximum Huffman code value of length N //#ifdef CT909P_IC_SYSTEM#if defined(CT909P_IC_SYSTEM ) || defined(CT909G_IC_SYSTEM) //WORD maxcode [JPEGMAXHUFFMANCODELENGTH]; LONG maxcode [JPEGMAXHUFFMANCODELENGTH];#else SHORT maxcode [JPEGMAXHUFFMANCODELENGTH];#endif // Minimum Huffman code value of length N SHORT mincode [JPEGMAXHUFFMANCODELENGTH]; // Index into "values" for minimum code of length N WORD valptr [JPEGMAXHUFFMANCODELENGTH]; //tommy1.05: BYTE-->WORD // Huffman values WORD huff_values [JPEGMAXNUMBEROFHUFFMANCODES]; //tommy1.05: BYTE-->WORD //BYTE table_defined; WORD minimum_code_length;#ifdef TABLE_LOOKUP_VLD WORD lookup0_7 [JPEGMAXNUMBEROFHUFFMANCODES];#endif} HUFFDECODER, * PHUFFDECODER;typedef struct tagQUANTTAB{ //tommy0.81: actually, we only read 8-bit quantization value into the table WORD quant_values [JPEGSAMPLESIZE]; //UBYTE2 //tommy1.05: BYTE-->WORD} QUANTTAB, * PQUANTTAB;typedef SHORT COEFBLOCK [JPEGSAMPLESIZE]; //BYTE2// JPEG Decoder Component//typedef struct tagCOMPONENT{ PHUFFDECODER DC_Table; PHUFFDECODER AC_Table; SHORT last_dc_value; //int WORD H; WORD V; WORD Tq; //Quantization Table Index WORD v_sampling; //unsigned int WORD h_sampling; //unsigned int //tommy0.95: End of band Run - Progressive Specific WORD eob_run; //unsigned int; tommy0.95a: can't use BYTE //Non-interleaved dimensions. WORD noninterleaved_rows; //unsigned int WORD noninterleaved_cols; //unsigned int WORD du_rows; //unsigned int WORD du_cols; //unsigned int BYTE *data_units; //UBYTE1 COEFBLOCK *coefficient_blocks; //PQUANTTAB quantization_tables; // same as the wMcuHeight & wMcuWidth //WORD image_height; //WORD image_width;} COMPONENT, * PCOMPONENT;/*typedef struct tagJPEG_BUFFER_SET{ volatile DWORD dwJPEGFMT_BUFF_START; volatile DWORD dwJPEGFMT_BUFF_END; volatile DWORD dwJPEGFMT_BUFF_DISP0; volatile DWORD dwJPEGFMT_BUFF_ORIG; volatile DWORD dwJPEGFMT_BUFF_TEMP; volatile DWORD dwJPEGFMT_BUFF_DISP1; volatile DWORD dwJPEG_COEFFBUFF_ADDR0; volatile DWORD dwJPEG_COEFFBUFF_ADDR1; volatile DWORD dwJPEG_COEFFBUFF_SIZE; volatile DWORD dwJPEG_DECBUFF_ADDR0; volatile DWORD dwJPEG_DECBUFF_ADDR1; //decoding buffer size for BASELINE volatile DWORD dwJPEG_DECBUFF_SIZE_BASE; //decoding buffer size for PROGRESSIVE: aligned to 32x volatile DWORD dwJPEG_DECBUFF_SIZE_PROG; //for 16M Thumbnail mode volatile DWORD dwJPEGFMT_BUFF_SIZE_THUMBNAIL_DEC_BASE; volatile DWORD dwJPEGFMT_BUFF_SIZE_THUMBNAIL_DEC_PROG; volatile DWORD dwJPEG_COEFFBUFF_SIZE_THUMBNAIL; volatile DWORD dwJPEGFMT_BUFF_TEMP1; //for 64M extra buffer volatile DWORD dwJPEG_DECBUFF_ADDR; volatile DWORD dwJPEG_DECBUFF_SIZE; volatile DWORD dwJPEG_EXTRABUFF_END; volatile DWORD dwJPEG_DISPBUF_SIZE; volatile DWORD dwJPEG_DISPBUF_SIZE_Y; volatile WORD wJPEG_DISPBUF_WIDTH; volatile WORD wJPEG_DISPBUF_HEIGHT; volatile WORD wDRAMType; } JPEG_BUFFER_SET, *PJPEG_BUFFER_SET;*/typedef struct tagJPEG_BUFFER_SET{ DWORD dwJPEGFMT_BUFF_START; DWORD dwJPEGFMT_BUFF_END; DWORD dwJPEGFMT_BUFF_DISP0; DWORD dwJPEGFMT_BUFF_ORIG; DWORD dwJPEGFMT_BUFF_TEMP; DWORD dwJPEGFMT_BUFF_DISP1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -