ReactOS 0.4.15-dev-8344-g0574987
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 237 of file jccolor.c.

240{
241 my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
242 register int r, g, b;
243 register INT32 * ctab = cconvert->rgb_ycc_tab;
244 register JSAMPROW inptr;
245 register JSAMPROW outptr0, outptr1, outptr2, outptr3;
246 register JDIMENSION col;
248
249 while (--num_rows >= 0) {
250 inptr = *input_buf++;
251 outptr0 = output_buf[0][output_row];
252 outptr1 = output_buf[1][output_row];
253 outptr2 = output_buf[2][output_row];
254 outptr3 = output_buf[3][output_row];
255 output_row++;
256 for (col = 0; col < num_cols; col++) {
257 r = MAXJSAMPLE - GETJSAMPLE(inptr[0]);
258 g = MAXJSAMPLE - GETJSAMPLE(inptr[1]);
259 b = MAXJSAMPLE - GETJSAMPLE(inptr[2]);
260 /* K passes through as-is */
261 outptr3[col] = inptr[3]; /* don't need GETJSAMPLE here */
262 inptr += 4;
263 /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations
264 * must be too; we do not need an explicit range-limiting operation.
265 * Hence the value being shifted is never negative, and we don't
266 * need the general RIGHT_SHIFT macro.
267 */
268 /* Y */
269 outptr0[col] = (JSAMPLE)
270 ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
271 >> SCALEBITS);
272 /* Cb */
273 outptr1[col] = (JSAMPLE)
274 ((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF])
275 >> SCALEBITS);
276 /* Cr */
277 outptr2[col] = (JSAMPLE)
278 ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF])
279 >> SCALEBITS);
280 }
281 }
282}
signed int INT32
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:239
unsigned int JDIMENSION
Definition: jmorecfg.h:229
#define MAXJSAMPLE
Definition: jmorecfg.h:83
char JSAMPLE
Definition: jmorecfg.h:74
#define GETJSAMPLE(value)
Definition: jmorecfg.h:78
JBLOCKROW output_row
Definition: jpegint.h:422
int JSAMPARRAY int int num_rows
Definition: jpegint.h:421
int JSAMPARRAY int int JDIMENSION num_cols
Definition: jpegint.h:421
JSAMPLE FAR * JSAMPROW
Definition: jpeglib.h:75
struct jpeg_color_converter * cconvert
Definition: jpeglib.h:448
JDIMENSION image_width
Definition: jpeglib.h:302
INT32 * rgb_ycc_tab
Definition: jccolor.c:23

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 334 of file jccolor.c.

337{
338 register JSAMPROW inptr;
339 register JSAMPROW outptr;
340 register JDIMENSION count;
341 register int instride = cinfo->input_components;
343
344 while (--num_rows >= 0) {
345 inptr = *input_buf++;
346 outptr = output_buf[0][output_row++];
347 for (count = num_cols; count > 0; count--) {
348 *outptr++ = *inptr; /* don't need GETJSAMPLE() here */
349 inptr += instride;
350 }
351 }
352}
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 438 of file jccolor.c.

