📄 jpegfmt.h
字号:
// **************************************************************************// (C)Copyright Cheertek Inc. 2003-2006,// J500, all right reserved.//// Product : CT909//// Author : Cheertek (J500 Tommy)// Purpose : For JPEG format, parser, and decoder implementation// Sources : // **************************************************************************//#ifndef __JPEG_FORMAT_H__#define __JPEG_FORMAT_H__#ifdef __cplusplusextern "C" {#endif //__cplusplus//tommy0.95a: multiple debugging levels #undef JPEG_DECODER_DBGMSG_EXECFLOW#undef JPEG_DECODER_DBGMSG_DETAILED//Profiling Category#undef JPEG_DECODER_DBGMSG_PROFILE#ifdef JPEG_DECODER_DBGMSG_PROFILE#define JPEG_PROFILE_DECODING 0#define JPEG_PROFILE_HEADER 1#define JPEG_PROFILE_CONTENT 2#define JPEG_PROFILE_TABLE 3#define JPEG_PROFILE_SCANALL 4#define JPEG_PROFILE_APP1 5#define JPEG_PROFILE_APPX 6#define JPEG_PROFILE_POSTPROC 7#define JPEG_PROFILE_IDCTALL 8#define JPEG_PROFILE_BYTESTUFF 9#define JPEG_PROFILE_RUNLENGTH 10#define JPEG_PROFILE_OPERATION 11#define JPEG_PROFILE_IDCTCOEF 12#define JPEG_PROFILE_BYPASS 13#define JPEG_PROFILE_GETBITS 14#define JPEG_PROFILE_DECCALC 15#define JPEG_PROFILE_WAITVLD 16#define JPEG_PROFILE_MAXNUM 17#endif//#ifndef CT909P_IC_SYSTEM#if defined(CT909P_IC_SYSTEM ) || defined(CT909G_IC_SYSTEM)//#define CT909P_SUPPORT_MJPEG#else//senshong2.60:If no jpeg and mp3 mode and only jpeg mode, we can disable "#define CT909R_JPEG_AND_MP3"//#define CT909R_JPEG_AND_MP3#ifndef CT909R_JPEG_AND_MP3#define JPEG_USE_TWO_PROCESSOR#endif#endif//senshong: using strip decoding method#define JPEG_STRIP_DECODING#define JPEG_STRIP_DEC_PROGRESSIVE//tommy1.05#define JPEG_TUNE_WAIT_VDFIFO//tommy1.07: for performance evaluation//tommy1.10: fixed _wMonitorBitStuffCount-related lines for exit-bit-mode issue#undef JPEG_NO_BYTESTUFFING//tommy1.08: decode DC only threshold for both slideshow and thumbnail modes.#define DECODE_DC_ONLY_THRESHOLD_SLIDE (5000000)//tommy2.17: this should be smaller than 100000 pixels#define DECODE_DC_ONLY_THRESHOLD_THUMB (100000)//tommy1.10: count the times of calling WaitVLD() in run-length decoding#undef JPEG_PROFILE_WAITVLD_CALLS#define JPEG_PROFILE_WAITVLD_CYCLES (11)#define JPEG_PROFILE_READVLD_CYCLES (14)//tommy1.10: inline some functions for better performance. Default: on//tommy2.16b: removed. it's always on.//#define PREFIX_INLINE_FLAG//#ifdef PREFIX_INLINE_FLAG//#define PREFIX_INLINE inline//#else//#define PREFIX_INLINE //#endif//tommy1.11: switch for flatten wait_vdfifo part. Default: on#define FLATTEN_CRITICAL_WAITVDFIFO//#ifndef CT909P_IC_SYSTEM#if defined(CT909P_IC_SYSTEM ) || defined(CT909G_IC_SYSTEM)#else//tommy1.11: for MC-scaling down vertical 1/8; ref issue: #742, #757, #769. Default: on//tommy2.10: CT909S has fixed this. default: off//tommy2.14: still has problems in CT909S; make it on defaultly#define MC_SCALE_DOWN_VERTICAL_8X_PATCH#endif//tommy1.11: use Chuan's table-lookup for variable-length decoding. Default: on#define TABLE_LOOKUP_VLD//tommy1.20: define IDCT/MC-scaling and JPU timed-out counts#define JPEG_IDCT_TIMEDOUT_COUNT (COUNT_1_SEC)#define JPEG_JPU_TIMEDOUT_COUNT (COUNT_1_SEC)//tommy1.20: register value validation for IDCT/MC-scaling and JPU. Default: off//#define JPEG_REGVALUE_VALIDATION//tommy1.20a: acceptable decoding ratio for display. Default: 50#define JPEG_ACCEPTABLE_DECODE_RATIO (50)// *** PLATFORM dependent ***//// Use CT909 VLD to process datastream// This definition will affect datastream consuming related utility functions.#define USE_CT909_VLD// switch of doing Y-deflickering#undef APPLY_Y_DEFLICKERING// ON: calculate aligned size (width & height) for Forg-3 to Forg-1// OFF: use wFirstScalingWidth & wFirstScalingHeight for Forg-3 to Forg-1#undef JPEGFMT_CALCSIZE_FOR_FRAMEORIG// *** JPEG Marker Definitions ***//// prefix of JPEG marker#define JPEG_MARKER_PREFIX (0xFF)// --- Start Of Frame ---//// Baseline DCT#define JPEG_MARKER_SOF0 (0xC0)// Extended sequential DCT, Huffman coding//tommy1.21: already support & open this marker#define JPEG_MARKER_SOF1 (0xC1)// Progressive DCT, Huffman coding#define JPEG_MARKER_SOF2 (0xC2)// Lossless (sequential), Huffman coding//#define JPEG_MARKER_SOF3 (0xC3)// Differential sequential DCT//#define JPEG_MARKER_SOF5 (0xC5)// Differential progressive DCT//#define JPEG_MARKER_SOF6 (0xC6)// Differential lossless (sequential)//#define JPEG_MARKER_SOF7 (0xC7)// Extended sequential DCT, arithmetic coding//#define JPEG_MARKER_SOF9 (0xC9)// Progressive DCT, arithmetic coding//#define JPEG_MARKER_SOF10 (0xCA)// Lossless (sequential), arithmetic coding//#define JPEG_MARKER_SOF11 (0xCB)// Differential, arithmetic coding//#define JPEG_MARKER_SOF13 (0xCD)//#define JPEG_MARKER_SOF14 (0xCE)//#define JPEG_MARKER_SOF15 (0xCF)// --- RSTm: Restart with modulo 8 count "m" ---#define JPEG_MARKER_RST0 (0xD0)#define JPEG_MARKER_RST1 (0xD1)#define JPEG_MARKER_RST2 (0xD2)#define JPEG_MARKER_RST3 (0xD3)#define JPEG_MARKER_RST4 (0xD4)#define JPEG_MARKER_RST5 (0xD5)#define JPEG_MARKER_RST6 (0xD6)#define JPEG_MARKER_RST7 (0xD7)// --- Start/End Of Image ---#define JPEG_MARKER_SOI (0xD8)#define JPEG_MARKER_EOI (0xD9)// --- Start Of Scan ---#define JPEG_MARKER_SOS (0xDA)// --- DNL: Define Number of Lines ---#define JPEG_MARKER_DNL (0xDC)// --- DRI: Define Restart Interval segment ---#define JPEG_MARKER_DRI (0xDD)// --- APPn ---#define JPEG_MARKER_APP0 (0xE0)#define JPEG_MARKER_APP1 (0xE1)#define JPEG_MARKER_APP2 (0xE2)#define JPEG_MARKER_APP3 (0xE3)#define JPEG_MARKER_APP4 (0xE4)#define JPEG_MARKER_APP5 (0xE5)#define JPEG_MARKER_APP6 (0xE6)#define JPEG_MARKER_APP7 (0xE7)#define JPEG_MARKER_APP8 (0xE8)#define JPEG_MARKER_APP9 (0xE9)#define JPEG_MARKER_APPA (0xEA)#define JPEG_MARKER_APPB (0xEB)#define JPEG_MARKER_APPC (0xEC)#define JPEG_MARKER_APPD (0xED)#define JPEG_MARKER_APPE (0xEE)#define JPEG_MARKER_APPF (0xEF)// --- COM: comment ---#define JPEG_MARKER_COM (0xFE)// --- DHT and DQT: Huffman and Quantization Table ---#define JPEG_MARKER_DQT (0xDB)#define JPEG_MARKER_DHT (0xC4)//tommy1.20a: process corner case while exit bit mode.#define JPEG_MARKER_BYTESTUFF (0x00)// *** Constant Definition for JPEG Decoder ***//tommy0.66: buffer plan -- 720x480 *2 + 640x432 *2//32M Solution//#define JPEG_INCOMEBUFFSIZE (1347840) //3-to-1 incoming buffer 32M Solution //size=720x576x3(MPEG2 buffer) - 720x480@420// Constants for Fdisp0 & Fdisp1#define JPEG_DISPBUF_WIDTH (720)#define JPEG_DISPBUF_HEIGHT (480)#define JPEG_DISPBUF_SIZE (0x7E900) //518400#define JPEG_DISPBUF_SIZE_Y (0x54600) //345600#define JPEG_DISPBUF_SIZE_UV (0x2A300) //172800#define JPEG_DISPBUF_COLS (0x5A) //columns for display buffer#define JPEG_DISPBUF_ROWS (0x3C) //rows for display buffer//tommy0.66 Constants for Ftemp & Forig//tommy2.10: this section should be moved into CT909A-ONLY block#define JPEG_ORIGBUF_WIDTH (640)#define JPEG_ORIGBUF_HEIGHT (432)#define JPEG_ORIGBUF_SIZE (0x65400) //414720#define JPEG_ORIGBUF_SIZE_Y (0x43800) //276480#define JPEG_ORIGBUF_SIZE_UV (0x21C00) //138240#define JPEG_ORIGBUF_COLS (0x50)#define JPEG_ORIGBUF_ROWS (0x36)#define JPEG_TEST_16M 0#define JPEG_ORIGBUF_SIZE_32M (0x70800) //460800//senshong2.32: define JPEG original buffer width and height#define JPEG_ORIGBUF_WIDTH_64M (800)#define JPEG_ORIGBUF_HEIGHT_64M (640)#define JPEG_ORIGBUF_WIDTH_32M (640)#define JPEG_ORIGBUF_HEIGHT_32M (480)#define JPEG_ORIGBUF_WIDTH_16M (576)#define JPEG_ORIGBUF_HEIGHT_16M (400)#define JPEG_THUMB_ORIGBUF_WIDTH_16M (320)#define JPEG_THUMB_ORIGBUF_HEIGHT_16M (240)//tommy1.21: define the use of extra incoming buffer for decoding.// if it's disable, we'll use 3-in-1 buffer for decoding.//tommy2.10: use extra incoming buffer for JPEG decoding by DRAM configuration//#if ((DRAM_CONFIGURATION_TYPE_DVD == DRAM_SIZE_16) || (DRAM_CONFIGURATION_TYPE_DVD == DRAM_SIZE_32)||(JPEG_TEST_16M ==1))/*#if ((DRAM_CONFIGURATION_TYPE_DVD == DRAM_SIZE_16) ||(JPEG_TEST_16M ==1)) #undef USE_EXTRA_INCOMING_BUFFER#else //64M #undef USE_EXTRA_INCOMING_BUFFER //#define USE_EXTRA_INCOMING_BUFFER#endif#if((DRAM_CONFIGURATION_TYPE_DVD == DRAM_SIZE_16)||(JPEG_TEST_16M ==1)) #define NOT_USE_JPU_SCFR_COMBO #undef USE_JPU_SCFR_COMBO_OPERATION_PATCH#else #define NOT_USE_JPU_SCFR_COMBO //#undef NOT_USE_JPU_SCFR_COMBO #undef USE_JPU_SCFR_COMBO_OPERATION_PATCH#endif*/#undef USE_EXTRA_INCOMING_BUFFER#undef NOT_USE_JPU_SCFR_COMBO#undef USE_JPU_SCFR_COMBO_OPERATION_PATCH//#define JPEG_STRIP_DECODING_1#define JPEG_STRIP_DECODING_AND_EFFECT//-------------------------------------------------------------------------------//Test JPEG 16M//------------------------------------------------------------------------------- //#define JPEGFMT_BUFF_THUMBNAIL_DISP (DS_JPG_ORG_BUFF_ST)//0x40450000 //#define JPEGFMT_BUFF_SLIDESHOW_DISP (DS_FRAMEBUF_ST)//0x4014f800 //#define JPEGFMT_BUFF_DISP0 (DS_FRAMEBUF_ST)//0x4014f800 //#define JPEGFMT_BUFF_DISP1 (DS_JPG_ORG_BUFF_ST)//0x40450000 /*#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*/ //-------------------------------------------------------------------------/*#ifdef USE_EXTRA_INCOMING_BUFFER //use extra incoming buffer #define JPEG_INCOMEBUFFSIZE (DS_JPG_ORG_BUFF_END - DS_JPG_ORG_BUFF_ST)#else //USE_EXTRA_INCOMING_BUFFER //use 3-in-1 buffer //#define JPEG_INCOMEBUFFSIZE (738432) #define JPEG_INCOMEBUFFSIZE (JPEG_ORIGBUF_SIZE * 2 + JPEG_DISPBUF_SIZE)#endif //USE_EXTRA_INCOMING_BUFFER*/// BUFFER ADDRESS DECLARATIONS// specify buffer plan for different memory allocations//// ----------------------------------/*#if (DRAM_CONFIGURATION_TYPE_DVD == DRAM_SIZE_16||JPEG_TEST_16M== 1)//senshong2.16: define JPEG deocder for 16M//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 =427776 //SLIDESHOW decoding buffer size: 328*1024*4 - 0x7e900 = 0x148000 - 0x7e900 = 0xC9700 =825088#if(JPEG_TEST_16M== 1)//senshong2.16: this define is use 64M extra memory to simulate 16m solution //DISPLAY BUFFER STARTING ADDRESS #define JPEGFMT_BUFF_THUMBNAIL_DISP (DS_JPG_ORG_BUFF_ST)//0x40450000 //#define JPEGFMT_BUFF_THUMBNAIL_DISP (DS_FRAMEBUF_ST) #define JPEGFMT_BUFF_SLIDESHOW_DISP (DS_FRAMEBUF_ST)//0x4014f800 #define JPEGFMT_BUFF_DISP0 (DS_FRAMEBUF_ST)//0x4014f800 #define JPEGFMT_BUFF_DISP1 (DS_JPG_ORG_BUFF_ST)//0x40450000 //#define JPEGFMT_BUFF_DISP1 (DS_FRAMEBUF_ST) //decoding + original buffer #define JPEGFMT_BUFF_THUMBNAIL_DEC (DS_JPG_ORG_BUFF_ST + JPEG_DISPBUF_SIZE)//0x404ce900 #define JPEGFMT_BUFF_SLIDESHOW_DEC (DS_FRAMEBUF_ST + JPEG_DISPBUF_SIZE)//0x401ce100 //#define JPEGFMT_BUFF_THUMBNAIL_DEC (DS_FRAMEBUF_ST + JPEG_DISPBUF_SIZE) #define JPEGFMT_BUFF_SIZE_THUMBNAIL_DEC_BASE (0x68700)//427776 //#define JPEGFMT_BUFF_SIZE_THUMBNAIL_DEC_BASE (0xC9700) #define JPEGFMT_BUFF_SIZE_SLIDESHOW_DEC_BASE (0xC9700)//825088 #define JPEGFMT_BUFF_SIZE_THUMBNAIL_DEC_PROG (0x1D880)//120960 #define JPEGFMT_BUFF_SIZE_SLIDESHOW_DEC_PROG (0x7E900)//518400 //#define JPEGFMT_BUFF_SIZE_THUMBNAIL_DEC_PROG (0x7E900)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -