exiftool_vendored 11.49.0 → 11.50.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 +16 -1
- data/bin/MANIFEST +2 -0
- data/bin/META.json +4 -3
- data/bin/META.yml +15 -14
- data/bin/README +7 -5
- data/bin/config_files/rotate_regions.config +173 -0
- data/bin/config_files/tiff_version.config +121 -0
- data/bin/exiftool +16 -15
- data/bin/lib/Image/ExifTool.pm +26 -19
- data/bin/lib/Image/ExifTool.pod +5 -2
- data/bin/lib/Image/ExifTool/Audible.pm +2 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +25 -21
- data/bin/lib/Image/ExifTool/Canon.pm +13 -9
- data/bin/lib/Image/ExifTool/CanonVRD.pm +4 -4
- data/bin/lib/Image/ExifTool/DjVu.pm +1 -2
- data/bin/lib/Image/ExifTool/EXE.pm +1 -1
- data/bin/lib/Image/ExifTool/Exif.pm +44 -6
- data/bin/lib/Image/ExifTool/FLIR.pm +1 -1
- data/bin/lib/Image/ExifTool/FlashPix.pm +12 -9
- data/bin/lib/Image/ExifTool/GPS.pm +3 -3
- data/bin/lib/Image/ExifTool/GoPro.pm +4 -4
- data/bin/lib/Image/ExifTool/H264.pm +2 -2
- data/bin/lib/Image/ExifTool/HP.pm +1 -1
- data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
- data/bin/lib/Image/ExifTool/MIE.pm +3 -3
- data/bin/lib/Image/ExifTool/MPF.pm +2 -2
- data/bin/lib/Image/ExifTool/MWG.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +2 -2
- data/bin/lib/Image/ExifTool/Matroska.pm +1 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +58 -56
- data/bin/lib/Image/ExifTool/Nikon.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +2 -2
- data/bin/lib/Image/ExifTool/OpenEXR.pm +2 -2
- data/bin/lib/Image/ExifTool/PDF.pm +4 -4
- data/bin/lib/Image/ExifTool/PICT.pm +3 -3
- data/bin/lib/Image/ExifTool/PNG.pm +2 -2
- data/bin/lib/Image/ExifTool/Pentax.pm +1 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +1 -2
- data/bin/lib/Image/ExifTool/PostScript.pm +4 -4
- data/bin/lib/Image/ExifTool/QuickTime.pm +37 -15
- data/bin/lib/Image/ExifTool/RIFF.pm +3 -2
- data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
- data/bin/lib/Image/ExifTool/Sony.pm +4 -2
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +9 -7
- data/bin/lib/Image/ExifTool/TagNames.pod +31 -21
- data/bin/lib/Image/ExifTool/VCard.pm +1 -1
- data/bin/lib/Image/ExifTool/Validate.pm +2 -2
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +11 -6
- data/bin/lib/Image/ExifTool/XMP.pm +3 -7
- data/bin/lib/Image/ExifTool/XMPStruct.pl +2 -1
- data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
- data/bin/lib/Image/ExifTool/iWork.pm +1 -1
- data/bin/perl-Image-ExifTool.spec +3 -3
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +4 -2
|
@@ -2287,7 +2287,7 @@ my %binaryDataAttrs = (
|
|
|
2287
2287
|
Name => 'NikonCaptureEditVersions',
|
|
2288
2288
|
Condition => '$self->Options("ExtractEmbedded")',
|
|
2289
2289
|
Notes => q{
|
|
2290
|
-
the ExtractEmbedded option may be used to decode settings from the stored
|
|
2290
|
+
the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> option may be used to decode settings from the stored
|
|
2291
2291
|
edit versions, otherwise this is extracted as a binary data block
|
|
2292
2292
|
},
|
|
2293
2293
|
Writable => 'undef',
|
|
@@ -2463,7 +2463,7 @@ my %indexInfo = (
|
|
|
2463
2463
|
3 => 'Bottom to Top',
|
|
2464
2464
|
4 => 'Top to Bottom',
|
|
2465
2465
|
);
|
|
2466
|
-
return
|
|
2466
|
+
return(($a{$a} || "Unknown ($a)") . ', Shot ' . $b);
|
|
2467
2467
|
},
|
|
2468
2468
|
},
|
|
2469
2469
|
0x603 => { #PH/4
|
|
@@ -3932,7 +3932,7 @@ sub ExtenderStatus($$$)
|
|
|
3932
3932
|
$lensType =~ / F(\d+(\.\d+)?)/ or return 1;
|
|
3933
3933
|
# If the maximum aperture at the maximum focal length is greater than the
|
|
3934
3934
|
# known max/max aperture of the lens, then the extender must be attached
|
|
3935
|
-
return
|
|
3935
|
+
return(($maxAperture - $1 > 0.2) ? 1 : 2);
|
|
3936
3936
|
}
|
|
3937
3937
|
|
|
3938
3938
|
#------------------------------------------------------------------------------
|
|
@@ -62,7 +62,7 @@ my %formatType = (
|
|
|
62
62
|
Groups => { 2 => 'Location' },
|
|
63
63
|
PrintConv => q{
|
|
64
64
|
$val = int($val * 10) / 10;
|
|
65
|
-
return
|
|
65
|
+
return(($val =~ s/^-// ? "$val m Below" : "$val m Above") . " Sea Level");
|
|
66
66
|
},
|
|
67
67
|
},
|
|
68
68
|
aperture => { PrintConv => 'sprintf("%.1f",$val)' },
|
|
@@ -158,7 +158,7 @@ sub ProcessEXR($$)
|
|
|
158
158
|
my $raf = $$dirInfo{RAF};
|
|
159
159
|
my $verbose = $et->Options('Verbose');
|
|
160
160
|
my $binary = $et->Options('Binary') || $verbose;
|
|
161
|
-
my ($buff, $
|
|
161
|
+
my ($buff, $dim);
|
|
162
162
|
|
|
163
163
|
# verify this is a valid RIFF file
|
|
164
164
|
return 0 unless $raf->Read($buff, 8) == 8;
|
|
@@ -303,7 +303,7 @@ my %supportedFilter = (
|
|
|
303
303
|
EXTRACT_UNKNOWN => 0, # extract known but numbered tags (Im1, Im2, etc)
|
|
304
304
|
Im => {
|
|
305
305
|
Notes => q{
|
|
306
|
-
the ExtractEmbedded option enables information to be extracted from these
|
|
306
|
+
the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> option enables information to be extracted from these
|
|
307
307
|
embedded images
|
|
308
308
|
},
|
|
309
309
|
SubDirectory => { TagTable => 'Image::ExifTool::PDF::Im' },
|
|
@@ -313,7 +313,7 @@ my %supportedFilter = (
|
|
|
313
313
|
# tags in PDF Im# dictionary
|
|
314
314
|
%Image::ExifTool::PDF::Im = (
|
|
315
315
|
NOTES => q{
|
|
316
|
-
Information extracted from embedded images with the ExtractEmbedded option.
|
|
316
|
+
Information extracted from embedded images with the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> option.
|
|
317
317
|
The EmbeddedImage and its metadata are extracted only for JPEG and Jpeg2000
|
|
318
318
|
image formats.
|
|
319
319
|
},
|
|
@@ -337,7 +337,7 @@ my %supportedFilter = (
|
|
|
337
337
|
EXTRACT_UNKNOWN => 0, # extract known but numbered tags (MC0, MC1, etc)
|
|
338
338
|
MC => {
|
|
339
339
|
Notes => q{
|
|
340
|
-
the ExtractEmbedded option enables information to be extracted from these
|
|
340
|
+
the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> option enables information to be extracted from these
|
|
341
341
|
embedded metadata dictionaries
|
|
342
342
|
},
|
|
343
343
|
SubDirectory => { TagTable => 'Image::ExifTool::PDF::MC' },
|
|
@@ -397,7 +397,7 @@ my %supportedFilter = (
|
|
|
397
397
|
},
|
|
398
398
|
AIPrivateData => {
|
|
399
399
|
Notes => q{
|
|
400
|
-
the ExtractEmbedded option enables information to be extracted from embedded
|
|
400
|
+
the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> option enables information to be extracted from embedded
|
|
401
401
|
PostScript documents in the AIPrivateData# and AIPDFPrivateData# streams
|
|
402
402
|
},
|
|
403
403
|
JoinStreams => 1, # join streams from numbered tags and process as one
|
|
@@ -1095,13 +1095,13 @@ sub ProcessPICT($$)
|
|
|
1095
1095
|
@hdr = unpack('x2n5', $buff);
|
|
1096
1096
|
$op = pop @hdr;
|
|
1097
1097
|
# check for PICT version 1 format
|
|
1098
|
-
if ($op
|
|
1098
|
+
if ($op == 0x1101) {
|
|
1099
1099
|
$vers = 1;
|
|
1100
1100
|
undef $extended;
|
|
1101
1101
|
last;
|
|
1102
1102
|
}
|
|
1103
1103
|
# check for PICT version 2 format
|
|
1104
|
-
if ($op
|
|
1104
|
+
if ($op == 0x0011) {
|
|
1105
1105
|
$raf->Read($buff, 28) == 28 or return 0;
|
|
1106
1106
|
if ($buff =~ /^\x02\xff\x0c\x00\xff\xff/) {
|
|
1107
1107
|
$vers = 2;
|
|
@@ -1174,7 +1174,7 @@ sub ProcessPICT($$)
|
|
|
1174
1174
|
}
|
|
1175
1175
|
last unless $tagInfo;
|
|
1176
1176
|
}
|
|
1177
|
-
if ($op
|
|
1177
|
+
if ($op == 0xff) {
|
|
1178
1178
|
$verbose and print $out "End of picture\n";
|
|
1179
1179
|
$success = 1;
|
|
1180
1180
|
last;
|
|
@@ -427,10 +427,10 @@ my %unreg = ( Notes => 'unregistered' );
|
|
|
427
427
|
|
|
428
428
|
These tags may be stored as tEXt, zTXt or iTXt chunks in the PNG image. By
|
|
429
429
|
default ExifTool writes new string-value tags as as uncompressed tEXt, or
|
|
430
|
-
compressed zTXt if the Compress (-z) option is used and Compress::Zlib is
|
|
430
|
+
compressed zTXt if the L<Compress|../ExifTool.html#Compress> (-z) option is used and Compress::Zlib is
|
|
431
431
|
available. Alternate language tags and values containing special characters
|
|
432
432
|
(unless the Latin character set is used) are written as iTXt, and compressed
|
|
433
|
-
if the Compress option is used and Compress::Zlib is available. Raw profile
|
|
433
|
+
if the L<Compress|../ExifTool.html#Compress> option is used and Compress::Zlib is available. Raw profile
|
|
434
434
|
information is always created as compressed zTXt if Compress::Zlib is
|
|
435
435
|
available, or tEXt otherwise. Standard XMP is written as uncompressed iTXt.
|
|
436
436
|
|
|
@@ -5288,7 +5288,7 @@ my %binaryDataAttrs = (
|
|
|
5288
5288
|
NOTES => q{
|
|
5289
5289
|
The parameters associated with each type of digital filter are unique, and
|
|
5290
5290
|
these settings are also extracted with the DigitalFilter tag. Information
|
|
5291
|
-
is not extracted for filters that are "Off" unless the Unknown option is
|
|
5291
|
+
is not extracted for filters that are "Off" unless the L<Unknown|../ExifTool.html#Unknown> option is
|
|
5292
5292
|
used.
|
|
5293
5293
|
},
|
|
5294
5294
|
0 => {
|
|
@@ -819,7 +819,7 @@ sub ProcessDocumentData($$$)
|
|
|
819
819
|
my $raf = $$dirInfo{RAF};
|
|
820
820
|
my $dirLen = $$dirInfo{DirLen};
|
|
821
821
|
my $pos = 36; # length of header
|
|
822
|
-
my $buff;
|
|
822
|
+
my ($buff, $n);
|
|
823
823
|
|
|
824
824
|
$et->VerboseDir('Photoshop Document Data', undef, $dirLen);
|
|
825
825
|
unless ($raf) {
|
|
@@ -838,7 +838,6 @@ sub ProcessDocumentData($$$)
|
|
|
838
838
|
}
|
|
839
839
|
my $psb = ($1 eq 'V0002');
|
|
840
840
|
my %dinfo = ( DataPt => \$buff );
|
|
841
|
-
my ($n, $setOrder);
|
|
842
841
|
$$et{IsPSB} = $psb; # set PSB flag (needed when handling Layers directory)
|
|
843
842
|
while ($pos + 12 <= $dirLen) {
|
|
844
843
|
$raf->Read($buff, 8) == 8 or last;
|
|
@@ -89,12 +89,12 @@ sub ProcessPS($$;$);
|
|
|
89
89
|
SubDirectory => {
|
|
90
90
|
TagTable => 'Image::ExifTool::PostScript::Main',
|
|
91
91
|
},
|
|
92
|
-
Notes => 'extracted with ExtractEmbedded option',
|
|
92
|
+
Notes => 'extracted with L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> option',
|
|
93
93
|
},
|
|
94
94
|
EmbeddedFileName => {
|
|
95
95
|
Notes => q{
|
|
96
96
|
not a real tag ID, but the file name from a BeginDocument statement.
|
|
97
|
-
Extracted with document metadata when ExtractEmbedded option is used
|
|
97
|
+
Extracted with document metadata when L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> option is used
|
|
98
98
|
},
|
|
99
99
|
},
|
|
100
100
|
# AI metadata (most with a single leading '%')
|
|
@@ -208,9 +208,9 @@ sub GetInputRecordSeparator($)
|
|
|
208
208
|
$a = pos($data), pos($data) = 0 if $data =~ /\x0a/g;
|
|
209
209
|
$d = pos($data) if $data =~ /\x0d/g;
|
|
210
210
|
my $diff = $a - $d;
|
|
211
|
-
if ($diff
|
|
211
|
+
if ($diff == 1) {
|
|
212
212
|
$sep = "\x0d\x0a";
|
|
213
|
-
} elsif ($diff
|
|
213
|
+
} elsif ($diff == -1) {
|
|
214
214
|
$sep = "\x0a\x0d";
|
|
215
215
|
} elsif ($diff > 0) {
|
|
216
216
|
$sep = "\x0d";
|
|
@@ -1328,7 +1328,7 @@ my %eeBox = (
|
|
|
1328
1328
|
3-character ISO 639-2 language code to the tag name. ExifTool will extract
|
|
1329
1329
|
any multi-language user data tags found, even if they aren't in this table.
|
|
1330
1330
|
Note when creating new tags,
|
|
1331
|
-
L<ItemList
|
|
1331
|
+
L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> tags are
|
|
1332
1332
|
preferred over these, so to create the tag when a same-named ItemList tag
|
|
1333
1333
|
exists, either "UserData" must be specified (eg. C<-UserData:Artist=Monet>
|
|
1334
1334
|
on the command line), or the PREFERRED level must be changed via the config
|
|
@@ -2617,7 +2617,10 @@ my %eeBox = (
|
|
|
2617
2617
|
this table support alternate languages which are accessed by adding a
|
|
2618
2618
|
3-character ISO 639-2 language code and an optional ISO 3166-1 alpha 2
|
|
2619
2619
|
country code to the tag name (eg. "ItemList:Title-fra" or
|
|
2620
|
-
"ItemList::Title-fra-FR").
|
|
2620
|
+
"ItemList::Title-fra-FR"). When creating a new Meta box to contain the
|
|
2621
|
+
ItemList directory, by default ExifTool does not specify a
|
|
2622
|
+
L<Handler|Image::ExifTool::TagNames/QuickTime Handler Tags>, but the
|
|
2623
|
+
API L<QuickTimeHandler|../ExifTool.html#QuickTimeHandler> option may be used to include an 'mdir' Handler box.
|
|
2621
2624
|
},
|
|
2622
2625
|
# in this table, binary 1 and 2-byte "data"-type tags are interpreted as
|
|
2623
2626
|
# int8u and int16u. Multi-byte binary "data" tags are extracted as binary data.
|
|
@@ -5420,10 +5423,11 @@ my %eeBox = (
|
|
|
5420
5423
|
FORMAT => 'string',
|
|
5421
5424
|
NOTES => q{
|
|
5422
5425
|
This directory contains a list of key names which are used to decode tags
|
|
5423
|
-
written by the "mdta" handler.
|
|
5424
|
-
|
|
5425
|
-
|
|
5426
|
-
|
|
5426
|
+
written by the "mdta" handler. Also in this table are a few tags found in
|
|
5427
|
+
timed metadata that are not yet writable by ExifTool. The prefix of
|
|
5428
|
+
"com.apple.quicktime." has been removed from the TagID's below. These tags
|
|
5429
|
+
support alternate languages in the same way as the
|
|
5430
|
+
L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> tags. Note
|
|
5427
5431
|
that by default,
|
|
5428
5432
|
L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
|
|
5429
5433
|
L<UserData|Image::ExifTool::TagNames/QuickTime UserData Tags> tags are
|
|
@@ -5519,8 +5523,8 @@ my %eeBox = (
|
|
|
5519
5523
|
PrintConvInv => '$self->InverseDateTime($val)',
|
|
5520
5524
|
},
|
|
5521
5525
|
'direction.facing' => { Name => 'CameraDirection', Groups => { 2 => 'Location' } },
|
|
5522
|
-
'direction.motion' => { Name => 'CameraMotion',
|
|
5523
|
-
'location.body'
|
|
5526
|
+
'direction.motion' => { Name => 'CameraMotion', Groups => { 2 => 'Location' } },
|
|
5527
|
+
'location.body' => { Name => 'LocationBody', Groups => { 2 => 'Location' } },
|
|
5524
5528
|
'player.version' => 'PlayerVersion',
|
|
5525
5529
|
'player.movie.visual.brightness'=> 'Brightness',
|
|
5526
5530
|
'player.movie.visual.color' => 'Color',
|
|
@@ -5540,13 +5544,28 @@ my %eeBox = (
|
|
|
5540
5544
|
'collection.user' => 'UserCollection', #22
|
|
5541
5545
|
'Encoded_With' => 'EncodedWith',
|
|
5542
5546
|
#
|
|
5543
|
-
#
|
|
5547
|
+
# the following tags aren't in the com.apple.quicktime namespace:
|
|
5548
|
+
#
|
|
5549
|
+
'com.apple.photos.captureMode' => 'CaptureMode',
|
|
5550
|
+
'com.android.version' => 'AndroidVersion',
|
|
5551
|
+
#
|
|
5552
|
+
# also seen
|
|
5553
|
+
#
|
|
5554
|
+
# com.divergentmedia.clipwrap.model ('NEX-FS700EK')
|
|
5555
|
+
# com.divergentmedia.clipwrap.model1 ('49')
|
|
5556
|
+
# com.divergentmedia.clipwrap.model2 ('0')
|
|
5557
|
+
# com.divergentmedia.clipwrap.manufacturer ('Sony')
|
|
5558
|
+
# com.divergentmedia.clipwrap.originalDateTime ('2013/2/6 10:30:40+0200')
|
|
5559
|
+
#
|
|
5560
|
+
# seen in timed metadata (mebx), and added dynamically to the table
|
|
5561
|
+
# via SaveMetaKeys(). NOTE: these tags are not writable!
|
|
5544
5562
|
#
|
|
5545
5563
|
# (mdta)com.apple.quicktime.video-orientation (dtyp=66, int16s)
|
|
5546
|
-
'video-orientation' => 'VideoOrientation',
|
|
5564
|
+
'video-orientation' => { Name => 'VideoOrientation', Writable => 0 },
|
|
5547
5565
|
# (mdta)com.apple.quicktime.live-photo-info (dtyp=com.apple.quicktime.com.apple.quicktime.live-photo-info)
|
|
5548
5566
|
'live-photo-info' => {
|
|
5549
5567
|
Name => 'LivePhotoInfo',
|
|
5568
|
+
Writable => 0,
|
|
5550
5569
|
# not sure what these values mean, but unpack them anyway - PH
|
|
5551
5570
|
# (ignore the fact that the "f" and "l" unpacks won't work on a big-endian machine)
|
|
5552
5571
|
ValueConv => 'join " ",unpack "VfVVf6c4lCCcclf4Vvv", $val',
|
|
@@ -5554,6 +5573,7 @@ my %eeBox = (
|
|
|
5554
5573
|
# (mdta)com.apple.quicktime.still-image-time (dtyp=65, int8s)
|
|
5555
5574
|
'still-image-time' => { # (found in live photo)
|
|
5556
5575
|
Name => 'StillImageTime',
|
|
5576
|
+
Writable => 0,
|
|
5557
5577
|
Notes => q{
|
|
5558
5578
|
this tag always has a value of -1; the time of the still image is obtained
|
|
5559
5579
|
from the associated SampleTime
|
|
@@ -5562,23 +5582,25 @@ my %eeBox = (
|
|
|
5562
5582
|
# (mdta)com.apple.quicktime.detected-face (dtyp='com.apple.quicktime.detected-face')
|
|
5563
5583
|
'detected-face' => {
|
|
5564
5584
|
Name => 'FaceInfo',
|
|
5585
|
+
Writable => 0,
|
|
5565
5586
|
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::FaceInfo' },
|
|
5566
5587
|
},
|
|
5567
|
-
# ---- detected-face fields ----
|
|
5588
|
+
# ---- detected-face fields ( ----
|
|
5568
5589
|
# --> back here after a round trip through FaceInfo -> FaceRec -> FaceItem
|
|
5569
5590
|
# (fiel)com.apple.quicktime.detected-face.bounds (dtyp=80, float[8])
|
|
5570
5591
|
'detected-face.bounds' => {
|
|
5571
5592
|
Name => 'DetectedFaceBounds',
|
|
5593
|
+
Writable => 0,
|
|
5572
5594
|
# round to a reasonable number of decimal places
|
|
5573
5595
|
PrintConv => 'my @a=split " ",$val;$_=int($_*1e6+.5)/1e6 foreach @a;join " ",@a',
|
|
5574
5596
|
PrintConvInv => '$val',
|
|
5575
5597
|
},
|
|
5576
5598
|
# (fiel)com.apple.quicktime.detected-face.face-id (dtyp=77, int32u)
|
|
5577
|
-
'detected-face.face-id' => 'DetectedFaceID',
|
|
5599
|
+
'detected-face.face-id' => { Name => 'DetectedFaceID', Writable => 0 },
|
|
5578
5600
|
# (fiel)com.apple.quicktime.detected-face.roll-angle (dtyp=23, float)
|
|
5579
|
-
'detected-face.roll-angle' => 'DetectedFaceRollAngle',
|
|
5601
|
+
'detected-face.roll-angle' => { Name => 'DetectedFaceRollAngle', Writable => 0 },
|
|
5580
5602
|
# (fiel)com.apple.quicktime.detected-face.yaw-angle (dtyp=23, float)
|
|
5581
|
-
'detected-face.yaw-angle' => 'DetectedFaceYawAngle',
|
|
5603
|
+
'detected-face.yaw-angle' => { Name => 'DetectedFaceYawAngle', Writable => 0 },
|
|
5582
5604
|
);
|
|
5583
5605
|
|
|
5584
5606
|
# iTunes info ('----') atoms
|
|
@@ -8247,7 +8269,7 @@ sub ProcessMOV($$;$)
|
|
|
8247
8269
|
# set document number for this item property if necessary
|
|
8248
8270
|
if ($$et{IsItemProperty}) {
|
|
8249
8271
|
my $items = $$et{ItemInfo};
|
|
8250
|
-
my ($id, $prop, $
|
|
8272
|
+
my ($id, $prop, $docNum, $lowest);
|
|
8251
8273
|
my $primary = $$et{PrimaryItem} || 0;
|
|
8252
8274
|
ItemID: foreach $id (keys %$items) {
|
|
8253
8275
|
next unless $$items{$id}{Association};
|
|
@@ -1248,7 +1248,7 @@ my %code2charset = (
|
|
|
1248
1248
|
# (can't calculate duration like this for compressed audio types)
|
|
1249
1249
|
RawConv => q{
|
|
1250
1250
|
return undef if $$self{VALUE}{FileType} =~ /^(LA|OFR|PAC|WV)$/;
|
|
1251
|
-
return
|
|
1251
|
+
return(($val[0] and not ($val[2] or $val[3])) ? $val[1] / $val[0] : undef);
|
|
1252
1252
|
},
|
|
1253
1253
|
PrintConv => 'ConvertDuration($val)',
|
|
1254
1254
|
},
|
|
@@ -1320,7 +1320,8 @@ sub CalcDuration($@)
|
|
|
1320
1320
|
# FujiFilm REAL 3D AVI's), but the video stream information isn't reliable for
|
|
1321
1321
|
# some cameras (eg. Olympus FE models), so use the video stream information
|
|
1322
1322
|
# only if the RIFF header duration is 2 to 3 times longer
|
|
1323
|
-
my $dur1
|
|
1323
|
+
my $dur1;
|
|
1324
|
+
$dur1 = $val[1] / $val[0] if $val[0];
|
|
1324
1325
|
if ($val[2] and $val[3]) {
|
|
1325
1326
|
my $dur2 = $val[3] / $val[2];
|
|
1326
1327
|
my $rat = $dur1 / $dur2;
|
|
@@ -23,7 +23,7 @@ $VERSION = '1.08';
|
|
|
23
23
|
Tags extracted from Mac OS resource files and DFONT files. These tags may
|
|
24
24
|
also be extracted from the resource fork of any file in OS X, either by
|
|
25
25
|
adding "/..namedfork/rsrc" to the filename to process the resource fork
|
|
26
|
-
alone, or by using the ExtractEmbedded (-ee) option to process the resource
|
|
26
|
+
alone, or by using the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> (-ee) option to process the resource
|
|
27
27
|
fork as a sub-document of the main file. When writing, ExifTool preserves
|
|
28
28
|
the Mac OS resource fork by default, but it may deleted with C<-rsrc:all=>
|
|
29
29
|
on the command line.
|
|
@@ -111,7 +111,7 @@ my %formatMinMax = (
|
|
|
111
111
|
This is a standard-format IFD found in the maker notes of some Samsung
|
|
112
112
|
models, except that the entry count is a 4-byte integer and the offsets are
|
|
113
113
|
relative to the end of the IFD. Currently, no tags in this IFD are known,
|
|
114
|
-
so the Unknown (-u) or Verbose (-v) option must be used to see this
|
|
114
|
+
so the L<Unknown|../ExifTool.html#Unknown> (-u) or L<Verbose|../ExifTool.html#Verbose> (-v) option must be used to see this
|
|
115
115
|
information.
|
|
116
116
|
},
|
|
117
117
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
|
@@ -32,7 +32,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
32
32
|
use Image::ExifTool::Exif;
|
|
33
33
|
use Image::ExifTool::Minolta;
|
|
34
34
|
|
|
35
|
-
$VERSION = '3.
|
|
35
|
+
$VERSION = '3.07';
|
|
36
36
|
|
|
37
37
|
sub ProcessSRF($$$);
|
|
38
38
|
sub ProcessSR2($$$);
|
|
@@ -132,6 +132,8 @@ my %sonyLensTypes2 = (
|
|
|
132
132
|
32848 => 'Sony FE 400mm F2.8 GM OSS', #IB
|
|
133
133
|
32849 => 'Sony E 18-135mm F3.5-5.6 OSS', #JR
|
|
134
134
|
32850 => 'Sony FE 135mm F1.8 GM', #IB
|
|
135
|
+
32851 => 'Sony FE 200-600mm F5.6-6.3 G OSS', #IB
|
|
136
|
+
32852 => 'Sony FE 600mm F4 GM OSS', #IB
|
|
135
137
|
|
|
136
138
|
# (comment this out so LensID will report the LensModel, which is more useful)
|
|
137
139
|
# 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
|
|
@@ -9606,7 +9608,7 @@ my %isoSetting2010 = (
|
|
|
9606
9608
|
GROUPS => { 2 => 'Video' },
|
|
9607
9609
|
NOTES => q{
|
|
9608
9610
|
These tags are extracted from the 'rtmd' timed metadata of MP4 videos from
|
|
9609
|
-
some models when the ExtractEmbedded option is used.
|
|
9611
|
+
some models when the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> option is used.
|
|
9610
9612
|
},
|
|
9611
9613
|
# 0x060e - 16 bytes starting with 0x060e2b340253 (fake tag ID - comes before 0x8300 container)
|
|
9612
9614
|
0x060e => { Name => 'Sony_rtmd_0x060e', Format => 'int8u', %hidUnk },
|
|
@@ -67,9 +67,9 @@ sub Write(;$$%)
|
|
|
67
67
|
{
|
|
68
68
|
local ($_, *PTIFILE);
|
|
69
69
|
my ($file, $group, %opts) = @_;
|
|
70
|
-
my @groups = split ':', $group if $group;
|
|
71
70
|
my $et = new Image::ExifTool;
|
|
72
|
-
my ($fp, $tableName, %langInfo, @langs, $defaultLang);
|
|
71
|
+
my ($fp, $tableName, %langInfo, @langs, $defaultLang, @groups);
|
|
72
|
+
@groups = split ':', $group if $group;
|
|
73
73
|
|
|
74
74
|
Image::ExifTool::LoadAllTables(); # first load all our tables
|
|
75
75
|
unless ($opts{NoDesc}) {
|
|
@@ -884,6 +884,7 @@ my %tagLookup = (
|
|
|
884
884
|
'analogbalance' => { 114 => 0xc627 },
|
|
885
885
|
'analogcaptureiso' => { 132 => 0x89e },
|
|
886
886
|
'analogisotable' => { 132 => 0x89d },
|
|
887
|
+
'androidversion' => { 356 => 'com.android.version' },
|
|
887
888
|
'angleadj' => { 98 => 0x10003, 104 => 0x8b },
|
|
888
889
|
'angleinforoll' => { 451 => 'AngleInfoRoll' },
|
|
889
890
|
'angleinfoyaw' => { 451 => 'AngleInfoYaw' },
|
|
@@ -1230,6 +1231,7 @@ my %tagLookup = (
|
|
|
1230
1231
|
'captureframerate' => { 108 => 0x4001 },
|
|
1231
1232
|
'captureheightnormal' => { 132 => 0x1839 },
|
|
1232
1233
|
'capturelook' => { 132 => 0xc48 },
|
|
1234
|
+
'capturemode' => { 356 => 'com.apple.photos.captureMode' },
|
|
1233
1235
|
'capturesoftware' => { 443 => 'CaptureSoftware' },
|
|
1234
1236
|
'capturewidthnormal' => { 132 => 0x1838 },
|
|
1235
1237
|
'capturewidthtest' => { 132 => 0x1842 },
|
|
@@ -1946,10 +1948,6 @@ my %tagLookup = (
|
|
|
1946
1948
|
'destinationcity' => { 337 => 0x24, 343 => 0x3 },
|
|
1947
1949
|
'destinationcitycode' => { 344 => 0x1001 },
|
|
1948
1950
|
'destinationdst' => { 337 => 0x26, 343 => '0.3' },
|
|
1949
|
-
'detectedfacebounds' => { 356 => 'detected-face.bounds' },
|
|
1950
|
-
'detectedfaceid' => { 356 => 'detected-face.face-id' },
|
|
1951
|
-
'detectedfacerollangle' => { 356 => 'detected-face.roll-angle' },
|
|
1952
|
-
'detectedfaceyawangle' => { 356 => 'detected-face.yaw-angle' },
|
|
1953
1951
|
'developmentdynamicrange' => { 122 => 0x1403 },
|
|
1954
1952
|
'deviantmatrixcustom' => { 132 => 0x7de },
|
|
1955
1953
|
'deviantmatrixdaylight' => { 132 => 0x7da },
|
|
@@ -3395,7 +3393,6 @@ my %tagLookup = (
|
|
|
3395
3393
|
'linkedencrightsexpr' => { 466 => 'LinkedEncRightsExpr' },
|
|
3396
3394
|
'linlogcoring' => { 132 => 0x904 },
|
|
3397
3395
|
'lithostratigraphicterms' => { 113 => [\'GeologicalContext','GeologicalContextLithostratigraphicTerms'] },
|
|
3398
|
-
'livephotoinfo' => { 356 => 'live-photo-info' },
|
|
3399
3396
|
'liveviewaf' => { 267 => '32.1', 277 => '34.1' },
|
|
3400
3397
|
'liveviewafareamode' => { 272 => '34.1' },
|
|
3401
3398
|
'liveviewafmethod' => { 405 => 0x20 },
|
|
@@ -5270,7 +5267,6 @@ my %tagLookup = (
|
|
|
5270
5267
|
'state' => { 153 => 'State', 302 => 0x6b, 468 => 'State' },
|
|
5271
5268
|
'status' => { 436 => 'Status', 448 => 'Status' },
|
|
5272
5269
|
'stereomode' => { 444 => 'StereoMode' },
|
|
5273
|
-
'stillimagetime' => { 356 => 'still-image-time' },
|
|
5274
5270
|
'stitched' => { 444 => 'Stitched' },
|
|
5275
5271
|
'stitchingsoftware' => { 443 => 'StitchingSoftware', 444 => 'StitchingSoftware' },
|
|
5276
5272
|
'stopsabovebaseiso' => { 408 => 0x113e, 409 => 0x113e, 410 => 0x111a, 411 => 0x1196, 412 => 0x1172, 413 => 0x102a, 414 => 0x222, 415 => 0x222, 416 => 0x217, 429 => 0xa },
|
|
@@ -5756,7 +5752,6 @@ my %tagLookup = (
|
|
|
5756
5752
|
'videoframesizeunit' => { 480 => [\'videoFrameSize','videoFrameSizeUnit'] },
|
|
5757
5753
|
'videoframesizew' => { 480 => [\'videoFrameSize','videoFrameSizeW'] },
|
|
5758
5754
|
'videomoddate' => { 480 => 'videoModDate' },
|
|
5759
|
-
'videoorientation' => { 356 => 'video-orientation' },
|
|
5760
5755
|
'videopixelaspectratio' => { 480 => 'videoPixelAspectRatio' },
|
|
5761
5756
|
'videopixeldepth' => { 480 => 'videoPixelDepth' },
|
|
5762
5757
|
'videoquality' => { 108 => 0x4003 },
|
|
@@ -7193,6 +7188,10 @@ my %tagExists = (
|
|
|
7193
7188
|
'designerurl' => 1,
|
|
7194
7189
|
'desiredreproductions' => 1,
|
|
7195
7190
|
'destinationid' => 1,
|
|
7191
|
+
'detectedfacebounds' => 1,
|
|
7192
|
+
'detectedfaceid' => 1,
|
|
7193
|
+
'detectedfacerollangle' => 1,
|
|
7194
|
+
'detectedfaceyawangle' => 1,
|
|
7196
7195
|
'detector' => 1,
|
|
7197
7196
|
'detectorboard' => 1,
|
|
7198
7197
|
'deviceattributes' => 1,
|
|
@@ -8391,6 +8390,7 @@ my %tagExists = (
|
|
|
8391
8390
|
'linlogtable' => 1,
|
|
8392
8391
|
'listtype' => 1,
|
|
8393
8392
|
'lit' => 1,
|
|
8393
|
+
'livephotoinfo' => 1,
|
|
8394
8394
|
'ln0' => 1,
|
|
8395
8395
|
'ln1' => 1,
|
|
8396
8396
|
'localbasepath' => 1,
|
|
@@ -9968,6 +9968,7 @@ my %tagExists = (
|
|
|
9968
9968
|
'stereo' => 1,
|
|
9969
9969
|
'stereoimage' => 1,
|
|
9970
9970
|
'stereoscopic3d' => 1,
|
|
9971
|
+
'stillimagetime' => 1,
|
|
9971
9972
|
'stim' => 1,
|
|
9972
9973
|
'stimversion' => 1,
|
|
9973
9974
|
'stitchcolumns' => 1,
|
|
@@ -10462,6 +10463,7 @@ my %tagExists = (
|
|
|
10462
10463
|
'videomaxbitrate' => 1,
|
|
10463
10464
|
'videomaxframerate' => 1,
|
|
10464
10465
|
'videomode' => 1,
|
|
10466
|
+
'videoorientation' => 1,
|
|
10465
10467
|
'videoprofile' => 1,
|
|
10466
10468
|
'videoprofileversion' => 1,
|
|
10467
10469
|
'videosampledesc' => 1,
|