ReactOS 0.4.16-dev-297-gc569aee
jcmarker.c File Reference
#include "jinclude.h"
#include "jpeglib.h"
Include dependency graph for jcmarker.c:

Go to the source code of this file.

Classes

struct  my_marker_writer
 

Macros

#define JPEG_INTERNALS
 

Typedefs

typedef my_marker_writermy_marker_ptr
 

Enumerations

enum  JPEG_MARKER {
  M_SOF0 = 0xc0 , M_SOF1 = 0xc1 , M_SOF2 = 0xc2 , M_SOF3 = 0xc3 ,
  M_SOF5 = 0xc5 , M_SOF6 = 0xc6 , M_SOF7 = 0xc7 , M_JPG = 0xc8 ,
  M_SOF9 = 0xc9 , M_SOF10 = 0xca , M_SOF11 = 0xcb , M_SOF13 = 0xcd ,
  M_SOF14 = 0xce , M_SOF15 = 0xcf , M_DHT = 0xc4 , M_DAC = 0xcc ,
  M_RST0 = 0xd0 , M_RST1 = 0xd1 , M_RST2 = 0xd2 , M_RST3 = 0xd3 ,
  M_RST4 = 0xd4 , M_RST5 = 0xd5 , M_RST6 = 0xd6 , M_RST7 = 0xd7 ,
  M_SOI = 0xd8 , M_EOI = 0xd9 , M_SOS = 0xda , M_DQT = 0xdb ,
  M_DNL = 0xdc , M_DRI = 0xdd , M_DHP = 0xde , M_EXP = 0xdf ,
  M_APP0 = 0xe0 , M_APP1 = 0xe1 , M_APP2 = 0xe2 , M_APP3 = 0xe3 ,
  M_APP4 = 0xe4 , M_APP5 = 0xe5 , M_APP6 = 0xe6 , M_APP7 = 0xe7 ,
  M_APP8 = 0xe8 , M_APP9 = 0xe9 , M_APP10 = 0xea , M_APP11 = 0xeb ,
  M_APP12 = 0xec , M_APP13 = 0xed , M_APP14 = 0xee , M_APP15 = 0xef ,
  M_JPG0 = 0xf0 , M_JPG8 = 0xf8 , M_JPG13 = 0xfd , M_COM = 0xfe ,
  M_TEM = 0x01 , M_ERROR = 0x100 , M_SOF0 = 0xc0 , M_SOF1 = 0xc1 ,
  M_SOF2 = 0xc2 , M_SOF3 = 0xc3 , M_SOF5 = 0xc5 , M_SOF6 = 0xc6 ,
  M_SOF7 = 0xc7 , M_JPG = 0xc8 , M_SOF9 = 0xc9 , M_SOF10 = 0xca ,
  M_SOF11 = 0xcb , M_SOF13 = 0xcd , M_SOF14 = 0xce , M_SOF15 = 0xcf ,
  M_DHT = 0xc4 , M_DAC = 0xcc , M_RST0 = 0xd0 , M_RST1 = 0xd1 ,
  M_RST2 = 0xd2 , M_RST3 = 0xd3 , M_RST4 = 0xd4 , M_RST5 = 0xd5 ,
  M_RST6 = 0xd6 , M_RST7 = 0xd7 , M_SOI = 0xd8 , M_EOI = 0xd9 ,
  M_SOS = 0xda , M_DQT = 0xdb , M_DNL = 0xdc , M_DRI = 0xdd ,
  M_DHP = 0xde , M_EXP = 0xdf , M_APP0 = 0xe0 , M_APP1 = 0xe1 ,
  M_APP2 = 0xe2 , M_APP3 = 0xe3 , M_APP4 = 0xe4 , M_APP5 = 0xe5 ,
  M_APP6 = 0xe6 , M_APP7 = 0xe7 , M_APP8 = 0xe8 , M_APP9 = 0xe9 ,
  M_APP10 = 0xea , M_APP11 = 0xeb , M_APP12 = 0xec , M_APP13 = 0xed ,
  M_APP14 = 0xee , M_APP15 = 0xef , M_JPG0 = 0xf0 , M_JPG8 = 0xf8 ,
  M_JPG13 = 0xfd , M_COM = 0xfe , M_TEM = 0x01 , M_ERROR = 0x100
}
 

Functions

 emit_byte (j_compress_ptr cinfo, int val)
 
 emit_marker (j_compress_ptr cinfo, JPEG_MARKER mark)
 
 emit_2bytes (j_compress_ptr cinfo, int value)
 
 emit_dqt (j_compress_ptr cinfo, int index)
 
 emit_dht (j_compress_ptr cinfo, int index, boolean is_ac)
 
 emit_dac (j_compress_ptr cinfo)
 
 emit_dri (j_compress_ptr cinfo)
 
 emit_lse_ict (j_compress_ptr cinfo)
 
 emit_sof (j_compress_ptr cinfo, JPEG_MARKER code)
 
 emit_sos (j_compress_ptr cinfo)
 
 emit_pseudo_sos (j_compress_ptr cinfo)
 
 emit_jfif_app0 (j_compress_ptr cinfo)
 
 emit_adobe_app14 (j_compress_ptr cinfo)
 
 write_marker_header (j_compress_ptr cinfo, int marker, unsigned int datalen)
 
 write_marker_byte (j_compress_ptr cinfo, int val)
 
 write_file_header (j_compress_ptr cinfo)
 
 write_frame_header (j_compress_ptr cinfo)
 
 write_scan_header (j_compress_ptr cinfo)
 
 write_file_trailer (j_compress_ptr cinfo)
 
 write_tables_only (j_compress_ptr cinfo)
 
 jinit_marker_writer (j_compress_ptr cinfo)
 

