ReactOS 0.4.16-dev-2617-g01a0906
jccolor.c File Reference
#include "jinclude.h"
#include "jpeglib.h"
Include dependency graph for jccolor.c:

Go to the source code of this file.

Classes

struct  my_color_converter
 

Macros

#define JPEG_INTERNALS
 
#define SCALEBITS   16 /* speediest right-shift on some machines */
 
#define CBCR_OFFSET   ((INT32) CENTERJSAMPLE << SCALEBITS)
 
#define ONE_HALF   ((INT32) 1 << (SCALEBITS-1))
 
#define FIX(x)   ((INT32) ((x) * (1L<<SCALEBITS) + 0.5))
 
#define R_Y_OFF   0 /* offset to R => Y section */
 
#define G_Y_OFF   (1*(MAXJSAMPLE+1)) /* offset to G => Y section */
 
#define B_Y_OFF   (2*(MAXJSAMPLE+1)) /* etc. */
 
#define R_CB_OFF   (3*(MAXJSAMPLE+1))
 
#define G_CB_OFF   (4*(MAXJSAMPLE+1))
 
#define B_CB_OFF   (5*(MAXJSAMPLE+1))
 
#define R_CR_OFF   B_CB_OFF /* B=>Cb, R=>Cr are the same */
 
#define G_CR_OFF   (6*(MAXJSAMPLE+1))
 
#define B_CR_OFF   (7*(MAXJSAMPLE+1))
 
#define TABLE_SIZE   (8*(MAXJSAMPLE+1))
 

Typedefs

typedef my_color_convertermy_cconvert_ptr
 

