exiftool_vendored 11.49.0 → 11.50.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of exiftool_vendored might be problematic. Click here for more details.
- 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,
|