Implement new colorspaces to allow directly compressing from/decompressing to RGB/RGBX/BGR/BGRX/XBGR/XRGB without conversion
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@3744 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/common/jpeg/jdmerge.c b/common/jpeg/jdmerge.c
index 7742941..7b1a079 100644
--- a/common/jpeg/jdmerge.c
+++ b/common/jpeg/jdmerge.c
@@ -257,15 +257,15 @@
cblue = Cbbtab[cb];
/* Fetch 2 Y values and emit 2 pixels */
y = GETJSAMPLE(*inptr0++);
- outptr[RGB_RED] = range_limit[y + cred];
- outptr[RGB_GREEN] = range_limit[y + cgreen];
- outptr[RGB_BLUE] = range_limit[y + cblue];
- outptr += RGB_PIXELSIZE;
+ outptr[rgb_red[cinfo->out_color_space]] = range_limit[y + cred];
+ outptr[rgb_green[cinfo->out_color_space]] = range_limit[y + cgreen];
+ outptr[rgb_blue[cinfo->out_color_space]] = range_limit[y + cblue];
+ outptr += rgb_pixelsize[cinfo->out_color_space];
y = GETJSAMPLE(*inptr0++);
- outptr[RGB_RED] = range_limit[y + cred];
- outptr[RGB_GREEN] = range_limit[y + cgreen];
- outptr[RGB_BLUE] = range_limit[y + cblue];
- outptr += RGB_PIXELSIZE;
+ outptr[rgb_red[cinfo->out_color_space]] = range_limit[y + cred];
+ outptr[rgb_green[cinfo->out_color_space]] = range_limit[y + cgreen];
+ outptr[rgb_blue[cinfo->out_color_space]] = range_limit[y + cblue];
+ outptr += rgb_pixelsize[cinfo->out_color_space];
}
/* If image width is odd, do the last output column separately */
if (cinfo->output_width & 1) {
@@ -275,9 +275,9 @@
cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
cblue = Cbbtab[cb];
y = GETJSAMPLE(*inptr0);
- outptr[RGB_RED] = range_limit[y + cred];
- outptr[RGB_GREEN] = range_limit[y + cgreen];
- outptr[RGB_BLUE] = range_limit[y + cblue];
+ outptr[rgb_red[cinfo->out_color_space]] = range_limit[y + cred];
+ outptr[rgb_green[cinfo->out_color_space]] = range_limit[y + cgreen];
+ outptr[rgb_blue[cinfo->out_color_space]] = range_limit[y + cblue];
}
}
@@ -321,24 +321,24 @@
cblue = Cbbtab[cb];
/* Fetch 4 Y values and emit 4 pixels */
y = GETJSAMPLE(*inptr00++);
- outptr0[RGB_RED] = range_limit[y + cred];
- outptr0[RGB_GREEN] = range_limit[y + cgreen];
- outptr0[RGB_BLUE] = range_limit[y + cblue];
+ outptr0[rgb_red[cinfo->out_color_space]] = range_limit[y + cred];
+ outptr0[rgb_green[cinfo->out_color_space]] = range_limit[y + cgreen];
+ outptr0[rgb_blue[cinfo->out_color_space]] = range_limit[y + cblue];
outptr0 += RGB_PIXELSIZE;
y = GETJSAMPLE(*inptr00++);
- outptr0[RGB_RED] = range_limit[y + cred];
- outptr0[RGB_GREEN] = range_limit[y + cgreen];
- outptr0[RGB_BLUE] = range_limit[y + cblue];
+ outptr0[rgb_red[cinfo->out_color_space]] = range_limit[y + cred];
+ outptr0[rgb_green[cinfo->out_color_space]] = range_limit[y + cgreen];
+ outptr0[rgb_blue[cinfo->out_color_space]] = range_limit[y + cblue];
outptr0 += RGB_PIXELSIZE;
y = GETJSAMPLE(*inptr01++);
- outptr1[RGB_RED] = range_limit[y + cred];
- outptr1[RGB_GREEN] = range_limit[y + cgreen];
- outptr1[RGB_BLUE] = range_limit[y + cblue];
+ outptr1[rgb_red[cinfo->out_color_space]] = range_limit[y + cred];
+ outptr1[rgb_green[cinfo->out_color_space]] = range_limit[y + cgreen];
+ outptr1[rgb_blue[cinfo->out_color_space]] = range_limit[y + cblue];
outptr1 += RGB_PIXELSIZE;
y = GETJSAMPLE(*inptr01++);
- outptr1[RGB_RED] = range_limit[y + cred];
- outptr1[RGB_GREEN] = range_limit[y + cgreen];
- outptr1[RGB_BLUE] = range_limit[y + cblue];
+ outptr1[rgb_red[cinfo->out_color_space]] = range_limit[y + cred];
+ outptr1[rgb_green[cinfo->out_color_space]] = range_limit[y + cgreen];
+ outptr1[rgb_blue[cinfo->out_color_space]] = range_limit[y + cblue];
outptr1 += RGB_PIXELSIZE;
}
/* If image width is odd, do the last output column separately */
@@ -349,13 +349,13 @@
cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
cblue = Cbbtab[cb];
y = GETJSAMPLE(*inptr00);
- outptr0[RGB_RED] = range_limit[y + cred];
- outptr0[RGB_GREEN] = range_limit[y + cgreen];
- outptr0[RGB_BLUE] = range_limit[y + cblue];
+ outptr0[rgb_red[cinfo->out_color_space]] = range_limit[y + cred];
+ outptr0[rgb_green[cinfo->out_color_space]] = range_limit[y + cgreen];
+ outptr0[rgb_blue[cinfo->out_color_space]] = range_limit[y + cblue];
y = GETJSAMPLE(*inptr01);
- outptr1[RGB_RED] = range_limit[y + cred];
- outptr1[RGB_GREEN] = range_limit[y + cgreen];
- outptr1[RGB_BLUE] = range_limit[y + cblue];
+ outptr1[rgb_red[cinfo->out_color_space]] = range_limit[y + cred];
+ outptr1[rgb_green[cinfo->out_color_space]] = range_limit[y + cgreen];
+ outptr1[rgb_blue[cinfo->out_color_space]] = range_limit[y + cblue];
}
}