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.

Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +16 -1
  3. data/bin/MANIFEST +2 -0
  4. data/bin/META.json +4 -3
  5. data/bin/META.yml +15 -14
  6. data/bin/README +7 -5
  7. data/bin/config_files/rotate_regions.config +173 -0
  8. data/bin/config_files/tiff_version.config +121 -0
  9. data/bin/exiftool +16 -15
  10. data/bin/lib/Image/ExifTool.pm +26 -19
  11. data/bin/lib/Image/ExifTool.pod +5 -2
  12. data/bin/lib/Image/ExifTool/Audible.pm +2 -2
  13. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +25 -21
  14. data/bin/lib/Image/ExifTool/Canon.pm +13 -9
  15. data/bin/lib/Image/ExifTool/CanonVRD.pm +4 -4
  16. data/bin/lib/Image/ExifTool/DjVu.pm +1 -2
  17. data/bin/lib/Image/ExifTool/EXE.pm +1 -1
  18. data/bin/lib/Image/ExifTool/Exif.pm +44 -6
  19. data/bin/lib/Image/ExifTool/FLIR.pm +1 -1
  20. data/bin/lib/Image/ExifTool/FlashPix.pm +12 -9
  21. data/bin/lib/Image/ExifTool/GPS.pm +3 -3
  22. data/bin/lib/Image/ExifTool/GoPro.pm +4 -4
  23. data/bin/lib/Image/ExifTool/H264.pm +2 -2
  24. data/bin/lib/Image/ExifTool/HP.pm +1 -1
  25. data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
  26. data/bin/lib/Image/ExifTool/MIE.pm +3 -3
  27. data/bin/lib/Image/ExifTool/MPF.pm +2 -2
  28. data/bin/lib/Image/ExifTool/MWG.pm +1 -1
  29. data/bin/lib/Image/ExifTool/MacOS.pm +2 -2
  30. data/bin/lib/Image/ExifTool/Matroska.pm +1 -1
  31. data/bin/lib/Image/ExifTool/Minolta.pm +58 -56
  32. data/bin/lib/Image/ExifTool/Nikon.pm +1 -1
  33. data/bin/lib/Image/ExifTool/Olympus.pm +2 -2
  34. data/bin/lib/Image/ExifTool/OpenEXR.pm +2 -2
  35. data/bin/lib/Image/ExifTool/PDF.pm +4 -4
  36. data/bin/lib/Image/ExifTool/PICT.pm +3 -3
  37. data/bin/lib/Image/ExifTool/PNG.pm +2 -2
  38. data/bin/lib/Image/ExifTool/Pentax.pm +1 -1
  39. data/bin/lib/Image/ExifTool/Photoshop.pm +1 -2
  40. data/bin/lib/Image/ExifTool/PostScript.pm +4 -4
  41. data/bin/lib/Image/ExifTool/QuickTime.pm +37 -15
  42. data/bin/lib/Image/ExifTool/RIFF.pm +3 -2
  43. data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
  44. data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
  45. data/bin/lib/Image/ExifTool/Sony.pm +4 -2
  46. data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
  47. data/bin/lib/Image/ExifTool/TagLookup.pm +9 -7
  48. data/bin/lib/Image/ExifTool/TagNames.pod +31 -21
  49. data/bin/lib/Image/ExifTool/VCard.pm +1 -1
  50. data/bin/lib/Image/ExifTool/Validate.pm +2 -2
  51. data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  52. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -1
  53. data/bin/lib/Image/ExifTool/Writer.pl +11 -6
  54. data/bin/lib/Image/ExifTool/XMP.pm +3 -7
  55. data/bin/lib/Image/ExifTool/XMPStruct.pl +2 -1
  56. data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  57. data/bin/lib/Image/ExifTool/iWork.pm +1 -1
  58. data/bin/perl-Image-ExifTool.spec +3 -3
  59. data/lib/exiftool_vendored/version.rb +1 -1
  60. 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 eq 8) {
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 eq 0xffff00f7;
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
  }
