File: jpeg_const.h

package info (click to toggle)
tango 8.1.2c%2Bdfsg-5
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 21,964 kB
  • ctags: 14,286
  • sloc: cpp: 133,954; sh: 14,704; ansic: 1,083; makefile: 944; java: 215; python: 55
file content (174 lines) | stat: -rw-r--r-- 4,755 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
///=============================================================================
//
// file :		jpeg_const.h
//
// description :        Simple jpeg coding/decoding library
//                      Various constants and internal type definitions
//
// project :		TANGO
//
// author(s) :		JL Pons
//
// Copyright (C) :      2004,2005,2006,2007,2008,2009,2010,2011,2012,2013
//                      European Synchrotron Radiation Facility
//                      BP 220, Grenoble 38043
//                      FRANCE
//
// This file is part of Tango.
//
// Tango is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Tango is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with Tango.  If not, see <http://www.gnu.org/licenses/>.
//
// $Revision: 22213 $
//
// $Log$
// Revision 1.2  2009/04/20 14:55:58  jlpons
// Added GPL header, changed memory allocation to C++ fashion.
//
//=============================================================================

#ifndef _JPEGCONSTH_
#define _JPEGCONSTH_

// Huffman table structure

typedef struct {

  unsigned char *huffBits;       // Number of Huffman codes per bit size
  unsigned char *huffVal;        // Huffman codes per bit size
  unsigned char  huffSize[256];  // Huffman codes size
  unsigned int   huffCode[256];  // Huffman codes
  unsigned int   lookUp[256];    // look up table (decoding purpose)
  unsigned int   tree[512];      // Huffman tree (decoding purpose)
  int            inited;         // Initialisation flag (decoding purpose)

} HUFFMANTABLE;

// Components structure

typedef struct {

  int   id;             // Identifier
  int   horzSampling;   // Horizontal sampling factor
  int   vertSampling;   // Vertical sampling factor
  int   quantIdx;       // Quantization table index
  int   dcIdx;          // Huffman table DC index
  int   acIdx;          // Huffman table AC index
  short lastDc;         // Last DC value

} JPGCOMPONENT;

// Decoder structure

typedef struct {

  int   width;         // Image width
  int   height;        // Image height
  int   scanType;      // Type of scan
  int   outFormat;     // Output format
  int   compNb;        // Number of component (frame)
  int   compInScan;    // Number of component (scan)
  int   mcuWidth;      // MCU width
  int   mcuHeight;     // MCU height
  int   mcuNbBlock;    // Number of block per MCU (total)
  int   mcuNbRow;      // Number of MCU per row
  int   mcuNbCol;      // Number of MCU per col
  int   restartInterval; // Restart interval
  int   restartsLeft;    // Number of MCU between DRI marker
  int   nextRestart;     // Next RST marker code
  int   compList[6];     // List of component (scan)

  HUFFMANTABLE hTables[8];  // Huffman tables
  short *qTables[4];        // Quantization tables
  JPGCOMPONENT comps[4];    // Components

  short *blocks;            // Blocks
  unsigned char *yccFrame;  // Decoded frame (RGB24 or GRAY8)
  unsigned char *rgbFrame;  // Decoded frame (RGB24 or GRAY8)

} JPGDECODER;

// JPEG scan type

#define JPG_SCAN_GRAYSCALE 0
#define JPG_SCAN_YH1V1     1
#define JPG_SCAN_YH2V1     2
#define JPG_SCAN_YH1V2     3
#define JPG_SCAN_YH2V2     4

// JPEG marker codes

#define M_SOF0  0xc0
#define M_SOF1  0xc1
#define M_SOF2  0xc2
#define M_SOF3  0xc3

#define M_SOF5  0xc5
#define M_SOF6  0xc6
#define M_SOF7  0xc7

#define M_JPG   0xc8
#define M_SOF9  0xc9
#define M_SOF10 0xca
#define M_SOF11 0xcb

#define M_SOF13 0xcd
#define M_SOF14 0xce
#define M_SOF15 0xcf

#define M_DHT   0xc4

#define M_DAC   0xcc

#define M_RST0  0xd0
#define M_RST1  0xd1
#define M_RST2  0xd2
#define M_RST3  0xd3
#define M_RST4  0xd4
#define M_RST5  0xd5
#define M_RST6  0xd6
#define M_RST7  0xd7

#define M_SOI   0xd8
#define M_EOI   0xd9
#define M_SOS   0xda
#define M_DQT   0xdb
#define M_DNL   0xdc
#define M_DRI   0xdd
#define M_DHP   0xde
#define M_EXP   0xdf

#define M_APP0  0xe0
#define M_APP1  0xe1
#define M_APP2  0xe2
#define M_APP3  0xe3
#define M_APP4  0xe4
#define M_APP5  0xe5
#define M_APP6  0xe6
#define M_APP7  0xe7
#define M_APP8  0xe8
#define M_APP9  0xe9
#define M_APP10 0xea
#define M_APP11 0xeb
#define M_APP12 0xec
#define M_APP13 0xed
#define M_APP14 0xee
#define M_APP15 0xef

#define M_JPG0  0xf0
#define M_JPG13 0xfd
#define M_COM   0xfe

#define M_TEM   0x01

#endif /* _JPEGCONSTH_ */