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 __JPEGBASE_H__
00026 #define __JPEGBASE_H__
00027
00028
00029 #ifndef __IPPDEFS_H__
00030 #include "ippdefs.h"
00031 #endif
00032 #ifndef __IPPCORE_H__
00033 #include "ippcore.h"
00034 #endif
00035 #ifndef __IPPS_H__
00036 #include "ipps.h"
00037 #endif
00038 #ifndef __IPPI_H__
00039 #include "ippi.h"
00040 #endif
00041 #ifndef __IPPJ_H__
00042 #include "ippj.h"
00043 #endif
00044
00045
00046 #ifdef _DEBUG
00047 #define ENABLE_TRACING
00048 #endif
00049 #undef ENABLE_ERROR_LOGGING
00050
00051
00052
00053 #define OWN_ALIGN_PTR(ptr,align) \
00054 ippAlignPtr(ptr,align)
00055
00056
00057 #define DIB_ALIGN (sizeof(int) - 1)
00058
00059 #define DIB_UWIDTH(width,nchannels) \
00060 ((width) * (nchannels))
00061
00062 #define DIB_AWIDTH(width,nchannels) \
00063 ( ((DIB_UWIDTH(width,nchannels) + DIB_ALIGN) & (~DIB_ALIGN)) )
00064
00065 #define DIB_PAD_BYTES(width,nchannels) \
00066 ( DIB_AWIDTH(width,nchannels) - DIB_UWIDTH(width,nchannels) )
00067
00068
00069
00070 #undef ENABLE_TRACING
00071 #ifdef ENABLE_TRACING
00072
00073 #define TRC(msg) \
00074 cout << (msg)
00075
00076 #define TRC0(msg) \
00077 cout << (msg) << endl
00078
00079 #define TRC1(msg,p1) \
00080 cout << (msg) << (p1) << endl
00081
00082 #else
00083
00084 #define TRC(msg)
00085 #define TRC0(msg)
00086 #define TRC1(msg,p1)
00087
00088 #endif
00089
00090
00091 #ifdef ENABLE_ERROR_LOGGING
00092
00093 #define LOG(msg) \
00094 cout << (msg)
00095
00096 #define LOG0(msg) \
00097 cout << (msg) << endl
00098
00099 #define LOG1(msg,p1) \
00100 cout << (msg) << (p1) << endl
00101
00102 #else
00103
00104 #define LOG(msg)
00105 #define LOG0(msg)
00106 #define LOG1(msg,p1)
00107
00108 #endif
00109
00110
00111 typedef enum _JPEG_MODE
00112 {
00113 JPEG_BASELINE = 0,
00114 JPEG_PROGRESSIVE = 1,
00115 JPEG_LOSSLESS = 2
00116
00117 } JMODE;
00118
00119
00120 typedef enum _JPEG_OPERATION
00121 {
00122 JO_READ_HEADER = 0,
00123 JO_READ_DATA = 1
00124
00125 } JOPERATION;
00126
00127
00128 typedef enum _JPEG_COLOR
00129 {
00130 JC_UNKNOWN = 0,
00131 JC_GRAY = 1,
00132 JC_RGB = 2,
00133 JC_BGR = 3,
00134 JC_YCBCR = 4,
00135 JC_CMYK = 5,
00136 JC_YCCK = 6
00137
00138 } JCOLOR;
00139
00140
00141 typedef enum _JPEG_SAMPLING
00142 {
00143 JS_444 = 0,
00144 JS_422 = 1,
00145 JS_411 = 2,
00146 JS_OTHER = 3
00147
00148 } JSS;
00149
00150
00151 typedef enum _JPEG_MARKER
00152 {
00153 JM_NONE = 0,
00154 JM_SOI = 0xd8,
00155 JM_EOI = 0xd9,
00156
00157
00158 JM_SOF0 = 0xc0,
00159 JM_SOF1 = 0xc1,
00160 JM_SOF2 = 0xc2,
00161 JM_SOF3 = 0xc3,
00162
00163 JM_SOF5 = 0xc5,
00164 JM_SOF6 = 0xc6,
00165 JM_SOF7 = 0xc7,
00166
00167 JM_SOF9 = 0xc9,
00168 JM_SOFA = 0xca,
00169 JM_SOFB = 0xcb,
00170
00171 JM_SOFD = 0xcd,
00172 JM_SOFE = 0xce,
00173 JM_SOFF = 0xcf,
00174
00175 JM_SOS = 0xda,
00176 JM_DQT = 0xdb,
00177 JM_DHT = 0xc4,
00178 JM_APP0 = 0xe0,
00179 JM_APP1 = 0xe1,
00180 JM_APP2 = 0xe2,
00181 JM_APP3 = 0xe3,
00182 JM_APP4 = 0xe4,
00183 JM_APP5 = 0xe5,
00184 JM_APP6 = 0xe6,
00185 JM_APP7 = 0xe7,
00186 JM_APP8 = 0xe8,
00187 JM_APP9 = 0xe9,
00188 JM_APP10 = 0xea,
00189 JM_APP11 = 0xeb,
00190 JM_APP12 = 0xec,
00191 JM_APP13 = 0xed,
00192 JM_APP14 = 0xee,
00193 JM_APP15 = 0xef,
00194 JM_RST0 = 0xd0,
00195 JM_RST1 = 0xd1,
00196 JM_RST2 = 0xd2,
00197 JM_RST3 = 0xd3,
00198 JM_RST4 = 0xd4,
00199 JM_RST5 = 0xd5,
00200 JM_RST6 = 0xd6,
00201 JM_RST7 = 0xd7,
00202 JM_DRI = 0xdd,
00203 JM_COM = 0xfe
00204
00205 } JMARKER;
00206
00207
00208 typedef enum _JPEG_ERROR
00209 {
00210 JPEG_OK = 0,
00211 JPEG_NOT_IMPLEMENTED = -1,
00212 JPEG_INTERNAL_ERROR = -2,
00213 JPEG_BUFF_TOO_SMALL = -3,
00214 JPEG_OUT_OF_MEMORY = -4,
00215 JPEG_BAD_SEGMENT_LENGTH = -5,
00216 JPEG_BAD_HUFF_TBL = -6,
00217 JPEG_BAD_QUANT_SEGMENT = -7,
00218 JPEG_BAD_SCAN_SEGMENT = -8,
00219 JPEG_BAD_FRAME_SEGMENT = -9,
00220 JPEG_BAD_COMPONENT_ID = -10,
00221 JPEG_BAD_SAMPLING = -11,
00222 JPEG_BAD_RESTART = -12
00223
00224 } JERRCODE;
00225
00226
00227 typedef struct _image
00228 {
00229 union
00230 {
00231 Ipp8u* Data8u;
00232 Ipp16s* Data16s;
00233 } p;
00234
00235 int width;
00236 int height;
00237 int lineStep;
00238 int precision;
00239 int nChannels;
00240 JCOLOR color;
00241 } IMAGE;
00242
00243
00244 typedef struct _bitstream
00245 {
00246 Ipp8u* pData;
00247 int DataLen;
00248 int currPos;
00249
00250 JERRCODE _WRITE_BYTE(int byte);
00251 JERRCODE _WRITE_WORD(int word);
00252 JERRCODE _READ_BYTE(int* byte);
00253 JERRCODE _READ_WORD(int* word);
00254 } BITSTREAM;
00255
00256
00257 const int CPU_CACHE_LINE = 32;
00258 const int DCTSIZE2 = 64;
00259 const int MAX_QUANT_TABLES = 4;
00260 const int MAX_HUFF_TABLES = 4;
00261 const int MAX_COMPS_PER_SCAN = 4;
00262 const int MAX_COMPS_PER_FRAME = 255;
00263 const int MAX_HUFF_BITS = 16;
00264 const int MAX_HUFF_VALS = 256;
00265 const int MAX_BLOCKS_PER_MCU = 10;
00266 const int MAX_BYTES_PER_MCU = DCTSIZE2*sizeof(Ipp16s)*MAX_BLOCKS_PER_MCU;
00267
00268
00269 extern const Ipp8u DefaultLuminanceQuant[64];
00270 extern const Ipp8u DefaultChrominanceQuant[64];
00271
00272 extern const Ipp8u DefaultLuminanceDCBits[];
00273 extern const Ipp8u DefaultLuminanceDCValues[];
00274 extern const Ipp8u DefaultChrominanceDCBits[];
00275 extern const Ipp8u DefaultChrominanceDCValues[];
00276 extern const Ipp8u DefaultLuminanceACBits[];
00277 extern const Ipp8u DefaultLuminanceACValues[];
00278 extern const Ipp8u DefaultChrominanceACBits[];
00279 extern const Ipp8u DefaultChrominanceACValues[];
00280
00281 const char* GetErrorStr(JERRCODE code);
00282
00283
00284 #endif // __JPEGBASE_H__
00285
00286