Mercurial > hg > forks > geeqie
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 |
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 | 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 | 269 guchar *stereo_buf2 = NULL; |
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 | 273 |
274 lj->stereo = FALSE; | |
275 | |
1903 | 276 MPOData *mpo = jpeg_get_mpo_data(buf, count); |
1908 | 277 if (mpo && mpo->num_images > 1) |
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 | 307 } |
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 |