You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
4.1 KiB
126 lines
4.1 KiB
From bf597b89288b6271f56031d5a20bfaf59f146d4c Mon Sep 17 00:00:00 2001 |
|
From: Bryce Harrington <bryce@bryceharrington.org> |
|
Date: Tue, 16 Oct 2018 09:13:23 -0700 |
|
Subject: [PATCH] Revert "Correctly decode Adobe CMYK JPEGs in PDF export" |
|
|
|
From further testing and investigation it appears that many PDF viewers |
|
already have a workaround to invert Adobe CMYK JPEGs, so our generated |
|
PDFs display incorrectly with those viewers due to double-inversion. |
|
|
|
Further investigation will be needed to find a better solution that |
|
doesn't cause regression for some PDF viewers; perhaps PDF viewers that |
|
lack this inversion workaround should be changed to include it. For now |
|
we'll drop the patch to avoid shipping the regression in 1.16.0. |
|
|
|
This reverts commit b207a932a2d3740984319dffd58a0791580597cd. |
|
|
|
Reference: https://bugs.freedesktop.org/show_bug.cgi?id=97612 |
|
Fixes: https://gitlab.freedesktop.org/cairo/cairo/issues/156 |
|
--- |
|
src/cairo-image-info-private.h | 1 - |
|
src/cairo-image-info.c | 21 --------------------- |
|
src/cairo-pdf-surface.c | 2 -- |
|
3 files changed, 24 deletions(-) |
|
|
|
diff --git a/src/cairo-image-info-private.h b/src/cairo-image-info-private.h |
|
index 99cbbcc02..e64928e40 100644 |
|
--- a/src/cairo-image-info-private.h |
|
+++ b/src/cairo-image-info-private.h |
|
@@ -43,7 +43,6 @@ typedef struct _cairo_image_info { |
|
int height; |
|
int num_components; |
|
int bits_per_component; |
|
- int is_adobe_jpeg; |
|
} cairo_image_info_t; |
|
|
|
cairo_private cairo_int_status_t |
|
diff --git a/src/cairo-image-info.c b/src/cairo-image-info.c |
|
index 3b4cf6edb..d147e3723 100644 |
|
--- a/src/cairo-image-info.c |
|
+++ b/src/cairo-image-info.c |
|
@@ -67,9 +67,6 @@ |
|
#define SOF14 0xce |
|
#define SOF15 0xcf |
|
|
|
-/* Start of tag markers */ |
|
-#define APP14 0xee /* Adobe */ |
|
- |
|
static const unsigned char * |
|
_jpeg_skip_segment (const unsigned char *p) |
|
{ |
|
@@ -97,8 +94,6 @@ _cairo_image_info_get_jpeg_info (cairo_image_info_t *info, |
|
{ |
|
const unsigned char *p = data; |
|
|
|
- info->is_adobe_jpeg = FALSE; |
|
- |
|
while (p + 1 < data + length) { |
|
if (*p != 0xff) |
|
return CAIRO_INT_STATUS_UNSUPPORTED; |
|
@@ -136,18 +131,6 @@ _cairo_image_info_get_jpeg_info (cairo_image_info_t *info, |
|
_jpeg_extract_info (info, p); |
|
return CAIRO_STATUS_SUCCESS; |
|
|
|
- case APP14: |
|
- /* "Adobe" tags segment indicates inverted CMYK (in |
|
- * CMYK images). */ |
|
- if (p + 12 > data + length) |
|
- return CAIRO_INT_STATUS_UNSUPPORTED; |
|
- |
|
- info->is_adobe_jpeg = |
|
- (0 == strncmp((const char *)(p + 3), "Adobe", 5)); |
|
- |
|
- p = _jpeg_skip_segment(p); |
|
- break; |
|
- |
|
default: |
|
if (*p >= RST_begin && *p <= RST_end) { |
|
p++; |
|
@@ -223,7 +206,6 @@ _jpx_extract_info (const unsigned char *p, cairo_image_info_t *info) |
|
info->width = get_unaligned_be32 (p + 4); |
|
info->num_components = (p[8] << 8) + p[9]; |
|
info->bits_per_component = p[10]; |
|
- info->is_adobe_jpeg = FALSE; |
|
} |
|
|
|
cairo_int_status_t |
|
@@ -301,8 +283,6 @@ _cairo_image_info_get_png_info (cairo_image_info_t *info, |
|
p += 4; |
|
info->height = get_unaligned_be32 (p); |
|
|
|
- info->is_adobe_jpeg = FALSE; |
|
- |
|
return CAIRO_STATUS_SUCCESS; |
|
} |
|
|
|
@@ -415,7 +395,6 @@ _jbig2_extract_info (cairo_image_info_t *info, const unsigned char *p) |
|
info->height = get_unaligned_be32 (p + 4); |
|
info->num_components = 1; |
|
info->bits_per_component = 1; |
|
- info->is_adobe_jpeg = FALSE; |
|
} |
|
|
|
cairo_int_status_t |
|
diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c |
|
index ab6781340..7eb61aa1e 100644 |
|
--- a/src/cairo-pdf-surface.c |
|
+++ b/src/cairo-pdf-surface.c |
|
@@ -3169,7 +3169,6 @@ _cairo_pdf_surface_emit_jpeg_image (cairo_pdf_surface_t *surface, |
|
" /Height %d\n" |
|
" /ColorSpace %s\n" |
|
" /Interpolate %s\n" |
|
- "%s" |
|
" /BitsPerComponent %d\n" |
|
"%s" |
|
" /Filter /DCTDecode\n", |
|
@@ -3177,7 +3176,6 @@ _cairo_pdf_surface_emit_jpeg_image (cairo_pdf_surface_t *surface, |
|
info.height, |
|
colorspace, |
|
surface_entry->interpolate ? "true" : "false", |
|
- info.is_adobe_jpeg && info.num_components == 4 ? " /Decode [ 1 0 1 0 1 0 1 0 ]\n" : "", |
|
info.bits_per_component, |
|
smask_buf); |
|
} |
|
-- |
|
2.20.1 |
|
|
|
|