📄 jpegdecoder.h
字号:
#ifndef _JPEG_DECODER_H
#define _JPEG_DECODER_H
#include "AMComDef.h"
#include "AMStream.h"
#include "AMMem.h"
#include "jpeg.h"
#define DECODE_JPEG_OK ERROR_FREE
#define READ_JPEG_OK ERROR_FREE
#define READ_JPEG_END 1
#define DECODE_JPEG_SCAN_BEGIN 2
#define DECODE_JPEG_END 3
#define READ_JPEG_ERROR -40
#define READ_JPEG_DQT_ERROR -41
#define READ_JPEG_SOF0_ERROR -42
#define READ_JPEG_DRI_ERROR -43
#define READ_JPEG_DHT_ERROR -44
#define READ_JPEG_SOS_ERROR -45
#define READ_JPEG_NO_IMAGE_ERROR -46
#define READ_JPEG_UNKNOW_ERROR -47
///////////////////////////////////////////
#define DECODING_JPEG MTrue
#define DECODING_THUMBNAIL MFalse
#define JPEG_TYPE_NORMAL 0
#define JPEG_TYPE_JFIF 1
#define JPEG_TYPE_EXIF 2
#define JPEG_TYPE_BITMAP 3 //just thumbnail used
#define JPEG_COLOR_1_BYTE 0x01
#define JPEG_COLOR_3_BYTES 0x02
#define THUMBNAIL_STATUS_JPEG 0x10
#define THUMBNAIL_STATUS_1_BYTE 0x11
#define THUMBNAIL_STATUS_3_BYTES 0x13
#define INDEX_COLOR_TABLE 128
#define JPEG_QUANTIZE_COE_REM_BITS 5
#define DECODE_BUFFER_LEN 512
#define JPEG_MIN_BUFFER_LEN ( 2 * 1024 )
#define JPEG_BUFFER_LEN ( JPEG_MIN_BUFFER_LEN + 2*1024 - 1)
//////////////////////////////////////////
typedef struct tagHuffmanQtDecoderInfo {
int * Qtab[4] ;
int * WideSamp ;
int * HighSamp ;
int * HufDcTail[4] ;
int * HufAcTail[4] ;
int * HufDcOffset[4] ;
int * HufAcOffset[4] ;
int * HufTabDc[4] ;
int * HufTabAc[4] ;
int minDcBits[4] ;
int minAcBits[4] ;
int HuffTabNum ;
MLong dataPos ;
int bitPos ;
MLong CurrentData ;
} HUFFMAN_QT_DECODER_INFO;
typedef struct tagJpegDecoderInfo
{
int Qtab[4][64] ;
int WideSamp[4] ;
int HighSamp[4] ;
int qtID[4] ;
int HufDcTail[4][17] ;
int HufAcTail[4][17] ;
int HufDcOffset[4][16] ;
int HufAcOffset[4][16] ;
int HufTabDc[4][16] ;
int HufTabAc[4][180] ;
int hufAcID[4] ;
int hufDcID[4] ;
int minDcBits[4] ;
int minAcBits[4] ;
int Width ;
int Height ;
int HuffTabNum ;
int ResetLen ;
int type ;
int colorBits ;
MLong dataLen ;
MLong dataPos ;
int bitPos ;
MLong CurrentData ;
} JPEG_DECODER_INFO;
typedef struct tagJpegHandle
{
//relation with the file operation
HMSTREAM pStream ;
MLong fileSize ;
MLong PosPtr ;
MLong restBlock ;
//relation with the buffer read from file.
MByte * buffer ;
MLong bufferLen ;
MLong bufferPos ;
//relation with decode JPEG
JPEG_DECODER_INFO* pJpegInfo ;
MLong jpegBeginPos ;
//relation with decode thumbnail
MBool thumbnailStatus;
JPEG_DECODER_INFO* pThumbnailInfo ;
MLong thumbnailBeginPos ;
int thumbWidth ;
int thumbHeight ;
int thumbBitsStatus;
//recode the state of decoding JPEG or decoding thumbnail.
MBool decodeStatus ; // =true,decode JPEG, =false, decode thumbnail.
//recode the pointer of decoding JPEG or decoding thumbnail.
JPEG_DECODER_INFO* pInfo ;
//record the number id now decoding, this id pointer to which table of huffman and quantize used.
int num ;
//record the DC value of huffman decode.
int Dc0[4] ;
int data[6*64] ;
//save the thumbnail data from decode finished, if no thumbnail, ==NULL.
MByte * thumbnailData ;
//save the JPEG data for decode finished.
MByte * jpegData ;
//save the mid-data for decode. == scanLine * 8 * HighSamp[].
MByte * convertBuffer ;
//the table for color change from YCbCr to RGB.
MByte * ColorLimitTable ;
MShort * resamleAddrH ;
MShort * resamleAddrW ;
MShort * newHBegin ;
MShort * newHEnd ;
MShort * resamleAddrH2 ;
MShort * resamleAddrW2 ;
MShort * newH2Begin ;
MShort * newH2End ;
int shiftN[16] ;
int huffMaskOffset[16] ;
int huffBitOffset[16] ;
MByte zigNum[ 64 + 16 ] ;
} JPEG_HANDLE;
/////////////////////////////////////////////////
int readFile(JPEG_HANDLE * hJpeg, int restLen, MByte *pBufStart, MByte *pBufNow ) ;
int JPG_ReadHead( JPEG_HANDLE * hJpeg ) ;
int JPG_ReadQTable( JPEG_HANDLE * hJpeg ) ;
int JPG_ReadSOf0( JPEG_HANDLE * hJpeg ) ;
int JPG_ReadDri( JPEG_HANDLE * hJpeg ) ;
int JPG_ReadHTable( JPEG_HANDLE * hJpeg ) ;
int JPG_ReadSos( JPEG_HANDLE * hJpeg ) ;
MVoid JPG_ReadJfifHead( JPEG_HANDLE * hJpeg ) ;
MVoid JPG_ReadExifHead( JPEG_HANDLE * hJpeg ) ;
MBool JPG_GetJfifThumbnail( JPEG_HANDLE * hJpeg ) ;
MBool JPG_GetExifThumbnail( JPEG_HANDLE * hJpeg ) ;
MVoid releaseJpegHandle( JPEG_HANDLE * hJpeg ) ;
MVoid JpegMemFree(MVoid *pMem);
#endif /* _JPEG_DECODER_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -