ReactOS 0.4.16-dev-2613-g9533ad7
jccolor.c
Go to the documentation of this file.
1/*
2 * jccolor.c
3 *
4 * Copyright (C) 1991-1996, Thomas G. Lane.
5 * Modified 2011-2025 by Guido Vollbeding.
6 * This file is part of the Independent JPEG Group's software.
7 * For conditions of distribution and use, see the accompanying README file.
8 *
9 * This file contains input colorspace conversion routines.
10 */
11
12#define JPEG_INTERNALS
13#include "jinclude.h"
14#include "jpeglib.h"
15
16
17/* Private subobject */
18
19typedef struct {
20 struct jpeg_color_converter pub; /* public fields */
21
22 /* Private state for RGB->YCC conversion */
23 INT32 * rgb_ycc_tab; /* => table for RGB to YCbCr conversion */
25
27
28
29/**************** RGB -> YCbCr conversion: most common case **************/
30
31/*
32 * YCbCr is defined per Recommendation ITU-R BT.601-7 (03/2011),
33 * previously known as Recommendation CCIR 601-1, except that Cb and Cr
34 * are normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5.
35 * sRGB (standard RGB color space) is defined per IEC 61966-2-1:1999.
36 * sYCC (standard luma-chroma-chroma color space with extended gamut)
37 * is defined per IEC 61966-2-1:1999 Amendment A1:2003 Annex F.
38 * bg-sRGB and bg-sYCC (big gamut standard color spaces)
39 * are defined per IEC 61966-2-1:1999 Amendment A1:2003 Annex G.
40 * Note that the derived conversion coefficients given in some of these
41 * documents are imprecise. The general conversion equations are
42 * Y = Kr * R + (1 - Kr - Kb) * G + Kb * B
43 * Cb = (B - Y) / (1 - Kb) / K
44 * Cr = (R - Y) / (1 - Kr) / K
45 * With Kr = 0.299 and Kb = 0.114 (derived according to SMPTE RP 177-1993
46 * from the 1953 FCC NTSC primaries and CIE Illuminant C), K = 2 for sYCC,
47 * the conversion equations to be implemented are therefore
48 * Y = 0.299 * R + 0.587 * G + 0.114 * B
49 * Cb = -0.168735892 * R - 0.331264108 * G + 0.5 * B + CENTERJSAMPLE
50 * Cr = 0.5 * R - 0.418687589 * G - 0.081312411 * B + CENTERJSAMPLE
51 * Note: older versions of the IJG code used a zero offset of MAXJSAMPLE/2,
52 * rather than CENTERJSAMPLE, for Cb and Cr. This gave equal positive and
53 * negative swings for Cb/Cr, but meant that grayscale values (Cb=Cr=0)
54 * were not represented exactly. Now we sacrifice exact representation of
55 * maximum red and maximum blue in order to get exact grayscales.
56 *
57 * To avoid floating-point arithmetic, we represent the fractional constants
58 * as integers scaled up by 2^16 (about 4 digits precision); we have to divide
59 * the products by 2^16, with appropriate rounding, to get the correct answer.
60 *
61 * For even more speed, we avoid doing any multiplications in the inner loop
62 * by precalculating the constants times R,G,B for all possible values.
63 * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table);
64 * for 9-bit to 12-bit samples it is still acceptable. It's not very
65 * reasonable for 16-bit samples, but if you want lossless storage
66 * you shouldn't be changing colorspace anyway.
67 * The CENTERJSAMPLE offsets and the rounding fudge-factor of 0.5 are included
68 * in the tables to save adding them separately in the inner loop.
69 */
70
71#define SCALEBITS 16 /* speediest right-shift on some machines */
72#define CBCR_OFFSET ((INT32) CENTERJSAMPLE << SCALEBITS)
73#define ONE_HALF ((INT32) 1 << (SCALEBITS-1))
74#define FIX(x) ((INT32) ((x) * (1L<<SCALEBITS) + 0.5))
75
76/* We allocate one big table and divide it up into eight parts, instead of
77 * doing eight alloc_small requests. This lets us use a single table base
78 * address, which can be held in a register in the inner loops on many
79 * machines (more than can hold all eight addresses, anyway).
80 */
81
82#define R_Y_OFF 0 /* offset to R => Y section */
83#define G_Y_OFF (1*(MAXJSAMPLE+1)) /* offset to G => Y section */
84#define B_Y_OFF (2*(MAXJSAMPLE+1)) /* etc. */
85#define R_CB_OFF (3*(MAXJSAMPLE+1))
86#define G_CB_OFF (4*(MAXJSAMPLE+1))
87#define B_CB_OFF (5*(MAXJSAMPLE+1))
88#define R_CR_OFF B_CB_OFF /* B=>Cb, R=>Cr are the same */
89#define G_CR_OFF (6*(MAXJSAMPLE+1))
90#define B_CR_OFF (7*(MAXJSAMPLE+1))
91#define TABLE_SIZE (8*(MAXJSAMPLE+1))
92
93
94/*
95 * Initialize for RGB->YCC colorspace conversion.
96 */
97
98METHODDEF(void)
100{
101 my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
102 INT32 * rgb_ycc_tab;
103 INT32 i;
104
105 /* Allocate and fill in the conversion tables. */
106 cconvert->rgb_ycc_tab = rgb_ycc_tab = (INT32 *)
107 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
109
110 for (i = 0; i <= MAXJSAMPLE; i++) {
111 rgb_ycc_tab[i+R_Y_OFF] = FIX(0.299) * i;
112 rgb_ycc_tab[i+G_Y_OFF] = FIX(0.587) * i;
113 rgb_ycc_tab[i+B_Y_OFF] = FIX(0.114) * i + ONE_HALF;
114 rgb_ycc_tab[i+R_CB_OFF] = (- FIX(0.168735892)) * i;
115 rgb_ycc_tab[i+G_CB_OFF] = (- FIX(0.331264108)) * i;
116 /* We use a rounding fudge-factor of 0.5-epsilon for Cb and Cr.
117 * This ensures that the maximum output will round to MAXJSAMPLE
118 * not MAXJSAMPLE+1, and thus that we don't have to range-limit.
119 */
120 rgb_ycc_tab[i+B_CB_OFF] = (i << (SCALEBITS-1)) + CBCR_OFFSET + ONE_HALF-1;
121/* B=>Cb and R=>Cr tables are the same
122 rgb_ycc_tab[i+R_CR_OFF] = (i << (SCALEBITS-1)) + CBCR_OFFSET + ONE_HALF-1;
123*/
124 rgb_ycc_tab[i+G_CR_OFF] = (- FIX(0.418687589)) * i;
125 rgb_ycc_tab[i+B_CR_OFF] = (- FIX(0.081312411)) * i;
126 }
127}
128
129
130/*
131 * Convert some rows of samples to the JPEG colorspace.
132 *
133 * Note that we change from the application's interleaved-pixel format
134 * to our internal noninterleaved, one-plane-per-component format. The
135 * input buffer is therefore three times as wide as the output buffer.
136 *
137 * A starting row offset is provided only for the output buffer. The
138 * caller can easily adjust the passed input_buf value to accommodate
139 * any row offset required on that side.
140 */
141
142METHODDEF(void)
146{
147 my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
148 register int r, g, b;
149 register INT32 * ctab = cconvert->rgb_ycc_tab;
150 register JSAMPROW inptr;
151 register JSAMPROW outptr0, outptr1, outptr2;
152 register JDIMENSION col;
153 JDIMENSION num_cols = cinfo->image_width;
154
155 while (--num_rows >= 0) {
156 inptr = *input_buf++;
157 outptr0 = output_buf[0][output_row];
158 outptr1 = output_buf[1][output_row];
159 outptr2 = output_buf[2][output_row];
160 output_row++;
161 for (col = 0; col < num_cols; col++) {
162 r = GETJSAMPLE(inptr[RGB_RED]);
163 g = GETJSAMPLE(inptr[RGB_GREEN]);
164 b = GETJSAMPLE(inptr[RGB_BLUE]);
165 inptr += RGB_PIXELSIZE;
166 /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations
167 * must be too; we do not need an explicit range-limiting operation.
168 * Hence the value being shifted is never negative, and we don't
169 * need the general RIGHT_SHIFT macro.
170 */
171 /* Y */
172 outptr0[col] = (JSAMPLE)
173 ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
174 >> SCALEBITS);
175 /* Cb */
176 outptr1[col] = (JSAMPLE)
177 ((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF])
178 >> SCALEBITS);
179 /* Cr */
180 outptr2[col] = (JSAMPLE)
181 ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF])
182 >> SCALEBITS);
183 }
184 }
185}
186
187
188/**************** Cases other than RGB -> YCbCr **************/
189
190
191/*
192 * Convert some rows of samples to the JPEG colorspace.
193 * This version handles RGB->grayscale conversion,
194 * which is the same as the RGB->Y portion of RGB->YCbCr.
195 * We assume rgb_ycc_start has been called (we only use the Y tables).
196 */
197
198METHODDEF(void)
202{
203 my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
204 register INT32 y;
205 register INT32 * ctab = cconvert->rgb_ycc_tab;
206 register JSAMPROW inptr;
207 register JSAMPROW outptr;
208 register JDIMENSION col;
209 JDIMENSION num_cols = cinfo->image_width;
210
211 while (--num_rows >= 0) {
212 inptr = *input_buf++;
213 outptr = output_buf[0][output_row++];
214 for (col = 0; col < num_cols; col++) {
215 y = ctab[R_Y_OFF + GETJSAMPLE(inptr[RGB_RED])];
216 y += ctab[G_Y_OFF + GETJSAMPLE(inptr[RGB_GREEN])];
217 y += ctab[B_Y_OFF + GETJSAMPLE(inptr[RGB_BLUE])];
218 inptr += RGB_PIXELSIZE;
219 outptr[col] = (JSAMPLE) (y >> SCALEBITS);
220 }
221 }
222}
223
224
225/*
226 * Convert some rows of samples to the JPEG colorspace.
227 * This version handles Adobe-style CMYK->YCCK conversion,
228 * where we convert R=1-C, G=1-M, and B=1-Y to YCbCr using the
229 * same conversion as above, while passing K (black) unchanged.
230 * We assume rgb_ycc_start has been called.
231 */
232
233METHODDEF(void)
237{
238 my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
239 register int r, g, b;
240 register INT32 * ctab = cconvert->rgb_ycc_tab;
241 register JSAMPROW inptr;
242 register JSAMPROW outptr0, outptr1, outptr2, outptr3;
243 register JDIMENSION col;
244 JDIMENSION num_cols = cinfo->image_width;
245
246 while (--num_rows >= 0) {
247 inptr = *input_buf++;
248 outptr0 = output_buf[0][output_row];
249 outptr1 = output_buf[1][output_row];
250 outptr2 = output_buf[2][output_row];
251 outptr3 = output_buf[3][output_row];
252 output_row++;
253 for (col = 0; col < num_cols; col++) {
254 r = MAXJSAMPLE - GETJSAMPLE(inptr[0]);
255 g = MAXJSAMPLE - GETJSAMPLE(inptr[1]);
256 b = MAXJSAMPLE - GETJSAMPLE(inptr[2]);
257 /* K passes through as-is */
258 outptr3[col] = inptr[3]; /* don't need GETJSAMPLE here */
259 inptr += 4;
260 /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations
261 * must be too; we do not need an explicit range-limiting operation.
262 * Hence the value being shifted is never negative, and we don't
263 * need the general RIGHT_SHIFT macro.
264 */
265 /* Y */
266 outptr0[col] = (JSAMPLE)
267 ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
268 >> SCALEBITS);
269 /* Cb */
270 outptr1[col] = (JSAMPLE)
271 ((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF])
272 >> SCALEBITS);
273 /* Cr */
274 outptr2[col] = (JSAMPLE)
275 ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF])
276 >> SCALEBITS);
277 }
278 }
279}
280
281
282/*
283 * Convert some rows of samples to the JPEG colorspace.
284 * [R,G,B] to [R-G,G,B-G] conversion with modulo calculation
285 * (forward reversible color transform).
286 * This can be seen as an adaption of the general RGB->YCbCr
287 * conversion equation with Kr = Kb = 0, while replacing the
288 * normalization by modulo calculation.
289 */
290
291METHODDEF(void)
295{
296 register int r, g, b;
297 register JSAMPROW inptr;
298 register JSAMPROW outptr0, outptr1, outptr2;
299 register JDIMENSION col;
300 JDIMENSION num_cols = cinfo->image_width;
301
302 while (--num_rows >= 0) {
303 inptr = *input_buf++;
304 outptr0 = output_buf[0][output_row];
305 outptr1 = output_buf[1][output_row];
306 outptr2 = output_buf[2][output_row];
307 output_row++;
308 for (col = 0; col < num_cols; col++) {
309 r = GETJSAMPLE(inptr[RGB_RED]);
310 g = GETJSAMPLE(inptr[RGB_GREEN]);
311 b = GETJSAMPLE(inptr[RGB_BLUE]);
312 inptr += RGB_PIXELSIZE;
313 /* Assume that MAXJSAMPLE+1 is a power of 2, so that the MOD
314 * (modulo) operator is equivalent to the bitmask operator AND.
315 */
316 outptr0[col] = (JSAMPLE) ((r - g + CENTERJSAMPLE) & MAXJSAMPLE);
317 outptr1[col] = (JSAMPLE) g;
318 outptr2[col] = (JSAMPLE) ((b - g + CENTERJSAMPLE) & MAXJSAMPLE);
319 }
320 }
321}
322
323
324/*
325 * Convert some rows of samples to the JPEG colorspace.
326 * This version handles grayscale output with no conversion.
327 * The source can be either plain grayscale or YCC (since Y == gray).
328 */
329
330METHODDEF(void)
334{
335 register JSAMPROW inptr;
336 register JSAMPROW outptr;
337 register JDIMENSION count;
338 register int instride = cinfo->input_components;
339 JDIMENSION num_cols = cinfo->image_width;
340
341 while (--num_rows >= 0) {
342 inptr = *input_buf++;
343 outptr = output_buf[0][output_row++];
344 for (count = num_cols; count > 0; count--) {
345 *outptr++ = *inptr; /* don't need GETJSAMPLE() here */
346 inptr += instride;
347 }
348 }
349}
350
351
352/*
353 * Convert some rows of samples to the JPEG colorspace.
354 * No colorspace conversion, but change from interleaved
355 * to separate-planes representation.
356 */
357
358METHODDEF(void)
362{
363 register JSAMPROW inptr;
364 register JSAMPROW outptr0, outptr1, outptr2;
365 register JDIMENSION col;
366 JDIMENSION num_cols = cinfo->image_width;
367
368 while (--num_rows >= 0) {
369 inptr = *input_buf++;
370 outptr0 = output_buf[0][output_row];
371 outptr1 = output_buf[1][output_row];
372 outptr2 = output_buf[2][output_row];
373 output_row++;
374 for (col = 0; col < num_cols; col++) {
375 /* We can dispense with GETJSAMPLE() here */
376 outptr0[col] = inptr[RGB_RED];
377 outptr1[col] = inptr[RGB_GREEN];
378 outptr2[col] = inptr[RGB_BLUE];
379 inptr += RGB_PIXELSIZE;
380 }
381 }
382}
383
384
385/*
386 * Convert some rows of samples to the JPEG colorspace.
387 * This version handles multi-component colorspaces without conversion.
388 * We assume input_components == num_components.
389 */
390
391METHODDEF(void)
395{
396 register JSAMPROW inptr;
397 register JSAMPROW outptr;
398 register JDIMENSION count;
399 register int num_comps = cinfo->num_components;
400 JDIMENSION num_cols = cinfo->image_width;
401 int ci;
402
403 while (--num_rows >= 0) {
404 /* It seems fastest to make a separate pass for each component. */
405 for (ci = 0; ci < num_comps; ci++) {
406 inptr = input_buf[0] + ci;
407 outptr = output_buf[ci][output_row];
408 for (count = num_cols; count > 0; count--) {
409 *outptr++ = *inptr; /* don't need GETJSAMPLE() here */
410 inptr += num_comps;
411 }
412 }
413 input_buf++;
414 output_row++;
415 }
416}
417
418
419/*
420 * Empty method for start_pass.
421 */
422
423METHODDEF(void)
425{
426 /* no work needed */
427}
428
429
430/*
431 * Module initialization routine for input colorspace conversion.
432 */
433
434GLOBAL(void)
436{
437 my_cconvert_ptr cconvert;
438
439 cconvert = (my_cconvert_ptr) (*cinfo->mem->alloc_small)
441 cinfo->cconvert = &cconvert->pub;
442 /* set start_pass to null method until we find out differently */
443 cconvert->pub.start_pass = null_method;
444
445 /* Make sure input_components agrees with in_color_space */
446 switch (cinfo->in_color_space) {
447 case JCS_GRAYSCALE:
448 if (cinfo->input_components != 1)
449 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
450 break;
451
452 case JCS_RGB:
453 case JCS_BG_RGB:
454#if RGB_PIXELSIZE != 3
455 if (cinfo->input_components != RGB_PIXELSIZE)
456 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
457 break;
458#endif /* else share code with YCbCr */
459
460 case JCS_YCbCr:
461 case JCS_BG_YCC:
462 if (cinfo->input_components != 3)
463 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
464 break;
465
466 case JCS_CMYK:
467 case JCS_YCCK:
468 if (cinfo->input_components != 4)
469 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
470 break;
471
472 default: /* JCS_UNKNOWN can be anything */
473 if (cinfo->input_components < 1)
474 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
475 }
476
477 /* Support color transform only for RGB colorspaces */
478 if (cinfo->color_transform &&
479 (cinfo->LSE_maxtrans != MAXJSAMPLE ||
480 (cinfo->jpeg_color_space != JCS_RGB &&
481 cinfo->jpeg_color_space != JCS_BG_RGB)))
482 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
483
484 /* Check num_components, set conversion method based on requested space */
485 switch (cinfo->jpeg_color_space) {
486 case JCS_GRAYSCALE:
487 if (cinfo->num_components != 1)
488 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
489 switch (cinfo->in_color_space) {
490 case JCS_GRAYSCALE:
491 case JCS_YCbCr:
492 case JCS_BG_YCC:
493 cconvert->pub.color_convert = grayscale_convert;
494 break;
495 case JCS_RGB:
496 cconvert->pub.start_pass = rgb_ycc_start;
497 cconvert->pub.color_convert = rgb_gray_convert;
498 break;
499 default:
500 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
501 }
502 break;
503
504 case JCS_RGB:
505 case JCS_BG_RGB:
506 if (cinfo->num_components != 3)
507 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
508 if (cinfo->in_color_space != cinfo->jpeg_color_space)
509 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
510 switch (cinfo->color_transform) {
511 case JCT_NONE:
512 cconvert->pub.color_convert = rgb_convert;
513 break;
515 cconvert->pub.color_convert = rgb_rgb1_convert;
516 break;
517 default:
518 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
519 }
520 break;
521
522 case JCS_YCbCr:
523 if (cinfo->num_components != 3)
524 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
525 switch (cinfo->in_color_space) {
526 case JCS_RGB:
527 cconvert->pub.start_pass = rgb_ycc_start;
528 cconvert->pub.color_convert = rgb_ycc_convert;
529 break;
530 case JCS_YCbCr:
531 cconvert->pub.color_convert = null_convert;
532 break;
533 default:
534 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
535 }
536 break;
537
538 case JCS_BG_YCC:
539 if (cinfo->num_components != 3)
540 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
541 switch (cinfo->in_color_space) {
542 case JCS_RGB:
543 /* For conversion from normal RGB input to BG_YCC representation,
544 * the Cb/Cr values are first computed as usual, and then
545 * quantized further after DCT processing by a factor of
546 * 2 in reference to the nominal quantization factor.
547 */
548 /* need quantization scale by factor of 2 after DCT */
549 cinfo->comp_info[1].component_needed = TRUE;
550 cinfo->comp_info[2].component_needed = TRUE;
551 /* compute normal YCC first */
552 cconvert->pub.start_pass = rgb_ycc_start;
553 cconvert->pub.color_convert = rgb_ycc_convert;
554 break;
555 case JCS_YCbCr:
556 /* need quantization scale by factor of 2 after DCT */
557 cinfo->comp_info[1].component_needed = TRUE;
558 cinfo->comp_info[2].component_needed = TRUE;
559 /*FALLTHROUGH*/
560 case JCS_BG_YCC:
561 /* Pass through for BG_YCC input */
562 cconvert->pub.color_convert = null_convert;
563 break;
564 default:
565 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
566 }
567 break;
568
569 case JCS_CMYK:
570 if (cinfo->num_components != 4)
571 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
572 if (cinfo->in_color_space != JCS_CMYK)
573 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
574 cconvert->pub.color_convert = null_convert;
575 break;
576
577 case JCS_YCCK:
578 if (cinfo->num_components != 4)
579 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
580 switch (cinfo->in_color_space) {
581 case JCS_CMYK:
582 cconvert->pub.start_pass = rgb_ycc_start;
583 cconvert->pub.color_convert = cmyk_ycck_convert;
584 break;
585 case JCS_YCCK:
586 cconvert->pub.color_convert = null_convert;
587 break;
588 default:
589 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
590 }
591 break;
592
593 default: /* allow null conversion of JCS_UNKNOWN */
594 if (cinfo->jpeg_color_space != cinfo->in_color_space ||
595 cinfo->num_components != cinfo->input_components)
596 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
597 cconvert->pub.color_convert = null_convert;
598 }
599}
#define SIZEOF(_ar)
Definition: calc.h:97
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
#define TRUE
Definition: types.h:120
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLboolean GLboolean g
Definition: glext.h:6204
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
rgb_ycc_start(j_compress_ptr cinfo)
Definition: jccolor.c:99
#define TABLE_SIZE
Definition: jccolor.c:91
grayscale_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:331
cmyk_ycck_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:234
#define B_CB_OFF
Definition: jccolor.c:87
null_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:392
jinit_color_converter(j_compress_ptr cinfo)
Definition: jccolor.c:435
#define R_CB_OFF
Definition: jccolor.c:85
#define G_CB_OFF
Definition: jccolor.c:86
#define G_CR_OFF
Definition: jccolor.c:89
#define R_CR_OFF
Definition: jccolor.c:88
#define SCALEBITS
Definition: jccolor.c:71
#define G_Y_OFF
Definition: jccolor.c:83
#define CBCR_OFFSET
Definition: jccolor.c:72
#define FIX(x)
Definition: jccolor.c:74
rgb_rgb1_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:292
rgb_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:359
rgb_gray_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:199
null_method(j_compress_ptr cinfo)
Definition: jccolor.c:424
#define R_Y_OFF
Definition: jccolor.c:82
#define ONE_HALF
Definition: jccolor.c:73
#define B_CR_OFF
Definition: jccolor.c:90
#define B_Y_OFF
Definition: jccolor.c:84
my_color_converter * my_cconvert_ptr
Definition: jccolor.c:26
rgb_ycc_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:143
jpeg_component_info JCOEFPTR JSAMPARRAY output_buf
Definition: jdct.h:253
unsigned int JDIMENSION
Definition: jmorecfg.h:265
#define MAXJSAMPLE
Definition: jmorecfg.h:119
char JSAMPLE
Definition: jmorecfg.h:110
#define METHODDEF(type)
Definition: jmorecfg.h:323
#define CENTERJSAMPLE
Definition: jmorecfg.h:120
#define GLOBAL(type)
Definition: jmorecfg.h:327
#define GETJSAMPLE(value)
Definition: jmorecfg.h:114
JSAMPARRAY int JDIMENSION num_cols
Definition: jpegint.h:420
JSAMPARRAY int num_rows
Definition: jpegint.h:420
JBLOCKROW output_row
Definition: jpegint.h:421
struct jpeg_common_struct * j_common_ptr
Definition: jpeglib.h:284
@ JCT_NONE
Definition: jpeglib.h:234
@ JCT_SUBTRACT_GREEN
Definition: jpeglib.h:235
JSAMPARRAY * JSAMPIMAGE
Definition: jpeglib.h:77
@ JCS_YCCK
Definition: jpeglib.h:226
@ JCS_BG_RGB
Definition: jpeglib.h:227
@ JCS_BG_YCC
Definition: jpeglib.h:228
@ JCS_YCbCr
Definition: jpeglib.h:224
@ JCS_CMYK
Definition: jpeglib.h:225
@ JCS_GRAYSCALE
Definition: jpeglib.h:222
@ JCS_RGB
Definition: jpeglib.h:223
JSAMPROW * JSAMPARRAY
Definition: jpeglib.h:76
JSAMPLE FAR * JSAMPROW
Definition: jpeglib.h:75
#define JPOOL_IMAGE
Definition: jpeglib.h:810
#define b
Definition: ke_i.h:79
#define ERREXIT(msg)
Definition: rdjpgcom.c:72
struct jpeg_color_converter pub
Definition: jccolor.c:20
INT32 * rgb_ycc_tab
Definition: jccolor.c:23
int32_t INT32
Definition: typedefs.h:58