Macro Definition Documentation

◆ JPEG_INTERNALS

#define JPEG_INTERNALS

Definition at line 12 of file jcmarker.c.

Typedef Documentation

◆ my_marker_ptr

Definition at line 94 of file jcmarker.c.

Enumeration Type Documentation

◆ JPEG_MARKER

Enumerator
M_SOF0 
M_SOF1 
M_SOF2 
M_SOF3 
M_SOF5 
M_SOF6 
M_SOF7 
M_JPG 
M_SOF9 
M_SOF10 
M_SOF11 
M_SOF13 
M_SOF14 
M_SOF15 
M_DHT 
M_DAC 
M_RST0 
M_RST1 
M_RST2 
M_RST3 
M_RST4 
M_RST5 
M_RST6 
M_RST7 
M_SOI 
M_EOI 
M_SOS 
M_DQT 
M_DNL 
M_DRI 
M_DHP 
M_EXP 
M_APP0 
M_APP1 
M_APP2 
M_APP3 
M_APP4 
M_APP5 
M_APP6 
M_APP7 
M_APP8 
M_APP9 
M_APP10 
M_APP11 
M_APP12 
M_APP13 
M_APP14 
M_APP15 
M_JPG0 
M_JPG8 
M_JPG13 
M_COM 
M_TEM 
M_ERROR 
M_SOF0 
M_SOF1 
M_SOF2 
M_SOF3 
M_SOF5 
M_SOF6 
M_SOF7 
M_JPG 
M_SOF9 
M_SOF10 
M_SOF11 
M_SOF13 
M_SOF14 
M_SOF15 
M_DHT 
M_DAC 
M_RST0 
M_RST1 
M_RST2 
M_RST3 
M_RST4 
M_RST5 
M_RST6 
M_RST7 
M_SOI 
M_EOI 
M_SOS 
M_DQT 
M_DNL 
M_DRI 
M_DHP 
M_EXP 
M_APP0 
M_APP1 
M_APP2 
M_APP3 
M_APP4 
M_APP5 
M_APP6 
M_APP7 
M_APP8 
M_APP9 
M_APP10 
M_APP11 
M_APP12 
M_APP13 
M_APP14 
M_APP15 
M_JPG0 
M_JPG8 
M_JPG13 
M_COM 
M_TEM 
M_ERROR 

Definition at line 17 of file jcmarker.c.

