exiftool_vendored 12.55.0 → 12.56.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +19 -1
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +19 -19
- data/bin/arg_files/xmp2exif.args +4 -1
- data/bin/exiftool +25 -25
- data/bin/fmt_files/kml.fmt +3 -0
- data/bin/fmt_files/kml_track.fmt +3 -0
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +6 -4
- data/bin/lib/Image/ExifTool/Canon.pm +8 -2
- data/bin/lib/Image/ExifTool/Exif.pm +31 -2
- data/bin/lib/Image/ExifTool/FlashPix.pm +69 -8
- data/bin/lib/Image/ExifTool/FujiFilm.pm +2 -1
- data/bin/lib/Image/ExifTool/InfiRay.pm +227 -0
- data/bin/lib/Image/ExifTool/JPEG.pm +40 -6
- data/bin/lib/Image/ExifTool/Nikon.pm +158 -380
- data/bin/lib/Image/ExifTool/OpenEXR.pm +32 -15
- data/bin/lib/Image/ExifTool/PNG.pm +80 -2
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +23 -14
- data/bin/lib/Image/ExifTool/Real.pm +2 -2
- data/bin/lib/Image/ExifTool/Sony.pm +5 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4536 -4519
- data/bin/lib/Image/ExifTool/TagNames.pod +216 -14
- data/bin/lib/Image/ExifTool/VCard.pm +19 -5
- data/bin/lib/Image/ExifTool.pm +55 -14
- data/bin/lib/Image/ExifTool.pod +51 -50
- data/bin/perl-Image-ExifTool.spec +18 -18
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
@@ -4,6 +4,7 @@
|
|
4
4
|
# Description: Read OpenEXR meta information
|
5
5
|
#
|
6
6
|
# Revisions: 2011/12/10 - P. Harvey Created
|
7
|
+
# 2023/01/31 - PH Added support for multipart images
|
7
8
|
#
|
8
9
|
# References: 1) http://www.openexr.com/
|
9
10
|
#------------------------------------------------------------------------------
|
@@ -15,7 +16,7 @@ use vars qw($VERSION);
|
|
15
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
16
17
|
use Image::ExifTool::GPS;
|
17
18
|
|
18
|
-
$VERSION = '1.
|
19
|
+
$VERSION = '1.04';
|
19
20
|
|
20
21
|
# supported EXR value format types (other types are extracted as undef binary data)
|
21
22
|
my %formatType = (
|
@@ -47,14 +48,18 @@ my %formatType = (
|
|
47
48
|
%Image::ExifTool::OpenEXR::Main = (
|
48
49
|
GROUPS => { 2 => 'Image' },
|
49
50
|
NOTES => q{
|
50
|
-
Information extracted from EXR images.
|
51
|
-
|
51
|
+
Information extracted from EXR images. Use the ExtractEmbedded option to
|
52
|
+
extract information from all frames of a multipart image. See
|
53
|
+
L<http://www.openexr.com/> for the official specification.
|
52
54
|
},
|
53
|
-
_ver => { Name => 'EXRVersion' },
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
55
|
+
_ver => { Name => 'EXRVersion', Notes => 'low byte of Flags word' },
|
56
|
+
_flags => { Name => 'Flags',
|
57
|
+
PrintConv => { BITMASK => {
|
58
|
+
9 => 'Tiled',
|
59
|
+
10 => 'Long names',
|
60
|
+
11 => 'Deep data',
|
61
|
+
12 => 'Multipart',
|
62
|
+
}},
|
58
63
|
},
|
59
64
|
adoptedNeutral => { },
|
60
65
|
altitude => {
|
@@ -145,6 +150,10 @@ my %formatType = (
|
|
145
150
|
worldToNDC => { },
|
146
151
|
wrapmodes => { Name => 'WrapModes' },
|
147
152
|
xDensity => { Name => 'XResolution' },
|
153
|
+
name => { },
|
154
|
+
type => { },
|
155
|
+
version => { },
|
156
|
+
chunkCount => { },
|
148
157
|
# also observed:
|
149
158
|
# ilut
|
150
159
|
);
|
@@ -169,15 +178,22 @@ sub ProcessEXR($$)
|
|
169
178
|
my $tagTablePtr = GetTagTable('Image::ExifTool::OpenEXR::Main');
|
170
179
|
|
171
180
|
# extract information from header
|
172
|
-
my $
|
173
|
-
$et->HandleTag($tagTablePtr, '_ver', $
|
174
|
-
$et->HandleTag($tagTablePtr, '
|
175
|
-
my $maxLen = ($
|
181
|
+
my $flags = unpack('x4V', $buff);
|
182
|
+
$et->HandleTag($tagTablePtr, '_ver', $flags & 0xff);
|
183
|
+
$et->HandleTag($tagTablePtr, '_flags', $flags & 0xffffff00);
|
184
|
+
my $maxLen = ($flags & 0x400) ? 255 : 31;
|
185
|
+
my $multi = $flags & 0x1000;
|
176
186
|
|
177
187
|
# extract attributes
|
178
188
|
for (;;) {
|
179
|
-
$raf->Read($buff,
|
180
|
-
|
189
|
+
$raf->Read($buff, ($maxLen + 1) * 2 + 5) or last;
|
190
|
+
if ($buff =~ /^\0/) {
|
191
|
+
last unless $multi and $et->Options('ExtractEmbedded');
|
192
|
+
# remove null and process the next frame header as a sub-document
|
193
|
+
# (second null is end of all headers)
|
194
|
+
last if $buff =~ s/^(\0+)// and length($1) > 1;
|
195
|
+
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
196
|
+
}
|
181
197
|
unless ($buff =~ /^([^\0]{1,$maxLen})\0([^\0]{1,$maxLen})\0(.{4})/sg) {
|
182
198
|
$et->Warn('EXR format error');
|
183
199
|
last;
|
@@ -261,7 +277,7 @@ sub ProcessEXR($$)
|
|
261
277
|
|
262
278
|
# take image dimensions from dataWindow (with displayWindow as backup)
|
263
279
|
if (($tag eq 'dataWindow' or (not $dim and $tag eq 'displayWindow')) and
|
264
|
-
$val =~ /^(-?\d+) (-?\d+) (-?\d+) (-?\d+)$/)
|
280
|
+
$val =~ /^(-?\d+) (-?\d+) (-?\d+) (-?\d+)$/ and not $$et{DOC_NUM})
|
265
281
|
{
|
266
282
|
$dim = [$3 - $1 + 1, $4 - $2 + 1];
|
267
283
|
}
|
@@ -278,6 +294,7 @@ sub ProcessEXR($$)
|
|
278
294
|
}
|
279
295
|
$et->FoundTag($tagInfo, $val);
|
280
296
|
}
|
297
|
+
delete $$et{DOC_NUM};
|
281
298
|
if ($dim) {
|
282
299
|
$et->FoundTag('ImageWidth', $$dim[0]);
|
283
300
|
$et->FoundTag('ImageHeight', $$dim[1]);
|
@@ -36,7 +36,7 @@ use strict;
|
|
36
36
|
use vars qw($VERSION $AUTOLOAD %stdCase);
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
38
38
|
|
39
|
-
$VERSION = '1.
|
39
|
+
$VERSION = '1.62';
|
40
40
|
|
41
41
|
sub ProcessPNG_tEXt($$$);
|
42
42
|
sub ProcessPNG_iTXt($$$);
|
@@ -343,7 +343,12 @@ my %noLeapFrog = ( SAVE => 1, SEEK => 1, IHDR => 1, JHDR => 1, IEND => 1, MEND =
|
|
343
343
|
Name => 'JUMBF',
|
344
344
|
SubDirectory => { TagTable => 'Image::ExifTool::Jpeg2000::Main' },
|
345
345
|
},
|
346
|
-
|
346
|
+
cICP => {
|
347
|
+
Name => 'CICodePoints',
|
348
|
+
SubDirectory => {
|
349
|
+
TagTable => 'Image::ExifTool::PNG::CICodePoints',
|
350
|
+
},
|
351
|
+
},
|
347
352
|
);
|
348
353
|
|
349
354
|
# PNG IHDR chunk
|
@@ -428,6 +433,79 @@ my %noLeapFrog = ( SAVE => 1, SEEK => 1, IHDR => 1, JHDR => 1, IEND => 1, MEND =
|
|
428
433
|
},
|
429
434
|
);
|
430
435
|
|
436
|
+
# PNG cICP chunk
|
437
|
+
%Image::ExifTool::PNG::CICodePoints = (
|
438
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
439
|
+
GROUPS => { 1 => 'PNG-cICP', 2 => 'Image' },
|
440
|
+
NOTES => q{
|
441
|
+
These tags are found in the PNG cICP chunk and belong to the PNG-cICP family
|
442
|
+
1 group.
|
443
|
+
},
|
444
|
+
# (same as tags in QuickTime::ColorRep)
|
445
|
+
0 => {
|
446
|
+
Name => 'ColorPrimaries',
|
447
|
+
PrintConv => {
|
448
|
+
1 => 'BT.709',
|
449
|
+
2 => 'Unspecified',
|
450
|
+
4 => 'BT.470 System M (historical)',
|
451
|
+
5 => 'BT.470 System B, G (historical)',
|
452
|
+
6 => 'BT.601',
|
453
|
+
7 => 'SMPTE 240',
|
454
|
+
8 => 'Generic film (color filters using illuminant C)',
|
455
|
+
9 => 'BT.2020, BT.2100',
|
456
|
+
10 => 'SMPTE 428 (CIE 1921 XYZ)',
|
457
|
+
11 => 'SMPTE RP 431-2',
|
458
|
+
12 => 'SMPTE EG 432-1',
|
459
|
+
22 => 'EBU Tech. 3213-E',
|
460
|
+
},
|
461
|
+
},
|
462
|
+
1 => {
|
463
|
+
Name => 'TransferCharacteristics',
|
464
|
+
PrintConv => {
|
465
|
+
0 => 'For future use (0)',
|
466
|
+
1 => 'BT.709',
|
467
|
+
2 => 'Unspecified',
|
468
|
+
3 => 'For future use (3)',
|
469
|
+
4 => 'BT.470 System M (historical)',
|
470
|
+
5 => 'BT.470 System B, G (historical)',
|
471
|
+
6 => 'BT.601',
|
472
|
+
7 => 'SMPTE 240 M',
|
473
|
+
8 => 'Linear',
|
474
|
+
9 => 'Logarithmic (100 : 1 range)',
|
475
|
+
10 => 'Logarithmic (100 * Sqrt(10) : 1 range)',
|
476
|
+
11 => 'IEC 61966-2-4',
|
477
|
+
12 => 'BT.1361',
|
478
|
+
13 => 'sRGB or sYCC',
|
479
|
+
14 => 'BT.2020 10-bit systems',
|
480
|
+
15 => 'BT.2020 12-bit systems',
|
481
|
+
16 => 'SMPTE ST 2084, ITU BT.2100 PQ',
|
482
|
+
17 => 'SMPTE ST 428',
|
483
|
+
18 => 'BT.2100 HLG, ARIB STD-B67',
|
484
|
+
},
|
485
|
+
},
|
486
|
+
2 => {
|
487
|
+
Name => 'MatrixCoefficients',
|
488
|
+
PrintConv => {
|
489
|
+
0 => 'Identity matrix',
|
490
|
+
1 => 'BT.709',
|
491
|
+
2 => 'Unspecified',
|
492
|
+
3 => 'For future use (3)',
|
493
|
+
4 => 'US FCC 73.628',
|
494
|
+
5 => 'BT.470 System B, G (historical)',
|
495
|
+
6 => 'BT.601',
|
496
|
+
7 => 'SMPTE 240 M',
|
497
|
+
8 => 'YCgCo',
|
498
|
+
9 => 'BT.2020 non-constant luminance, BT.2100 YCbCr',
|
499
|
+
10 => 'BT.2020 constant luminance',
|
500
|
+
11 => 'SMPTE ST 2085 YDzDx',
|
501
|
+
12 => 'Chromaticity-derived non-constant luminance',
|
502
|
+
13 => 'Chromaticity-derived constant luminance',
|
503
|
+
14 => 'BT.2100 ICtCp',
|
504
|
+
},
|
505
|
+
},
|
506
|
+
3 => 'VideoFullRangeFlag',
|
507
|
+
);
|
508
|
+
|
431
509
|
# PNG sCAL chunk
|
432
510
|
%Image::ExifTool::PNG::SubjectScale = (
|
433
511
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
@@ -81,12 +81,15 @@ my %processByMetaFormat = (
|
|
81
81
|
ctbx => 1, # ('marl' in GM videos)
|
82
82
|
);
|
83
83
|
|
84
|
-
# data lengths for each INSV record type
|
84
|
+
# data lengths for each INSV/INSP record type
|
85
85
|
my %insvDataLen = (
|
86
|
+
0x200 => 0, # PreivewImage (any size) (a duplicate of PreviewImage in APP2 of INSP files)
|
86
87
|
0x300 => 0, # accelerometer (could be either 20 or 56 bytes)
|
87
88
|
0x400 => 16, # exposure (ref 6)
|
88
89
|
0x600 => 8, # timestamps (ref 6)
|
89
90
|
0x700 => 53, # GPS
|
91
|
+
# 0x900 => 48, # ? (Insta360 X3)
|
92
|
+
# 0xb00 => 10, # ? (Insta360 X3)
|
90
93
|
);
|
91
94
|
|
92
95
|
# limit the default amount of data we read for some record types
|
@@ -2758,7 +2761,6 @@ sub ProcessInsta360($;$)
|
|
2758
2761
|
my ($id, $len) = unpack('vV', $buff);
|
2759
2762
|
($epos -= $len) + $trailerLen < 0 and last;
|
2760
2763
|
$raf->Seek($epos, 2) or last;
|
2761
|
-
my $dlen = $insvDataLen{$id};
|
2762
2764
|
if ($verbose) {
|
2763
2765
|
$et->VPrint(0, sprintf("Insta360 Record 0x%x (offset 0x%x, %d bytes):\n", $id, $fileEnd + $epos, $len));
|
2764
2766
|
}
|
@@ -2771,20 +2773,25 @@ sub ProcessInsta360($;$)
|
|
2771
2773
|
# 2. 20 byte records
|
2772
2774
|
# 0000: c1 d8 d9 0b 00 00 00 00 f5 83 14 80 df 7f fe 7f [................]
|
2773
2775
|
# 0010: fe 7f 01 80
|
2774
|
-
|
2775
|
-
|
2776
|
-
|
2777
|
-
|
2778
|
-
|
2779
|
-
|
2780
|
-
|
2781
|
-
|
2782
|
-
|
2783
|
-
|
2784
|
-
|
2776
|
+
my $dlen = $insvDataLen{$id};
|
2777
|
+
if (defined $dlen and not $dlen) {
|
2778
|
+
if ($id == 0x300) {
|
2779
|
+
if ($len % 20 and not $len % 56) {
|
2780
|
+
$dlen = 56;
|
2781
|
+
} elsif ($len % 56 and not $len % 20) {
|
2782
|
+
$dlen = 20;
|
2783
|
+
} else {
|
2784
|
+
if ($raf->Read($buff, 20) == 20) {
|
2785
|
+
if (substr($buff, 16, 3) eq "\0\0\0") {
|
2786
|
+
$dlen = 56;
|
2787
|
+
} else {
|
2788
|
+
$dlen = 20;
|
2789
|
+
}
|
2785
2790
|
}
|
2791
|
+
$raf->Seek($epos, 2) or last;
|
2786
2792
|
}
|
2787
|
-
|
2793
|
+
} elsif ($id == 0x200) {
|
2794
|
+
$dlen = $len;
|
2788
2795
|
}
|
2789
2796
|
}
|
2790
2797
|
# limit the number of records we read if necessary
|
@@ -2798,6 +2805,8 @@ sub ProcessInsta360($;$)
|
|
2798
2805
|
if ($dlen) {
|
2799
2806
|
if ($len % $dlen) {
|
2800
2807
|
$et->Warn(sprintf('Unexpected Insta360 record 0x%x length',$id));
|
2808
|
+
} elsif ($id == 0x200) {
|
2809
|
+
$et->FoundTag(PreviewImage => $buff);
|
2801
2810
|
} elsif ($id == 0x300) {
|
2802
2811
|
for ($p=0; $p<$len; $p+=$dlen) {
|
2803
2812
|
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
@@ -16,7 +16,7 @@ use vars qw($VERSION);
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
17
17
|
use Image::ExifTool::Canon;
|
18
18
|
|
19
|
-
$VERSION = '1.
|
19
|
+
$VERSION = '1.07';
|
20
20
|
|
21
21
|
sub ProcessRealMeta($$$);
|
22
22
|
sub ProcessRealProperties($$$);
|
@@ -608,7 +608,7 @@ sub ProcessReal($$)
|
|
608
608
|
} else {
|
609
609
|
last if $tag eq 'DATA'; # stop normal parsing at DATA tag
|
610
610
|
}
|
611
|
-
if ($size & 0x80000000) {
|
611
|
+
if ($size & 0x80000000 or $size < 10) {
|
612
612
|
$et->Warn('Bad chunk header');
|
613
613
|
last;
|
614
614
|
}
|
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
34
34
|
use Image::ExifTool::Exif;
|
35
35
|
use Image::ExifTool::Minolta;
|
36
36
|
|
37
|
-
$VERSION = '3.
|
37
|
+
$VERSION = '3.57';
|
38
38
|
|
39
39
|
sub ProcessSRF($$$);
|
40
40
|
sub ProcessSR2($$$);
|
@@ -160,6 +160,7 @@ sub PrintInvLensSpec($;$$);
|
|
160
160
|
32875 => 'Sony FE 24-70mm F2.8 GM II', #JR
|
161
161
|
32876 => 'Sony E 11mm F1.8', #JR
|
162
162
|
32877 => 'Sony E 15mm F1.4 G', #JR
|
163
|
+
32878 => 'Sony FE 20-70mm F4 G', #JR
|
163
164
|
|
164
165
|
# (comment this out so LensID will report the LensModel, which is more useful)
|
165
166
|
# 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
|
@@ -191,6 +192,7 @@ sub PrintInvLensSpec($;$$);
|
|
191
192
|
49235 => 'Zeiss Loxia 85mm F2.4', #JR
|
192
193
|
49236 => 'Zeiss Loxia 25mm F2.4', #JR
|
193
194
|
|
195
|
+
49456 => 'Tamron E 18-200mm F3.5-6.3 Di III VC', #FrancoisPiette
|
194
196
|
49457 => 'Tamron 28-75mm F2.8 Di III RXD', #JR (Model A036)
|
195
197
|
49458 => 'Tamron 17-28mm F2.8 Di III RXD', #JR (Model A046)
|
196
198
|
49459 => 'Tamron 35mm F2.8 Di III OSD M1:2', #IB (Model F053)
|
@@ -256,6 +258,8 @@ sub PrintInvLensSpec($;$$);
|
|
256
258
|
50533 => 'Sigma 16-28mm F2.8 DG DN | C', #JR (022)
|
257
259
|
50534 => 'Sigma 20mm F1.4 DG DN | A', #JR (022)
|
258
260
|
50535 => 'Sigma 24mm F1.4 DG DN | A', #JR (022)
|
261
|
+
50536 => 'Sigma 60-600mm F4.5-6.3 DG DN OS | S', #JR (023)
|
262
|
+
50539 => 'Sigma 50mm F1.4 DG DN | A', #JR (023)
|
259
263
|
|
260
264
|
50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
|
261
265
|
50993 => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB
|