annotate src/image_load_jpeg.c @ 1912:4417578c55f9

improved mpo parser, consider individual image type code
author Vladimir Nadvornik <nadvornik@suse.cz>
date Sat, 09 Apr 2011 16:07:31 +0200
parents 225b72ae0482
children 25ad4fcd970d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1909
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
1 /*
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
2 * Geeqie
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
3 * (C) 2004 John Ellis
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
4 * Copyright (C) 2008 - 2011 The Geeqie Team
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
5 *
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
6 * Author: Vladimir Nadvornik
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
7 *
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
8 * This software is released under the GNU General Public License (GNU GPL).
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
9 * Please read the included file COPYING for more information.
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
10 * This software comes with no warranty of any kind, use at your own risk!
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
11 */
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
12
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
13 /* based on code from GdkPixbuf library - JPEG image loader
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
14 *
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
15 * Copyright (C) 1999 Michael Zucchi
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
16 * Copyright (C) 1999 The Free Software Foundation
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
17 *
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
18 * Progressive loading code Copyright (C) 1999 Red Hat, Inc.
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
19 *
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
20 * Authors: Michael Zucchi <zucchi@zedzone.mmc.com.au>
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
21 * Federico Mena-Quintero <federico@gimp.org>
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
22 * Michael Fulbright <drmike@redhat.com>
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
23 *
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
24 * This library is free software; you can redistribute it and/or
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
25 * modify it under the terms of the GNU Lesser General Public
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
26 * License as published by the Free Software Foundation; either
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
27 * version 2 of the License, or (at your option) any later version.
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
28 *
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
29 * This library is distributed in the hope that it will be useful,
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
30 * but WITHOUT ANY WARRANTY; without even the implied warranty of
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
31 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
32 * Lesser General Public License for more details.
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
33 *
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
34 * You should have received a copy of the GNU Lesser General Public
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
35 * License along with this library; if not, write to the
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
36 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
37 * Boston, MA 02111-1307, USA.
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
38 */
caca32ccd945 updated copyright notices
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1908
diff changeset
39
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
40
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
41 #include "main.h"
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
42 #include "image-load.h"
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
43 #include "image_load_jpeg.h"
1903
16b0afb2347c added mpo parser
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1901
diff changeset
44 #include "jpeg_parser.h"
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
45
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
46 #include <setjmp.h>
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
47 #include <jpeglib.h>
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
48 #include <jerror.h>
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
49
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
50 typedef struct _ImageLoaderJpeg ImageLoaderJpeg;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
51 struct _ImageLoaderJpeg {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
52 ImageLoaderBackendCbAreaUpdated area_updated_cb;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
53 ImageLoaderBackendCbSize size_cb;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
54 ImageLoaderBackendCbAreaPrepared area_prepared_cb;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
55
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
56 gpointer data;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
57
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
58 GdkPixbuf *pixbuf;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
59 guint requested_width;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
60 guint requested_height;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
61
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
62 gboolean abort;
1906
dc0a62722612 store stereo flag in loader data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1904
diff changeset
63 gboolean stereo;
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
64
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
65 };
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
66
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
67 /* error handler data */
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
68 struct error_handler_data {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
69 struct jpeg_error_mgr pub;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
70 sigjmp_buf setjmp_buffer;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
71 GError **error;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
72 };
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
73
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
74 /* explode gray image data from jpeg library into rgb components in pixbuf */
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
75 static void
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
76 explode_gray_into_buf (struct jpeg_decompress_struct *cinfo,
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
77 guchar **lines)
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
78 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
79 gint i, j;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
80 guint w;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
81
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
82 g_return_if_fail (cinfo != NULL);
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
83 g_return_if_fail (cinfo->output_components == 1);
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
84 g_return_if_fail (cinfo->out_color_space == JCS_GRAYSCALE);
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
85
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
86 /* Expand grey->colour. Expand from the end of the
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
87 * memory down, so we can use the same buffer.
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
88 */
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
89 w = cinfo->output_width;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
90 for (i = cinfo->rec_outbuf_height - 1; i >= 0; i--) {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
91 guchar *from, *to;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
92
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
93 from = lines[i] + w - 1;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
94 to = lines[i] + (w - 1) * 3;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
95 for (j = w - 1; j >= 0; j--) {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
96 to[0] = from[0];
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
97 to[1] = from[0];
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
98 to[2] = from[0];
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
99 to -= 3;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
100 from--;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
101 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
102 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
103 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
104
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
105
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
106 static void
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
107 convert_cmyk_to_rgb (struct jpeg_decompress_struct *cinfo,
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
108 guchar **lines)
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
109 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
110 gint i, j;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
111
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
112 g_return_if_fail (cinfo != NULL);
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
113 g_return_if_fail (cinfo->output_components == 4);
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
114 g_return_if_fail (cinfo->out_color_space == JCS_CMYK);
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
115
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
116 for (i = cinfo->rec_outbuf_height - 1; i >= 0; i--) {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
117 guchar *p;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
118
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
119 p = lines[i];
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
120 for (j = 0; j < cinfo->output_width; j++) {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
121 int c, m, y, k;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
122 c = p[0];
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
123 m = p[1];
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
124 y = p[2];
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
125 k = p[3];
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
126 if (cinfo->saw_Adobe_marker) {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
127 p[0] = k*c / 255;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
128 p[1] = k*m / 255;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
129 p[2] = k*y / 255;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
130 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
131 else {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
132 p[0] = (255 - k)*(255 - c) / 255;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
133 p[1] = (255 - k)*(255 - m) / 255;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
134 p[2] = (255 - k)*(255 - y) / 255;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
135 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
136 p[3] = 255;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
137 p += 4;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
138 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
139 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
140 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
141
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
142
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
143 static gpointer image_loader_jpeg_new(ImageLoaderBackendCbAreaUpdated area_updated_cb, ImageLoaderBackendCbSize size_cb, ImageLoaderBackendCbAreaPrepared area_prepared_cb, gpointer data)
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
144 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
145 ImageLoaderJpeg *loader = g_new0(ImageLoaderJpeg, 1);
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
146
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
147 loader->area_updated_cb = area_updated_cb;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
148 loader->size_cb = size_cb;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
149 loader->area_prepared_cb = area_prepared_cb;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
150 loader->data = data;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
151 return (gpointer) loader;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
152 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
153
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
154 static void
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
155 fatal_error_handler (j_common_ptr cinfo)
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
156 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
157 struct error_handler_data *errmgr;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
158 char buffer[JMSG_LENGTH_MAX];
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
159
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
160 errmgr = (struct error_handler_data *) cinfo->err;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
161
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
162 /* Create the message */
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
163 (* cinfo->err->format_message) (cinfo, buffer);
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
164
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
165 /* broken check for *error == NULL for robustness against
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
166 * crappy JPEG library
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
167 */
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
168 if (errmgr->error && *errmgr->error == NULL) {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
169 g_set_error (errmgr->error,
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
170 GDK_PIXBUF_ERROR,
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
171 cinfo->err->msg_code == JERR_OUT_OF_MEMORY
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
172 ? GDK_PIXBUF_ERROR_INSUFFICIENT_MEMORY
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
173 : GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
174 _("Error interpreting JPEG image file (%s)"),
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
175 buffer);
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
176 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
177
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
178 siglongjmp (errmgr->setjmp_buffer, 1);
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
179
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
180 g_assert_not_reached ();
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
181 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
182
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
183 static void
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
184 output_message_handler (j_common_ptr cinfo)
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
185 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
186 /* This method keeps libjpeg from dumping crap to stderr */
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
187
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
188 /* do nothing */
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
189 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
190
1904
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
191
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
192 void image_loader_jpeg_read_scanline(struct jpeg_decompress_struct *cinfo, guchar **dptr, guint rowstride)
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
193 {
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
194 guchar *lines[4];
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
195 guchar **lptr;
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
196 gint i;
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
197
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
198 lptr = lines;
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
199 for (i = 0; i < cinfo->rec_outbuf_height; i++)
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
200 {
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
201 *lptr++ = *dptr;
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
202 *dptr += rowstride;
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
203 }
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
204
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
205 jpeg_read_scanlines (cinfo, lines, cinfo->rec_outbuf_height);
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
206
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
207 switch (cinfo->out_color_space)
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
208 {
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
209 case JCS_GRAYSCALE:
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
210 explode_gray_into_buf (cinfo, lines);
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
211 break;
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
212 case JCS_RGB:
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
213 /* do nothing */
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
214 break;
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
215 case JCS_CMYK:
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
216 convert_cmyk_to_rgb (cinfo, lines);
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
217 break;
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
218 default:
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
219 break;
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
220 }
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
221 }
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
222
1911
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
223
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
224 static void init_source (j_decompress_ptr cinfo) {}
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
225 static boolean fill_input_buffer (j_decompress_ptr cinfo)
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
226 {
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
227 ERREXIT(cinfo, JERR_INPUT_EMPTY);
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
228 }
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
229 static void skip_input_data (j_decompress_ptr cinfo, long num_bytes)
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
230 {
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
231 struct jpeg_source_mgr* src = (struct jpeg_source_mgr*) cinfo->src;
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
232
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
233 if (num_bytes > 0)
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
234 {
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
235 src->next_input_byte += (size_t) num_bytes;
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
236 src->bytes_in_buffer -= (size_t) num_bytes;
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
237 }
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
238 }
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
239 static void term_source (j_decompress_ptr cinfo) {}
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
240 static void set_mem_src (j_decompress_ptr cinfo, void* buffer, long nbytes)
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
241 {
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
242 struct jpeg_source_mgr* src;
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
243
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
244 if (cinfo->src == NULL)
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
245 { /* first time for this JPEG object? */
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
246 cinfo->src = (struct jpeg_source_mgr *) (*cinfo->mem->alloc_small) (
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
247 (j_common_ptr) cinfo, JPOOL_PERMANENT,
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
248 sizeof(struct jpeg_source_mgr));
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
249 }
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
250
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
251 src = (struct jpeg_source_mgr*) cinfo->src;
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
252 src->init_source = init_source;
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
253 src->fill_input_buffer = fill_input_buffer;
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
254 src->skip_input_data = skip_input_data;
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
255 src->resync_to_restart = jpeg_resync_to_restart; /* use default method */
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
256 src->term_source = term_source;
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
257 src->bytes_in_buffer = nbytes;
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
258 src->next_input_byte = (JOCTET*)buffer;
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
259 }
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
260
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
261
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
262 static gboolean image_loader_jpeg_load (gpointer loader, const guchar *buf, gsize count, GError **error)
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
263 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
264 ImageLoaderJpeg *lj = (ImageLoaderJpeg *) loader;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
265 struct jpeg_decompress_struct cinfo;
1904
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
266 struct jpeg_decompress_struct cinfo2;
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
267 guchar *dptr, *dptr2;
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
268 guint rowstride;
1908
b5b95dd93eea free mpo data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1906
diff changeset
269 guchar *stereo_buf2 = NULL;
b5b95dd93eea free mpo data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1906
diff changeset
270 guint stereo_length = 0;
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
271
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
272 struct error_handler_data jerr;
1908
b5b95dd93eea free mpo data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1906
diff changeset
273
b5b95dd93eea free mpo data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1906
diff changeset
274 lj->stereo = FALSE;
b5b95dd93eea free mpo data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1906
diff changeset
275
1903
16b0afb2347c added mpo parser
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1901
diff changeset
276 MPOData *mpo = jpeg_get_mpo_data(buf, count);
1908
b5b95dd93eea free mpo data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1906
diff changeset
277 if (mpo && mpo->num_images > 1)
b5b95dd93eea free mpo data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1906
diff changeset
278 {
1912
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
279 guint i;
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
280 gint idx1 = -1, idx2 = -1;
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
281 guint num2 = 1;
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
282
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
283 for (i = 0; i < mpo->num_images; i++)
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
284 {
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
285 if (mpo->images[i].type_code == 0x20002)
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
286 {
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
287 if (mpo->images[i].MPIndividualNum == 1)
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
288 {
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
289 idx1 = i;
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
290 }
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
291 else if (mpo->images[i].MPIndividualNum > num2)
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
292 {
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
293 idx2 = i;
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
294 num2 = mpo->images[i].MPIndividualNum;
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
295 }
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
296 }
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
297 }
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
298
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
299 if (idx1 >= 0 && idx2 >= 0)
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
300 {
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
301 lj->stereo = TRUE;
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
302 stereo_buf2 = (unsigned char *)buf + mpo->images[idx2].offset;
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
303 stereo_length = mpo->images[idx2].length;
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
304 buf = (unsigned char *)buf + mpo->images[idx1].offset;
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
305 count = mpo->images[idx1].length;
4417578c55f9 improved mpo parser, consider individual image type code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1911
diff changeset
306 }
1908
b5b95dd93eea free mpo data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1906
diff changeset
307 }
b5b95dd93eea free mpo data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1906
diff changeset
308 jpeg_mpo_data_free(mpo);
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
309
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
310 /* setup error handler */
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
311 cinfo.err = jpeg_std_error (&jerr.pub);
1906
dc0a62722612 store stereo flag in loader data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1904
diff changeset
312 if (lj->stereo) cinfo2.err = jpeg_std_error (&jerr.pub);
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
313 jerr.pub.error_exit = fatal_error_handler;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
314 jerr.pub.output_message = output_message_handler;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
315
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
316 jerr.error = error;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
317
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
318
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
319 if (setjmp(jerr.setjmp_buffer))
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
320 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
321 /* If we get here, the JPEG code has signaled an error.
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
322 * We need to clean up the JPEG object, close the input file, and return.
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
323 */
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
324 jpeg_destroy_decompress(&cinfo);
1906
dc0a62722612 store stereo flag in loader data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1904
diff changeset
325 if (lj->stereo) jpeg_destroy_decompress(&cinfo2);
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
326 return FALSE;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
327 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
328
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
329 jpeg_create_decompress(&cinfo);
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
330
1911
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
331 set_mem_src(&cinfo, (unsigned char *)buf, count);
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
332
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
333
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
334 jpeg_read_header(&cinfo, TRUE);
1904
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
335
1906
dc0a62722612 store stereo flag in loader data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1904
diff changeset
336 if (lj->stereo)
1904
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
337 {
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
338 jpeg_create_decompress(&cinfo2);
1911
225b72ae0482 fixed to compile with other libjpeg versions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
339 set_mem_src(&cinfo2, stereo_buf2, stereo_length);
1904
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
340 jpeg_read_header(&cinfo2, TRUE);
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
341
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
342 if (cinfo.image_width != cinfo2.image_width ||
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
343 cinfo.image_height != cinfo2.image_height)
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
344 {
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
345 DEBUG_1("stereo data with different size");
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
346 jpeg_destroy_decompress(&cinfo2);
1906
dc0a62722612 store stereo flag in loader data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1904
diff changeset
347 lj->stereo = FALSE;
1904
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
348 }
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
349 }
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
350
1904
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
351
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
352
1906
dc0a62722612 store stereo flag in loader data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1904
diff changeset
353 lj->requested_width = lj->stereo ? cinfo.image_width * 2: cinfo.image_width;
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
354 lj->requested_height = cinfo.image_height;
1904
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
355 lj->size_cb(loader, lj->requested_width, lj->requested_height, lj->data);
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
356
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
357 cinfo.scale_num = 1;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
358 for (cinfo.scale_denom = 2; cinfo.scale_denom <= 8; cinfo.scale_denom *= 2) {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
359 jpeg_calc_output_dimensions(&cinfo);
1906
dc0a62722612 store stereo flag in loader data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1904
diff changeset
360 if (cinfo.output_width < (lj->stereo ? lj->requested_width / 2 : lj->requested_width) || cinfo.output_height < lj->requested_height) {
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
361 cinfo.scale_denom /= 2;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
362 break;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
363 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
364 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
365 jpeg_calc_output_dimensions(&cinfo);
1906
dc0a62722612 store stereo flag in loader data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1904
diff changeset
366 if (lj->stereo)
1904
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
367 {
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
368 cinfo2.scale_num = cinfo.scale_num;
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
369 cinfo2.scale_denom = cinfo.scale_denom;
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
370 jpeg_calc_output_dimensions(&cinfo2);
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
371 jpeg_start_decompress(&cinfo2);
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
372 }
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
373
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
374
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
375 jpeg_start_decompress(&cinfo);
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
376
1904
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
377
1906
dc0a62722612 store stereo flag in loader data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1904
diff changeset
378 if (lj->stereo)
1904
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
379 {
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
380 if (cinfo.output_width != cinfo2.output_width ||
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
381 cinfo.output_height != cinfo2.output_height ||
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
382 cinfo.out_color_components != cinfo2.out_color_components)
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
383 {
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
384 DEBUG_1("stereo data with different output size");
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
385 jpeg_destroy_decompress(&cinfo2);
1906
dc0a62722612 store stereo flag in loader data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1904
diff changeset
386 lj->stereo = FALSE;
1904
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
387 }
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
388 }
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
389
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
390
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
391 lj->pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
392 cinfo.out_color_components == 4 ? TRUE : FALSE,
1906
dc0a62722612 store stereo flag in loader data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1904
diff changeset
393 8, lj->stereo ? cinfo.output_width * 2: cinfo.output_width, cinfo.output_height);
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
394
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
395 if (!lj->pixbuf)
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
396 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
397 jpeg_destroy_decompress (&cinfo);
1906
dc0a62722612 store stereo flag in loader data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1904
diff changeset
398 if (lj->stereo) jpeg_destroy_decompress (&cinfo2);
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
399 return 0;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
400 }
1906
dc0a62722612 store stereo flag in loader data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1904
diff changeset
401 if (lj->stereo) g_object_set_data(G_OBJECT(lj->pixbuf), "stereo_data", GINT_TO_POINTER(STEREO_PIXBUF_CROSS));
1904
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
402 lj->area_prepared_cb(loader, lj->data);
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
403
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
404 rowstride = gdk_pixbuf_get_rowstride(lj->pixbuf);
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
405 dptr = gdk_pixbuf_get_pixels(lj->pixbuf);
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
406 dptr2 = gdk_pixbuf_get_pixels(lj->pixbuf) + ((cinfo.out_color_components == 4) ? 4 * cinfo.output_width : 3 * cinfo.output_width);
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
407
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
408
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
409 while (cinfo.output_scanline < cinfo.output_height && !lj->abort)
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
410 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
411 guint scanline = cinfo.output_scanline;
1904
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
412 image_loader_jpeg_read_scanline(&cinfo, &dptr, rowstride);
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
413 lj->area_updated_cb(loader, 0, scanline, cinfo.output_width, cinfo.rec_outbuf_height, lj->data);
1906
dc0a62722612 store stereo flag in loader data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1904
diff changeset
414 if (lj->stereo)
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
415 {
1904
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
416 guint scanline = cinfo2.output_scanline;
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
417 image_loader_jpeg_read_scanline(&cinfo2, &dptr2, rowstride);
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
418 lj->area_updated_cb(loader, cinfo.output_width, scanline, cinfo2.output_width, cinfo2.rec_outbuf_height, lj->data);
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
419 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
420 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
421
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
422 jpeg_finish_decompress(&cinfo);
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
423 jpeg_destroy_decompress(&cinfo);
1906
dc0a62722612 store stereo flag in loader data
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1904
diff changeset
424 if (lj->stereo)
1904
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
425 {
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
426 jpeg_finish_decompress(&cinfo);
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
427 jpeg_destroy_decompress(&cinfo);
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
428 }
fec3a31bc978 load mpo files as SBS
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1903
diff changeset
429
1901
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
430 return TRUE;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
431 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
432
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
433 static void image_loader_jpeg_set_size(gpointer loader, int width, int height)
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
434 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
435 ImageLoaderJpeg *lj = (ImageLoaderJpeg *) loader;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
436 lj->requested_width = width;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
437 lj->requested_height = height;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
438 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
439
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
440 static GdkPixbuf* image_loader_jpeg_get_pixbuf(gpointer loader)
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
441 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
442 ImageLoaderJpeg *lj = (ImageLoaderJpeg *) loader;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
443 return lj->pixbuf;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
444 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
445
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
446 static gchar* image_loader_jpeg_get_format_name(gpointer loader)
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
447 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
448 return g_strdup("jpeg");
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
449 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
450 static gchar** image_loader_jpeg_get_format_mime_types(gpointer loader)
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
451 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
452 static gchar *mime[] = {"image/jpeg", NULL};
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
453 return g_strdupv(mime);
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
454 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
455
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
456 static gboolean image_loader_jpeg_close(gpointer loader, GError **error)
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
457 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
458 return TRUE;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
459 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
460
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
461 static void image_loader_jpeg_abort(gpointer loader)
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
462 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
463 ImageLoaderJpeg *lj = (ImageLoaderJpeg *) loader;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
464 lj->abort = TRUE;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
465 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
466
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
467 static void image_loader_jpeg_free(gpointer loader)
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
468 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
469 ImageLoaderJpeg *lj = (ImageLoaderJpeg *) loader;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
470 if (lj->pixbuf) g_object_unref(lj->pixbuf);
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
471 g_free(lj);
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
472 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
473
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
474
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
475 void image_loader_backend_set_jpeg(ImageLoaderBackend *funcs)
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
476 {
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
477 funcs->loader_new = image_loader_jpeg_new;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
478 funcs->set_size = image_loader_jpeg_set_size;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
479 funcs->load = image_loader_jpeg_load;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
480 funcs->write = NULL;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
481 funcs->get_pixbuf = image_loader_jpeg_get_pixbuf;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
482 funcs->close = image_loader_jpeg_close;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
483 funcs->abort = image_loader_jpeg_abort;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
484 funcs->free = image_loader_jpeg_free;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
485
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
486 funcs->get_format_name = image_loader_jpeg_get_format_name;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
487 funcs->get_format_mime_types = image_loader_jpeg_get_format_mime_types;
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
488 }
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
489
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
490
d21859e612de added custom jpeg loader
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
491