exiftool_vendored 12.18.0 → 12.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/Changes +236 -4
- data/bin/MANIFEST +23 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +45 -43
- data/bin/arg_files/xmp2exif.args +2 -1
- data/bin/config_files/acdsee.config +193 -6
- data/bin/config_files/convert_regions.config +25 -14
- data/bin/config_files/cuepointlist.config +70 -0
- data/bin/config_files/example.config +2 -9
- data/bin/exiftool +152 -97
- data/bin/fmt_files/gpx.fmt +2 -2
- data/bin/fmt_files/gpx_wpt.fmt +2 -2
- data/bin/fmt_files/kml.fmt +1 -1
- data/bin/fmt_files/kml_track.fmt +1 -1
- data/bin/lib/Image/ExifTool/Apple.pm +3 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +31 -13
- data/bin/lib/Image/ExifTool/CBOR.pm +331 -0
- data/bin/lib/Image/ExifTool/Canon.pm +44 -19
- data/bin/lib/Image/ExifTool/DJI.pm +6 -6
- data/bin/lib/Image/ExifTool/DPX.pm +13 -2
- data/bin/lib/Image/ExifTool/DjVu.pm +6 -5
- data/bin/lib/Image/ExifTool/Exif.pm +124 -13
- data/bin/lib/Image/ExifTool/FITS.pm +13 -2
- data/bin/lib/Image/ExifTool/FlashPix.pm +35 -10
- data/bin/lib/Image/ExifTool/FujiFilm.pm +19 -8
- data/bin/lib/Image/ExifTool/GPS.pm +22 -11
- data/bin/lib/Image/ExifTool/Geotag.pm +13 -2
- data/bin/lib/Image/ExifTool/GoPro.pm +16 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
- data/bin/lib/Image/ExifTool/ID3.pm +15 -3
- data/bin/lib/Image/ExifTool/JPEG.pm +74 -4
- data/bin/lib/Image/ExifTool/JSON.pm +30 -5
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +395 -16
- data/bin/lib/Image/ExifTool/LIF.pm +153 -0
- data/bin/lib/Image/ExifTool/Lang/nl.pm +60 -59
- data/bin/lib/Image/ExifTool/M2TS.pm +137 -5
- data/bin/lib/Image/ExifTool/MIE.pm +4 -3
- data/bin/lib/Image/ExifTool/MRC.pm +341 -0
- data/bin/lib/Image/ExifTool/MWG.pm +3 -3
- data/bin/lib/Image/ExifTool/MXF.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +3 -3
- data/bin/lib/Image/ExifTool/Microsoft.pm +298 -82
- data/bin/lib/Image/ExifTool/Nikon.pm +18 -5
- data/bin/lib/Image/ExifTool/NikonSettings.pm +19 -2
- data/bin/lib/Image/ExifTool/Olympus.pm +10 -3
- data/bin/lib/Image/ExifTool/Other.pm +93 -0
- data/bin/lib/Image/ExifTool/PDF.pm +9 -12
- data/bin/lib/Image/ExifTool/PNG.pm +8 -7
- data/bin/lib/Image/ExifTool/Panasonic.pm +28 -3
- data/bin/lib/Image/ExifTool/Pentax.pm +28 -5
- data/bin/lib/Image/ExifTool/PhaseOne.pm +4 -3
- data/bin/lib/Image/ExifTool/Photoshop.pm +6 -0
- data/bin/lib/Image/ExifTool/QuickTime.pm +234 -75
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +283 -141
- data/bin/lib/Image/ExifTool/README +5 -2
- data/bin/lib/Image/ExifTool/RIFF.pm +89 -12
- data/bin/lib/Image/ExifTool/Samsung.pm +48 -10
- data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
- data/bin/lib/Image/ExifTool/Sony.pm +230 -69
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
- data/bin/lib/Image/ExifTool/TagLookup.pm +4145 -4029
- data/bin/lib/Image/ExifTool/TagNames.pod +671 -287
- data/bin/lib/Image/ExifTool/Torrent.pm +18 -11
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePDF.pl +1 -0
- data/bin/lib/Image/ExifTool/WritePNG.pl +2 -0
- data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -0
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +55 -21
- data/bin/lib/Image/ExifTool/WriteXMP.pl +7 -3
- data/bin/lib/Image/ExifTool/Writer.pl +47 -10
- data/bin/lib/Image/ExifTool/XMP.pm +45 -15
- data/bin/lib/Image/ExifTool/XMP2.pl +3 -1
- data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
- data/bin/lib/Image/ExifTool/ZISRAW.pm +121 -2
- data/bin/lib/Image/ExifTool.pm +233 -81
- data/bin/lib/Image/ExifTool.pod +114 -93
- data/bin/perl-Image-ExifTool.spec +43 -42
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +28 -13
|
@@ -16,7 +16,7 @@ use vars qw($VERSION);
|
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
17
17
|
use Image::ExifTool::QuickTime;
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.07';
|
|
20
20
|
|
|
21
21
|
sub ProcessGoPro($$$);
|
|
22
22
|
sub ProcessString($$$);
|
|
@@ -386,6 +386,21 @@ my %addUnits = (
|
|
|
386
386
|
Binary => 1,
|
|
387
387
|
},
|
|
388
388
|
# ZFOV (APP6,GPMF) - seen: 148.34, 0 (fmt f, Hero8, Max)
|
|
389
|
+
# the following ref forum12825
|
|
390
|
+
MUID => {
|
|
391
|
+
Name => 'MediaUniqueID',
|
|
392
|
+
PrintConv => q{
|
|
393
|
+
my @a = split ' ', $val;
|
|
394
|
+
$_ = sprintf('%.8x',$_) foreach @a;
|
|
395
|
+
return join('', @a);
|
|
396
|
+
},
|
|
397
|
+
},
|
|
398
|
+
EXPT => 'MaximumShutterAngle',
|
|
399
|
+
MTRX => 'AccelerometerMatrix',
|
|
400
|
+
ORIN => 'InputOrientation',
|
|
401
|
+
ORIO => 'OutputOrientation',
|
|
402
|
+
UNIF => 'InputUniformity',
|
|
403
|
+
SROT => 'SensorReadoutTime',
|
|
389
404
|
);
|
|
390
405
|
|
|
391
406
|
# GoPro GPS5 tags (ref 2) (Hero5,Hero6)
|
|
@@ -24,7 +24,7 @@ use strict;
|
|
|
24
24
|
use vars qw($VERSION);
|
|
25
25
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
26
26
|
|
|
27
|
-
$VERSION = '1.
|
|
27
|
+
$VERSION = '1.36';
|
|
28
28
|
|
|
29
29
|
sub ProcessICC($$);
|
|
30
30
|
sub ProcessICC_Profile($$$);
|
|
@@ -1225,7 +1225,7 @@ sub ProcessICC_Profile($$$)
|
|
|
1225
1225
|
my $type = substr($$dataPt, $valuePtr, 4);
|
|
1226
1226
|
#### eval Validate ($type)
|
|
1227
1227
|
if (defined $$subdir{Validate} and not eval $$subdir{Validate}) {
|
|
1228
|
-
$et->Warn("Invalid $name data");
|
|
1228
|
+
$et->Warn("Invalid ICC $name data");
|
|
1229
1229
|
} else {
|
|
1230
1230
|
$et->ProcessDirectory(\%subdirInfo, $newTagTable, $$subdir{ProcessProc});
|
|
1231
1231
|
}
|
|
@@ -18,11 +18,12 @@ use strict;
|
|
|
18
18
|
use vars qw($VERSION);
|
|
19
19
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
20
20
|
|
|
21
|
-
$VERSION = '1.
|
|
21
|
+
$VERSION = '1.57';
|
|
22
22
|
|
|
23
23
|
sub ProcessID3v2($$$);
|
|
24
24
|
sub ProcessPrivate($$$);
|
|
25
25
|
sub ProcessSynText($$$);
|
|
26
|
+
sub ProcessID3Dir($$$);
|
|
26
27
|
sub ConvertID3v1Text($$);
|
|
27
28
|
sub ConvertTimeStamp($);
|
|
28
29
|
|
|
@@ -69,9 +70,10 @@ my %dateTimeConv = (
|
|
|
69
70
|
# This table is just for documentation purposes
|
|
70
71
|
%Image::ExifTool::ID3::Main = (
|
|
71
72
|
VARS => { NO_ID => 1 },
|
|
73
|
+
PROCESS_PROC => \&ProcessID3Dir, # (used to process 'id3 ' chunk in WAV files)
|
|
72
74
|
NOTES => q{
|
|
73
|
-
ExifTool extracts ID3 and Lyrics3 information from MP3, MPEG,
|
|
74
|
-
FLAC, APE, MPC and RealAudio files. ID3v2 tags which support multiple
|
|
75
|
+
ExifTool extracts ID3 and Lyrics3 information from MP3, MPEG, WAV, AIFF,
|
|
76
|
+
OGG, FLAC, APE, MPC and RealAudio files. ID3v2 tags which support multiple
|
|
75
77
|
languages (eg. Comment and Lyrics) are extracted by specifying the tag name,
|
|
76
78
|
followed by a dash ('-'), then a 3-character ISO 639-2 language code (eg.
|
|
77
79
|
"Comment-spa"). See L<http://www.id3.org/> for the official ID3
|
|
@@ -1570,6 +1572,16 @@ sub ProcessID3($$)
|
|
|
1570
1572
|
return $rtnVal;
|
|
1571
1573
|
}
|
|
1572
1574
|
|
|
1575
|
+
#------------------------------------------------------------------------------
|
|
1576
|
+
# Process ID3 directory
|
|
1577
|
+
# Inputs: 0) ExifTool object reference, 1) dirInfo reference, 2) dummy tag table ref
|
|
1578
|
+
sub ProcessID3Dir($$$)
|
|
1579
|
+
{
|
|
1580
|
+
my ($et, $dirInfo, $tagTablePtr) = @_;
|
|
1581
|
+
$et->VerboseDir('ID3', undef, length ${$$dirInfo{DataPt}});
|
|
1582
|
+
return ProcessID3($et, $dirInfo);
|
|
1583
|
+
}
|
|
1584
|
+
|
|
1573
1585
|
#------------------------------------------------------------------------------
|
|
1574
1586
|
# Extract ID3 information from an MP3 audio file
|
|
1575
1587
|
# Inputs: 0) ExifTool object reference, 1) dirInfo reference
|
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use vars qw($VERSION);
|
|
12
12
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
13
13
|
|
|
14
|
-
$VERSION = '1.
|
|
14
|
+
$VERSION = '1.32';
|
|
15
15
|
|
|
16
16
|
sub ProcessOcad($$$);
|
|
17
17
|
sub ProcessJPEG_HDR($$$);
|
|
@@ -96,6 +96,10 @@ sub ProcessJPEG_HDR($$$);
|
|
|
96
96
|
Name => 'Stim',
|
|
97
97
|
Condition => '$$valPt =~ /^Stim\0/',
|
|
98
98
|
SubDirectory => { TagTable => 'Image::ExifTool::Stim::Main' },
|
|
99
|
+
}, {
|
|
100
|
+
Name => 'JPS',
|
|
101
|
+
Condition => '$$valPt =~ /^_JPSJPS_/',
|
|
102
|
+
SubDirectory => { TagTable => 'Image::ExifTool::JPEG::JPS' },
|
|
99
103
|
}, {
|
|
100
104
|
Name => 'ThermalData', # (written by DJI FLIR models)
|
|
101
105
|
Condition => '$$self{Make} eq "DJI"',
|
|
@@ -193,11 +197,15 @@ sub ProcessJPEG_HDR($$$);
|
|
|
193
197
|
Condition => '$$valPt =~ /^UNICODE\0/',
|
|
194
198
|
Notes => 'PhotoStudio Unicode comment',
|
|
195
199
|
},
|
|
196
|
-
APP11 => {
|
|
200
|
+
APP11 => [{
|
|
197
201
|
Name => 'JPEG-HDR',
|
|
198
202
|
Condition => '$$valPt =~ /^HDR_RI /',
|
|
199
203
|
SubDirectory => { TagTable => 'Image::ExifTool::JPEG::HDR' },
|
|
200
|
-
},
|
|
204
|
+
},{
|
|
205
|
+
Name => 'JUMBF',
|
|
206
|
+
Condition => '$$valPt =~ /^JP/',
|
|
207
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Jpeg2000::Main' },
|
|
208
|
+
}],
|
|
201
209
|
APP12 => [{
|
|
202
210
|
Name => 'PictureInfo',
|
|
203
211
|
Condition => '$$valPt =~ /(\[picture info\]|Type=)/',
|
|
@@ -283,6 +291,68 @@ sub ProcessJPEG_HDR($$$);
|
|
|
283
291
|
}],
|
|
284
292
|
);
|
|
285
293
|
|
|
294
|
+
# JPS APP3 segment (ref http://paulbourke.net/stereographics/stereoimage/)
|
|
295
|
+
%Image::ExifTool::JPEG::JPS = (
|
|
296
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
297
|
+
GROUPS => { 0 => 'APP3', 1 => 'JPS', 2 => 'Image' },
|
|
298
|
+
NOTES => 'Tags found in JPEG Stereo (JPS) images.',
|
|
299
|
+
0x0a => {
|
|
300
|
+
Name => 'JPSSeparation',
|
|
301
|
+
Format => 'int32u', # (just so we can look ahead to MediaType);
|
|
302
|
+
Notes => 'stereo only',
|
|
303
|
+
RawConv => q{
|
|
304
|
+
$$self{MediaType} = $val & 0xff;
|
|
305
|
+
return undef unless $$self{MediaType} == 1;
|
|
306
|
+
return(($val >> 24) & 0xff);
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
0x08 => {
|
|
310
|
+
Name => 'HdrLength',
|
|
311
|
+
Format => 'int16u',
|
|
312
|
+
Hidden => 1,
|
|
313
|
+
RawConv => '$$self{HdrLength} = $val; undef',
|
|
314
|
+
},
|
|
315
|
+
0x0b => {
|
|
316
|
+
Name => 'JPSFlags',
|
|
317
|
+
PrintConv => { BITMASK => {
|
|
318
|
+
0 => 'Half height',
|
|
319
|
+
1 => 'Half width',
|
|
320
|
+
2 => 'Left field first',
|
|
321
|
+
}},
|
|
322
|
+
},
|
|
323
|
+
0x0c => [{
|
|
324
|
+
Name => 'JPSLayout',
|
|
325
|
+
Condition => '$$self{MediaType} == 0',
|
|
326
|
+
Notes => 'mono',
|
|
327
|
+
PrintConv => {
|
|
328
|
+
0 => 'Both Eyes',
|
|
329
|
+
1 => 'Left Eye',
|
|
330
|
+
2 => 'Right Eye',
|
|
331
|
+
},
|
|
332
|
+
},{
|
|
333
|
+
Name => 'JPSLayout',
|
|
334
|
+
Condition => '$$self{MediaType} == 1',
|
|
335
|
+
Notes => 'stereo',
|
|
336
|
+
PrintConv => {
|
|
337
|
+
1 => 'Interleaved',
|
|
338
|
+
2 => 'Side By Side',
|
|
339
|
+
3 => 'Over Under',
|
|
340
|
+
4 => 'Anaglyph',
|
|
341
|
+
},
|
|
342
|
+
}],
|
|
343
|
+
0x0d => {
|
|
344
|
+
Name => 'JPSType',
|
|
345
|
+
Hook => '$varSize += $$self{HdrLength} - 4', # comment starts after header block
|
|
346
|
+
PrintConv => { 0 => 'Mono', 1 => 'Stereo' },
|
|
347
|
+
},
|
|
348
|
+
# 0x0e - in16u comment length (ignored -- assume the remainder is all comment)
|
|
349
|
+
# (this is offset if we had a 4-byte JPS header block)
|
|
350
|
+
0x10 => {
|
|
351
|
+
Name => 'JPSComment',
|
|
352
|
+
Format => 'string',
|
|
353
|
+
},
|
|
354
|
+
);
|
|
355
|
+
|
|
286
356
|
# EPPIM APP6 (Toshiba PrintIM) segment (ref PH, from PDR-M700 samples)
|
|
287
357
|
%Image::ExifTool::JPEG::EPPIM = (
|
|
288
358
|
GROUPS => { 0 => 'APP6', 1 => 'EPPIM', 2 => 'Image' },
|
|
@@ -541,7 +611,7 @@ sub ProcessJPEG_HDR($$$);
|
|
|
541
611
|
},
|
|
542
612
|
2 => {
|
|
543
613
|
Name => 'ImageFormat',
|
|
544
|
-
ValueConv => 'chr($val)',
|
|
614
|
+
ValueConv => 'chr($val & 0xff)',
|
|
545
615
|
PrintConv => { B => 'IMode B' },
|
|
546
616
|
},
|
|
547
617
|
3 => {
|
|
@@ -14,13 +14,15 @@ use vars qw($VERSION);
|
|
|
14
14
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
15
15
|
use Image::ExifTool::Import;
|
|
16
16
|
|
|
17
|
-
$VERSION = '1.
|
|
17
|
+
$VERSION = '1.05';
|
|
18
18
|
|
|
19
|
+
sub ProcessJSON($$);
|
|
19
20
|
sub ProcessTag($$$$%);
|
|
20
21
|
|
|
21
22
|
%Image::ExifTool::JSON::Main = (
|
|
22
23
|
GROUPS => { 0 => 'JSON', 1 => 'JSON', 2 => 'Other' },
|
|
23
24
|
VARS => { NO_ID => 1 },
|
|
25
|
+
PROCESS_PROC => \&ProcessJSON,
|
|
24
26
|
NOTES => q{
|
|
25
27
|
Other than a few tags in the table below, JSON tags have not been
|
|
26
28
|
pre-defined. However, ExifTool will read any existing tags from basic
|
|
@@ -81,8 +83,12 @@ sub ProcessTag($$$$%)
|
|
|
81
83
|
FoundTag($et, $tagTablePtr, $tag, $val, %flags, Struct => 1);
|
|
82
84
|
return unless $et->Options('Struct') > 1;
|
|
83
85
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
+
# support hashes with ordered keys
|
|
87
|
+
my @keys = $$val{_ordered_keys_} ? @{$$val{_ordered_keys_}} : sort keys %$val;
|
|
88
|
+
foreach (@keys) {
|
|
89
|
+
my $tg = $tag . ((/^\d/ and $tag =~ /\d$/) ? '_' : '') . ucfirst;
|
|
90
|
+
$tg =~ s/([^a-zA-Z])([a-z])/$1\U$2/g;
|
|
91
|
+
ProcessTag($et, $tagTablePtr, $tg, $$val{$_}, %flags, Flat => 1);
|
|
86
92
|
}
|
|
87
93
|
} elsif (ref $val eq 'ARRAY') {
|
|
88
94
|
foreach (@$val) {
|
|
@@ -103,7 +109,26 @@ sub ProcessJSON($$)
|
|
|
103
109
|
my ($et, $dirInfo) = @_;
|
|
104
110
|
my $raf = $$dirInfo{RAF};
|
|
105
111
|
my $structOpt = $et->Options('Struct');
|
|
106
|
-
my (%database, $key, $tag);
|
|
112
|
+
my (%database, $key, $tag, $dataPt);
|
|
113
|
+
|
|
114
|
+
unless ($raf) {
|
|
115
|
+
$dataPt = $$dirInfo{DataPt};
|
|
116
|
+
if ($$dirInfo{DirStart} or ($$dirInfo{DirLen} and $$dirInfo{DirLen} ne length($$dataPt))) {
|
|
117
|
+
my $buff = substr(${$$dirInfo{DataPt}}, $$dirInfo{DirStart}, $$dirInfo{DirLen});
|
|
118
|
+
$dataPt = \$buff;
|
|
119
|
+
}
|
|
120
|
+
$raf = new File::RandomAccess($dataPt);
|
|
121
|
+
# extract as a block if requested
|
|
122
|
+
my $blockName = $$dirInfo{BlockInfo} ? $$dirInfo{BlockInfo}{Name} : '';
|
|
123
|
+
my $blockExtract = $et->Options('BlockExtract');
|
|
124
|
+
if ($blockName and ($blockExtract or $$et{REQ_TAG_LOOKUP}{lc $blockName} or
|
|
125
|
+
($$et{TAGS_FROM_FILE} and not $$et{EXCL_TAG_LOOKUP}{lc $blockName})))
|
|
126
|
+
{
|
|
127
|
+
$et->FoundTag($$dirInfo{BlockInfo}, $$dataPt);
|
|
128
|
+
return 1 if $blockExtract and $blockExtract > 1;
|
|
129
|
+
}
|
|
130
|
+
$et->VerboseDir('JSON');
|
|
131
|
+
}
|
|
107
132
|
|
|
108
133
|
# read information from JSON file into database structure
|
|
109
134
|
my $err = Image::ExifTool::Import::ReadJSON($raf, \%database,
|
|
@@ -111,7 +136,7 @@ sub ProcessJSON($$)
|
|
|
111
136
|
|
|
112
137
|
return 0 if $err or not %database;
|
|
113
138
|
|
|
114
|
-
$et->SetFileType();
|
|
139
|
+
$et->SetFileType() unless $dataPt;
|
|
115
140
|
|
|
116
141
|
my $tagTablePtr = GetTagTable('Image::ExifTool::JSON::Main');
|
|
117
142
|
|