exiftool_vendored 12.18.0 → 12.33.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 +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
|
|