17 { /* JPEG marker codes */
18 M_SOF0 = 0xc0,
19 M_SOF1 = 0xc1,
20 M_SOF2 = 0xc2,
21 M_SOF3 = 0xc3,
22
23 M_SOF5 = 0xc5,
24 M_SOF6 = 0xc6,
25 M_SOF7 = 0xc7,
26
27 M_JPG = 0xc8,
28 M_SOF9 = 0xc9,
29 M_SOF10 = 0xca,
30 M_SOF11 = 0xcb,
31
32 M_SOF13 = 0xcd,
33 M_SOF14 = 0xce,
34 M_SOF15 = 0xcf,
35
36 M_DHT = 0xc4,
37
38 M_DAC = 0xcc,
39
40 M_RST0 = 0xd0,
41 M_RST1 = 0xd1,
42 M_RST2 = 0xd2,
43 M_RST3 = 0xd3,
44 M_RST4 = 0xd4,
45 M_RST5 = 0xd5,
46 M_RST6 = 0xd6,
47 M_RST7 = 0xd7,
48
49 M_SOI = 0xd8,
50 M_EOI = 0xd9,
51 M_SOS = 0xda,
52 M_DQT = 0xdb,
53 M_DNL = 0xdc,
54 M_DRI = 0xdd,
55 M_DHP = 0xde,
56 M_EXP = 0xdf,
57
58 M_APP0 = 0xe0,
59 M_APP1 = 0xe1,
60 M_APP2 = 0xe2,
61 M_APP3 = 0xe3,
62 M_APP4 = 0xe4,
63 M_APP5 = 0xe5,
64 M_APP6 = 0xe6,
65 M_APP7 = 0xe7,
66 M_APP8 = 0xe8,
67 M_APP9 = 0xe9,
68 M_APP10 = 0xea,
69 M_APP11 = 0xeb,
70 M_APP12 = 0xec,
71 M_APP13 = 0xed,
72 M_APP14 = 0xee,
73 M_APP15 = 0xef,
74
75 M_JPG0 = 0xf0,
76 M_JPG8 = 0xf8,
77 M_JPG13 = 0xfd,
78 M_COM = 0xfe,
79
80 M_TEM = 0x01,
81
82 M_ERROR = 0x100
JPEG_MARKER
Definition: jcmarker.c:17
@ M_RST4
Definition: jcmarker.c:44
@ M_COM
Definition: jcmarker.c:78
@ M_RST5
Definition: jcmarker.c:45
@ M_DNL
Definition: jcmarker.c:53
@ M_SOF14
Definition: jcmarker.c:33
@ M_APP3
Definition: jcmarker.c:61
@ M_SOF7
Definition: jcmarker.c:25
@ M_EOI
Definition: jcmarker.c:50
@ M_APP11
Definition: jcmarker.c:69
@ M_JPG8
Definition: jcmarker.c:76
@ M_APP1
Definition: jcmarker.c:59
@ M_APP12
Definition: jcmarker.c:70
@ M_APP2
Definition: jcmarker.c:60
@ M_APP13
Definition: jcmarker.c:71
@ M_RST3
Definition: jcmarker.c:43
@ M_APP9
Definition: jcmarker.c:67
@ M_DQT
Definition: jcmarker.c:52
@ M_DHT
Definition: jcmarker.c:36
@ M_SOF3
Definition: jcmarker.c:21
@ M_SOF2
Definition: jcmarker.c:20
@ M_APP14
Definition: jcmarker.c:72
@ M_DAC
Definition: jcmarker.c:38
@ M_SOF6
Definition: jcmarker.c:24
@ M_APP6
Definition: jcmarker.c:64
@ M_RST0
Definition: jcmarker.c:40
@ M_APP8
Definition: jcmarker.c:66
@ M_SOF15
Definition: jcmarker.c:34
@ M_SOI
Definition: jcmarker.c:49
@ M_RST7
Definition: jcmarker.c:47
@ M_DRI
Definition: jcmarker.c:54
@ M_SOF9
Definition: jcmarker.c:28
@ M_JPG
Definition: jcmarker.c:27
@ M_APP10
Definition: jcmarker.c:68
@ M_SOF10
Definition: jcmarker.c:29
@ M_SOF11
Definition: jcmarker.c:30
@ M_TEM
Definition: jcmarker.c:80
@ M_EXP
Definition: jcmarker.c:56
@ M_SOF13
Definition: jcmarker.c:32
@ M_JPG0
Definition: jcmarker.c:75
@ M_RST6
Definition: jcmarker.c:46
@ M_APP4
Definition: jcmarker.c:62
@ M_APP5
Definition: jcmarker.c:63
@ M_SOF1
Definition: jcmarker.c:19
@ M_SOS
Definition: jcmarker.c:51
@ M_APP7
Definition: jcmarker.c:65
@ M_SOF0
Definition: jcmarker.c:18
@ M_APP0
Definition: jcmarker.c:58
@ M_APP15
Definition: jcmarker.c:73
@ M_RST2
Definition: jcmarker.c:42
@ M_SOF5
Definition: jcmarker.c:23
@ M_RST1
Definition: jcmarker.c:41
@ M_JPG13
Definition: jcmarker.c:77
@ M_ERROR
Definition: jcmarker.c:82
@ M_DHP
Definition: jcmarker.c:55

Function Documentation

◆ emit_2bytes()

emit_2bytes ( j_compress_ptr  cinfo,
int  value 
)

Definition at line 133 of file jcmarker.c.

135{
136 emit_byte(cinfo, (value >> 8) & 0xFF);
137 emit_byte(cinfo, value & 0xFF);
138}
emit_byte(j_compress_ptr cinfo, int val)
Definition: jcmarker.c:110
Definition: pdh_main.c:94

Referenced by emit_adobe_app14(), emit_dac(), emit_dht(), emit_dqt(), emit_dri(), emit_jfif_app0(), emit_lse_ict(), emit_pseudo_sos(), emit_sof(), emit_sos(), and write_marker_header().

◆ emit_adobe_app14()

emit_adobe_app14 ( j_compress_ptr  cinfo)

Definition at line 434 of file jcmarker.c.

436{
437 /*
438 * Length of APP14 block (2 bytes)
439 * Block ID (5 bytes - ASCII "Adobe")
440 * Version Number (2 bytes - currently 100)
441 * Flags0 (2 bytes - currently 0)
442 * Flags1 (2 bytes - currently 0)
443 * Color transform (1 byte)
444 *
445 * Although Adobe TN 5116 mentions Version = 101, all the Adobe files
446 * now in circulation seem to use Version = 100, so that's what we write.
447 *
448 * We write the color transform byte as 1 if the JPEG color space is
449 * YCbCr, 2 if it's YCCK, 0 otherwise. Adobe's definition has to do with
450 * whether the encoder performed a transformation, which is pretty useless.
451 */
452
453 emit_marker(cinfo, M_APP14);
454
455 emit_2bytes(cinfo, 2 + 5 + 2 + 2 + 2 + 1); /* length */
456
457 emit_byte(cinfo, 0x41); /* Identifier: ASCII "Adobe" */
458 emit_byte(cinfo, 0x64);
459 emit_byte(cinfo, 0x6F);
460 emit_byte(cinfo, 0x62);
461 emit_byte(cinfo, 0x65);
462 emit_2bytes(cinfo, 100); /* Version */
463 emit_2bytes(cinfo, 0); /* Flags0 */
464 emit_2bytes(cinfo, 0); /* Flags1 */
465 switch (cinfo->jpeg_color_space) {
466 case JCS_YCbCr:
467 emit_byte(cinfo, 1); /* Color transform = 1 */
468 break;
469 case JCS_YCCK:
470 emit_byte(cinfo, 2); /* Color transform = 2 */
471 break;
472 default:
473 emit_byte(cinfo, 0); /* Color transform = 0 */
474 }
475}
emit_2bytes(j_compress_ptr cinfo, int value)
Definition: jcmarker.c:133
emit_marker(j_compress_ptr cinfo, JPEG_MARKER mark)
Definition: jcmarker.c:124
@ JCS_YCCK
Definition: jpeglib.h:226
@ JCS_YCbCr
Definition: jpeglib.h:224
J_COLOR_SPACE jpeg_color_space
Definition: jpeglib.h:331

Referenced by write_file_header().

◆ emit_byte()

emit_byte ( j_compress_ptr  cinfo,
int  val 
)

Definition at line 110 of file jcmarker.c.

112{
113 struct jpeg_destination_mgr * dest = cinfo->dest;
114
115 *(dest->next_output_byte)++ = (JOCTET) val;
116 if (--dest->free_in_buffer == 0) {
117 if (! (*dest->empty_output_buffer) (cinfo))
118 ERREXIT(cinfo, JERR_CANT_SUSPEND);
119 }
120}
GLuint GLfloat * val
Definition: glext.h:7180
char JOCTET
Definition: jmorecfg.h:167
static char * dest
Definition: rtl.c:135
#define ERREXIT(msg)
Definition: rdjpgcom.c:72
struct jpeg_destination_mgr * dest
Definition: jpeglib.h:295

Referenced by emit_2bytes(), emit_adobe_app14(), emit_dac(), emit_dht(), emit_dqt(), emit_jfif_app0(), emit_lse_ict(), emit_marker(), emit_pseudo_sos(), emit_sof(), emit_sos(), and write_marker_byte().

◆ emit_dac()

emit_dac ( j_compress_ptr  cinfo)

Definition at line 225 of file jcmarker.c.

229{
230#ifdef C_ARITH_CODING_SUPPORTED
231 char dc_in_use[NUM_ARITH_TBLS];
232 char ac_in_use[NUM_ARITH_TBLS];
233 int length, i;
235
236 for (i = 0; i < NUM_ARITH_TBLS; i++)
237 dc_in_use[i] = ac_in_use[i] = 0;
238
239 for (i = 0; i < cinfo->comps_in_scan; i++) {
240 compptr = cinfo->cur_comp_info[i];
241 /* DC needs no table for refinement scan */
242 if (cinfo->Ss == 0 && cinfo->Ah == 0)
243 dc_in_use[compptr->dc_tbl_no] = 1;
244 /* AC needs no table when not present */
245 if (cinfo->Se)
246 ac_in_use[compptr->ac_tbl_no] = 1;
247 }
248
249 length = 0;
250 for (i = 0; i < NUM_ARITH_TBLS; i++)
251 length += dc_in_use[i] + ac_in_use[i];
252
253 if (length) {
254 emit_marker(cinfo, M_DAC);
255
256 emit_2bytes(cinfo, length*2 + 2);
257
258 for (i = 0; i < NUM_ARITH_TBLS; i++) {
259 if (dc_in_use[i]) {
260 emit_byte(cinfo, i);
261 emit_byte(cinfo, cinfo->arith_dc_L[i] + (cinfo->arith_dc_U[i]<<4));
262 }
263 if (ac_in_use[i]) {
264 emit_byte(cinfo, i + 0x10);
265 emit_byte(cinfo, cinfo->arith_ac_K[i]);
266 }
267 }
268 }
269#endif /* C_ARITH_CODING_SUPPORTED */
270}
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
jpeg_component_info * compptr
Definition: jdct.h:238
#define NUM_ARITH_TBLS
Definition: jpeglib.h:54
jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]
Definition: jpeglib.h:423
UINT8 arith_dc_U[NUM_ARITH_TBLS]
Definition: jpeglib.h:347
UINT8 arith_dc_L[NUM_ARITH_TBLS]
Definition: jpeglib.h:346
UINT8 arith_ac_K[NUM_ARITH_TBLS]
Definition: jpeglib.h:348

