ReactOS  0.4.15-dev-1201-gb2cf5a4
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 }
#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:422
#define R_CB_OFF
Definition: jccolor.c:85
int JSAMPARRAY int int num_rows
Definition: jpegint.h:419
int JSAMPARRAY int int JDIMENSION num_cols
Definition: jpegint.h:419
#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  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 }
JSAMPLE FAR * JSAMPROW
Definition: jpeglib.h:75
GLuint GLuint GLsizei count
Definition: gl.h:1545
JBLOCKROW output_row
Definition: jpegint.h:422
int JSAMPARRAY int int num_rows
Definition: jpegint.h:419
int JSAMPARRAY int int JDIMENSION num_cols
Definition: jpegint.h:419
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) (*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 &&
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  ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
512  switch (cinfo->color_transform) {
513  case JCT_NONE:
514  cconvert->pub.color_convert = rgb_convert;
515  break;
516  case JCT_SUBTRACT_GREEN:
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 }
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 ERREXIT(msg)
Definition: rdjpgcom.c:72
J_COLOR_SPACE jpeg_color_space
Definition: jpeglib.h:331
#define TRUE
Definition: types.h:120
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  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 }
JSAMPLE FAR * JSAMPROW
Definition: jpeglib.h:75
GLuint GLuint GLsizei count
Definition: gl.h:1545
JBLOCKROW output_row
Definition: jpegint.h:422
int JSAMPARRAY int int num_rows
Definition: jpegint.h:419
int JSAMPARRAY int int JDIMENSION num_cols
Definition: jpegint.h:419
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:422
int JSAMPARRAY int int num_rows
Definition: jpegint.h:419
int JSAMPARRAY int int JDIMENSION num_cols
Definition: jpegint.h:419
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 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 }
#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:422
int JSAMPARRAY int int num_rows
Definition: jpegint.h:419
int JSAMPARRAY int int JDIMENSION num_cols
Definition: jpegint.h:419
#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  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
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:422
int JSAMPARRAY int int num_rows
Definition: jpegint.h:419
int JSAMPARRAY int int JDIMENSION num_cols
Definition: jpegint.h:419
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 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 }
#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:422
#define R_CB_OFF
Definition: jccolor.c:85
int JSAMPARRAY int int num_rows
Definition: jpegint.h:419
int JSAMPARRAY int int JDIMENSION num_cols
Definition: jpegint.h:419
#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().