Functions

 rgb_ycc_start (j_compress_ptr cinfo)
 
 rgb_ycc_convert (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
 
 rgb_gray_convert (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
 
 cmyk_ycck_convert (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
 
 rgb_rgb1_convert (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
 
 grayscale_convert (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
 
 rgb_convert (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
 
 null_convert (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
 
 null_method (j_compress_ptr cinfo)
 
 jinit_color_converter (j_compress_ptr cinfo)
 

Macro Definition Documentation

◆ B_CB_OFF

#define B_CB_OFF   (5*(MAXJSAMPLE+1))

Definition at line 87 of file jccolor.c.

◆ B_CR_OFF

#define B_CR_OFF   (7*(MAXJSAMPLE+1))

Definition at line 90 of file jccolor.c.

◆ B_Y_OFF

#define B_Y_OFF   (2*(MAXJSAMPLE+1)) /* etc. */

Definition at line 84 of file jccolor.c.

◆ CBCR_OFFSET

#define CBCR_OFFSET   ((INT32) CENTERJSAMPLE << SCALEBITS)

Definition at line 72 of file jccolor.c.

◆ FIX

#define FIX (   x)    ((INT32) ((x) * (1L<<SCALEBITS) + 0.5))

Definition at line 74 of file jccolor.c.

◆ G_CB_OFF

#define G_CB_OFF   (4*(MAXJSAMPLE+1))

Definition at line 86 of file jccolor.c.

◆ G_CR_OFF

#define G_CR_OFF   (6*(MAXJSAMPLE+1))

Definition at line 89 of file jccolor.c.

◆ G_Y_OFF

#define G_Y_OFF   (1*(MAXJSAMPLE+1)) /* offset to G => Y section */

Definition at line 83 of file jccolor.c.

◆ JPEG_INTERNALS

#define JPEG_INTERNALS

Definition at line 12 of file jccolor.c.

◆ ONE_HALF

#define ONE_HALF   ((INT32) 1 << (SCALEBITS-1))

Definition at line 73 of file jccolor.c.

◆ R_CB_OFF

#define R_CB_OFF   (3*(MAXJSAMPLE+1))

Definition at line 85 of file jccolor.c.

◆ R_CR_OFF

#define R_CR_OFF   B_CB_OFF /* B=>Cb, R=>Cr are the same */

Definition at line 88 of file jccolor.c.

◆ R_Y_OFF

#define R_Y_OFF   0 /* offset to R => Y section */

Definition at line 82 of file jccolor.c.

◆ SCALEBITS

#define SCALEBITS   16 /* speediest right-shift on some machines */

Definition at line 71 of file jccolor.c.

◆ TABLE_SIZE

#define TABLE_SIZE   (8*(MAXJSAMPLE+1))

Definition at line 91 of file jccolor.c.

Typedef Documentation

◆ my_cconvert_ptr

Definition at line 26 of file jccolor.c.

Function Documentation

◆ cmyk_ycck_convert()

cmyk_ycck_convert ( j_compress_ptr  cinfo,
JSAMPARRAY  input_buf,
JSAMPIMAGE  output_buf,
JDIMENSION  output_row,
int  num_rows 
)

Definition at line 234 of file jccolor.c.

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;
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}
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLboolean GLboolean g
Definition: glext.h:6204
#define B_CB_OFF
Definition: jccolor.c:87
#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 R_Y_OFF
Definition: jccolor.c:82
#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
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 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
JSAMPLE FAR * JSAMPROW
Definition: jpeglib.h:75
struct jpeg_color_converter * cconvert
Definition: jpeglib.h:449
JDIMENSION image_width
Definition: jpeglib.h:302
INT32 * rgb_ycc_tab
Definition: jccolor.c:23
int32_t INT32
Definition: typedefs.h:58

Referenced by jinit_color_converter().

◆ grayscale_convert()

grayscale_convert ( j_compress_ptr  cinfo,
JSAMPARRAY  input_buf,
JSAMPIMAGE  output_buf,
JDIMENSION  output_row,
int  num_rows 
)

Definition at line 331 of file jccolor.c.

334{
335 register JSAMPROW inptr;
336 register JSAMPROW outptr;
337 register JDIMENSION count;
338 register int instride = cinfo->input_components;
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}
GLuint GLuint GLsizei count
Definition: gl.h:1545

Referenced by jinit_color_converter().

◆ jinit_color_converter()

jinit_color_converter ( j_compress_ptr  cinfo)

Definition at line 435 of file jccolor.c.

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
#define TRUE
Definition: types.h:120
rgb_ycc_start(j_compress_ptr cinfo)
Definition: jccolor.c:99
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
null_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:392
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
rgb_ycc_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:143
struct jpeg_common_struct * j_common_ptr
Definition: jpeglib.h:284
@ JCT_NONE
Definition: jpeglib.h:234
@ JCT_SUBTRACT_GREEN
Definition: jpeglib.h:235
@ 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
#define JPOOL_IMAGE
Definition: jpeglib.h:810
#define ERREXIT(msg)
Definition: rdjpgcom.c:72
boolean component_needed
Definition: jpeglib.h:174
J_COLOR_TRANSFORM color_transform
Definition: jpeglib.h:388
jpeg_component_info * comp_info
Definition: jpeglib.h:333
J_COLOR_SPACE jpeg_color_space
Definition: jpeglib.h:331
J_COLOR_SPACE in_color_space
Definition: jpeglib.h:305
struct jpeg_color_converter pub
Definition: jccolor.c:20

Referenced by jinit_compress_master().

◆ null_convert()

null_convert ( j_compress_ptr  cinfo,
JSAMPARRAY  input_buf,
JSAMPIMAGE  output_buf,
JDIMENSION  output_row,
int  num_rows 
)

Definition at line 392 of file jccolor.c.

395{
396 register JSAMPROW inptr;
397 register JSAMPROW outptr;
398 register JDIMENSION count;
399 register int num_comps = cinfo->num_components;
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}

Referenced by jinit_color_converter().

◆ null_method()

null_method ( j_compress_ptr  cinfo)

Definition at line 424 of file jccolor.c.

425{
426 /* no work needed */
427}

Referenced by jinit_color_converter().

◆ rgb_convert()

rgb_convert ( j_compress_ptr  cinfo,
JSAMPARRAY  input_buf,
JSAMPIMAGE  output_buf,
JDIMENSION  output_row,
int  num_rows 
)

Definition at line 359 of file jccolor.c.

362{
363 register JSAMPROW inptr;
364 register JSAMPROW outptr0, outptr1, outptr2;
365 register JDIMENSION col;
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}

Referenced by jinit_color_converter().

◆ rgb_gray_convert()

rgb_gray_convert ( j_compress_ptr  cinfo,
JSAMPARRAY  input_buf,
JSAMPIMAGE  output_buf,
JDIMENSION  output_row,
int  num_rows 
)

Definition at line 199 of file jccolor.c.

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;
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}
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548

Referenced by jinit_color_converter().

◆ rgb_rgb1_convert()

rgb_rgb1_convert ( j_compress_ptr  cinfo,
JSAMPARRAY  input_buf,
JSAMPIMAGE  output_buf,
JDIMENSION  output_row,
int  num_rows 
)

Definition at line 292 of file jccolor.c.

295{
296 register int r, g, b;
297 register JSAMPROW inptr;
298 register JSAMPROW outptr0, outptr1, outptr2;
299 register JDIMENSION col;
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}
#define CENTERJSAMPLE
Definition: jmorecfg.h:120
#define b
Definition: ke_i.h:79

Referenced by jinit_color_converter().

◆ rgb_ycc_convert()

rgb_ycc_convert ( j_compress_ptr  cinfo,
JSAMPARRAY  input_buf,
JSAMPIMAGE  output_buf,
JDIMENSION  output_row,
int  num_rows 
)

Definition at line 143 of file jccolor.c.

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;
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}

Referenced by jinit_color_converter().

◆ rgb_ycc_start()

rgb_ycc_start ( j_compress_ptr  cinfo)

Definition at line 99 of file jccolor.c.

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}
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
#define TABLE_SIZE
Definition: jccolor.c:91
#define CBCR_OFFSET
Definition: jccolor.c:72
#define FIX(x)
Definition: jccolor.c:74
#define ONE_HALF
Definition: jccolor.c:73

Referenced by jinit_color_converter().