Referenced by write_scan_header().

◆ emit_dht()

emit_dht ( j_compress_ptr  cinfo,
int  index,
boolean  is_ac 
)

Definition at line 187 of file jcmarker.c.

189{
190 JHUFF_TBL * htbl;
191 int length, i;
192
193 if (is_ac) {
194 htbl = cinfo->ac_huff_tbl_ptrs[index];
195 index += 0x10; /* output index has AC bit set */
196 } else {
197 htbl = cinfo->dc_huff_tbl_ptrs[index];
198 }
199
200 if (htbl == NULL)
201 ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, index);
202
203 if (! htbl->sent_table) {
204 emit_marker(cinfo, M_DHT);
205
206 length = 0;
207 for (i = 1; i <= 16; i++)
208 length += htbl->bits[i];
209
210 emit_2bytes(cinfo, length + 2 + 1 + 16);
211 emit_byte(cinfo, index);
212
213 for (i = 1; i <= 16; i++)
214 emit_byte(cinfo, htbl->bits[i]);
215
216 for (i = 0; i < length; i++)
217 emit_byte(cinfo, htbl->huffval[i]);
218
219 htbl->sent_table = TRUE;
220 }
221}
#define index(s, c)
Definition: various.h:29
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
GLuint index
Definition: glext.h:6031
#define ERREXIT1(cinfo, code, p1)
Definition: jerror.h:212
boolean sent_table
Definition: jpeglib.h:119
UINT8 bits[17]
Definition: jpeglib.h:111
UINT8 huffval[256]
Definition: jpeglib.h:113
JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]
Definition: jpeglib.h:342
JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]
Definition: jpeglib.h:343

