diff options
author | dcommander <dcommander@632fc199-4ca6-4c93-a231-07263d6284db> | 2009-04-03 12:00:51 +0000 |
---|---|---|
committer | dcommander <dcommander@632fc199-4ca6-4c93-a231-07263d6284db> | 2009-04-03 12:00:51 +0000 |
commit | 1a9967cd2bec4abc039aac111bfa61ef37266fe1 (patch) | |
tree | 4cf0d62b0ee4a8f5656fdb7ded0e985da403f764 /jdcolor.c | |
parent | 803e3a287a29ba05e60a74b77f8cb41017164bd1 (diff) |
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/libjpeg-turbo/code/trunk@35 632fc199-4ca6-4c93-a231-07263d6284db
Diffstat (limited to 'jdcolor.c')
-rw-r--r-- | jdcolor.c | 25 |
1 files changed, 17 insertions, 8 deletions
@@ -148,12 +148,12 @@ ycc_rgb_convert (j_decompress_ptr cinfo, cb = GETJSAMPLE(inptr1[col]); cr = GETJSAMPLE(inptr2[col]); /* Range-limiting is essential due to noise introduced by DCT losses. */ - outptr[RGB_RED] = range_limit[y + Crrtab[cr]]; - outptr[RGB_GREEN] = range_limit[y + + outptr[rgb_red[cinfo->out_color_space]] = range_limit[y + Crrtab[cr]]; + outptr[rgb_green[cinfo->out_color_space]] = range_limit[y + ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS))]; - outptr[RGB_BLUE] = range_limit[y + Cbbtab[cb]]; - outptr += RGB_PIXELSIZE; + outptr[rgb_blue[cinfo->out_color_space]] = range_limit[y + Cbbtab[cb]]; + outptr += rgb_pixelsize[cinfo->out_color_space]; } } } @@ -229,8 +229,10 @@ gray_rgb_convert (j_decompress_ptr cinfo, outptr = *output_buf++; for (col = 0; col < num_cols; col++) { /* We can dispense with GETJSAMPLE() here */ - outptr[RGB_RED] = outptr[RGB_GREEN] = outptr[RGB_BLUE] = inptr[col]; - outptr += RGB_PIXELSIZE; + outptr[rgb_red[cinfo->out_color_space]] = + outptr[rgb_green[cinfo->out_color_space]] = + outptr[rgb_blue[cinfo->out_color_space]] = inptr[col]; + outptr += rgb_pixelsize[cinfo->out_color_space]; } } } @@ -358,7 +360,13 @@ jinit_color_deconverter (j_decompress_ptr cinfo) break; case JCS_RGB: - cinfo->out_color_components = RGB_PIXELSIZE; + case JCS_EXT_RGB: + case JCS_EXT_RGBX: + case JCS_EXT_BGR: + case JCS_EXT_BGRX: + case JCS_EXT_XBGR: + case JCS_EXT_XRGB: + cinfo->out_color_components = rgb_pixelsize[cinfo->out_color_space]; if (cinfo->jpeg_color_space == JCS_YCbCr) { if (jsimd_can_ycc_rgb()) cconvert->pub.color_convert = jsimd_ycc_rgb_convert; @@ -368,7 +376,8 @@ jinit_color_deconverter (j_decompress_ptr cinfo) } } else if (cinfo->jpeg_color_space == JCS_GRAYSCALE) { cconvert->pub.color_convert = gray_rgb_convert; - } else if (cinfo->jpeg_color_space == JCS_RGB && RGB_PIXELSIZE == 3) { + } else if (cinfo->jpeg_color_space == cinfo->out_color_space && + rgb_pixelsize[cinfo->out_color_space] == 3) { cconvert->pub.color_convert = null_convert; } else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); |