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.
127 lines
4.1 KiB
127 lines
4.1 KiB
5 years ago
|
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
|
||
|
|