Referenced by write_scan_header(), and write_tables_only().

◆ emit_dqt()

emit_dqt ( j_compress_ptr  cinfo,
int  index 
)

Definition at line 146 of file jcmarker.c.

149{
150 JQUANT_TBL * qtbl = cinfo->quant_tbl_ptrs[index];
151 int prec;
152 int i;
153
154 if (qtbl == NULL)
155 ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, index);
156
157 prec = 0;
158 for (i = 0; i <= cinfo->lim_Se; i++) {
159 if (qtbl->quantval[cinfo->natural_order[i]] > 255)
160 prec = 1;
161 }
162
163 if (! qtbl->sent_table) {
164 emit_marker(cinfo, M_DQT);
165
166 emit_2bytes(cinfo,
167 prec ? cinfo->lim_Se * 2 + 2 + 1 + 2 : cinfo->lim_Se + 1 + 1 + 2);
168
169 emit_byte(cinfo, index + (prec<<4));
170
171 for (i = 0; i <= cinfo->lim_Se; i++) {
172 /* The table entries must be emitted in zigzag order. */
173 unsigned int qval = qtbl->quantval[cinfo->natural_order[i]];
174 if (prec)
175 emit_byte(cinfo, (int) (qval >> 8));
176 emit_byte(cinfo, (int) (qval & 0xFF));
177 }
178
179 qtbl->sent_table = TRUE;
180 }
181
182 return prec;
183}
boolean sent_table
Definition: jpeglib.h:103
UINT16 quantval[DCTSIZE2]
Definition: jpeglib.h:97
const int * natural_order
Definition: jpeglib.h:437
JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]
Definition: jpeglib.h:336

Referenced by write_frame_header(), and write_tables_only().

◆ emit_dri()

emit_dri ( j_compress_ptr  cinfo)

Definition at line 274 of file jcmarker.c.

276{
277 emit_marker(cinfo, M_DRI);
278
279 emit_2bytes(cinfo, 4); /* fixed length */
280
281 emit_2bytes(cinfo, (int) cinfo->restart_interval);
282}
unsigned int restart_interval
Definition: jpeglib.h:370

Referenced by write_scan_header().

◆ emit_jfif_app0()

emit_jfif_app0 ( j_compress_ptr  cinfo)

Definition at line 399 of file jcmarker.c.

401{
402 /*
403 * Length of APP0 block (2 bytes)
404 * Block ID (4 bytes - ASCII "JFIF")
405 * Zero byte (1 byte to terminate the ID string)
406 * Version Major, Minor (2 bytes - major first)
407 * Units (1 byte - 0x00 = none, 0x01 = inch, 0x02 = cm)
408 * Xdpu (2 bytes - dots per unit horizontal)
409 * Ydpu (2 bytes - dots per unit vertical)
410 * Thumbnail X size (1 byte)
411 * Thumbnail Y size (1 byte)
412 */
413
414 emit_marker(cinfo, M_APP0);
415
416 emit_2bytes(cinfo, 2 + 4 + 1 + 2 + 1 + 2 + 2 + 1 + 1); /* length */
417
418 emit_byte(cinfo, 0x4A); /* Identifier: ASCII "JFIF" */
419 emit_byte(cinfo, 0x46);
420 emit_byte(cinfo, 0x49);
421 emit_byte(cinfo, 0x46);
422 emit_byte(cinfo, 0);
423 emit_byte(cinfo, cinfo->JFIF_major_version); /* Version fields */
424 emit_byte(cinfo, cinfo->JFIF_minor_version);
425 emit_byte(cinfo, cinfo->density_unit); /* Pixel size information */
426 emit_2bytes(cinfo, (int) cinfo->X_density);
427 emit_2bytes(cinfo, (int) cinfo->Y_density);
428 emit_byte(cinfo, 0); /* No thumbnail image */
429 emit_byte(cinfo, 0);
430}
UINT8 JFIF_major_version
Definition: jpeglib.h:376
UINT8 JFIF_minor_version
Definition: jpeglib.h:377