439{
440 my_cconvert_ptr cconvert;
441
442 cconvert = (my_cconvert_ptr) (*cinfo->mem->alloc_small)
444 cinfo->cconvert = &cconvert->pub;
445 /* set start_pass to null method until we find out differently */
446 cconvert->pub.start_pass = null_method;
447
448 /* Make sure input_components agrees with in_color_space */
449 switch (cinfo->in_color_space) {
450 case JCS_GRAYSCALE:
451 if (cinfo->input_components != 1)
452 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
453 break;
454
455 case JCS_RGB:
456 case JCS_BG_RGB:
457#if RGB_PIXELSIZE != 3
458 if (cinfo->input_components != RGB_PIXELSIZE)
459 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
460 break;
461#endif /* else share code with YCbCr */
462
463 case JCS_YCbCr:
464 case JCS_BG_YCC:
465 if (cinfo->input_components != 3)
466 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
467 break;
468
469 case JCS_CMYK:
470 case JCS_YCCK:
471 if (cinfo->input_components != 4)
472 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
473 break;
474
475 default: /* JCS_UNKNOWN can be anything */
476 if (cinfo->input_components < 1)
477 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
478 }
479
480 /* Support color transform only for RGB colorspaces */
481 if (cinfo->color_transform &&
482 cinfo->jpeg_color_space != JCS_RGB &&
484 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
485
486 /* Check num_components, set conversion method based on requested space */
487 switch (cinfo->jpeg_color_space) {
488 case JCS_GRAYSCALE:
489 if (cinfo->num_components != 1)
490 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
491 switch (cinfo->in_color_space) {
492 case JCS_GRAYSCALE:
493 case JCS_YCbCr:
494 case JCS_BG_YCC:
495 cconvert->pub.color_convert = grayscale_convert;
496 break;
497 case JCS_RGB:
498 cconvert->pub.start_pass = rgb_ycc_start;
499 cconvert->pub.color_convert = rgb_gray_convert;
500 break;
501 default:
502 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
503 }
504 break;
505
506 case JCS_RGB:
507 case JCS_BG_RGB:
508 if (cinfo->num_components != 3)
509 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
510 if (cinfo->in_color_space != cinfo->jpeg_color_space)
511 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
512 switch (cinfo->color_transform) {
513 case JCT_NONE:
514 cconvert->pub.color_convert = rgb_convert;
515 break;
517 cconvert->pub.color_convert = rgb_rgb1_convert;
518 break;
519 default:
520 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
521 }
522 break;
523
524 case JCS_YCbCr:
525 if (cinfo->num_components != 3)
526 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
527 switch (cinfo->in_color_space) {
528 case JCS_RGB:
529 cconvert->pub.start_pass = rgb_ycc_start;
530 cconvert->pub.color_convert = rgb_ycc_convert;
531 break;
532 case JCS_YCbCr:
533 cconvert->pub.color_convert = null_convert;
534 break;
535 default:
536 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
537 }
538 break;
539
540 case JCS_BG_YCC:
541 if (cinfo->num_components != 3)
542 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
543 switch (cinfo->in_color_space) {
544 case JCS_RGB:
545 /* For conversion from normal RGB input to BG_YCC representation,
546 * the Cb/Cr values are first computed as usual, and then
547 * quantized further after DCT processing by a factor of
548 * 2 in reference to the nominal quantization factor.
549 */
550 /* need quantization scale by factor of 2 after DCT */
551 cinfo->comp_info[1].component_needed = TRUE;
552 cinfo->comp_info[2].component_needed = TRUE;
553 /* compute normal YCC first */
554 cconvert->pub.start_pass = rgb_ycc_start;
555 cconvert->pub.color_convert = rgb_ycc_convert;
556 break;
557 case JCS_YCbCr:
558 /* need quantization scale by factor of 2 after DCT */
559 cinfo->comp_info[1].component_needed = TRUE;
560 cinfo->comp_info[2].component_needed = TRUE;
561 /*FALLTHROUGH*/
562 case JCS_BG_YCC:
563 /* Pass through for BG_YCC input */
564 cconvert->pub.color_convert = null_convert;
565 break;
566 default:
567 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
568 }
569 break;
570
571 case JCS_CMYK:
572 if (cinfo->num_components != 4)
573 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
574 if (cinfo->in_color_space != JCS_CMYK)
575 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
576 cconvert->pub.color_convert = null_convert;
577 break;
578
579 case JCS_YCCK:
580 if (cinfo->num_components != 4)
581 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
582 switch (cinfo->in_color_space) {
583 case JCS_CMYK:
584 cconvert->pub.start_pass = rgb_ycc_start;
585 cconvert->pub.color_convert = cmyk_ycck_convert;
586 break;
587 case JCS_YCCK:
588 cconvert->pub.color_convert = null_convert;
589 break;
590 default:
591 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
592 }
593 break;
594
595 default: /* allow null conversion of JCS_UNKNOWN */
596 if (cinfo->jpeg_color_space != cinfo->in_color_space ||
597 cinfo->num_components != cinfo->input_components)
598 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
599 cconvert->pub.color_convert = null_convert;
600 }
601}
#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:334
cmyk_ycck_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:237
null_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:395
rgb_rgb1_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:295
rgb_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:362
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:427
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:808
#define ERREXIT(msg)
Definition: rdjpgcom.c:72
boolean component_needed
Definition: jpeglib.h:174
J_COLOR_TRANSFORM color_transform
Definition: jpeglib.h:387
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 395 of file jccolor.c.

398{
399 register JSAMPROW inptr;
400 register JSAMPROW outptr;
401 register JDIMENSION count;
402 register int num_comps = cinfo->num_components;
404 int ci;
405
406 while (--num_rows >= 0) {
407 /* It seems fastest to make a separate pass for each component. */
408 for (ci = 0; ci < num_comps; ci++) {
409 inptr = input_buf[0] + ci;
410 outptr = output_buf[ci][output_row];
411 for (count = num_cols; count > 0; count--) {
412 *outptr++ = *inptr; /* don't need GETJSAMPLE() here */
413 inptr += num_comps;
414 }
415 }
416 input_buf++;
417 output_row++;
418 }
419}

Referenced by jinit_color_converter().

◆ null_method()

null_method ( j_compress_ptr  cinfo)

Definition at line 427 of file jccolor.c.

428{
429 /* no work needed */
430}

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 362 of file jccolor.c.

365{
366 register JSAMPROW inptr;
367 register JSAMPROW outptr0, outptr1, outptr2;
368 register JDIMENSION col;
370
371 while (--num_rows >= 0) {
372 inptr = *input_buf++;
373 outptr0 = output_buf[0][output_row];
374 outptr1 = output_buf[1][output_row];
375 outptr2 = output_buf[2][output_row];
376 output_row++;
377 for (col = 0; col < num_cols; col++) {
378 /* We can dispense with GETJSAMPLE() here */
379 outptr0[col] = inptr[RGB_RED];
380 outptr1[col] = inptr[RGB_GREEN];
381 outptr2[col] = inptr[RGB_BLUE];
382 inptr += RGB_PIXELSIZE;
383 }
384 }
385}

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 int r, g, b;
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 r = GETJSAMPLE(inptr[RGB_RED]);
216 g = GETJSAMPLE(inptr[RGB_GREEN]);
217 b = GETJSAMPLE(inptr[RGB_BLUE]);
218 inptr += RGB_PIXELSIZE;
219 /* Y */
220 outptr[col] = (JSAMPLE)
221 ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
222 >> SCALEBITS);
223 }
224 }
225}

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 295 of file jccolor.c.

