Contents of /trunk/libjpeg/patches/libjpeg-6b-debian-extras.patch
Parent Directory | Revision Log
Revision 144 -
(show annotations)
(download)
Tue May 8 20:06:05 2007 UTC (17 years, 4 months ago) by niro
File size: 14166 byte(s)
Tue May 8 20:06:05 2007 UTC (17 years, 4 months ago) by niro
File size: 14166 byte(s)
-import
1 | diff -Naur jpeg-6b.orig/extra/exifautotran jpeg-6b/extra/exifautotran |
2 | --- jpeg-6b.orig/extra/exifautotran 1970-01-01 01:00:00.000000000 +0100 |
3 | +++ jpeg-6b/extra/exifautotran 2006-06-11 15:10:54.000000000 +0200 |
4 | @@ -0,0 +1,50 @@ |
5 | +#!/bin/sh |
6 | +# exifautotran [list of files] |
7 | +# |
8 | +# Transforms Exif files so that Orientation becomes 1 |
9 | +# |
10 | + |
11 | +trap "if test -n \"\$tempfile\"; then rm -f \"\$tempfile\"; fi" INT QUIT TERM |
12 | + |
13 | +for i |
14 | +do |
15 | + case $i in |
16 | + -v|--version) echo "exifautotran"; exit 0;; |
17 | + -h|--help) |
18 | + cat <<EOF |
19 | +exifautotran [list of files] |
20 | + |
21 | +Transforms Exif files so that Orientation becomes 1 |
22 | +EOF |
23 | + exit 0;; |
24 | + esac |
25 | + |
26 | + case `jpegexiforient -n "$i"` in |
27 | + 1) transform="";; |
28 | + 2) transform="-flip horizontal";; |
29 | + 3) transform="-rotate 180";; |
30 | + 4) transform="-flip vertical";; |
31 | + 5) transform="-transpose";; |
32 | + 6) transform="-rotate 90";; |
33 | + 7) transform="-transverse";; |
34 | + 8) transform="-rotate 270";; |
35 | + *) transform="";; |
36 | + esac |
37 | + if test -n "$transform"; then |
38 | + tempfile=`mktemp`; |
39 | + if test "$?" -ne "0"; then |
40 | + echo "Failed to create temporary file" >&2 |
41 | + exit 1; |
42 | + fi |
43 | + echo Executing: jpegtran -copy all $transform $i >&2 |
44 | + jpegtran -copy all $transform "$i" > $tempfile |
45 | + if test $? -ne 0; then |
46 | + echo Error while transforming $i - skipped. >&2 |
47 | + rm "$tempfile" |
48 | + else |
49 | + rm "$i" |
50 | + mv "$tempfile" "$i" |
51 | + jpegexiforient -1 "$i" > /dev/null |
52 | + fi |
53 | + fi |
54 | +done |
55 | diff -Naur jpeg-6b.orig/extra/exifautotran.1 jpeg-6b/extra/exifautotran.1 |
56 | --- jpeg-6b.orig/extra/exifautotran.1 1970-01-01 01:00:00.000000000 +0100 |
57 | +++ jpeg-6b/extra/exifautotran.1 2006-06-11 15:10:54.000000000 +0200 |
58 | @@ -0,0 +1,13 @@ |
59 | +.TH EXIFAUTOTRAN "1" "February 2005" "exifautotran" "User Commands" |
60 | +.SH NAME |
61 | +exifautotran \- Transforms Exif files so that Orientation becomes 1 |
62 | +.SH DESCRIPTION |
63 | +exifautotran [list of files] |
64 | +.PP |
65 | +Take a list of files as input and transform then in place so that the |
66 | +Orientation becomes 1. |
67 | +.SH "AUTHOR" |
68 | + Guido Vollbeding <guido@jpegclub.org> |
69 | +.SH "SEE ALSO" |
70 | +.BR jpegtran(1) |
71 | +.BR jpegexiforient(1) |
72 | diff -Naur jpeg-6b.orig/extra/jpegexiforient.1 jpeg-6b/extra/jpegexiforient.1 |
73 | --- jpeg-6b.orig/extra/jpegexiforient.1 1970-01-01 01:00:00.000000000 +0100 |
74 | +++ jpeg-6b/extra/jpegexiforient.1 2006-06-11 15:10:54.000000000 +0200 |
75 | @@ -0,0 +1,69 @@ |
76 | +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.35. |
77 | +.TH JPEGEXIFORIENT "1" "February 2005" "jpegexiforient" "User Commands" |
78 | +.SH NAME |
79 | +jpegexiforient \- reads or writes the Exif Orientation Tag |
80 | +.SH SYNOPSIS |
81 | +.B jpegexiforient |
82 | +[\fIswitches\fR] \fIjpegfile\fR |
83 | +.SH DESCRIPTION |
84 | + |
85 | + This is a utility program to get and set the Exif Orientation Tag. |
86 | + It can be used together with jpegtran in scripts for automatic |
87 | + orientation correction of digital camera pictures. |
88 | + |
89 | + The Exif orientation value gives the orientation of the camera |
90 | + relative to the scene when the image was captured. The relation |
91 | + of the '0th row' and '0th column' to visual position is shown as |
92 | + below. |
93 | + |
94 | + Value | 0th Row | 0th Column |
95 | + ------+-------------+----------- |
96 | + 1 | top | left side |
97 | + 2 | top | rigth side |
98 | + 3 | bottom | rigth side |
99 | + 4 | bottom | left side |
100 | + 5 | left side | top |
101 | + 6 | right side | top |
102 | + 7 | right side | bottom |
103 | + 8 | left side | bottom |
104 | + |
105 | + For convenience, here is what the letter F would look like if it were |
106 | + tagged correctly and displayed by a program that ignores the orientation |
107 | + tag: |
108 | + |
109 | + 1 2 3 4 |
110 | + |
111 | + 888888 888888 88 88 |
112 | + 88 88 88 88 |
113 | + 8888 8888 8888 8888 |
114 | + 88 88 88 88 |
115 | + 88 88 888888 888888 |
116 | + |
117 | + 5 6 7 8 |
118 | + |
119 | + 8888888888 88 88 8888888888 |
120 | + 88 88 88 88 88 88 88 88 |
121 | + 88 8888888888 8888888888 88 |
122 | + |
123 | +jpegexiforient output the Exif Orientation Tag in a JPEG Exif file. |
124 | +With the options -1 .. -8, it can also be used to set the tag. |
125 | + |
126 | +.SS "OPTIONS" |
127 | +.TP |
128 | +\fB\-\-help\fR |
129 | +display this help and exit |
130 | +.TP |
131 | +\fB\-\-version\fR |
132 | +output version information and exit |
133 | +.TP |
134 | +\fB\-n\fR |
135 | +Do not output the trailing newline |
136 | +.TP |
137 | +\fB\-1\fR .. \fB\-8\fR |
138 | +Set orientation value 1 .. 8 |
139 | +.SH "AUTHOR" |
140 | + Guido Vollbeding <guido@jpegclub.org> |
141 | +.SH "SEE ALSO" |
142 | +.BR jpegtran(1) |
143 | +.BR exifautotran(1) |
144 | + |
145 | diff -Naur jpeg-6b.orig/extra/jpegexiforient.c jpeg-6b/extra/jpegexiforient.c |
146 | --- jpeg-6b.orig/extra/jpegexiforient.c 1970-01-01 01:00:00.000000000 +0100 |
147 | +++ jpeg-6b/extra/jpegexiforient.c 2006-06-11 15:10:54.000000000 +0200 |
148 | @@ -0,0 +1,299 @@ |
149 | +/* |
150 | + * jpegexiforient.c |
151 | + * |
152 | + * This is a utility program to get and set the Exif Orientation Tag. |
153 | + * It can be used together with jpegtran in scripts for automatic |
154 | + * orientation correction of digital camera pictures. |
155 | + * |
156 | + * The Exif orientation value gives the orientation of the camera |
157 | + * relative to the scene when the image was captured. The relation |
158 | + * of the '0th row' and '0th column' to visual position is shown as |
159 | + * below. |
160 | + * |
161 | + * Value | 0th Row | 0th Column |
162 | + * ------+-------------+----------- |
163 | + * 1 | top | left side |
164 | + * 2 | top | rigth side |
165 | + * 3 | bottom | rigth side |
166 | + * 4 | bottom | left side |
167 | + * 5 | left side | top |
168 | + * 6 | right side | top |
169 | + * 7 | right side | bottom |
170 | + * 8 | left side | bottom |
171 | + * |
172 | + * For convenience, here is what the letter F would look like if it were |
173 | + * tagged correctly and displayed by a program that ignores the orientation |
174 | + * tag: |
175 | + * |
176 | + * 1 2 3 4 5 6 7 8 |
177 | + * |
178 | + * 888888 888888 88 88 8888888888 88 88 8888888888 |
179 | + * 88 88 88 88 88 88 88 88 88 88 88 88 |
180 | + * 8888 8888 8888 8888 88 8888888888 8888888888 88 |
181 | + * 88 88 88 88 |
182 | + * 88 88 888888 888888 |
183 | + * |
184 | + */ |
185 | + |
186 | +#include <stdio.h> |
187 | +#include <stdlib.h> |
188 | + |
189 | +static FILE * myfile; /* My JPEG file */ |
190 | + |
191 | +static unsigned char exif_data[65536L]; |
192 | + |
193 | +/* Return next input byte, or EOF if no more */ |
194 | +#define NEXTBYTE() getc(myfile) |
195 | + |
196 | +/* Error exit handler */ |
197 | +#define ERREXIT(msg) (exit(0)) |
198 | + |
199 | +/* Read one byte, testing for EOF */ |
200 | +static int |
201 | +read_1_byte (void) |
202 | +{ |
203 | + int c; |
204 | + |
205 | + c = NEXTBYTE(); |
206 | + if (c == EOF) |
207 | + ERREXIT("Premature EOF in JPEG file"); |
208 | + return c; |
209 | +} |
210 | + |
211 | +/* Read 2 bytes, convert to unsigned int */ |
212 | +/* All 2-byte quantities in JPEG markers are MSB first */ |
213 | +static unsigned int |
214 | +read_2_bytes (void) |
215 | +{ |
216 | + int c1, c2; |
217 | + |
218 | + c1 = NEXTBYTE(); |
219 | + if (c1 == EOF) |
220 | + ERREXIT("Premature EOF in JPEG file"); |
221 | + c2 = NEXTBYTE(); |
222 | + if (c2 == EOF) |
223 | + ERREXIT("Premature EOF in JPEG file"); |
224 | + return (((unsigned int) c1) << 8) + ((unsigned int) c2); |
225 | +} |
226 | + |
227 | +static const char * progname; /* program name for error messages */ |
228 | + |
229 | +static void |
230 | +usage (FILE *out) |
231 | +/* complain about bad command line */ |
232 | +{ |
233 | + fprintf(out, "jpegexiforient reads or writes the Exif Orientation Tag "); |
234 | + fprintf(out, "in a JPEG Exif file.\n"); |
235 | + |
236 | + fprintf(out, "Usage: %s [switches] jpegfile\n", progname); |
237 | + |
238 | + fprintf(out, "Switches:\n"); |
239 | + fprintf(out, " --help display this help and exit\n"); |
240 | + fprintf(out, " --version output version information and exit\n"); |
241 | + fprintf(out, " -n Do not output the trailing newline\n"); |
242 | + fprintf(out, " -1 .. -8 Set orientation value 1 .. 8\n"); |
243 | +} |
244 | + |
245 | +/* |
246 | + * The main program. |
247 | + */ |
248 | + |
249 | +int |
250 | +main (int argc, char **argv) |
251 | +{ |
252 | + int n_flag, set_flag; |
253 | + unsigned int length, i; |
254 | + int is_motorola; /* Flag for byte order */ |
255 | + unsigned int offset, number_of_tags, tagnum; |
256 | + |
257 | + progname = argv[0]; |
258 | + if (progname == NULL || progname[0] == 0) |
259 | + progname = "jpegexiforient"; /* in case C library doesn't provide it */ |
260 | + |
261 | + if (argc < 2) { usage(stderr); return 1; } |
262 | + |
263 | + n_flag = 0; set_flag = 0; |
264 | + |
265 | + i = 1; |
266 | + while (argv[i][0] == '-') { |
267 | + switch (argv[i][1]) { |
268 | + case '-': |
269 | + switch (argv[i][2]) { |
270 | + case 'h': usage(stdout); return 0; |
271 | + case 'v': fprintf(stdout,"jpegexiforient\n"); return 0; |
272 | + } |
273 | + case 'n': |
274 | + n_flag = 1; |
275 | + break; |
276 | + case '1': |
277 | + case '2': |
278 | + case '3': |
279 | + case '4': |
280 | + case '5': |
281 | + case '6': |
282 | + case '7': |
283 | + case '8': |
284 | + set_flag = argv[i][1] - '0'; |
285 | + break; |
286 | + default: |
287 | + usage(stderr); return 1; |
288 | + } |
289 | + if (++i >= argc) { usage(stderr); return 1; } |
290 | + } |
291 | + |
292 | + if (set_flag) { |
293 | + if ((myfile = fopen(argv[i], "rb+")) == NULL) { |
294 | + fprintf(stderr, "%s: can't open %s\n", progname, argv[i]); |
295 | + return 0; |
296 | + } |
297 | + } else { |
298 | + if ((myfile = fopen(argv[i], "rb")) == NULL) { |
299 | + fprintf(stderr, "%s: can't open %s\n", progname, argv[i]); |
300 | + return 0; |
301 | + } |
302 | + } |
303 | + |
304 | + /* Read File head, check for JPEG SOI + Exif APP1 */ |
305 | + for (i = 0; i < 4; i++) |
306 | + exif_data[i] = (unsigned char) read_1_byte(); |
307 | + if (exif_data[0] != 0xFF || |
308 | + exif_data[1] != 0xD8 || |
309 | + exif_data[2] != 0xFF || |
310 | + exif_data[3] != 0xE1) |
311 | + return 0; |
312 | + |
313 | + /* Get the marker parameter length count */ |
314 | + length = read_2_bytes(); |
315 | + /* Length includes itself, so must be at least 2 */ |
316 | + /* Following Exif data length must be at least 6 */ |
317 | + if (length < 8) |
318 | + return 0; |
319 | + length -= 8; |
320 | + /* Read Exif head, check for "Exif" */ |
321 | + for (i = 0; i < 6; i++) |
322 | + exif_data[i] = (unsigned char) read_1_byte(); |
323 | + if (exif_data[0] != 0x45 || |
324 | + exif_data[1] != 0x78 || |
325 | + exif_data[2] != 0x69 || |
326 | + exif_data[3] != 0x66 || |
327 | + exif_data[4] != 0 || |
328 | + exif_data[5] != 0) |
329 | + return 0; |
330 | + /* Read Exif body */ |
331 | + for (i = 0; i < length; i++) |
332 | + exif_data[i] = (unsigned char) read_1_byte(); |
333 | + |
334 | + if (length < 12) return 0; /* Length of an IFD entry */ |
335 | + |
336 | + /* Discover byte order */ |
337 | + if (exif_data[0] == 0x49 && exif_data[1] == 0x49) |
338 | + is_motorola = 0; |
339 | + else if (exif_data[0] == 0x4D && exif_data[1] == 0x4D) |
340 | + is_motorola = 1; |
341 | + else |
342 | + return 0; |
343 | + |
344 | + /* Check Tag Mark */ |
345 | + if (is_motorola) { |
346 | + if (exif_data[2] != 0) return 0; |
347 | + if (exif_data[3] != 0x2A) return 0; |
348 | + } else { |
349 | + if (exif_data[3] != 0) return 0; |
350 | + if (exif_data[2] != 0x2A) return 0; |
351 | + } |
352 | + |
353 | + /* Get first IFD offset (offset to IFD0) */ |
354 | + if (is_motorola) { |
355 | + if (exif_data[4] != 0) return 0; |
356 | + if (exif_data[5] != 0) return 0; |
357 | + offset = exif_data[6]; |
358 | + offset <<= 8; |
359 | + offset += exif_data[7]; |
360 | + } else { |
361 | + if (exif_data[7] != 0) return 0; |
362 | + if (exif_data[6] != 0) return 0; |
363 | + offset = exif_data[5]; |
364 | + offset <<= 8; |
365 | + offset += exif_data[4]; |
366 | + } |
367 | + if (offset > length - 2) return 0; /* check end of data segment */ |
368 | + |
369 | + /* Get the number of directory entries contained in this IFD */ |
370 | + if (is_motorola) { |
371 | + number_of_tags = exif_data[offset]; |
372 | + number_of_tags <<= 8; |
373 | + number_of_tags += exif_data[offset+1]; |
374 | + } else { |
375 | + number_of_tags = exif_data[offset+1]; |
376 | + number_of_tags <<= 8; |
377 | + number_of_tags += exif_data[offset]; |
378 | + } |
379 | + if (number_of_tags == 0) return 0; |
380 | + offset += 2; |
381 | + |
382 | + /* Search for Orientation Tag in IFD0 */ |
383 | + for (;;) { |
384 | + if (offset > length - 12) return 0; /* check end of data segment */ |
385 | + /* Get Tag number */ |
386 | + if (is_motorola) { |
387 | + tagnum = exif_data[offset]; |
388 | + tagnum <<= 8; |
389 | + tagnum += exif_data[offset+1]; |
390 | + } else { |
391 | + tagnum = exif_data[offset+1]; |
392 | + tagnum <<= 8; |
393 | + tagnum += exif_data[offset]; |
394 | + } |
395 | + if (tagnum == 0x0112) break; /* found Orientation Tag */ |
396 | + if (--number_of_tags == 0) return 0; |
397 | + offset += 12; |
398 | + } |
399 | + |
400 | + if (set_flag) { |
401 | + /* Set the Orientation value */ |
402 | + if (is_motorola) { |
403 | + exif_data[offset+2] = 0; /* Format = unsigned short (2 octets) */ |
404 | + exif_data[offset+3] = 3; |
405 | + exif_data[offset+4] = 0; /* Number Of Components = 1 */ |
406 | + exif_data[offset+5] = 0; |
407 | + exif_data[offset+6] = 0; |
408 | + exif_data[offset+7] = 1; |
409 | + exif_data[offset+8] = 0; |
410 | + exif_data[offset+9] = (unsigned char)set_flag; |
411 | + exif_data[offset+10] = 0; |
412 | + exif_data[offset+11] = 0; |
413 | + } else { |
414 | + exif_data[offset+2] = 3; /* Format = unsigned short (2 octets) */ |
415 | + exif_data[offset+3] = 0; |
416 | + exif_data[offset+4] = 1; /* Number Of Components = 1 */ |
417 | + exif_data[offset+5] = 0; |
418 | + exif_data[offset+6] = 0; |
419 | + exif_data[offset+7] = 0; |
420 | + exif_data[offset+8] = (unsigned char)set_flag; |
421 | + exif_data[offset+9] = 0; |
422 | + exif_data[offset+10] = 0; |
423 | + exif_data[offset+11] = 0; |
424 | + } |
425 | + fseek(myfile, (4 + 2 + 6 + 2) + offset, SEEK_SET); |
426 | + fwrite(exif_data + 2 + offset, 1, 10, myfile); |
427 | + } else { |
428 | + /* Get the Orientation value */ |
429 | + if (is_motorola) { |
430 | + if (exif_data[offset+8] != 0) return 0; |
431 | + set_flag = exif_data[offset+9]; |
432 | + } else { |
433 | + if (exif_data[offset+9] != 0) return 0; |
434 | + set_flag = exif_data[offset+8]; |
435 | + } |
436 | + if (set_flag > 8) return 0; |
437 | + } |
438 | + |
439 | + /* Write out Orientation value */ |
440 | + if (n_flag) |
441 | + printf("%c", '0' + set_flag); |
442 | + else |
443 | + printf("%c\n", '0' + set_flag); |
444 | + |
445 | + /* All done. */ |
446 | + return 0; |
447 | +} |
448 | diff -Naur jpeg-6b.orig/extra/Makefile jpeg-6b/extra/Makefile |
449 | --- jpeg-6b.orig/extra/Makefile 1970-01-01 01:00:00.000000000 +0100 |
450 | +++ jpeg-6b/extra/Makefile 2006-06-11 15:10:54.000000000 +0200 |
451 | @@ -0,0 +1,19 @@ |
452 | +CFLAGS = -O2 -Wall -g |
453 | +CC = cc |
454 | +INSTALL = install -m755 -o root -g root |
455 | +DESTDIR = |
456 | +prefix = /usr/local |
457 | +bindir = $(prefix)/bin |
458 | +mandir = $(prefix)/share/man/man1 |
459 | + |
460 | +all: jpegexiforient |
461 | + |
462 | +jpegexiforient: jpegexiforient.c |
463 | + $(CC) $(CFLAGS) -o jpegexiforient jpegexiforient.c |
464 | +clean: |
465 | + -rm -f jpegexiforient |
466 | +install: |
467 | + $(INSTALL) jpegexiforient $(DESTDIR)$(bindir) |
468 | + $(INSTALL) jpegexiforient.1 $(DESTDIR)$(mandir) |
469 | + $(INSTALL) exifautotran $(DESTDIR)$(bindir) |
470 | + $(INSTALL) exifautotran.1 $(DESTDIR)$(mandir) |