Referenced by write_file_header().

◆ emit_lse_ict()

emit_lse_ict ( j_compress_ptr  cinfo)

Definition at line 286 of file jcmarker.c.

288{
289 /* Support only 1 transform */
290 if (cinfo->color_transform != JCT_SUBTRACT_GREEN ||
291 cinfo->num_components < 3)
292 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
293
294 emit_marker(cinfo, M_JPG8);
295
296 emit_2bytes(cinfo, 24); /* fixed length */
297
298 emit_byte(cinfo, 0x0D); /* ID inverse transform specification */
299 emit_2bytes(cinfo, MAXJSAMPLE); /* MAXTRANS */
300 emit_byte(cinfo, 3); /* Nt=3 */
301 emit_byte(cinfo, cinfo->comp_info[1].component_id);
302 emit_byte(cinfo, cinfo->comp_info[0].component_id);
303 emit_byte(cinfo, cinfo->comp_info[2].component_id);
304 emit_byte(cinfo, 0x80); /* F1: CENTER1=1, NORM1=0 */
305 emit_2bytes(cinfo, 0); /* A(1,1)=0 */
306 emit_2bytes(cinfo, 0); /* A(1,2)=0 */
307 emit_byte(cinfo, 0); /* F2: CENTER2=0, NORM2=0 */
308 emit_2bytes(cinfo, 1); /* A(2,1)=1 */
309 emit_2bytes(cinfo, 0); /* A(2,2)=0 */
310 emit_byte(cinfo, 0); /* F3: CENTER3=0, NORM3=0 */
311 emit_2bytes(cinfo, 1); /* A(3,1)=1 */
312 emit_2bytes(cinfo, 0); /* A(3,2)=0 */
313}
#define MAXJSAMPLE
Definition: jmorecfg.h:83
@ JCT_SUBTRACT_GREEN
Definition: jpeglib.h:235
J_COLOR_TRANSFORM color_transform
Definition: jpeglib.h:387
jpeg_component_info * comp_info
Definition: jpeglib.h:333

Referenced by write_frame_header().

◆ emit_marker()

◆ emit_pseudo_sos()

emit_pseudo_sos ( j_compress_ptr  cinfo)

Definition at line 383 of file jcmarker.c.

385{
386 emit_marker(cinfo, M_SOS);
387
388 emit_2bytes(cinfo, 2 + 1 + 3); /* length */
389
390 emit_byte(cinfo, 0); /* Ns */
391
392 emit_byte(cinfo, 0); /* Ss */
393 emit_byte(cinfo, cinfo->block_size * cinfo->block_size - 1); /* Se */
394 emit_byte(cinfo, 0); /* Ah/Al */
395}

Referenced by write_frame_header().

◆ emit_sof()

emit_sof ( j_compress_ptr  cinfo,
JPEG_MARKER  code 
)

Definition at line 317 of file jcmarker.c.

319{
320 int ci;
322
323 emit_marker(cinfo, code);
324
325 emit_2bytes(cinfo, 3 * cinfo->num_components + 2 + 5 + 1); /* length */
326
327 /* Make sure image isn't bigger than SOF field can handle */
328 if ((long) cinfo->jpeg_height > 65535L ||
329 (long) cinfo->jpeg_width > 65535L)
330 ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) 65535);
331
332 emit_byte(cinfo, cinfo->data_precision);
333 emit_2bytes(cinfo, (int) cinfo->jpeg_height);
334 emit_2bytes(cinfo, (int) cinfo->jpeg_width);
335
336 emit_byte(cinfo, cinfo->num_components);
337
338 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
339 ci++, compptr++) {
343 }
344}
Definition: inflate.c:139
JDIMENSION jpeg_width
Definition: jpeglib.h:319
JDIMENSION jpeg_height
Definition: jpeglib.h:320

Referenced by write_frame_header().

◆ emit_sos()

emit_sos ( j_compress_ptr  cinfo)

Definition at line 348 of file jcmarker.c.

350{
351 int i, td, ta;
353
354 emit_marker(cinfo, M_SOS);
355
356 emit_2bytes(cinfo, 2 * cinfo->comps_in_scan + 2 + 1 + 3); /* length */
357
358 emit_byte(cinfo, cinfo->comps_in_scan);
359
360 for (i = 0; i < cinfo->comps_in_scan; i++) {
361 compptr = cinfo->cur_comp_info[i];
363
364 /* We emit 0 for unused field(s); this is recommended by the P&M text
365 * but does not seem to be specified in the standard.
366 */
367
368 /* DC needs no table for refinement scan */
369 td = cinfo->Ss == 0 && cinfo->Ah == 0 ? compptr->dc_tbl_no : 0;
370 /* AC needs no table when not present */
371 ta = cinfo->Se ? compptr->ac_tbl_no : 0;
372
373 emit_byte(cinfo, (td << 4) + ta);
374 }
375
376 emit_byte(cinfo, cinfo->Ss);
377 emit_byte(cinfo, cinfo->Se);
378 emit_byte(cinfo, (cinfo->Ah << 4) + cinfo->Al);
379}

