ReactOS  0.4.14-dev-376-gaedba84
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 INT32 * ctab = cconvert->rgb_ycc_tab;
243  register int r, g, b;
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  /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations
263  * must be too; we do not need an explicit range-limiting operation.
264  * Hence the value being shifted is never negative, and we don't
265  * need the general RIGHT_SHIFT macro.
266  */
267  /* Y */
268  outptr0[col] = (JSAMPLE)
269  ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
270  >> SCALEBITS);
271  /* Cb */
272  outptr1[col] = (JSAMPLE)
273  ((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF])
274  >> SCALEBITS);
275  /* Cr */
276  outptr2[col] = (JSAMPLE)
277  ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF])
278  >> SCALEBITS);
279  inptr += 4;
280  }
281  }
282 }
#define R_Y_OFF
Definition: jccolor.c:82
char JSAMPLE
Definition: jmorecfg.h:74
JSAMPLE FAR * JSAMPROW
Definition: jpeglib.h:75
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
#define SCALEBITS
Definition: jccolor.c:71
INT32 * rgb_ycc_tab
Definition: jccolor.c:23
my_color_converter * my_cconvert_ptr
Definition: jccolor.c:26
#define GETJSAMPLE(value)
Definition: jmorecfg.h:78
struct jpeg_color_converter * cconvert
Definition: jpeglib.h:448
#define G_CB_OFF
Definition: jccolor.c:86
#define MAXJSAMPLE
Definition: jmorecfg.h:83
#define B_CB_OFF
Definition: jccolor.c:87
#define R_CR_OFF
Definition: jccolor.c:88
while(1)
Definition: macro.lex.yy.c:740
#define G_CR_OFF
Definition: jccolor.c:89
#define G_Y_OFF
Definition: jccolor.c:83
GLboolean GLboolean g
Definition: glext.h:6204
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
JBLOCKROW output_row
Definition: jpegint.h:415
#define R_CB_OFF
Definition: jccolor.c:85
int JSAMPARRAY int int num_rows
Definition: jpegint.h:412
int JSAMPARRAY int int JDIMENSION num_cols
Definition: jpegint.h:412
#define B_Y_OFF
Definition: jccolor.c:84
#define B_CR_OFF
Definition: jccolor.c:90
jpeg_component_info JCOEFPTR JSAMPARRAY output_buf
Definition: jdct.h:238
unsigned int JDIMENSION
Definition: jmorecfg.h:229
signed int INT32
JDIMENSION image_width
Definition: jpeglib.h:302

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  int instride = cinfo->input_components;
339  register JSAMPROW inptr;
340  register JSAMPROW outptr;
341  register JDIMENSION col;
343 
344  while (--num_rows >= 0) {
345  inptr = *input_buf++;
346  outptr = output_buf[0][output_row++];
347  for (col = 0; col < num_cols; col++) {
348  outptr[col] = inptr[0]; /* don't need GETJSAMPLE() here */
349  inptr += instride;
350  }
351  }
352 }
JSAMPLE FAR * JSAMPROW
Definition: jpeglib.h:75
JBLOCKROW output_row
Definition: jpegint.h:415
int JSAMPARRAY int int num_rows
Definition: jpegint.h:412
int JSAMPARRAY int int JDIMENSION num_cols
Definition: jpegint.h:412
jpeg_component_info JCOEFPTR JSAMPARRAY output_buf
Definition: jdct.h:238
unsigned int JDIMENSION
Definition: jmorecfg.h:229
JDIMENSION image_width
Definition: jpeglib.h:302

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)
443  (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
445  cinfo->cconvert = &cconvert->pub;
446  /* set start_pass to null method until we find out differently */
447  cconvert->pub.start_pass = null_method;
448 
449  /* Make sure input_components agrees with in_color_space */
450  switch (cinfo->in_color_space) {
451  case JCS_GRAYSCALE:
452  if (cinfo->input_components != 1)
453  ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
454  break;
455 
456  case JCS_RGB:
457  case JCS_BG_RGB:
458  if (cinfo->input_components != RGB_PIXELSIZE)
459  ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
460  break;
461 
462  case JCS_YCbCr:
463  case JCS_BG_YCC:
464  if (cinfo->input_components != 3)
465  ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
466  break;
467 
468  case JCS_CMYK:
469  case JCS_YCCK:
470  if (cinfo->input_components != 4)
471  ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
472  break;
473 
474  default: /* JCS_UNKNOWN can be anything */
475  if (cinfo->input_components < 1)
476  ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
477  break;
478  }
479 
480  /* Support color transform only for RGB colorspaces */
481  if (cinfo->color_transform &&
482  cinfo->jpeg_color_space != JCS_RGB &&
483  cinfo->jpeg_color_space != JCS_BG_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  switch (cinfo->color_transform) {
512  case JCT_NONE:
513  cconvert->pub.color_convert = rgb_convert;
514  break;
515  case JCT_SUBTRACT_GREEN:
516  cconvert->pub.color_convert = rgb_rgb1_convert;
517  break;
518  default:
519  ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
520  }
521  } else
522  ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
523  break;
524 
525  case JCS_YCbCr:
526  if (cinfo->num_components != 3)
527  ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
528  switch (cinfo->in_color_space) {
529  case JCS_RGB:
530  cconvert->pub.start_pass = rgb_ycc_start;
531  cconvert->pub.color_convert = rgb_ycc_convert;
532  break;
533  case JCS_YCbCr:
534  cconvert->pub.color_convert = null_convert;
535  break;
536  default:
537  ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
538  }
539  break;
540 
541  case JCS_BG_YCC:
542  if (cinfo->num_components != 3)
543  ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
544  switch (cinfo->in_color_space) {
545  case JCS_RGB:
546  /* For conversion from normal RGB input to BG_YCC representation,
547  * the Cb/Cr values are first computed as usual, and then
548  * quantized further after DCT processing by a factor of
549  * 2 in reference to the nominal quantization factor.
550  */
551  /* need quantization scale by factor of 2 after DCT */
552  cinfo->comp_info[1].component_needed = TRUE;
553  cinfo->comp_info[2].component_needed = TRUE;
554  /* compute normal YCC first */
555  cconvert->pub.start_pass = rgb_ycc_start;
556  cconvert->pub.color_convert = rgb_ycc_convert;
557  break;
558  case JCS_YCbCr:
559  /* need quantization scale by factor of 2 after DCT */
560  cinfo->comp_info[1].component_needed = TRUE;
561  cinfo->comp_info[2].component_needed = TRUE;
562  /*FALLTHROUGH*/
563  case JCS_BG_YCC:
564  /* Pass through for BG_YCC input */
565  cconvert->pub.color_convert = null_convert;
566  break;
567  default:
568  ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
569  }
570  break;
571 
572  case JCS_CMYK:
573  if (cinfo->num_components != 4)
574  ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
575  if (cinfo->in_color_space == JCS_CMYK)
576  cconvert->pub.color_convert = null_convert;
577  else
578  ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
579  break;
580 
581  case JCS_YCCK:
582  if (cinfo->num_components != 4)
583  ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
584  switch (cinfo->in_color_space) {
585  case JCS_CMYK:
586  cconvert->pub.start_pass = rgb_ycc_start;
587  cconvert->pub.color_convert = cmyk_ycck_convert;
588  break;
589  case JCS_YCCK:
590  cconvert->pub.color_convert = null_convert;
591  break;
592  default:
593  ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
594  }
595  break;
596 
597  default: /* allow null conversion of JCS_UNKNOWN */
598  if (cinfo->jpeg_color_space != cinfo->in_color_space ||
599  cinfo->num_components != cinfo->input_components)
600  ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
601  cconvert->pub.color_convert = null_convert;
602  break;
603  }
604 }
cmyk_ycck_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:237
J_COLOR_TRANSFORM color_transform
Definition: jpeglib.h:387
#define TRUE
Definition: types.h:120
#define ERREXIT(msg)
Definition: rdjpgcom.c:72
J_COLOR_SPACE jpeg_color_space
Definition: jpeglib.h:331
null_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:395
struct jpeg_common_struct * j_common_ptr
Definition: jpeglib.h:284
my_color_converter * my_cconvert_ptr
Definition: jccolor.c:26
struct jpeg_color_converter * cconvert
Definition: jpeglib.h:448
boolean component_needed
Definition: jpeglib.h:174
rgb_ycc_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:143
J_COLOR_SPACE in_color_space
Definition: jpeglib.h:305
#define SIZEOF(_ar)
Definition: calc.h:97
#define JPOOL_IMAGE
Definition: jpeglib.h:808
grayscale_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:334
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_start(j_compress_ptr cinfo)
Definition: jccolor.c:99
struct jpeg_color_converter pub
Definition: jccolor.c:20
rgb_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:362
rgb_rgb1_convert(j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)
Definition: jccolor.c:295
jpeg_component_info * comp_info
Definition: jpeglib.h:333

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  int ci;
400  register int nc = cinfo->num_components;
401  register JSAMPROW inptr;
402  register JSAMPROW outptr;
403  register JDIMENSION col;
405 
406  while (--num_rows >= 0) {
407  /* It seems fastest to make a separate pass for each component. */
408  for (ci = 0; ci < nc; ci++) {
409  inptr = input_buf[0] + ci;
410  outptr = output_buf[ci][output_row];
411  for (col = 0; col < num_cols; col++) {
412  *outptr++ = *inptr; /* don't need GETJSAMPLE() here */
413  inptr += nc;
414  }
415  }
416  input_buf++;
417  output_row++;
418  }
419 }
JSAMPLE FAR * JSAMPROW
Definition: jpeglib.h:75
JBLOCKROW output_row
Definition: jpegint.h:415
int JSAMPARRAY int int num_rows
Definition: jpegint.h:412
int JSAMPARRAY int int JDIMENSION num_cols
Definition: jpegint.h:412
jpeg_component_info JCOEFPTR JSAMPARRAY output_buf
Definition: jdct.h:238
unsigned int JDIMENSION
Definition: jmorecfg.h:229
JDIMENSION image_width
Definition: jpeglib.h:302

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 }
JSAMPLE FAR * JSAMPROW
Definition: jpeglib.h:75
JBLOCKROW output_row
Definition: jpegint.h:415
int JSAMPARRAY int int num_rows
Definition: jpegint.h:412
int JSAMPARRAY int int JDIMENSION num_cols
Definition: jpegint.h:412
jpeg_component_info JCOEFPTR JSAMPARRAY output_buf
Definition: jdct.h:238
unsigned int JDIMENSION
Definition: jmorecfg.h:229
JDIMENSION image_width
Definition: jpeglib.h:302

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 * ctab = cconvert->rgb_ycc_tab;
205  register int r, g, b;
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  /* Y */
219  outptr[col] = (JSAMPLE)
220  ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
221  >> SCALEBITS);
222  inptr += RGB_PIXELSIZE;
223  }
224  }
225 }
#define R_Y_OFF
Definition: jccolor.c:82
char JSAMPLE
Definition: jmorecfg.h:74
JSAMPLE FAR * JSAMPROW
Definition: jpeglib.h:75
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
#define SCALEBITS
Definition: jccolor.c:71
INT32 * rgb_ycc_tab
Definition: jccolor.c:23
my_color_converter * my_cconvert_ptr
Definition: jccolor.c:26
#define GETJSAMPLE(value)
Definition: jmorecfg.h:78
struct jpeg_color_converter * cconvert
Definition: jpeglib.h:448
while(1)
Definition: macro.lex.yy.c:740
#define G_Y_OFF
Definition: jccolor.c:83
GLboolean GLboolean g
Definition: glext.h:6204
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
JBLOCKROW output_row
Definition: jpegint.h:415
int JSAMPARRAY int int num_rows
Definition: jpegint.h:412
int JSAMPARRAY int int JDIMENSION num_cols
Definition: jpegint.h:412
#define B_Y_OFF
Definition: jccolor.c:84
jpeg_component_info JCOEFPTR JSAMPARRAY output_buf
Definition: jdct.h:238
unsigned int JDIMENSION
Definition: jmorecfg.h:229
signed int INT32
JDIMENSION image_width
Definition: jpeglib.h:302

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  /* Assume that MAXJSAMPLE+1 is a power of 2, so that the MOD
316  * (modulo) operator is equivalent to the bitmask operator AND.
317  */
318  outptr0[col] = (JSAMPLE) ((r - g + CENTERJSAMPLE) & MAXJSAMPLE);
319  outptr1[col] = (JSAMPLE) g;
320  outptr2[col] = (JSAMPLE) ((b - g + CENTERJSAMPLE) & MAXJSAMPLE);
321  inptr += RGB_PIXELSIZE;
322  }
323  }
324 }
#define CENTERJSAMPLE
Definition: jmorecfg.h:84
char JSAMPLE
Definition: jmorecfg.h:74
JSAMPLE FAR * JSAMPROW
Definition: jpeglib.h:75
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
#define GETJSAMPLE(value)
Definition: jmorecfg.h:78
#define MAXJSAMPLE
Definition: jmorecfg.h:83
#define b
Definition: ke_i.h:79
GLboolean GLboolean g
Definition: glext.h:6204
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
JBLOCKROW output_row
Definition: jpegint.h:415
int JSAMPARRAY int int num_rows
Definition: jpegint.h:412
int JSAMPARRAY int int JDIMENSION num_cols
Definition: jpegint.h:412
jpeg_component_info JCOEFPTR JSAMPARRAY output_buf
Definition: jdct.h:238
unsigned int JDIMENSION
Definition: jmorecfg.h:229
JDIMENSION image_width
Definition: jpeglib.h:302

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 INT32 * ctab = cconvert->rgb_ycc_tab;
149  register int r, g, b;
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  /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations
166  * must be too; we do not need an explicit range-limiting operation.
167  * Hence the value being shifted is never negative, and we don't
168  * need the general RIGHT_SHIFT macro.
169  */
170  /* Y */
171  outptr0[col] = (JSAMPLE)
172  ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
173  >> SCALEBITS);
174  /* Cb */
175  outptr1[col] = (JSAMPLE)
176  ((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF])
177  >> SCALEBITS);
178  /* Cr */
179  outptr2[col] = (JSAMPLE)
180  ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF])
181  >> SCALEBITS);
182  inptr += RGB_PIXELSIZE;
183  }
184  }
185 }
#define R_Y_OFF
Definition: jccolor.c:82
char JSAMPLE
Definition: jmorecfg.h:74
JSAMPLE FAR * JSAMPROW
Definition: jpeglib.h:75
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
#define SCALEBITS
Definition: jccolor.c:71
INT32 * rgb_ycc_tab
Definition: jccolor.c:23
my_color_converter * my_cconvert_ptr
Definition: jccolor.c:26
#define GETJSAMPLE(value)
Definition: jmorecfg.h:78
struct jpeg_color_converter * cconvert
Definition: jpeglib.h:448
#define G_CB_OFF
Definition: jccolor.c:86
#define B_CB_OFF
Definition: jccolor.c:87
#define R_CR_OFF
Definition: jccolor.c:88
while(1)
Definition: macro.lex.yy.c:740
#define G_CR_OFF
Definition: jccolor.c:89
#define G_Y_OFF
Definition: jccolor.c:83
GLboolean GLboolean g
Definition: glext.h:6204
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
JBLOCKROW output_row
Definition: jpegint.h:415
#define R_CB_OFF
Definition: jccolor.c:85
int JSAMPARRAY int int num_rows
Definition: jpegint.h:412
int JSAMPARRAY int int JDIMENSION num_cols
Definition: jpegint.h:412
#define B_Y_OFF
Definition: jccolor.c:84
#define B_CR_OFF
Definition: jccolor.c:90
jpeg_component_info JCOEFPTR JSAMPARRAY output_buf
Definition: jdct.h:238
unsigned int JDIMENSION
Definition: jmorecfg.h:229
signed int INT32
JDIMENSION image_width
Definition: jpeglib.h:302

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,
108  (TABLE_SIZE * SIZEOF(INT32)));
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 }
#define R_Y_OFF
Definition: jccolor.c:82
INT32 * rgb_ycc_tab
Definition: jccolor.c:23
my_color_converter * my_cconvert_ptr
Definition: jccolor.c:26
struct jpeg_color_converter * cconvert
Definition: jpeglib.h:448
#define G_CB_OFF
Definition: jccolor.c:86
#define MAXJSAMPLE
Definition: jmorecfg.h:83
#define B_CB_OFF
Definition: jccolor.c:87
#define CBCR_OFFSET
Definition: jccolor.c:72
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 SIZEOF(_ar)
Definition: calc.h:97
#define JPOOL_IMAGE
Definition: jpeglib.h:808
#define G_CR_OFF
Definition: jccolor.c:89
#define ONE_HALF
Definition: jccolor.c:73
#define G_Y_OFF
Definition: jccolor.c:83
#define R_CB_OFF
Definition: jccolor.c:85
#define B_Y_OFF
Definition: jccolor.c:84
#define FIX(x)
Definition: jccolor.c:74
#define B_CR_OFF
Definition: jccolor.c:90
#define TABLE_SIZE
Definition: jccolor.c:91
signed int INT32

Referenced by jinit_color_converter().