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
|
@@ -150,8 +150,8 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
|
150
150
|
},{
|
|
151
151
|
Name => 'IHL_EXIF',
|
|
152
152
|
Notes => q{
|
|
153
|
-
extracted as a block if the Unknown option is used, or processed as the
|
|
154
|
-
first sub-document with the ExtractEmbedded option
|
|
153
|
+
extracted as a block if the L<Unknown|../ExifTool.html#Unknown> option is used, or processed as the
|
|
154
|
+
first sub-document with the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> option
|
|
155
155
|
},
|
|
156
156
|
Binary => 1,
|
|
157
157
|
Unknown => 1,
|
|
@@ -1818,7 +1818,7 @@ sub ProcessDR4($$;$)
|
|
|
1818
1818
|
if (not $format) {
|
|
1819
1819
|
$val = unpack 'H*', substr($$dataPt, $off, $len);
|
|
1820
1820
|
$format = 'undef';
|
|
1821
|
-
} elsif ($format eq 'double' and $len
|
|
1821
|
+
} elsif ($format eq 'double' and $len == 8) {
|
|
1822
1822
|
# avoid teeny weeny values
|
|
1823
1823
|
$val = ReadValue($dataPt, $off, $format, undef, $len);
|
|
1824
1824
|
$val = 0 if abs($val) < 1e-100;
|
|
@@ -2134,7 +2134,7 @@ sub ProcessCanonVRD($$;$)
|
|
|
2134
2134
|
$blockType = Get32u($dataPt, $pos);
|
|
2135
2135
|
$blockLen = Get32u($dataPt, $pos + 4);
|
|
2136
2136
|
}
|
|
2137
|
-
$vrdType = 'DR4' if $blockType
|
|
2137
|
+
$vrdType = 'DR4' if $blockType == 0xffff00f7;
|
|
2138
2138
|
$pos += 8; # move to start of block
|
|
2139
2139
|
if ($pos + $blockLen > $end) {
|
|
2140
2140
|
$et->Warn('Possibly corrupt CanonVRD block');
|
|
@@ -235,8 +235,7 @@ Tok: for (;;) {
|
|
|
235
235
|
pos($$dataPt) = pos($$dataPt) - 1;
|
|
236
236
|
# allow anything in key but whitespace, braces and double quotes
|
|
237
237
|
# (this is one of those assumptions I mentioned)
|
|
238
|
-
$$dataPt =~ /([^\s()"]+)/sg;
|
|
239
|
-
$tok = $1;
|
|
238
|
+
$tok = $$dataPt =~ /([^\s()"]+)/sg ? $1 : undef;
|
|
240
239
|
}
|
|
241
240
|
push @toks, $tok if defined $tok;
|
|
242
241
|
}
|
|
@@ -55,7 +55,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
|
55
55
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
56
56
|
use Image::ExifTool::MakerNotes;
|
|
57
57
|
|
|
58
|
-
$VERSION = '4.
|
|
58
|
+
$VERSION = '4.16';
|
|
59
59
|
|
|
60
60
|
sub ProcessExif($$$);
|
|
61
61
|
sub WriteExif($$$);
|
|
@@ -4834,7 +4834,7 @@ sub ConvertExifText($$;$$)
|
|
|
4834
4834
|
$type = $1;
|
|
4835
4835
|
$str = $et->Decode($str, 'JIS', 'Unknown');
|
|
4836
4836
|
} else {
|
|
4837
|
-
$tag = $asciiFlex if $asciiFlex and $asciiFlex ne 1;
|
|
4837
|
+
$tag = $asciiFlex if $asciiFlex and $asciiFlex ne '1';
|
|
4838
4838
|
$et->Warn('Invalid EXIF text encoding' . ($tag ? " for $tag" : ''));
|
|
4839
4839
|
$str = $id . $str;
|
|
4840
4840
|
}
|
|
@@ -5064,6 +5064,37 @@ sub GetLensInfo($;$)
|
|
|
5064
5064
|
return @a;
|
|
5065
5065
|
}
|
|
5066
5066
|
|
|
5067
|
+
#------------------------------------------------------------------------------
|
|
5068
|
+
# Match lens in list of possbilities based on value of LensModel
|
|
5069
|
+
# Inputs: 0) reference to list of possible models, 1) LensModel string
|
|
5070
|
+
# - updates list on return; guaranteed not to remove all list entries
|
|
5071
|
+
sub MatchLensModel($$)
|
|
5072
|
+
{
|
|
5073
|
+
my ($try, $lensModel) = @_;
|
|
5074
|
+
if (@$try > 1 and $lensModel) {
|
|
5075
|
+
my (@filt, $pat);
|
|
5076
|
+
# filter by focal length
|
|
5077
|
+
if ($lensModel =~ /((\d+-)?\d+mm)/) {
|
|
5078
|
+
my $focal = $1;
|
|
5079
|
+
@filt = grep /$focal/, @$try;
|
|
5080
|
+
@$try = @filt if @filt and @filt < @$try;
|
|
5081
|
+
}
|
|
5082
|
+
# filter by aperture
|
|
5083
|
+
if (@$try > 1 and $lensModel =~ m{(?:F/?|1:)(\d+(\.\d+)?)}i) {
|
|
5084
|
+
my $fnum = $1;
|
|
5085
|
+
@filt = grep m{(F/?|1:)$fnum\b}i, @$try;
|
|
5086
|
+
@$try = @filt if @filt and @filt < @$try;
|
|
5087
|
+
}
|
|
5088
|
+
# filter by model version, and other lens parameters
|
|
5089
|
+
foreach $pat ('I+', 'USM') {
|
|
5090
|
+
next unless @$try > 1 and $lensModel =~ /\b($pat)\b/;
|
|
5091
|
+
my $val = $1;
|
|
5092
|
+
@filt = grep /\b$val\b/, @$try;
|
|
5093
|
+
@$try = @filt if @filt and @filt < @$try;
|
|
5094
|
+
}
|
|
5095
|
+
}
|
|
5096
|
+
}
|
|
5097
|
+
|
|
5067
5098
|
#------------------------------------------------------------------------------
|
|
5068
5099
|
# Attempt to identify the specific lens if multiple lenses have the same LensType
|
|
5069
5100
|
# Inputs: 0) ExifTool object ref, 1) LensType print value, 2) PrintConv hash ref,
|
|
@@ -5222,9 +5253,12 @@ sub PrintLensID($$@)
|
|
|
5222
5253
|
}
|
|
5223
5254
|
return join(' or ', @user);
|
|
5224
5255
|
}
|
|
5225
|
-
# return the best match(es) from the possible lenses
|
|
5226
|
-
|
|
5227
|
-
|
|
5256
|
+
# return the best match(es) from the possible lenses, after checking against LensModel
|
|
5257
|
+
@best = @matches unless @best;
|
|
5258
|
+
if (@best) {
|
|
5259
|
+
MatchLensModel(\@best, $lensModel);
|
|
5260
|
+
return join(' or ', @best);
|
|
5261
|
+
}
|
|
5228
5262
|
$lens = $$printConv{$lensType};
|
|
5229
5263
|
return $lensModel if $lensModel and $lens =~ / or /; # (eg. Sony NEX-5N)
|
|
5230
5264
|
return $lens;
|
|
@@ -5462,6 +5496,7 @@ sub ProcessExif($$$)
|
|
|
5462
5496
|
my $raf = $$dirInfo{RAF};
|
|
5463
5497
|
my $verbose = $et->Options('Verbose');
|
|
5464
5498
|
my $validate = $et->Options('Validate');
|
|
5499
|
+
my $saveFormat = $et->Options('SaveFormat');
|
|
5465
5500
|
my $htmlDump = $$et{HTML_DUMP};
|
|
5466
5501
|
my $success = 1;
|
|
5467
5502
|
my ($tagKey, $dirSize, $makerAddr, $strEnc, %offsetInfo, $offName, $nextOffName);
|
|
@@ -5639,6 +5674,8 @@ sub ProcessExif($$$)
|
|
|
5639
5674
|
my $valuePtr = $entry + 8; # pointer to value within $$dataPt
|
|
5640
5675
|
my $tagInfo = $et->GetTagInfo($tagTablePtr, $tagID);
|
|
5641
5676
|
my ($origFormStr, $bad, $rational, $subOffName);
|
|
5677
|
+
# save the EXIF format codes if requested
|
|
5678
|
+
$$et{SaveFormat}{$saveFormat = $formatStr} = 1 if $saveFormat;
|
|
5642
5679
|
# hack to patch incorrect count in Kodak SubIFD3 tags
|
|
5643
5680
|
if ($count < 2 and ref $$tagTablePtr{$tagID} eq 'HASH' and $$tagTablePtr{$tagID}{FixCount}) {
|
|
5644
5681
|
$offList or ($offList, $offHash) = GetOffList($dataPt, $dirStart, $dataPos,
|
|
@@ -5904,7 +5941,7 @@ sub ProcessExif($$$)
|
|
|
5904
5941
|
# (avoids long delays when processing some corrupted files)
|
|
5905
5942
|
if ($count > 100000 and $formatStr !~ /^(undef|string|binary)$/) {
|
|
5906
5943
|
my $tagName = $tagInfo ? $$tagInfo{Name} : sprintf('tag 0x%.4x', $tagID);
|
|
5907
|
-
if ($tagName ne 'TransferFunction' or $count
|
|
5944
|
+
if ($tagName ne 'TransferFunction' or $count != 196608) {
|
|
5908
5945
|
my $minor = $count > 2000000 ? 0 : 2;
|
|
5909
5946
|
next if $et->Warn("Ignoring $dirName $tagName with excessive count", $minor);
|
|
5910
5947
|
}
|
|
@@ -6295,6 +6332,7 @@ sub ProcessExif($$$)
|
|
|
6295
6332
|
$et->SetGroup($tagKey, $dirName) if $$tagTablePtr{SET_GROUP1};
|
|
6296
6333
|
# save original components of rational numbers (used when copying)
|
|
6297
6334
|
$$et{RATIONAL}{$tagKey} = $rational if defined $rational;
|
|
6335
|
+
$$et{TAG_EXTRA}{$tagKey}{G6} = $saveFormat if $saveFormat;
|
|
6298
6336
|
}
|
|
6299
6337
|
}
|
|
6300
6338
|
|
|
@@ -1341,7 +1341,7 @@ sub GetImageType($$$)
|
|
|
1341
1341
|
sub UnescapeFLIR($)
|
|
1342
1342
|
{
|
|
1343
1343
|
my $char = shift;
|
|
1344
|
-
return $char unless length $char
|
|
1344
|
+
return $char unless length $char == 4; # escaped ASCII char (eg. '\\')
|
|
1345
1345
|
my $val = hex $char;
|
|
1346
1346
|
return chr($val) if $val < 0x80; # simple ASCII
|
|
1347
1347
|
return pack('C0U', $val) if $] >= 5.006001;
|
|
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
21
21
|
use Image::ExifTool::Exif;
|
|
22
22
|
use Image::ExifTool::ASF; # for GetGUID()
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.37';
|
|
25
25
|
|
|
26
26
|
sub ProcessFPX($$);
|
|
27
27
|
sub ProcessFPXR($$$);
|
|
@@ -125,7 +125,7 @@ my @dirEntryType = qw(INVALID STORAGE STREAM LOCKBYTES PROPERTY ROOT);
|
|
|
125
125
|
# list of code pages used by Microsoft
|
|
126
126
|
# (ref http://msdn.microsoft.com/en-us/library/dd317756(VS.85).aspx)
|
|
127
127
|
my %codePage = (
|
|
128
|
-
|
|
128
|
+
37 => 'IBM EBCDIC US-Canada',
|
|
129
129
|
437 => 'DOS United States',
|
|
130
130
|
500 => 'IBM EBCDIC International',
|
|
131
131
|
708 => 'Arabic (ASMO 708)',
|
|
@@ -1175,11 +1175,11 @@ my %fpxFileType = (
|
|
|
1175
1175
|
VARS => { NO_ID => 1 },
|
|
1176
1176
|
CommentBy => {
|
|
1177
1177
|
Groups => { 2 => 'Author' },
|
|
1178
|
-
Notes => 'enable Duplicates option to extract all entries',
|
|
1178
|
+
Notes => 'enable L<Duplicates|../ExifTool.html#Duplicates> option to extract all entries',
|
|
1179
1179
|
},
|
|
1180
1180
|
LastSavedBy => {
|
|
1181
1181
|
Groups => { 2 => 'Author' },
|
|
1182
|
-
Notes => 'enable Duplicates option to extract history of up to 10 entries',
|
|
1182
|
+
Notes => 'enable L<Duplicates|../ExifTool.html#Duplicates> option to extract history of up to 10 entries',
|
|
1183
1183
|
},
|
|
1184
1184
|
DOP => { SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::DOP' } },
|
|
1185
1185
|
ModifyDate => {
|
|
@@ -1439,7 +1439,7 @@ sub ReadFPXValue($$$$$;$$)
|
|
|
1439
1439
|
my $charset = $Image::ExifTool::charsetName{"cp$codePage"};
|
|
1440
1440
|
if ($charset) {
|
|
1441
1441
|
$val = $et->Decode($val, $charset);
|
|
1442
|
-
} elsif ($codePage
|
|
1442
|
+
} elsif ($codePage == 1200) { # UTF-16, little endian
|
|
1443
1443
|
$val = $et->Decode($val, 'UCS2', 'II');
|
|
1444
1444
|
}
|
|
1445
1445
|
}
|
|
@@ -1577,14 +1577,16 @@ sub ProcessDocumentTable($)
|
|
|
1577
1577
|
my $key = 'TableOffsets' . ($i ? " ($i)" : '');
|
|
1578
1578
|
my $offsets = $$value{$key};
|
|
1579
1579
|
last unless defined $offsets;
|
|
1580
|
-
my $doc
|
|
1580
|
+
my $doc;
|
|
1581
|
+
$doc = $$extra{$key}{G3} if $$extra{$key};
|
|
1581
1582
|
$doc = '' unless $doc;
|
|
1582
1583
|
# get DocFlags for this sub-document
|
|
1583
1584
|
my ($docFlags, $docTable);
|
|
1584
1585
|
for ($j=0; ; ++$j) {
|
|
1585
1586
|
my $key = 'DocFlags' . ($j ? " ($j)" : '');
|
|
1586
1587
|
last unless defined $$value{$key};
|
|
1587
|
-
my $tmp
|
|
1588
|
+
my $tmp;
|
|
1589
|
+
$tmp = $$extra{$key}{G3} if $$extra{$key};
|
|
1588
1590
|
$tmp = '' unless $tmp;
|
|
1589
1591
|
if ($tmp eq $doc) {
|
|
1590
1592
|
$docFlags = $$value{$key};
|
|
@@ -1597,7 +1599,8 @@ sub ProcessDocumentTable($)
|
|
|
1597
1599
|
for ($j=0; ; ++$j) {
|
|
1598
1600
|
my $key = $tag . ($j ? " ($j)" : '');
|
|
1599
1601
|
last unless defined $$value{$key};
|
|
1600
|
-
my $tmp
|
|
1602
|
+
my $tmp;
|
|
1603
|
+
$tmp = $$extra{$key}{G3} if $$extra{$key};
|
|
1601
1604
|
$tmp = '' unless $tmp;
|
|
1602
1605
|
if ($tmp eq $doc) {
|
|
1603
1606
|
$docTable = \$$value{$key};
|
|
@@ -1995,7 +1998,7 @@ sub ProcessFPXR($$$)
|
|
|
1995
1998
|
$et->Warn("Unlisted FPXR segment (index $index)") if $index != 255;
|
|
1996
1999
|
}
|
|
1997
2000
|
|
|
1998
|
-
} elsif ($type
|
|
2001
|
+
} elsif ($type != 3) { # not a "Reserved" segment
|
|
1999
2002
|
|
|
2000
2003
|
$et->Warn("Unknown FPXR segment (type $type)");
|
|
2001
2004
|
|
|
@@ -383,11 +383,11 @@ my %coordConv = (
|
|
|
383
383
|
my $alt = $val[0];
|
|
384
384
|
$alt = $val[2] unless defined $alt;
|
|
385
385
|
return undef unless defined $alt and IsFloat($alt);
|
|
386
|
-
return
|
|
386
|
+
return(($val[1] || $val[3]) ? -$alt : $alt);
|
|
387
387
|
},
|
|
388
388
|
PrintConv => q{
|
|
389
389
|
$val = int($val * 10) / 10;
|
|
390
|
-
return
|
|
390
|
+
return(($val =~ s/^-// ? "$val m Below" : "$val m Above") . " Sea Level");
|
|
391
391
|
},
|
|
392
392
|
},
|
|
393
393
|
GPSDestLatitude => {
|
|
@@ -459,7 +459,7 @@ sub ToDMS($$;$$)
|
|
|
459
459
|
|
|
460
460
|
unless (length $val) {
|
|
461
461
|
# don't convert an empty value
|
|
462
|
-
return $val if $doPrintConv and $doPrintConv eq 1; # avoid hiding existing tag when extracting
|
|
462
|
+
return $val if $doPrintConv and $doPrintConv eq '1'; # avoid hiding existing tag when extracting
|
|
463
463
|
return undef; # avoid writing empty value
|
|
464
464
|
}
|
|
465
465
|
if ($ref) {
|
|
@@ -66,9 +66,9 @@ my %addUnits = (
|
|
|
66
66
|
GROUPS => { 2 => 'Camera' },
|
|
67
67
|
NOTES => q{
|
|
68
68
|
Tags extracted from the GPMF box of GoPro MP4 videos, the APP6 "GoPro" segment
|
|
69
|
-
of JPEG files, and from the "gpmd" timed metadata if the ExtractEmbedded option
|
|
69
|
+
of JPEG files, and from the "gpmd" timed metadata if the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> option
|
|
70
70
|
is enabled. Many more tags exist, but are currently unknown and extracted only
|
|
71
|
-
with the -u option. Please let me know if you discover the meaning of any of
|
|
71
|
+
with the L<Unknown|../ExifTool.html#Unknown> (-u) option. Please let me know if you discover the meaning of any of
|
|
72
72
|
these unknown tags. See L<https://github.com/gopro/gpmf-parser> for details
|
|
73
73
|
about this format.
|
|
74
74
|
},
|
|
@@ -468,7 +468,7 @@ my %addUnits = (
|
|
|
468
468
|
GROUPS => { 2 => 'Camera' },
|
|
469
469
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
470
470
|
NOTES => q{
|
|
471
|
-
Tags extracted from the MP4 "fdsc" timed metadata when the ExtractEmbedded
|
|
471
|
+
Tags extracted from the MP4 "fdsc" timed metadata when the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded>
|
|
472
472
|
option is used.
|
|
473
473
|
},
|
|
474
474
|
0x08 => { Name => 'FirmwareVersion', Format => 'string[15]' },
|
|
@@ -613,7 +613,7 @@ sub ProcessGoPro($$$)
|
|
|
613
613
|
next unless $size or $verbose; # don't save empty values unless verbose
|
|
614
614
|
my $format = $goProFmt{$fmt} || 'undef';
|
|
615
615
|
my ($val, $i, $j, $p, @v);
|
|
616
|
-
if ($fmt
|
|
616
|
+
if ($fmt == 0x3f and defined $type) {
|
|
617
617
|
# decode structure with format given by previous 'TYPE'
|
|
618
618
|
for ($i=0; $i<$count; ++$i) {
|
|
619
619
|
my (@s, $l);
|
|
@@ -64,7 +64,7 @@ my $parsePictureTiming; # flag to enable parsing of picture timing information (
|
|
|
64
64
|
Information (SEI). I<[Yes, this description is confusing, but nothing
|
|
65
65
|
compared to the challenge of actually decoding the data!]> This information
|
|
66
66
|
may exist at regular intervals through the entire video, but only the first
|
|
67
|
-
occurrence is extracted unless the ExtractEmbedded (-ee) option is used (in
|
|
67
|
+
occurrence is extracted unless the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> (-ee) option is used (in
|
|
68
68
|
which case subsequent occurrences are extracted as sub-documents).
|
|
69
69
|
},
|
|
70
70
|
# (Note: all these are explained in IEC 61834-4, but it costs money so it is useless to me)
|
|
@@ -458,7 +458,7 @@ my $parsePictureTiming; # flag to enable parsing of picture timing information (
|
|
|
458
458
|
ValueConv => '$val == 0xff ? undef : $val',
|
|
459
459
|
PrintConv => q{
|
|
460
460
|
my $foc = ($val & 0x7e) / (($val & 0x01) ? 40 : 400);
|
|
461
|
-
return
|
|
461
|
+
return(($val & 0x80 ? 'Manual' : 'Auto') . " ($foc)");
|
|
462
462
|
},
|
|
463
463
|
},
|
|
464
464
|
);
|
|
@@ -119,7 +119,7 @@ sub ProcessTDHD($$$);
|
|
|
119
119
|
NOTES => q{
|
|
120
120
|
These tags are extracted from the APP6 "TDHD" segment of Photosmart R837
|
|
121
121
|
JPEG images. Many other unknown tags exist in is data, and can be seen with
|
|
122
|
-
the Unknown (-u) option.
|
|
122
|
+
the L<Unknown|../ExifTool.html#Unknown> (-u) option.
|
|
123
123
|
},
|
|
124
124
|
# (all subdirectories except TDHD and LSLV are automatically recognized
|
|
125
125
|
# by their "type" word of 0x10001)
|
|
@@ -3005,7 +3005,7 @@ my %sceneModeUsed = (
|
|
|
3005
3005
|
PROCESS_PROC => \&ProcessPose,
|
|
3006
3006
|
NOTES => q{
|
|
3007
3007
|
Streamed orientation information from the PixPro 4KVR360, extracted as
|
|
3008
|
-
sub-documents when the Duplicates option is used.
|
|
3008
|
+
sub-documents when the L<Duplicates|../ExifTool.html#Duplicates> option is used.
|
|
3009
3009
|
},
|
|
3010
3010
|
Accelerometer => { }, # up, back, left? units of g
|
|
3011
3011
|
AngularVelocity => { } # left, up, ccw? units?
|
|
@@ -152,7 +152,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
152
152
|
(eg. C<55(mi/h)>). If no units are specified, the default units are
|
|
153
153
|
written.
|
|
154
154
|
|
|
155
|
-
4) ExifTool writes compressed metadata to MIE files if the Compress (-z)
|
|
155
|
+
4) ExifTool writes compressed metadata to MIE files if the L<Compress|../ExifTool.html#Compress> (-z)
|
|
156
156
|
option is used and Compress::Zlib is available.
|
|
157
157
|
|
|
158
158
|
See L<http://owl.phy.queensu.ca/~phil/exiftool/MIE1.1-20070121.pdf> for the
|
|
@@ -1001,10 +1001,10 @@ sub WriteMIEGroup($$$)
|
|
|
1001
1001
|
}
|
|
1002
1002
|
}
|
|
1003
1003
|
# don't rewrite free bytes or information in deleted groups
|
|
1004
|
-
if ($format
|
|
1004
|
+
if ($format == 0x80 or ($delGroup and $tagLen and ($format & 0xf0) != 0x10)) {
|
|
1005
1005
|
$raf->Seek($valLen, 1) or $msg = 'Seek error', last;
|
|
1006
1006
|
if ($verbose > 1) {
|
|
1007
|
-
my $free = ($format
|
|
1007
|
+
my $free = ($format == 0x80) ? ' free' : '';
|
|
1008
1008
|
print $out " - $grp1:$tag ($valLen$free bytes)\n";
|
|
1009
1009
|
}
|
|
1010
1010
|
++$$et{CHANGED} if $delGroup;
|
|
@@ -97,7 +97,7 @@ sub ProcessMPImageList($$$);
|
|
|
97
97
|
NOTES => q{
|
|
98
98
|
The first MPF "Large Thumbnail" image is extracted as PreviewImage, and the
|
|
99
99
|
rest of the embedded MPF images are extracted as MPImage#. The
|
|
100
|
-
ExtractEmbedded (-ee) option may be used to extract information from these
|
|
100
|
+
L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> (-ee) option may be used to extract information from these
|
|
101
101
|
embedded images.
|
|
102
102
|
},
|
|
103
103
|
0.1 => {
|
|
@@ -163,7 +163,7 @@ sub ProcessMPImageList($$$);
|
|
|
163
163
|
},
|
|
164
164
|
Notes => q{
|
|
165
165
|
the first MPF "Large Thumbnail" is extracted as PreviewImage, and the rest
|
|
166
|
-
of the embedded MPF images are extracted as MPImage#. The ExtractEmbedded
|
|
166
|
+
of the embedded MPF images are extracted as MPImage#. The L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded>
|
|
167
167
|
option may be used to extract information from these embedded images.
|
|
168
168
|
},
|
|
169
169
|
# extract all MPF images (not just one)
|
|
@@ -59,7 +59,7 @@ my $mwgLoaded; # flag set if we alreaded Load()ed the MWG tags
|
|
|
59
59
|
string values be stored as UTF-8. To honour this, the exiftool application
|
|
60
60
|
sets the default internal EXIF string encoding to "UTF8" when the MWG module
|
|
61
61
|
is loaded, but via the API this must be done manually by setting the
|
|
62
|
-
CharsetEXIF option.
|
|
62
|
+
L<CharsetEXIF|../ExifTool.html#CharsetEXIF> option.
|
|
63
63
|
|
|
64
64
|
A complication of the MWG specification is that although the MWG:Creator
|
|
65
65
|
property may consist of multiple values, the associated EXIF tag
|
|
@@ -28,7 +28,7 @@ my %mdDateInfo = (
|
|
|
28
28
|
NOTES => q{
|
|
29
29
|
MDItem tags are extracted using the "mdls" utility. They are extracted if
|
|
30
30
|
any "MDItem*" tag or the MacOS group is specifically requested, or by
|
|
31
|
-
setting the L<MDItemTags
|
|
31
|
+
setting the L<MDItemTags|../ExifTool.html#MDItemTags> API option to 1 or the L<RequestAll|../ExifTool.html#RequestAll> API option to 2 or
|
|
32
32
|
higher. Note that these tags do not necessarily reflect the current
|
|
33
33
|
metadata of a file -- it may take some time for the MacOS mdworker daemon to
|
|
34
34
|
index the file after a metadata change.
|
|
@@ -220,7 +220,7 @@ my %mdDateInfo = (
|
|
|
220
220
|
NOTES => q{
|
|
221
221
|
XAttr tags are extracted using the "xattr" utility. They are extracted if
|
|
222
222
|
any "XAttr*" tag or the MacOS group is specifically requested, or by setting
|
|
223
|
-
the L<XAttrTags
|
|
223
|
+
the L<XAttrTags|../ExifTool.html#XAttrTags> API option to 1 or the L<RequestAll|../ExifTool.html#RequestAll> API option to 2 or higher.
|
|
224
224
|
},
|
|
225
225
|
'com.apple.FinderInfo' => {
|
|
226
226
|
Name => 'XAttrFinderInfo',
|
|
@@ -28,7 +28,7 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
|
28
28
|
The following tags are extracted from Matroska multimedia container files.
|
|
29
29
|
This container format is used by file types such as MKA, MKV, MKS and WEBM.
|
|
30
30
|
For speed, ExifTool extracts tags only up to the first Cluster unless the
|
|
31
|
-
Verbose (-v) or Unknown = 2 (-U) option is used. See
|
|
31
|
+
L<Verbose|../ExifTool.html#Verbose> (-v) or L<Unknown|../ExifTool.html#Unknown> = 2 (-U) option is used. See
|
|
32
32
|
L<http://www.matroska.org/technical/specs/index.html> for the official
|
|
33
33
|
Matroska specification.
|
|
34
34
|
},
|
|
@@ -49,7 +49,7 @@ use vars qw($VERSION %minoltaLensTypes %minoltaTeleconverters %minoltaColorMode
|
|
|
49
49
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
50
50
|
use Image::ExifTool::Exif;
|
|
51
51
|
|
|
52
|
-
$VERSION = '2.
|
|
52
|
+
$VERSION = '2.75';
|
|
53
53
|
|
|
54
54
|
# Full list of product codes for Sony-compatible Minolta lenses
|
|
55
55
|
# (ref http://www.kb.sony.com/selfservice/documentLink.do?externalId=C1000570)
|
|
@@ -589,67 +589,69 @@ $VERSION = '2.74';
|
|
|
589
589
|
'65535.45' => 'Sony FE 400mm F2.8 GM OSS', #IB (32848 - SEL400F28GM)
|
|
590
590
|
'65535.46' => 'Sony E 18-135mm F3.5-5.6 OSS', #JR (32849 - SEL18135)
|
|
591
591
|
'65535.47' => 'Sony FE 135mm F1.8 GM', #IB (32850 - SEL135F18GM)
|
|
592
|
-
'65535.48' => 'Sony FE
|
|
593
|
-
'65535.49' => 'Sony FE
|
|
594
|
-
'65535.50' => 'Sony FE
|
|
595
|
-
'65535.51' => 'Sony FE
|
|
596
|
-
'65535.52' => 'Sony FE 400mm
|
|
597
|
-
'65535.53' => 'Sony FE 400mm
|
|
592
|
+
'65535.48' => 'Sony FE 200-600mm F5.6-6.3 G OSS',#IB (32851 - SEL200600G)
|
|
593
|
+
'65535.49' => 'Sony FE 600mm F4 GM OSS', #IB (32852 - SEL600F4GM)
|
|
594
|
+
'65535.50' => 'Sony FE 70-200mm F2.8 GM OSS + 1.4X Teleconverter', #JR (33072 - SEL70200GM + SEL14TC)
|
|
595
|
+
'65535.51' => 'Sony FE 70-200mm F2.8 GM OSS + 2X Teleconverter', #JR (33073 - SEL70200GM + SEL20TC)
|
|
596
|
+
'65535.52' => 'Sony FE 100-400mm F4.5-5.6 GM OSS + 1.4X Teleconverter', #JR (33077 - SEL100400GM + SEL14TC)
|
|
597
|
+
'65535.53' => 'Sony FE 100-400mm F4.5-5.6 GM OSS + 2X Teleconverter', #JR (33078 - SEL100400GM + SEL20TC)
|
|
598
|
+
'65535.54' => 'Sony FE 400mm F2.8 GM OSS + 1.4X Teleconverter', #IB (33079 - SEL400F28GM + SEL14TC)
|
|
599
|
+
'65535.55' => 'Sony FE 400mm F2.8 GM OSS + 2X Teleconverter', #JR (33080 - SEL400F28GM + SEL20TC)
|
|
598
600
|
#
|
|
599
601
|
# 3rd party E lenses
|
|
600
602
|
#
|
|
601
|
-
'65535.
|
|
602
|
-
'65535.
|
|
603
|
-
'65535.
|
|
604
|
-
'65535.
|
|
605
|
-
'65535.
|
|
606
|
-
'65535.
|
|
607
|
-
'65535.
|
|
608
|
-
'65535.
|
|
609
|
-
'65535.
|
|
610
|
-
'65535.
|
|
611
|
-
'65535.
|
|
612
|
-
'65535.
|
|
613
|
-
'65535.
|
|
614
|
-
'65535.
|
|
615
|
-
'65535.
|
|
616
|
-
'65535.
|
|
617
|
-
'65535.
|
|
618
|
-
'65535.
|
|
619
|
-
'65535.
|
|
620
|
-
'65535.
|
|
621
|
-
'65535.
|
|
622
|
-
'65535.
|
|
623
|
-
'65535.
|
|
624
|
-
'65535.
|
|
625
|
-
'65535.
|
|
626
|
-
'65535.
|
|
627
|
-
'65535.
|
|
628
|
-
'65535.
|
|
629
|
-
'65535.
|
|
630
|
-
'65535.
|
|
631
|
-
'65535.
|
|
632
|
-
'65535.
|
|
633
|
-
'65535.
|
|
634
|
-
'65535.
|
|
635
|
-
'65535.
|
|
636
|
-
'65535.
|
|
637
|
-
'65535.
|
|
638
|
-
'65535.
|
|
639
|
-
'65535.
|
|
640
|
-
'65535.
|
|
641
|
-
'65535.
|
|
642
|
-
'65535.
|
|
603
|
+
'65535.56' => 'Samyang AF 50mm F1.4 FE', #JR (32789)
|
|
604
|
+
'65535.57' => 'Samyang AF 14mm F2.8 FE', #JR (32790 and 51505)
|
|
605
|
+
'65535.58' => 'Samyang AF 24mm F2.8', #JR (32794)
|
|
606
|
+
'65535.59' => 'Samyang AF 35mm F2.8 FE', #PH (51505)
|
|
607
|
+
'65535.60' => 'Samyang AF 35mm F1.4', #IB (51507)
|
|
608
|
+
'65535.61' => 'Sigma 19mm F2.8 [EX] DN', #JR (0)
|
|
609
|
+
'65535.62' => 'Sigma 30mm F2.8 [EX] DN', #JR (0)
|
|
610
|
+
'65535.63' => 'Sigma 60mm F2.8 DN', #JR (0)
|
|
611
|
+
'65535.64' => 'Sigma 30mm F1.4 DC DN | C', #IB (50480) (016)
|
|
612
|
+
'65535.65' => 'Sigma 85mm F1.4 DG HSM | A', #JR (50499) (018)
|
|
613
|
+
'65535.66' => 'Sigma 16mm F1.4 DC DN | C', #JR (50503) (017)
|
|
614
|
+
'65535.67' => 'Sigma 105mm F1.4 DG HSM | A', #IB (50507) (018)
|
|
615
|
+
'65535.68' => 'Sigma 56mm F1.4 DC DN | C', #JR (50508) (018)
|
|
616
|
+
'65535.69' => 'Sigma 70-200mm F2.8 DG OS HSM | S',#IB (50512) (018)
|
|
617
|
+
'65535.70' => 'Sigma 70mm F2.8 DG MACRO | A', #JR (50513) (018)
|
|
618
|
+
'65535.71' => 'Tamron 18-200mm F3.5-6.3 Di III VC', #JR (0 - Model B011)
|
|
619
|
+
'65535.72' => 'Tamron 28-75mm F2.8 Di III RXD', #JR (49457 - Model A036)
|
|
620
|
+
'65535.73' => 'Tokina FiRIN 20mm F2 FE MF', #JR (0)
|
|
621
|
+
'65535.74' => 'Tokina FiRIN 20mm F2 FE AF', #JR (49712 or 0)
|
|
622
|
+
'65535.75' => 'Tokina FiRIN 100mm F2.8 FE MACRO',#JR (49713)
|
|
623
|
+
'65535.76' => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR (50992)
|
|
624
|
+
'65535.77' => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB (50993)
|
|
625
|
+
'65535.78' => 'Voigtlander ULTRA WIDE-HELIAR 12mm F5.6 III', #IB (50994)
|
|
626
|
+
'65535.79' => 'Voigtlander MACRO APO-LANTHAR 65mm F2 Aspherical', #JR (50995)
|
|
627
|
+
'65535.80' => 'Voigtlander NOKTON 40mm F1.2 Aspherical', #JR (50996)
|
|
628
|
+
'65535.81' => 'Voigtlander NOKTON classic 35mm F1.4', #JR (50997)
|
|
629
|
+
'65535.82' => 'Voigtlander MACRO APO-LANTHAR 110mm F2.5', #JR (50998)
|
|
630
|
+
'65535.83' => 'Voigtlander COLOR-SKOPAR 21mm F3.5 Aspherical', #IB (50999)
|
|
631
|
+
'65535.84' => 'Voigtlander NOKTON 50mm F1.2 Aspherical', #JR (51000)
|
|
632
|
+
'65535.85' => 'Zeiss Touit 12mm F2.8', #JR (49201 or 0)
|
|
633
|
+
'65535.86' => 'Zeiss Touit 32mm F1.8', #JR (49202 or 0)
|
|
634
|
+
'65535.87' => 'Zeiss Touit 50mm F2.8 Macro', #JR (49203 or 0)
|
|
635
|
+
'65535.88' => 'Zeiss Batis 25mm F2', #JR (49216)
|
|
636
|
+
'65535.89' => 'Zeiss Batis 85mm F1.8', #JR (49217)
|
|
637
|
+
'65535.90' => 'Zeiss Batis 18mm F2.8', #IB (49218)
|
|
638
|
+
'65535.91' => 'Zeiss Batis 135mm F2.8', #IB (49219)
|
|
639
|
+
'65535.92' => 'Zeiss Batis 40mm F2 CF', #JR (49220)
|
|
640
|
+
'65535.93' => 'Zeiss Loxia 50mm F2', #JR (49232 or 0)
|
|
641
|
+
'65535.94' => 'Zeiss Loxia 35mm F2', #JR (49233 or 0)
|
|
642
|
+
'65535.95' => 'Zeiss Loxia 21mm F2.8', #JR (49234)
|
|
643
|
+
'65535.96' => 'Zeiss Loxia 85mm F2.4', #JR (49235)
|
|
644
|
+
'65535.97' => 'Zeiss Loxia 25mm F2.4', #JR (49236)
|
|
643
645
|
#
|
|
644
646
|
# other lenses
|
|
645
647
|
#
|
|
646
|
-
'65535.
|
|
647
|
-
'65535.
|
|
648
|
-
'65535.
|
|
649
|
-
'65535.
|
|
650
|
-
'65535.
|
|
651
|
-
'65535.
|
|
652
|
-
'65535.
|
|
648
|
+
'65535.98' => 'Arax MC 35mm F2.8 Tilt+Shift', #JD
|
|
649
|
+
'65535.99' => 'Arax MC 80mm F2.8 Tilt+Shift', #JD
|
|
650
|
+
'65535.100' => 'Zenitar MF 16mm F2.8 Fisheye M42', #JD
|
|
651
|
+
'65535.101' => 'Samyang 500mm Mirror F8.0', #19
|
|
652
|
+
'65535.102' => 'Pentacon Auto 135mm F2.8', #19
|
|
653
|
+
'65535.103' => 'Pentacon Auto 29mm F2.8', #19
|
|
654
|
+
'65535.104' => 'Helios 44-2 58mm F2.0', #19
|
|
653
655
|
);
|
|
654
656
|
|
|
655
657
|
%minoltaTeleconverters = (
|