Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef __ENCODER_H__
00026 #define __ENCODER_H__
00027
00028 #ifndef __IPPS_H__
00029 #include "ipps.h"
00030 #endif
00031 #ifndef __IPPI_H__
00032 #include "ippi.h"
00033 #endif
00034 #ifndef __IPPJ_H__
00035 #include "ippj.h"
00036 #endif
00037 #ifndef __JPEGBASE_H__
00038 #include "jpegbase.h"
00039 #endif
00040 #ifndef __ENCQTBL_H__
00041 #include "encqtbl.h"
00042 #endif
00043 #ifndef __ENCHTBL_H__
00044 #include "enchtbl.h"
00045 #endif
00046 #ifndef __COLORCOMP_H__
00047 #include "colorcomp.h"
00048 #endif
00049
00050
00051
00052
00053 typedef struct _JPEG_SCAN
00054 {
00055 int ncomp;
00056 int id[MAX_COMPS_PER_SCAN];
00057 int Ss;
00058 int Se;
00059 int Ah;
00060 int Al;
00061 } JPEG_SCAN;
00062
00063
00064 class CJPEGEncoder
00065 {
00066 public:
00067
00068 CJPEGEncoder(void);
00069 virtual ~CJPEGEncoder(void);
00070
00071 JERRCODE SetSource(
00072 Ipp8u* pSrc,
00073 int srcStep,
00074 IppiSize srcSize,
00075 int srcChannels,
00076 JCOLOR srcColor);
00077
00078 JERRCODE SetDestination(
00079 Ipp8u* pDst,
00080 int dstSize,
00081 int dstQuality,
00082 JSS dstSampling,
00083 JCOLOR dstColor,
00084 JMODE dstMode = JPEG_BASELINE,
00085 int dstRestartInt = 0);
00086
00087
00088
00089
00090
00091 JERRCODE WriteImageBaseline();
00092
00093 JERRCODE WriteImageProgressive();
00094
00095 JERRCODE WriteImageLossless();
00096
00097 IMAGE m_src;
00098 BITSTREAM m_dst;
00099
00100 int m_jpeg_ncomp;
00101 int m_jpeg_precision;
00102 JSS m_jpeg_sampling;
00103 JCOLOR m_jpeg_color;
00104 int m_jpeg_quality;
00105 int m_jpeg_restart_interval;
00106 JMODE m_jpeg_mode;
00107
00108 int m_numxMCU;
00109 int m_numyMCU;
00110 int m_mcuWidth;
00111 int m_mcuHeight;
00112 int m_ccWidth;
00113 int m_ccHeight;
00114 int m_xPadding;
00115 int m_yPadding;
00116 int m_restarts_to_go;
00117 int m_next_restart_num;
00118 int m_scan_count;
00119 int m_ss;
00120 int m_se;
00121 int m_al;
00122 int m_ah;
00123 int m_predictor;
00124 int m_pt;
00125 JPEG_SCAN* m_scan_script;
00126 Ipp16s* m_coefbuf;
00127
00128 CJPEGColorComponent* m_ccomp[MAX_COMPS_PER_SCAN];
00129 CJPEGEncoderQuantTable m_qntbl[MAX_QUANT_TABLES];
00130 CJPEGEncoderHuffmanTable m_dctbl[MAX_HUFF_TABLES];
00131 CJPEGEncoderHuffmanTable m_actbl[MAX_HUFF_TABLES];
00132 CJPEGEncoderHuffmanState m_state;
00133
00134 JERRCODE Init(void);
00135 JERRCODE Clean(void);
00136 JERRCODE ColorConvert(void);
00137 JERRCODE ColorConvert(int nMCURow);
00138 JERRCODE DownSampling(void);
00139 JERRCODE DownSampling(int nMCURow);
00140 JERRCODE PerformDCT(void);
00141 JERRCODE EncodeScan(int ncomp,int id[MAX_COMPS_PER_SCAN],int Ss,int Se,int Ah,int Al);
00142 JERRCODE SelectScanScripts(void);
00143 JERRCODE GenerateHuffmanTables(int ncomp,int id[MAX_COMPS_PER_SCAN],int Ss,int Se,int Ah,int Al);
00144
00145 JERRCODE WriteSOI(void);
00146 JERRCODE WriteEOI(void);
00147 JERRCODE WriteAPP0(void);
00148 JERRCODE WriteAPP14(void);
00149 JERRCODE WriteSOF0(void);
00150 JERRCODE WriteSOF1(void);
00151 JERRCODE WriteSOF2(void);
00152 JERRCODE WriteSOF3(void);
00153 JERRCODE WriteDRI(int restart_interval);
00154 JERRCODE WriteRST(int next_restart_num);
00155 JERRCODE WriteSOS(void);
00156 JERRCODE WriteSOS(int ncomp,int id[MAX_COMPS_PER_SCAN],int Ss,int Se,int Ah,int Al);
00157 JERRCODE WriteDQT(CJPEGEncoderQuantTable* tbl);
00158 JERRCODE WriteDHT(CJPEGEncoderHuffmanTable* tbl);
00159 JERRCODE WriteCOM(char* comment = 0);
00160
00161 JERRCODE ProcessRestart(int id[MAX_COMPS_PER_SCAN],int Ss,int Se,int Ah,int Al);
00162 JERRCODE ProcessRestart(int stat[2][256],int id[MAX_COMPS_PER_SCAN],int Ss,int Se,int Ah,int Al);
00163
00164 };
00165
00166
00167 #endif // __ENCODER_H__
00168