@@ -1362,7 +1362,7 @@ sub ProcessEXE($$)
1362
1362
  python => 'py',
1363
1363
  ruby => 'rb',
1364
1364
  php => 'php',
1365
- }->{$1};
1365
+ }->{$prog};
1366
1366
  # use '.sh' for extension of all shell scripts
1367
1367
  $ext = $prog =~ /sh$/ ? 'sh' : '' unless defined $ext;
1368
1368
  }
@@ -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.15';
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
- return join(' or ', @best) if @best;
5227
- return join(' or ', @matches) if @matches;
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 ne 196608) {
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 eq 4; # escaped ASCII char (eg. '\\')
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.36';
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
- 037 => 'IBM EBCDIC US-Canada',
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 eq 1200) { # UTF-16, little endian
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 = $$extra{$key}{G3} if $$extra{$key};
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 = $$extra{$key}{G3} if $$extra{$key};
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 = $$extra{$key}{G3} if $$extra{$key};
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 ne 3) { # not a "Reserved" segment
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 ($val[1] || $val[3]) ? -$alt : $alt;
386
+ return(($val[1] || $val[3]) ? -$alt : $alt);
387
387
  },
388
388
  PrintConv => q{
389
389
  $val = int($val * 10) / 10;
390
- return ($val =~ s/^-// ? "$val m Below" : "$val m Above") . " Sea Level";
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 eq 0x3f and defined $type) {
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 ($val & 0x80 ? 'Manual' : 'Auto') . " ($foc)";
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 eq 0x80 or ($delGroup and $tagLen and ($format & 0xf0) != 0x10)) {
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 eq 0x80) ? ' free' : '';
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 API option|../ExifTool.html#MDItemTags> to 1 or the L<RequestAll API option|../ExifTool.html#RequestAll> to 2 or
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 API option|../ExifTool.html#XAttrTags> to 1 or the L<RequestAll API option|../ExifTool.html#RequestAll> to 2 or higher.
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.74';
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 70-200mm F2.8 GM OSS + 1.4X Teleconverter', #JR (33072 - SEL70200GM + SEL14TC)
593
- '65535.49' => 'Sony FE 70-200mm F2.8 GM OSS + 2X Teleconverter', #JR (33073 - SEL70200GM + SEL20TC)
594
- '65535.50' => 'Sony FE 100-400mm F4.5-5.6 GM OSS + 1.4X Teleconverter', #JR (33077 - SEL100400GM + SEL14TC)
595
- '65535.51' => 'Sony FE 100-400mm F4.5-5.6 GM OSS + 2X Teleconverter', #JR (33078 - SEL100400GM + SEL20TC)
596
- '65535.52' => 'Sony FE 400mm F2.8 GM OSS + 1.4X Teleconverter', #IB (33079 - SEL400F28GM + SEL14TC)
597
- '65535.53' => 'Sony FE 400mm F2.8 GM OSS + 2X Teleconverter', #JR (33080 - SEL400F28GM + SEL20TC)
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.54' => 'Samyang AF 50mm F1.4 FE', #JR (32789)
602
- '65535.55' => 'Samyang AF 14mm F2.8 FE', #JR (32790 and 51505)
603
- '65535.56' => 'Samyang AF 24mm F2.8', #JR (32794)
604
- '65535.57' => 'Samyang AF 35mm F2.8 FE', #PH (51505)
605
- '65535.58' => 'Samyang AF 35mm F1.4', #IB (51507)
606
- '65535.59' => 'Sigma 19mm F2.8 [EX] DN', #JR (0)
607
- '65535.60' => 'Sigma 30mm F2.8 [EX] DN', #JR (0)
608
- '65535.61' => 'Sigma 60mm F2.8 DN', #JR (0)
609
- '65535.62' => 'Sigma 30mm F1.4 DC DN | C', #IB (50480) (016)
610
- '65535.63' => 'Sigma 85mm F1.4 DG HSM | A', #JR (50499) (018)
611
- '65535.64' => 'Sigma 16mm F1.4 DC DN | C', #JR (50503) (017)
612
- '65535.65' => 'Sigma 105mm F1.4 DG HSM | A', #IB (50507) (018)
613
- '65535.66' => 'Sigma 56mm F1.4 DC DN | C', #JR (50508) (018)
614
- '65535.67' => 'Sigma 70-200mm F2.8 DG OS HSM | S',#IB (50512) (018)
615
- '65535.68' => 'Sigma 70mm F2.8 DG MACRO | A', #JR (50513) (018)
616
- '65535.69' => 'Tamron 18-200mm F3.5-6.3 Di III VC', #JR (0 - Model B011)
617
- '65535.70' => 'Tamron 28-75mm F2.8 Di III RXD', #JR (49457 - Model A036)
618
- '65535.71' => 'Tokina FiRIN 20mm F2 FE MF', #JR (0)
619
- '65535.72' => 'Tokina FiRIN 20mm F2 FE AF', #JR (49712 or 0)
620
- '65535.73' => 'Tokina FiRIN 100mm F2.8 FE MACRO',#JR (49713)
621
- '65535.74' => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR (50992)
622
- '65535.75' => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB (50993)
623
- '65535.76' => 'Voigtlander ULTRA WIDE-HELIAR 12mm F5.6 III', #IB (50994)
624
- '65535.77' => 'Voigtlander MACRO APO-LANTHAR 65mm F2 Aspherical', #JR (50995)
625
- '65535.78' => 'Voigtlander NOKTON 40mm F1.2 Aspherical', #JR (50996)
626
- '65535.79' => 'Voigtlander NOKTON classic 35mm F1.4', #JR (50997)
627
- '65535.80' => 'Voigtlander MACRO APO-LANTHAR 110mm F2.5', #JR (50998)
628
- '65535.81' => 'Voigtlander COLOR-SKOPAR 21mm F3.5 Aspherical', #IB (50999)
629
- '65535.82' => 'Voigtlander NOKTON 50mm F1.2 Aspherical', #JR (51000)
630
- '65535.83' => 'Zeiss Touit 12mm F2.8', #JR (49201 or 0)
631
- '65535.84' => 'Zeiss Touit 32mm F1.8', #JR (49202 or 0)
632
- '65535.85' => 'Zeiss Touit 50mm F2.8 Macro', #JR (49203 or 0)
633
- '65535.86' => 'Zeiss Batis 25mm F2', #JR (49216)
634
- '65535.87' => 'Zeiss Batis 85mm F1.8', #JR (49217)
635
- '65535.88' => 'Zeiss Batis 18mm F2.8', #IB (49218)
636
- '65535.89' => 'Zeiss Batis 135mm F2.8', #IB (49219)
637
- '65535.90' => 'Zeiss Batis 40mm F2 CF', #JR (49220)
638
- '65535.91' => 'Zeiss Loxia 50mm F2', #JR (49232 or 0)
639
- '65535.92' => 'Zeiss Loxia 35mm F2', #JR (49233 or 0)
640
- '65535.93' => 'Zeiss Loxia 21mm F2.8', #JR (49234)
641
- '65535.94' => 'Zeiss Loxia 85mm F2.4', #JR (49235)
642
- '65535.95' => 'Zeiss Loxia 25mm F2.4', #JR (49236)
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.96' => 'Arax MC 35mm F2.8 Tilt+Shift', #JD
647
- '65535.97' => 'Arax MC 80mm F2.8 Tilt+Shift', #JD
648
- '65535.98' => 'Zenitar MF 16mm F2.8 Fisheye M42', #JD
649
- '65535.99' => 'Samyang 500mm Mirror F8.0', #19
650
- '65535.100' => 'Pentacon Auto 135mm F2.8', #19
651
- '65535.101' => 'Pentacon Auto 29mm F2.8', #19
652
- '65535.102' => 'Helios 44-2 58mm F2.0', #19
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 = (