Referenced by write_scan_header().

◆ jinit_marker_writer()

jinit_marker_writer ( j_compress_ptr  cinfo)

Definition at line 699 of file jcmarker.c.

700{
702
703 /* Create the subobject */
704 marker = (my_marker_ptr) (*cinfo->mem->alloc_small)
706 cinfo->marker = &marker->pub;
707 /* Initialize method pointers */
708 marker->pub.write_file_header = write_file_header;
709 marker->pub.write_frame_header = write_frame_header;
710 marker->pub.write_scan_header = write_scan_header;
711 marker->pub.write_file_trailer = write_file_trailer;
712 marker->pub.write_tables_only = write_tables_only;
713 marker->pub.write_marker_header = write_marker_header;
714 marker->pub.write_marker_byte = write_marker_byte;
715 /* Initialize private state */
716 marker->last_restart_interval = 0;
717}
#define SIZEOF(_ar)
Definition: calc.h:97
write_file_header(j_compress_ptr cinfo)
Definition: jcmarker.c:518
my_marker_writer * my_marker_ptr
Definition: jcmarker.c:94
write_frame_header(j_compress_ptr cinfo)
Definition: jcmarker.c:544
write_marker_byte(j_compress_ptr cinfo, int val)
Definition: jcmarker.c:499
write_marker_header(j_compress_ptr cinfo, int marker, unsigned int datalen)
Definition: jcmarker.c:487
write_file_trailer(j_compress_ptr cinfo)
Definition: jcmarker.c:656
write_scan_header(j_compress_ptr cinfo)
Definition: jcmarker.c:612
write_tables_only(j_compress_ptr cinfo)
Definition: jcmarker.c:670
struct jpeg_common_struct * j_common_ptr
Definition: jpeglib.h:284
int marker
Definition: jpeglib.h:1030
#define JPOOL_IMAGE
Definition: jpeglib.h:808
struct jpeg_marker_writer * marker
Definition: jpeglib.h:447

Referenced by jinit_compress_master(), jpeg_write_tables(), and transencode_master_selection().

◆ write_file_header()

write_file_header ( j_compress_ptr  cinfo)

Definition at line 518 of file jcmarker.c.

519{
521
522 emit_marker(cinfo, M_SOI); /* first the SOI */
523
524 /* SOI is defined to reset restart interval to 0 */
525 marker->last_restart_interval = 0;
526
527 if (cinfo->write_JFIF_header) /* next an optional JFIF APP0 */
528 emit_jfif_app0(cinfo);
529 if (cinfo->write_Adobe_marker) /* next an optional Adobe APP14 */
530 emit_adobe_app14(cinfo);
531}
emit_adobe_app14(j_compress_ptr cinfo)
Definition: jcmarker.c:434
emit_jfif_app0(j_compress_ptr cinfo)
Definition: jcmarker.c:399
boolean write_JFIF_header
Definition: jpeglib.h:375
boolean write_Adobe_marker
Definition: jpeglib.h:385

Referenced by jinit_marker_writer().

◆ write_file_trailer()

write_file_trailer ( j_compress_ptr  cinfo)

Definition at line 656 of file jcmarker.c.

657{
658 emit_marker(cinfo, M_EOI);
659}

Referenced by jinit_marker_writer().

◆ write_frame_header()

write_frame_header ( j_compress_ptr  cinfo)

Definition at line 544 of file jcmarker.c.

545{
546 int ci, prec;
547 boolean is_baseline;
549
550 /* Emit DQT for each quantization table.
551 * Note that emit_dqt() suppresses any duplicate tables.
552 */
553 prec = 0;
554 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
555 ci++, compptr++) {
556 prec += emit_dqt(cinfo, compptr->quant_tbl_no);
557 }
558 /* now prec is nonzero iff there are any 16-bit quant tables. */
559
560 /* Check for a non-baseline specification.
561 * Note we assume that Huffman table numbers won't be changed later.
562 */
563 if (cinfo->arith_code || cinfo->progressive_mode ||
564 cinfo->data_precision != 8 || cinfo->block_size != DCTSIZE) {
565 is_baseline = FALSE;
566 } else {
567 is_baseline = TRUE;
568 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
569 ci++, compptr++) {
570 if (compptr->dc_tbl_no > 1 || compptr->ac_tbl_no > 1)
571 is_baseline = FALSE;
572 }
573 if (prec && is_baseline) {
574 is_baseline = FALSE;
575 /* If it's baseline except for quantizer size, warn the user */
576 TRACEMS(cinfo, 0, JTRC_16BIT_TABLES);
577 }
578 }
579
580 /* Emit the proper SOF marker */
581 if (cinfo->arith_code) {
582 if (cinfo->progressive_mode)
583 emit_sof(cinfo, M_SOF10); /* SOF code for progressive arithmetic */
584 else
585 emit_sof(cinfo, M_SOF9); /* SOF code for sequential arithmetic */
586 } else {
587 if (cinfo->progressive_mode)
588 emit_sof(cinfo, M_SOF2); /* SOF code for progressive Huffman */
589 else if (is_baseline)
590 emit_sof(cinfo, M_SOF0); /* SOF code for baseline implementation */
591 else
592 emit_sof(cinfo, M_SOF1); /* SOF code for non-baseline Huffman file */
593 }
594
595 /* Check to emit LSE inverse color transform specification marker */
596 if (cinfo->color_transform)
597 emit_lse_ict(cinfo);
598
599 /* Check to emit pseudo SOS marker */
600 if (cinfo->progressive_mode && cinfo->block_size != DCTSIZE)
601 emit_pseudo_sos(cinfo);
602}
#define FALSE
Definition: types.h:117
emit_dqt(j_compress_ptr cinfo, int index)
Definition: jcmarker.c:146
emit_pseudo_sos(j_compress_ptr cinfo)
Definition: jcmarker.c:383
emit_sof(j_compress_ptr cinfo, JPEG_MARKER code)
Definition: jcmarker.c:317
emit_lse_ict(j_compress_ptr cinfo)
Definition: jcmarker.c:286
#define TRACEMS(cinfo, lvl, code)
Definition: jerror.h:265
#define DCTSIZE
Definition: jpeglib.h:50
boolean arith_code
Definition: jpeglib.h:358
boolean progressive_mode
Definition: jpeglib.h:404

