djpeg: Fix PPM output regression w/ color quant.

Regression caused by aa7459050d

Fix based on:
03fbacb8eb

Closes #310
This commit is contained in:
DRC
2019-01-21 16:25:02 -06:00
parent 479501b07c
commit 1ee87a9e2e
2 changed files with 14 additions and 8 deletions

View File

@@ -28,6 +28,9 @@ of specifying 1x subsampling (normally 4:4:4 JPEGs have 1x1 luminance and
chrominance sampling factors), but the JPEG format and the libjpeg API both chrominance sampling factors), but the JPEG format and the libjpeg API both
allow it. allow it.
6. Fixed a regression introduced by 2.0 beta1[7] that caused djpeg to generate
incorrect PPM images when used with the `-colors` option.
2.0.1 2.0.1
===== =====

View File

@@ -5,7 +5,7 @@
* Copyright (C) 1991-1996, Thomas G. Lane. * Copyright (C) 1991-1996, Thomas G. Lane.
* Modified 2009 by Guido Vollbeding. * Modified 2009 by Guido Vollbeding.
* libjpeg-turbo Modifications: * libjpeg-turbo Modifications:
* Copyright (C) 2017, D. R. Commander. * Copyright (C) 2017, 2019, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -256,6 +256,8 @@ start_output_ppm(j_decompress_ptr cinfo, djpeg_dest_ptr dinfo)
case JCS_EXT_ABGR: case JCS_EXT_ABGR:
case JCS_EXT_ARGB: case JCS_EXT_ARGB:
case JCS_CMYK: case JCS_CMYK:
if (!IsExtRGB(cinfo->out_color_space) && cinfo->quantize_colors)
ERREXIT(cinfo, JERR_PPM_COLORSPACE);
/* emit header for raw PPM format */ /* emit header for raw PPM format */
fprintf(dest->pub.output_file, "P6\n%ld %ld\n%d\n", fprintf(dest->pub.output_file, "P6\n%ld %ld\n%d\n",
(long)cinfo->output_width, (long)cinfo->output_height, PPM_MAXVAL); (long)cinfo->output_width, (long)cinfo->output_height, PPM_MAXVAL);
@@ -337,13 +339,14 @@ jinit_write_ppm(j_decompress_ptr cinfo)
((j_common_ptr)cinfo, JPOOL_IMAGE, ((j_common_ptr)cinfo, JPOOL_IMAGE,
cinfo->output_width * cinfo->output_components, (JDIMENSION)1); cinfo->output_width * cinfo->output_components, (JDIMENSION)1);
dest->pub.buffer_height = 1; dest->pub.buffer_height = 1;
if (!cinfo->quantize_colors) {
if (IsExtRGB(cinfo->out_color_space)) if (IsExtRGB(cinfo->out_color_space))
dest->pub.put_pixel_rows = put_rgb; dest->pub.put_pixel_rows = put_rgb;
else if (cinfo->out_color_space == JCS_CMYK) else if (cinfo->out_color_space == JCS_CMYK)
dest->pub.put_pixel_rows = put_cmyk; dest->pub.put_pixel_rows = put_cmyk;
else if (!cinfo->quantize_colors) else
dest->pub.put_pixel_rows = copy_pixel_rows; dest->pub.put_pixel_rows = copy_pixel_rows;
else if (cinfo->out_color_space == JCS_GRAYSCALE) } else if (cinfo->out_color_space == JCS_GRAYSCALE)
dest->pub.put_pixel_rows = put_demapped_gray; dest->pub.put_pixel_rows = put_demapped_gray;
else else
dest->pub.put_pixel_rows = put_demapped_rgb; dest->pub.put_pixel_rows = put_demapped_rgb;