298{
299 register int r, g, b;
300 register JSAMPROW inptr;
301 register JSAMPROW outptr0, outptr1, outptr2;
302 register JDIMENSION col;
304
305 while (--num_rows >= 0) {
306 inptr = *input_buf++;
307 outptr0 = output_buf[0][output_row];
308 outptr1 = output_buf[1][output_row];
309 outptr2 = output_buf[2][output_row];
310 output_row++;
311 for (col = 0; col < num_cols; col++) {
312 r = GETJSAMPLE(inptr[RGB_RED]);
313 g = GETJSAMPLE(inptr[RGB_GREEN]);
314 b = GETJSAMPLE(inptr[RGB_BLUE]);
315 inptr += RGB_PIXELSIZE;
316 /* Assume that MAXJSAMPLE+1 is a power of 2, so that the MOD
317 * (modulo) operator is equivalent to the bitmask operator AND.
318 */
319 outptr0[col] = (JSAMPLE) ((r - g + CENTERJSAMPLE) & MAXJSAMPLE);
320 outptr1[col] = (JSAMPLE) g;
321 outptr2[col] = (JSAMPLE) ((b - g + CENTERJSAMPLE) & MAXJSAMPLE);
322 }
323 }
324}
#define CENTERJSAMPLE
Definition: jmorecfg.h:84
#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] = FIX(0.5) * i + CBCR_OFFSET + ONE_HALF-1;
121/* B=>Cb and R=>Cr tables are the same
122 rgb_ycc_tab[i+R_CR_OFF] = FIX(0.5) * i + 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().