Referenced by jinit_marker_writer().

◆ write_marker_byte()

write_marker_byte ( j_compress_ptr  cinfo,
int  val 
)

Definition at line 499 of file jcmarker.c.

501{
502 emit_byte(cinfo, val);
503}

Referenced by jinit_marker_writer(), and jpeg_write_marker().

◆ write_marker_header()

write_marker_header ( j_compress_ptr  cinfo,
int  marker,
unsigned int  datalen 
)

Definition at line 487 of file jcmarker.c.

489{
490 if (datalen > (unsigned int) 65533) /* safety check */
491 ERREXIT(cinfo, JERR_BAD_LENGTH);
492
494
495 emit_2bytes(cinfo, (int) (datalen + 2)); /* total length */
496}
int const JOCTET unsigned int datalen
Definition: jpeglib.h:1031

Referenced by jinit_marker_writer().

◆ write_scan_header()

write_scan_header ( j_compress_ptr  cinfo)

Definition at line 612 of file jcmarker.c.

613{
615 int i;
617
618 if (cinfo->arith_code) {
619 /* Emit arith conditioning info. We may have some duplication
620 * if the file has multiple scans, but it's so small it's hardly
621 * worth worrying about.
622 */
623 emit_dac(cinfo);
624 } else {
625 /* Emit Huffman tables.
626 * Note that emit_dht() suppresses any duplicate tables.
627 */
628 for (i = 0; i < cinfo->comps_in_scan; i++) {
629 compptr = cinfo->cur_comp_info[i];
630 /* DC needs no table for refinement scan */
631 if (cinfo->Ss == 0 && cinfo->Ah == 0)
633 /* AC needs no table when not present */
634 if (cinfo->Se)
635 emit_dht(cinfo, compptr->ac_tbl_no, TRUE);
636 }
637 }
638
639 /* Emit DRI if required --- note that DRI value could change for each scan.
640 * We avoid wasting space with unnecessary DRIs, however.
641 */
642 if (cinfo->restart_interval != marker->last_restart_interval) {
643 emit_dri(cinfo);
644 marker->last_restart_interval = cinfo->restart_interval;
645 }
646
647 emit_sos(cinfo);
648}
emit_dri(j_compress_ptr cinfo)
Definition: jcmarker.c:274
emit_dht(j_compress_ptr cinfo, int index, boolean is_ac)
Definition: jcmarker.c:187
emit_dac(j_compress_ptr cinfo)
Definition: jcmarker.c:225
emit_sos(j_compress_ptr cinfo)
Definition: jcmarker.c:348
if(dx< 0)
Definition: linetemp.h:194

Referenced by jinit_marker_writer().

◆ write_tables_only()

write_tables_only ( j_compress_ptr  cinfo)

Definition at line 670 of file jcmarker.c.

671{
672 int i;
673
674 emit_marker(cinfo, M_SOI);
675
676 for (i = 0; i < NUM_QUANT_TBLS; i++) {
677 if (cinfo->quant_tbl_ptrs[i] != NULL)
678 (void) emit_dqt(cinfo, i);
679 }
680
681 if (! cinfo->arith_code) {
682 for (i = 0; i < NUM_HUFF_TBLS; i++) {
683 if (cinfo->dc_huff_tbl_ptrs[i] != NULL)
684 emit_dht(cinfo, i, FALSE);
685 if (cinfo->ac_huff_tbl_ptrs[i] != NULL)
686 emit_dht(cinfo, i, TRUE);
687 }
688 }
689
690 emit_marker(cinfo, M_EOI);
691}
#define NUM_HUFF_TBLS
Definition: jpeglib.h:53
#define NUM_QUANT_TBLS
Definition: jpeglib.h:52

Referenced by jinit_marker_writer().