📄 jpegfmt.h
字号:
DWORD dwJPEG_COEFFBUFF_ADDR0; DWORD dwJPEG_COEFFBUFF_ADDR1; DWORD dwJPEG_COEFFBUFF_SIZE; DWORD dwJPEG_DECBUFF_ADDR0; DWORD dwJPEG_DECBUFF_ADDR1; //decoding buffer size for BASELINE DWORD dwJPEG_DECBUFF_SIZE_BASE; //decoding buffer size for PROGRESSIVE: aligned to 32x DWORD dwJPEG_DECBUFF_SIZE_PROG; //for 16M Thumbnail mode DWORD dwJPEGFMT_BUFF_SIZE_THUMBNAIL_DEC_BASE; DWORD dwJPEGFMT_BUFF_SIZE_THUMBNAIL_DEC_PROG; DWORD dwJPEG_COEFFBUFF_SIZE_THUMBNAIL; DWORD dwJPEGFMT_BUFF_TEMP1; //for 64M extra buffer DWORD dwJPEG_DECBUFF_ADDR; DWORD dwJPEG_DECBUFF_SIZE; DWORD dwJPEG_EXTRABUFF_END; DWORD dwJPEG_DISPBUF_SIZE; DWORD dwJPEG_DISPBUF_SIZE_Y; WORD wJPEG_DISPBUF_WIDTH; WORD wJPEG_DISPBUF_HEIGHT; WORD wDefineMaxOrigWidth ; WORD wDefineMaxOrigHeight; WORD wIsDisplayFullScreen; volatile WORD wDRAMType; } JPEG_BUFFER_SET, *PJPEG_BUFFER_SET;typedef struct tagJPEG_SETDECODE_SC{ DWORD dwdecode_buffer_size; WORD wdecode_strip_y_nr;//record one picture need to segment how many strip to do decoding SC for Y //WORD wdecode_strip_uv_nr;//record one picture need to segment how many strip to do decoding SC for UV WORD wdecode_pixel_y_nr;//record one strip need to segment how many pixel to do decoding SC for Y //WORD wdecode_pixel_uv_nr;//record one picture need to segment how many pixel to do decoding SC for UV WORD wdecode_Y_SCratio_v; //WORD wdecode_UV_SCratio_v; WORD wdecode_Y_SCratio_h; WORD wdecode_dest_width; WORD wdecode_dest_height; WORD wdecode_orig_width; WORD wdecode_orig_height; WORD wMaxOrigWidth; WORD wMaxOrigHeight; //WORD wcounter_picture_height; }JPEG_SETDECODE_SC, *PJPEG_SETDECODE_SC;typedef struct tagJPEG_SET_SC_ZONE{ DWORD dwSrcAddressY; DWORD dwSrcAddressUV; DWORD dwDstAddressY; DWORD dwDstAddressUV; WORD wSrc_width; WORD wSrc_height; WORD dest_width; WORD dest_height; //WORD WSrc_strip;}JPEG_SET_SC_ZONE, *PJPEG_SET_SC_ZONE;typedef struct tagJPEG_CALC_MC_SCALE_SET{ DWORD DecodedBufferSize; DWORD dwStripDecodedSize; WORD wMaxDecodingHeight; WORD wPicWidth; WORD wPicHeight;}JPEG_CALC_MC_SCALE_SET, *PJPEG_CALC_MC_SCALE_SET;//#ifdef JPEG_USE_TWO_PROCESSOR//#ifdef CT909R_JPEG_AND_MP3#if defined(JPEG_USE_TWO_PROCESSOR) || defined (CT909R_JPEG_AND_MP3)//senshong:check two processor status//processor 2 start decoder header#define JPEG_STATUS_PARSE_HEADER_ST 4//processor 2 start decoder vld and IDCT#define JPEG_STATUS_DEC_ST 5//JPEG decoder status for VLD, IDCT and JPU scale#define JPEG_WAIT_DEC 0#define JPEG_WAIT_JPU 1#define JPEG_DEC_FINISH 2typedef struct tagJPEGFMT_DECODE_INFO{ WORD wTq[4]; WORD wSampleFactor_h[4]; WORD wSampleFactor_v[4]; WORD wRealSampleType; WORD wScaleRatioH; WORD wScaleRatioV; WORD wScaleRatioExpH; WORD wScaleRatioExpV; WORD wdec_pixel_y_nr; WORD wAdjustScaleRatio; WORD wMaxHorizontalFreq; WORD wMaxVerticalFreq; WORD wMcuHeight; WORD wMcuWidth; WORD wMcuRows ; WORD wMcuCols ; WORD wJPEGFMTFrameHeight ; WORD wJPEGFMTFrameWidth ; WORD wJPEGFMTExifImageWidth ; WORD wJPEGFMTExifImageHeight; WORD wComponentCount; WORD wJPEGFMTIsProgressive; WORD wReservedCoeffNr; WORD wIsGetJPEGThumbSize; WORD wIsCTKEncodeInfo; CHAR cJPEGFMTExifDate[11]; BYTE bMcScale; BYTE bMcScale_UV; BYTE bNeedMcScaleFormatTransform; }JPEGFMT_DECODE_INFO,*PJPEGFMT_DECODE_INFO;#endif//#ifndef JPEG_USE_TWO_PROCESSOR// *** Function Prototype Declaration ***// Utility Functions//#ifdef USE_CT909_VLD // Get datastream from VLD //static DWORD Get_Bits(DWORD N); // Use macro substitution for utility functions // #define GETBYTE() _JPEGFMT_GetBits(8) #define GETWORD() _JPEGFMT_GetBits(16) //#define GETBITS(x) (BYTE)_JPEGFMT_GetBits(x) //#define NEXTBIT() (BYTE)_JPEGFMT_GetBits(1) //#define BYPASS(x) _JPEGFMT_GetBits(x << 3) #define _JPEGFMT_MOREDATA() 1#else #define JPEGSRC (0x40500000) #define JPEGEOF (0x40800000) //#define JPEGDST (0x40122000) // Use self-maintained pointers to access datastream from specific // memory address BYTE GETBYTE(); WORD GETWORD(); BYTE _JPEGFMT_MOREDATA(); //VOID BYPASS(DWORD count); //BYTE NEXTBIT(VOID); //BYTE GETBITS(BYTE count); //VOID EXITBITMODE(VOID); VOID ENTERBITMODE(BYTE initialposition);#endifPREFIX_INLINE WORD _JPEGFMT_NEXTBIT(VOID);PREFIX_INLINE WORD _JPEGFMT_GETBITS(WORD count);#ifdef TABLE_LOOKUP_VLD WORD _JPEGFMT_SHOWBYTE(VOID);#endifVOID _JPEGFMT_EXITBITMODE(VOID);VOID _JPEGFMT_BYPASS(DWORD count);PREFIX_INLINE SHORT _JPEGFMT_EXTEND(SHORT vv, SHORT tt);//#endif//#ifdef CT909P_IC_SYSTEM#if defined(CT909P_IC_SYSTEM ) || defined(CT909G_IC_SYSTEM)WORD JPEGFMTDecodeGo(VOID);#ifdef SUPPORT_MOTION_JPEGDWORD _JPEGFMT_NextStartCode(VOID);#endif//#ifdef SUPPORT_MOTION_JPEG#endif// calculate IDCT/MC scaling ratio//senshong2.16:revise BYTE _JPEGFMT_CalcMcScaleRatio(VOID) to BYTE _JPEGFMT_CalcMcScaleRatio(WORD wParseType)//Because 16M must know current type whether is thumbnail mode.//BYTE _JPEGFMT_CalcMcScaleRatio(WORD wParseType);WORD _JPEGFMT_CalcMcScaleRatio(WORD wParseType);//BYTE _JPEGFMT_CalcMcScaleRatio(VOID);// calculate target width and height of JPU scaling//BYTE _JPEGFMT_CalcJpuAlignedLength(WORD *dstAlignedWidth, WORD *dstAlignedHeight);// do 1st scaling down from Forg-3/Forg-4 to Forg-1WORD _JPEGFMT_FirstScaleToForg(WORD forg_width, WORD forg_height);// For JPEG DECODER//VOID _JPEGFMT_InitJpegParser(VOID);// Read header only (from SOI to frame header finished)// bType: JPEG_PARSE_TYPE_NORMAL or JPEG_PARSE_TYPE_THUMBNAILWORD _JPEGFMT_ReadImageHeader(WORD wParseType);// Read picture contents (from end of frame header to EOI)WORD _JPEGFMT_ReadImageContent(VOID);//VOID _JPEGFMT_ReadImage(VOID);VOID _JPEGFMT_ReadStreamHeader(VOID);VOID _JPEGFMT_ReadMarker(WORD wParseType);//senshong2.16:revise _JPEGFMT_ReadFrameHeader(void) to _JPEGFMT_ReadFrameHeader(WORD wParseType) //Because 16M must know current type whether is thumbnail mode.//VOID _JPEGFMT_ReadFrameHeader(VOID);VOID _JPEGFMT_ReadFrameHeader(WORD wParseType);//VOID _JPEGFMT_ReadFrameHeader(VOID);// DQTVOID _JPEGFMT_ReadQuantizationTable(VOID);VOID _JPEGFMT_ReadContentsOfDQT(PQUANTTAB table, WORD precision);// DHT//VOID _JPEGFMT_ReadHuffmanTable(VOID);//WORD _JPEGFMT_ReadContentsOfDHT(PHUFFDECODER table);VOID _JPEGFMT_ReadHuffmanTable(VOID (*Huff_wait_vdFifo)(DWORD ), DWORD (*Huff_getbit)(DWORD));WORD _JPEGFMT_ReadContentsOfDHT(PHUFFDECODER table,VOID (*Huff_wait_vdFifo)(DWORD ), DWORD (*Huff_getbit)(DWORD));VOID _JPEGFMT_MakeTable(PHUFFDECODER table, BYTE huffbits[JPEGMAXHUFFMANCODELENGTH]);// SOS and ECSVOID _JPEGFMT_ReadScanHeader(VOID);VOID _JPEGFMT_InitComponentMembers(PCOMPONENT pcomp, WORD bnum);VOID _JPEGFMT_ReadSequentialScanData(VOID);VOID _JPEGFMT_ReadSequentialInterleavedScan(VOID);VOID _JPEGFMT_ReadSequentialNonInterleavedScan(VOID);VOID _JPEGFMT_ProcessRestartMarker(VOID);WORD _JPEGFMT_DecodeSequential(PCOMPONENT pcomp, WORD mcurow, WORD mcucol, WORD bnum);WORD _JPEGFMT_Decode(PHUFFDECODER codec);// DRIVOID _JPEGFMT_ReadRestartInterval(VOID);// Access current (protected) buffer for JPEG decoder//senshong2.16:revise _JPEGFMT_SetCurrBuffer(WORD wCurrBuff) to _JPEGFMT_SetCurrBuffer(WORD wCurrBuff, WORD wParseType)//Because 16M must know current type whether is thumbnail mode.VOID _JPEGFMT_SetCurrBuffer(WORD wCurrBuff, WORD wParseType);//VOID _JPEGFMT_SetCurrBuffer(WORD wCurrBuff);WORD _JPEGFMT_GetCurrBuffer(VOID);//tommy0.68#define JPEGFMT_ENDIAN_BIG 0#define JPEGFMT_ENDIAN_LITTLE 1#define JPEGFMT_TIFF_DATETIME (0x0132)#define JPEGFMT_TIFF_EXIFIFD (0x8769)#define JPEGFMT_EXIF_IMAGEWIDTH (0xa002)#define JPEGFMT_EXIF_IMAGEHEIGHT (0xa003)#define JPEGFMT_JPEG_IFOFFSET (0x0201)#define JPEGFMT_JPEG_IFBYTECOUNT (0x0202)#define JPEGFMT_THUMB_COMPRESSION (0x0103)typedef union{ BYTE byte4[4]; DWORD dword;} JPEGFMT_BYTE4, *PJPEGFMT_BYTE4;typedef union{ BYTE byte2[2]; WORD word;} JPEGFMT_BYTE2, *PJPEGFMT_BYTE2;WORD _JPEGFMT_SwapByte2(WORD in_value);DWORD _JPEGFMT_SwapByte4(DWORD in_value);WORD _JPEGFMT_ReadApp1Header(VOID);VOID _JPEGFMT_ReadExif(WORD wParseType);WORD _JPEGFMT_ReadExifTag(VOID);//tommy0.81VOID _JPEGFMT_ReadExifPrivateIFD(VOID);VOID _JPEGFMT_ReadExifIFD1(WORD wParseType, DWORD dwOffsetIFD1);//tommy0.91VOID _JPEGFMT_ReadExifDate(VOID);//tommy0.95: support progressive JPEG decoding// (functions from jpgdecoder.cpp)VOID _JPEGFMT_ReadProgressiveScanData(WORD sss, WORD sse, WORD sah, WORD sal);VOID _JPEGFMT_ReadDcFirst (WORD ssa);VOID _JPEGFMT_ReadDcRefine(WORD ssa);VOID _JPEGFMT_ReadAcFirst (WORD sss, WORD sse, WORD ssa);VOID _JPEGFMT_ReadAcRefine(WORD sss, WORD sse, WORD ssa);VOID _JPEGFMT_UpdateImage(VOID);// (functions from jpgdecodercomponent.cpp)VOID _JPEGFMT_DecodeDcFirst (PCOMPONENT pcomp, WORD row, WORD col, WORD ssa);VOID _JPEGFMT_DecodeDcRefine(PCOMPONENT pcomp, WORD row, WORD col, WORD ssa);VOID _JPEGFMT_DecodeAcFirst (PCOMPONENT pcomp, WORD row, WORD col, WORD sss, WORD sse, WORD ssa);VOID _JPEGFMT_DecodeAcRefine(PCOMPONENT pcomp, WORD row, WORD col, WORD sss, WORD sse, WORD ssa);VOID _JPEGFMT_RefineAcCoefficient(WORD ssa, SHORT *value);VOID _JPEGFMT_ExecProgressiveIDCT(PCOMPONENT pcomp, WORD mcurow, WORD mcucol, WORD bcomp, DWORD index);// (other functions)VOID _JPEGFMT_CalcReservedCoeffNumber(PCOMPONENT pcomp, DWORD buffsize);//senshong2.16:revise _JPEGFMT_ClearCoeffBuffer(VOID) to _JPEGFMT_ClearCoeffBuffer(WORD wParseType)//Because 16M must know current type whether is thumbnail mode.VOID _JPEGFMT_ClearCoeffBuffer(WORD wParseType);//VOID _JPEGFMT_ClearCoeffBuffer(VOID);VOID _JPEGFMT_ClearBuffBeforeDecode(VOID);//tommy1.05: fixed calculationDWORD _JPEGFMT_CalcDecodingBufferSize(WORD ratioH, WORD ratioV);//tommy1.10WORD _JPEGFMT_HasJpegThumb(VOID);//DWORD JPEG_FrameBufferSetting(DWORD dwFramebufferStart, DWORD dwFramebufferEnd, DWORD dwExtrabufferStart, DWORD dwExtrabufferEnd ,WORD wDRAMType);//senshong2.17 seting frame bufferWORD JPEG_FrameBufferSetting(PJPEG_BUFFER_SET pFrameBufferSeting);DWORD JPEG_SetFrameBufferAddress(DWORD dwFramebufferStart, DWORD dwFramebufferEnd, DWORD dwOrigBufferStart, DWORD dwOrigBufferEnd ,WORD wDRAMType);//senshong2.18: add new code to solve to qualityVOID _JPEGFMT_SetDecodingBuffer(PCOMPONENT pcomp, WORD bnum);WORD _JPEGFMT_CalcDecodingSCRatio(WORD MC_ratioH, WORD MC_ratioV, PJPEG_CALC_MC_SCALE_SET pJPEG_McScaleSet);WORD _JPEGFMT_CalcDecodingStrip(WORD SC_ratio_v, WORD MC_ratioV, WORD picWidth, WORD picHeight, DWORD DecodedBufferSize);WORD _JPEGFMT_DecodingSC(PJPEG_SET_SC_ZONE PDec_SC_zone);WORD _JPEGFMT_SetScalingBufferAddress(PJPEG_SET_SC_ZONE PAddr_zone);WORD _JPEGFMT_CheckSCHorizontalStep(WORD realWidth, WORD scaledWidth, WORD wsample_type);WORD _JPEGFMT_UseJPUMovePictureData(WORD scaledWidth, WORD scaledHeight);//senshong: Strip scale Y componentWORD _JPEGFMT_StripScaleYComponent(PJPEG_SET_SC_ZONE PDec_SC_zone);//senshong: Strip scale UV compomentWORD _JPEGFMT_StripScaleUVComponent(PJPEG_SET_SC_ZONE PDec_SC_zone);WORD _JPEGFMT_JPUScaling(WORD wSrcWidth, WORD wSrcHeight, WORD wIsCopyPicture);//WORD _JPEGFMT_CleanUVFrameBuffer(PJPEG_SET_SC_ZONE PClean_buffer_zone, WORD wSample_type);#ifdef SUPPORT_MOTION_JPEGWORD _JPEGFMT_UVFormatTransform(PJPEG_SET_SC_ZONE PDec_SC_zone);DWORD _JPEGFMT_GetHuffBit(DWORD n);VOID _JPEGFMT_wait_dummy_vdfifo(DWORD n);WORD _JPEGFMT_CalcMJPEGMcScaleRatio(VOID);VOID _JPEGFMT_InitHuffmanTable(VOID);#endif#ifdef CT909R_JPEG_AND_MP3//senshong: add API to support jpeg+MP3, this version only support Ct909RWORD _JPEGFMT_ReadImageHeaderForProcessor2(WORD wParseType);WORD _JPEGFMT_ReadImageContentForProcessor2(VOID);VOID _JPEGFMT_ReadSequentialScanForProcressor2(VOID);#endifWORD _JPEGFMT_ReadThumbMarker(VOID);#ifdef __cplusplus}#endif //__cplusplus#endif //__JPEG_FORMAT_H__// END OF FILE (jpegfmt.h)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -