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
data/bin/exiftool CHANGED
@@ -12,7 +12,7 @@
12
12
  use strict;
13
13
  require 5.004;
14
14
 
15
- my $version = '11.49';
15
+ my $version = '11.50';
16
16
 
17
17
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
18
18
  my $exeDir;
@@ -495,9 +495,7 @@ $xml = 0;
495
495
 
496
496
  # define local variables used only in this command loop
497
497
  my @fileOrder; # tags to use for ordering of input files
498
- my %excludeGrp; # hash of tags excluded by group
499
498
  my $addGeotime; # automatically added geotime argument
500
- my $allInGroup; # flag to show all tags in a group
501
499
  my $doGlob; # flag set to do filename wildcard expansion
502
500
  my $escapeXML; # flag to escape printed values for xml
503
501
  my $setTagsFile; # filename for last TagsFromFile option
@@ -879,6 +877,7 @@ for (;;) {
879
877
  $showGroup = $3 || 0;
880
878
  $allGroup = ($2 ? lc($2) eq 'roupnames' : $1 eq 'G');
881
879
  $mt->Options(SavePath => 1) if $showGroup =~ /\b5\b/;
880
+ $mt->Options(SaveFormat => 1) if $showGroup =~ /\b6\b/;
882
881
  next;
883
882
  }
884
883
  if ($a eq 'geotag') {
@@ -3136,6 +3135,7 @@ sub EscapeJSON($;$)
3136
3135
  # escape special characters
3137
3136
  $str =~ s/(["\t\n\r\\])/\\$jsonChar{$1}/sg;
3138
3137
  if ($json < 2) { # JSON
3138
+ $str =~ tr/\0//d; # remove all nulls
3139
3139
  # escape other control characters with \u
3140
3140
  $str =~ s/([\0-\x1f])/sprintf("\\u%.4X",ord $1)/sge;
3141
3141
  # JSON strings must be valid UTF8
@@ -4284,8 +4284,8 @@ supported by ExifTool (r = read, w = write, c = create):
4284
4284
  CRM r/w | GZ r | MOI r | PMP r | WAV r
4285
4285
  CRW r/w | HDP r/w | MOS r/w | PNG r/w | WDP r/w
4286
4286
  CS1 r/w | HDR r | MOV r/w | PPM r/w | WEBP r
4287
- DCM r | HEIC r | MP3 r | PPT r | WEBM r
4288
- DCP r/w | HEIF r | MP4 r/w | PPTX r | WMA r
4287
+ DCM r | HEIC r/w | MP3 r | PPT r | WEBM r
4288
+ DCP r/w | HEIF r/w | MP4 r/w | PPTX r | WMA r
4289
4289
  DCR r | HTML r | MPC r | PS r/w | WMV r
4290
4290
  DFONT r | ICC r/w/c | MPG r | PSB r/w | WTV r
4291
4291
  DIVX r | ICS r | MPO r/w | PSD r/w | WV r
@@ -5119,7 +5119,7 @@ with this command:
5119
5119
 
5120
5120
  produces output like this:
5121
5121
 
5122
- -- Generated by ExifTool 11.49 --
5122
+ -- Generated by ExifTool 11.50 --
5123
5123
  File: a.jpg - 2003:10:31 15:44:19
5124
5124
  (f/5.6, 1/60s, ISO 100)
5125
5125
  File: b.jpg - 2006:05:23 11:57:38
@@ -5448,10 +5448,11 @@ B<-o> option with an XMP extension for the output file.
5448
5448
  =item B<-a>, B<--a> (B<-duplicates>, B<--duplicates>)
5449
5449
 
5450
5450
  Allow (B<-a>) or suppress (B<--a>) duplicate tag names to be extracted. By
5451
- default, duplicate tags are suppressed unless the B<-ee> or B<-X> options
5452
- are used or the Duplicates option is enabled in the configuration file.
5453
- This option also has an affect when writing to allow duplicate Warning
5454
- messages to be shown.
5451
+ default, duplicate tags are suppressed when reading unless the B<-ee> or
5452
+ B<-X> options are used or the Duplicates option is enabled in the
5453
+ configuration file. This option has an affect when writing only to allow
5454
+ duplicate Warning messages to be shown. Duplicate tags are always extracted
5455
+ when copying.
5455
5456
 
5456
5457
  =item B<-e> (B<--composite>)
5457
5458
 
@@ -6146,11 +6147,11 @@ placing braces around the tag name and inserting the expression after the
6146
6147
  name, separated by a semicolon (ie. C<${TAG;EXPR}>). The expression acts on
6147
6148
  the value of the tag through the default input variable (C<$_>), and has
6148
6149
  access to the full ExifTool API through the current ExifTool object
6149
- (C<$self>). It may contain any valid Perl code, including translation
6150
- (C<tr///>) and substitution (C<s///>) operations, but note that braces
6151
- within the expression must be balanced. The example below prints the camera
6152
- Make with spaces translated to underlines, and multiple consecutive
6153
- underlines replaced by a single underline:
6150
+ (C<$self>) and the tag key (C<$tag>). It may contain any valid Perl code,
6151
+ including translation (C<tr///>) and substitution (C<s///>) operations, but
6152
+ note that braces within the expression must be balanced. The example below
6153
+ prints the camera Make with spaces translated to underlines, and multiple
6154
+ consecutive underlines replaced by a single underline:
6154
6155
 
6155
6156
  exiftool -p '${make;tr/ /_/;s/__+/_/g}' image.jpg
6156
6157
 
@@ -27,7 +27,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
27
27
  %mimeType $swapBytes $swapWords $currentByteOrder %unpackStd
28
28
  %jpegMarker %specialTags %fileTypeLookup);
29
29
 
30
- $VERSION = '11.49';
30
+ $VERSION = '11.50';
31
31
  $RELEASE = '';
32
32
  @ISA = qw(Exporter);
33
33
  %EXPORT_TAGS = (
@@ -980,7 +980,7 @@ sub DummyWriteProc { return 1; }
980
980
 
981
981
  my %systemTagsNotes = (
982
982
  Notes => q{
983
- extracted only if specifically requested or the SystemTags or RequestAll API
983
+ extracted only if specifically requested or the L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll> API
984
984
  option is set
985
985
  },
986
986
  );
@@ -1014,7 +1014,7 @@ my %systemTagsNotes = (
1014
1014
  Notes => q{
1015
1015
  returns errors that may have occurred while reading or writing a file. Any
1016
1016
  Error will prevent the file from being processed. Minor errors may be
1017
- downgraded to warnings with the -m or IgnoreMinorErrors option
1017
+ downgraded to warnings with the -m or L<IgnoreMinorErrors|../ExifTool.html#IgnoreMinorErrors> option
1018
1018
  },
1019
1019
  },
1020
1020
  Warning => {
@@ -1022,8 +1022,8 @@ my %systemTagsNotes = (
1022
1022
  Groups => \%allGroupsExifTool,
1023
1023
  Notes => q{
1024
1024
  returns warnings that may have occurred while reading or writing a file.
1025
- Use the -a or Duplicates option to see all warnings if more than one
1026
- occurred. Minor warnings may be ignored with the -m or IgnoreMinorErrors
1025
+ Use the -a or L<Duplicates|../ExifTool.html#Duplicates> option to see all warnings if more than one
1026
+ occurred. Minor warnings may be ignored with the -m or L<IgnoreMinorErrors|../ExifTool.html#IgnoreMinorErrors>
1027
1027
  option. Minor warnings with a capital "M" in the "[Minor]" designation
1028
1028
  indicate that the processing is affected by ignoring the warning
1029
1029
  },
@@ -1069,7 +1069,7 @@ my %systemTagsNotes = (
1069
1069
  Groups => { 1 => 'System' },
1070
1070
  Notes => q{
1071
1071
  absolute path of source file. Not generated unless specifically requested or
1072
- the RequestAll API option is set. Does not support Windows Unicode file
1072
+ the L<RequestAll|../ExifTool.html#RequestAll> API option is set. Does not support Windows Unicode file
1073
1073
  names
1074
1074
  },
1075
1075
  },
@@ -1092,7 +1092,7 @@ my %systemTagsNotes = (
1092
1092
  sequence number for each source file when extracting or copying information,
1093
1093
  including files that fail the -if condition of the command-line application,
1094
1094
  beginning at 0 for the first file. Not generated unless specifically
1095
- requested or the RequestAll API option is set
1095
+ requested or the L<RequestAll|../ExifTool.html#RequestAll> API option is set
1096
1096
  },
1097
1097
  },
1098
1098
  FileSize => {
@@ -1107,7 +1107,7 @@ my %systemTagsNotes = (
1107
1107
  Groups => { 1 => 'System' },
1108
1108
  Notes => q{
1109
1109
  size of the file's resource fork if it contains data. Mac OS only. If this
1110
- tag is generated the ExtractEmbedded option may be used to extract
1110
+ tag is generated the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> option may be used to extract
1111
1111
  resource-fork information as a sub-document. When writing, the resource
1112
1112
  fork is preserved by default, but it may be deleted with C<-rsrc:all=> on
1113
1113
  the command line
@@ -1163,7 +1163,7 @@ my %systemTagsNotes = (
1163
1163
  the filesystem creation date/time. Windows/Mac only. In Windows, the file
1164
1164
  creation date/time is preserved by default when writing if Win32API::File
1165
1165
  and Win32::API are available. On Mac, this tag is extracted only if it or
1166
- the MacOS group is specifically requested or the RequestAll API option is
1166
+ the MacOS group is specifically requested or the L<RequestAll|../ExifTool.html#RequestAll> API option is
1167
1167
  set to 2 or higher. Requires "setfile" for writing on Mac
1168
1168
  },
1169
1169
  Groups => { 1 => 'System', 2 => 'Time' },
@@ -1230,7 +1230,7 @@ my %systemTagsNotes = (
1230
1230
  FileAttributes => {
1231
1231
  Groups => { 1 => 'System' },
1232
1232
  Notes => q{
1233
- extracted only if specifically requested or the SystemTags or RequestAll API
1233
+ extracted only if specifically requested or the L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll> API
1234
1234
  option is set. 2 or 3 values: 0. File type, 1. Attribute bits, 2. Windows
1235
1235
  attribute bits if Win32API::File is available
1236
1236
  },
@@ -1285,7 +1285,7 @@ my %systemTagsNotes = (
1285
1285
  FileUserID => {
1286
1286
  Groups => { 1 => 'System' },
1287
1287
  Notes => q{
1288
- extracted only if specifically requested or the SystemTags or RequestAll API
1288
+ extracted only if specifically requested or the L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll> API
1289
1289
  option is set. Returns user ID number with the -n option, or name
1290
1290
  otherwise. May be written with either user name or number
1291
1291
  },
@@ -1299,7 +1299,7 @@ my %systemTagsNotes = (
1299
1299
  FileGroupID => {
1300
1300
  Groups => { 1 => 'System' },
1301
1301
  Notes => q{
1302
- extracted only if specifically requested or the SystemTags or RequestAll API
1302
+ extracted only if specifically requested or the L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll> API
1303
1303
  option is set. Returns group ID number with the -n option, or name
1304
1304
  otherwise. May be written with either group name or number
1305
1305
  },
@@ -1526,7 +1526,7 @@ my %systemTagsNotes = (
1526
1526
  Groups => { 0 => 'ExifTool', 1 => 'ExifTool', 2 => 'Other' },
1527
1527
  Notes => q{
1528
1528
  the clock time in seconds taken by ExifTool to extract information from this
1529
- file. Not generated unless specifically requested or the RequestAll API
1529
+ file. Not generated unless specifically requested or the L<RequestAll|../ExifTool.html#RequestAll> API
1530
1530
  option is set. Requires Time::HiRes
1531
1531
  },
1532
1532
  PrintConv => 'sprintf("%.3g s", $val)',
@@ -1538,7 +1538,7 @@ my %systemTagsNotes = (
1538
1538
  sub-sampling values to generate the value of this tag. The result is
1539
1539
  compared to known values in an attempt to deduce the originating software
1540
1540
  based only on the JPEG image data. For performance reasons, this tag is
1541
- generated only if specifically requested or the RequestAll API option is set
1541
+ generated only if specifically requested or the L<RequestAll|../ExifTool.html#RequestAll> API option is set
1542
1542
  to 3 or higher
1543
1543
  },
1544
1544
  },
@@ -1546,14 +1546,14 @@ my %systemTagsNotes = (
1546
1546
  Notes => q{
1547
1547
  an estimate of the IJG JPEG quality setting for the image, calculated from
1548
1548
  the quantization tables. For performance reasons, this tag is generated
1549
- only if specifically requested or the RequestAll API option is set to 3 or
1549
+ only if specifically requested or the L<RequestAll|../ExifTool.html#RequestAll> API option is set to 3 or
1550
1550
  higher
1551
1551
  },
1552
1552
  },
1553
1553
  JPEGImageLength => {
1554
1554
  Notes => q{
1555
1555
  byte length of JPEG image without metadata. For performance reasons, this
1556
- tag is generated only if specifically requested or the RequestAll API option
1556
+ tag is generated only if specifically requested or the L<RequestAll|../ExifTool.html#RequestAll> API option
1557
1557
  is set to 3 or higher
1558
1558
  },
1559
1559
  },
@@ -1563,7 +1563,7 @@ my %systemTagsNotes = (
1563
1563
  Notes => q{
1564
1564
  the current date/time. Useful when setting the tag values, eg.
1565
1565
  C<"-modifydate<now">. Not generated unless specifically requested or the
1566
- RequestAll API option is set
1566
+ L<RequestAll|../ExifTool.html#RequestAll> API option is set
1567
1567
  },
1568
1568
  PrintConv => '$self->ConvertDateTime($val)',
1569
1569
  },
@@ -1574,7 +1574,7 @@ my %systemTagsNotes = (
1574
1574
  YYYYmmdd-HHMM-SSNN-PPPP-RRRRRRRRRRRR, where Y=year, m=month, d=day, H=hour,
1575
1575
  M=minute, S=second, N=file sequence number in hex, P=process ID in hex, and
1576
1576
  R=random hex number; without dashes with the -n option. Not generated
1577
- unless specifically requested or the RequestAll API option is set
1577
+ unless specifically requested or the L<RequestAll|../ExifTool.html#RequestAll> API option is set
1578
1578
  },
1579
1579
  PrintConv => '$val =~ s/(.{8})(.{4})(.{4})(.{4})/$1-$2-$3-$4-/; $val',
1580
1580
  },
@@ -2150,6 +2150,7 @@ sub ClearOptions($)
2150
2150
  QuickTimeUTC=> undef, # assume that QuickTime date/time tags are stored as UTC
2151
2151
  RequestAll => undef, # extract all tags that must be specifically requested
2152
2152
  RequestTags => undef, # extra tags to request (on top of those in the tag list)
2153
+ SaveFormat => undef, # (undocumented) save family 6 tag TIFF format
2153
2154
  SavePath => undef, # (undocumented) save family 5 location path
2154
2155
  ScanForXMP => undef, # flag to scan for XMP information in all files
2155
2156
  Sort => 'Input', # order to sort found tags (Input, File, Tag, Descr, Group#)
@@ -3225,6 +3226,10 @@ sub GetGroup($$;$)
3225
3226
  $groups[1] = $$ex{G1} =~ /^\+(.*)/ ? "$groups[1]$1" : $$ex{G1} if $$ex{G1};
3226
3227
  $groups[3] = 'Doc' . $$ex{G3} if $$ex{G3};
3227
3228
  $groups[5] = $$ex{G5} || $groups[1] if defined $$ex{G5};
3229
+ if (defined $$ex{G6}) {
3230
+ $groups[5] = '' unless defined $groups[5]; # (can't leave a hole in the array)
3231
+ $groups[6] = $$ex{G6};
3232
+ }
3228
3233
  }
3229
3234
  if ($family) {
3230
3235
  return $groups[$family] || '' if $family > 0;
@@ -7376,7 +7381,9 @@ sub GetTagInfo($$$;$$$)
7376
7381
  next;
7377
7382
  }
7378
7383
  }
7379
- if ($$tagInfo{Unknown} and not $$self{OPTIONS}{Unknown} and not $$self{OPTIONS}{Verbose}) {
7384
+ if ($$tagInfo{Unknown} and not $$self{OPTIONS}{Unknown} and
7385
+ not $$self{OPTIONS}{Verbose} and not $$self{HTML_DUMP})
7386
+ {
7380
7387
  # don't return Unknown tags unless that option is set
7381
7388
  return undef;
7382
7389
  }
@@ -92,8 +92,8 @@ supported by ExifTool (r = read, w = write, c = create):
92
92
  CRM r/w | GZ r | MOI r | PMP r | WAV r
93
93
  CRW r/w | HDP r/w | MOS r/w | PNG r/w | WDP r/w
94
94
  CS1 r/w | HDR r | MOV r/w | PPM r/w | WEBP r
95
- DCM r | HEIC r | MP3 r | PPT r | WEBM r
96
- DCP r/w | HEIF r | MP4 r/w | PPTX r | WMA r
95
+ DCM r | HEIC r/w | MP3 r | PPT r | WEBM r
96
+ DCP r/w | HEIF r/w | MP4 r/w | PPTX r | WMA r
97
97
  DCR r | HTML r | MPC r | PS r/w | WMV r
98
98
  DFONT r | ICC r/w/c | MPG r | PSB r/w | WTV r
99
99
  DIVX r | ICS r | MPO r/w | PSD r/w | WV r
@@ -424,6 +424,9 @@ in the full ExifTool distribution for examples.
424
424
 
425
425
  =item Option Parameters:
426
426
 
427
+ Note that these API options may also be used in the exiftool application via
428
+ the command-line B<-api> option.
429
+
427
430
  =over 4
428
431
 
429
432
  =item Binary
@@ -129,13 +129,13 @@ sub ProcessAudible_meta($$$)
129
129
  for ($index=0; $index<$num; ++$index) {
130
130
  last if $pos + 3 > $dirLen;
131
131
  my $unk = Get8u($dataPt, $pos); # ? (0x80 or 0x00)
132
- last unless $unk eq 0x80 or $unk eq 0x00;
132
+ last unless $unk == 0x80 or $unk == 0x00;
133
133
  my $len = Get16u($dataPt, $pos + 1); # tag length
134
134
  $pos += 3;
135
135
  last if $pos + $len + 6 > $dirLen or not $len;
136
136
  my $tag = substr($$dataPt, $pos, $len); # tag ID
137
137
  my $ver = Get16u($dataPt, $pos + $len); # version?
138
- last unless $ver eq 0x0001;
138
+ last unless $ver == 0x0001;
139
139
  my $size = Get32u($dataPt, $pos + $len + 2);# data size
140
140
  $pos += $len + 6;
141
141
  last if $pos + $size > $dirLen;
@@ -176,7 +176,7 @@ tag ID. In these cases, the actual name used depends on the context in
176
176
  which the information is found. Case is not significant for tag names. A
177
177
  question mark (C<?>) after a tag name indicates that the information is
178
178
  either not understood, not verified, or not very useful -- these tags are
179
- not extracted by ExifTool unless the Unknown (-u) option is enabled. Be
179
+ not extracted by ExifTool unless the L<Unknown|../ExifTool.html#Unknown> (-u) option is enabled. Be
180
180
  aware that some tag names are different than the descriptions printed out by
181
181
  default when extracting information with exiftool. To see the tag names
182
182
  instead of the descriptions, use C<exiftool -s>.
@@ -196,7 +196,7 @@ be added and deleted. A slash (C</>) indicates a tag that ExifTool will
196
196
  I<Avoid> when writing. These will be edited but not created if another
197
197
  same-named tag may be created instead. To create these tags, the group
198
198
  should be specified. A tilde (C<~>) indicates a tag this is writable only
199
- when the print conversion is disabled (by setting PrintConv to 0, using the
199
+ when the print conversion is disabled (by setting L<PrintConv|../ExifTool.html#PrintConv> to 0, using the
200
200
  -n option, or suffixing the tag name with a C<#> character). An exclamation
201
201
  point (C<!>) indicates a tag that is considered I<Unsafe> to write under
202
202
  normal circumstances. These tags are not written unless specified
@@ -215,7 +215,7 @@ listed as the computer-readable and human-readable values on the left and
215
215
  right hand side of an equals sign (C<=>) respectively. The human-readable
216
216
  values are used by default when reading and writing, but the
217
217
  computer-readable values may be accessed by disabling the value conversion
218
- with the -n option on the command line, by setting the ValueConv option to 0
218
+ with the -n option on the command line, by setting the L<PrintConv|../ExifTool.html#PrintConv> option to 0
219
219
  in the API, or or on a per-tag basis by adding a hash (C<#>) after the tag
220
220
  name.
221
221
 
@@ -273,7 +273,7 @@ Some GPS tags have values which are fixed-length strings. For these, the
273
273
  indicated string lengths include a null terminator which is added
274
274
  automatically by ExifTool. Remember that the descriptive values are used
275
275
  when writing (eg. 'Above Sea Level', not '0') unless the print conversion is
276
- disabled (with '-n' on the command line or the PrintConv option in the API,
276
+ disabled (with '-n' on the command line or the L<PrintConv|../ExifTool.html#PrintConv> option in the API,
277
277
  or by suffixing the tag name with a C<#> character).
278
278
 
279
279
  When adding GPS information to an image, it is important to set all of the
@@ -306,15 +306,15 @@ HH:MM:SS[.ss][+/-HH:MM]", C<boolean> is either "True" or "False", C<struct>
306
306
  indicates a structured tag, and C<lang-alt> is a tag that supports alternate
307
307
  languages.
308
308
 
309
- When reading, C<struct> tags are extracted only if the Struct (-struct)
309
+ When reading, C<struct> tags are extracted only if the L<Struct|../ExifTool.html#Struct> (-struct)
310
310
  option is used. Otherwise the corresponding I<Flattened> tags, indicated by
311
311
  an underline (C<_>) after the B<Writable> type, are extracted. When
312
312
  copying, by default both structured and flattened tags are available, but
313
313
  the flattened tags are considered "unsafe" so they they aren't copied unless
314
- specified explicitly. The Struct option may be disabled by setting Struct
314
+ specified explicitly. The L<Struct|../ExifTool.html#Struct> option may be disabled by setting Struct
315
315
  to 0 via the API or with --struct on the command line to copy only flattened
316
316
  tags, or enabled by setting Struct to 1 via the API or with -struct on the
317
- command line to copy only as structures. When writing, the Struct option
317
+ command line to copy only as structures. When writing, the L<Struct|../ExifTool.html#Struct> option
318
318
  has no effect, and both structured and flattened tags may be written. See
319
319
  L<http://owl.phy.queensu.ca/~phil/exiftool/struct.html> for more details.
320
320
 
@@ -381,7 +381,7 @@ the B<Writable> format name. For tags where a range of lengths is allowed,
381
381
  the minimum and maximum lengths are separated by a comma within the
382
382
  brackets. When writing, ExifTool issues a minor warning and truncates the
383
383
  value if it is longer than allowed by the IPTC specification. Minor errors
384
- may be ignored with the IgnoreMinorErrors (-m) option, allowing longer
384
+ may be ignored with the L<IgnoreMinorErrors|../ExifTool.html#IgnoreMinorErrors> (-m) option, allowing longer
385
385
  values to be written, but beware that values like this may cause problems
386
386
  for some other IPTC readers. ExifTool will happily read IPTC values of any
387
387
  length.
@@ -411,7 +411,7 @@ image files (most notably, MOV/MP4 videos and HEIC/CR3 images). Exiftool
411
411
  extracts standard meta information and a variety of audio, video and image
412
412
  parameters, as well as proprietary information written by many camera
413
413
  models. Tags with a question mark after their name are not extracted unless
414
- the Unknown option is set.
414
+ the L<Unknown|../ExifTool.html#Unknown> option is set.
415
415
 
416
416
  When writing, ExifTool creates both QuickTime and XMP tags by default, but
417
417
  the group may be specified to write one or the other separately. If no
@@ -428,20 +428,24 @@ QuickTime-based files; it extracts other track-specific and timed
428
428
  metadata, but can not yet edit tags in these locations (with the
429
429
  exception of track-level date/time tags).
430
430
 
431
- Alternate language tags may be accessed for ItemList and Keys tags by adding
431
+ Alternate language tags may be accessed for
432
+ L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
433
+ L<Keys|Image::ExifTool::TagNames/QuickTime Keys Tags> tags by adding
432
434
  a 3-character ISO 639-2 language code and an optional ISO 3166-1 alpha 2
433
435
  country code to the tag name (eg. "ItemList:Artist-deu" or
434
- "ItemList::Artist-deu-DE"). Most UserData tags support a language code, but
435
- without a country code. If no language code is specified when writing,
436
- alternate languages for the tag are deleted. Use the "und" language code to
437
- write the default language without deleting alternate languages. Note that
438
- "eng" is treated as a default language when reading, but not when writing.
436
+ "ItemList::Artist-deu-DE"). Most
437
+ L<UserData|Image::ExifTool::TagNames/QuickTime UserData Tags> tags support a
438
+ language code, but without a country code. If no language code is specified
439
+ when writing, alternate languages for the tag are deleted. Use the "und"
440
+ language code to write the default language without deleting alternate
441
+ languages. Note that "eng" is treated as a default language when reading,
442
+ but not when writing.
439
443
 
440
444
  According to the specification, many QuickTime date/time tags should be
441
445
  stored as UTC. Unfortunately, digital cameras often store local time values
442
446
  instead (presumably because they don't know the time zone). For this
443
447
  reason, by default ExifTool does not assume a time zone for these values.
444
- However, if the QuickTimeUTC API option is set, then ExifTool will assume
448
+ However, if the L<QuickTimeUTC|../ExifTool.html#QuickTimeUTC> API option is set, then ExifTool will assume
445
449
  these values are properly stored as UTC, and will convert them to local time
446
450
  when extracting.
447
451
 
@@ -457,7 +461,7 @@ a few).
457
461
  Many Photoshop tags are marked as Unknown (indicated by a question mark
458
462
  after the tag name) because the information they provide is not very useful
459
463
  under normal circumstances. These unknown tags are not extracted unless the
460
- Unknown (-u) option is used. See
464
+ L<Unknown|../ExifTool.html#Unknown> (-u) option is used. See
461
465
  L<http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/> for the
462
466
  official specification
463
467
 
@@ -468,7 +472,7 @@ access to this information.
468
472
  },
469
473
  PrintIM => q{
470
474
  The format of the PrintIM information is known, however no PrintIM tags have
471
- been decoded. Use the Unknown (-u) option to extract PrintIM information.
475
+ been decoded. Use the L<Unknown|../ExifTool.html#Unknown> (-u) option to extract PrintIM information.
472
476
  },
473
477
  GeoTiff => q{
474
478
  ExifTool extracts the following tags from GeoTIFF images. See
@@ -533,7 +537,7 @@ settings have not been decoded for all models. The tables below list the
533
537
  custom settings for the currently supported models.
534
538
  },
535
539
  Unknown => q{
536
- The following tags are decoded in unsupported maker notes. Use the Unknown
540
+ The following tags are decoded in unsupported maker notes. Use the L<Unknown|../ExifTool.html#Unknown>
537
541
  (-u) option to display other unknown tags.
538
542
  },
539
543
  PDF => q{
@@ -545,7 +549,7 @@ specification.
545
549
 
546
550
  ExifTool supports reading and writing PDF documents up to version 1.7
547
551
  extension level 3, including support for RC4, AES-128 and AES-256
548
- encryption. A Password option is provided to allow processing of
552
+ encryption. A L<Password|../ExifTool.html#Password> option is provided to allow processing of
549
553
  password-protected PDF files.
550
554
 
551
555
  ExifTool may be used to write native PDF and XMP metadata to PDF files. It
@@ -712,7 +716,7 @@ sub new
712
716
  my $that = shift;
713
717
  my $class = ref($that) || $that || 'Image::ExifTool::BuildTagLookup';
714
718
  my $self = bless {}, $class;
715
- my (%subdirs, %isShortcut, %allStructs);
719
+ my (%subdirs, %isShortcut);
716
720
  my %count = (
717
721
  'unique tag names' => 0,
718
722
  'total tags' => 0,
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.14';
91
+ $VERSION = '4.15';
92
92
 
93
93
  # Note: Removed 'USM' from 'L' lenses since it is redundant - PH
94
94
  # (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -429,10 +429,13 @@ $VERSION = '4.14';
429
429
  250.1 => 'Sigma 20mm f/1.4 DG HSM | A', #IB
430
430
  250.2 => 'Sigma 20mm f/1.5 FF High-Speed Prime | 017', #IB
431
431
  250.3 => 'Tokina Opera 16-28mm f/2.8 FF', #IB
432
- 251 => 'Canon EF 70-200mm f/2.8L IS II USM', # (also version III, ref IB. May be distinguised by EXIF:LensModel "EF70-200mm f/2.8L IS III USM" -- add extra logic to LensID?)
432
+ 251 => 'Canon EF 70-200mm f/2.8L IS II USM',
433
+ 251.1 => 'Canon EF 70-200mm f/2.8L IS III USM', #IB
433
434
  252 => 'Canon EF 70-200mm f/2.8L IS II USM + 1.4x', #50 (1.4x Mk II)
435
+ 252.1 => 'Canon EF 70-200mm f/2.8L IS III USM + 1.4x', #PH (NC)
434
436
  253 => 'Canon EF 70-200mm f/2.8L IS II USM + 2x', #PH (NC)
435
- # 253.1 => 'Tamron SP 70-200mm f/2.8 Di VC USD G2 (A025) + 2x', #forum9367
437
+ 253.1 => 'Canon EF 70-200mm f/2.8L IS III USM + 2x', #PH (NC)
438
+ # 253.2 => 'Tamron SP 70-200mm f/2.8 Di VC USD G2 (A025) + 2x', #forum9367
436
439
  254 => 'Canon EF 100mm f/2.8L Macro IS USM', #42
437
440
  255 => 'Sigma 24-105mm f/4 DG OS HSM | A or Other Sigma Lens', #50
438
441
  255.1 => 'Sigma 180mm f/2.8 EX DG OS HSM APO Macro', #50
@@ -6178,7 +6181,7 @@ my %ciMaxFocal = (
6178
6181
  # DPP shows "On" for any value except 0xffff when bit 0x08 is set
6179
6182
  my ($val, $inv) = @_;
6180
6183
  if ($inv) {
6181
- $val =~ /(0x[0-9a-f]+)/i or $val =~ /(\d+)/;
6184
+ $val =~ /(0x[0-9a-f]+)/i or $val =~ /(\d+)/ or return undef;
6182
6185
  return $1;
6183
6186
  } else {
6184
6187
  return sprintf("On (0x%.2x)",$val) if $val & 0x08;
@@ -7316,7 +7319,7 @@ my %ciMaxFocal = (
7316
7319
  NOTES => q{
7317
7320
  Camera color calibration data. For the 20D, 350D, 1DmkII and 1DSmkII the
7318
7321
  order of the coefficients is A, B, C, Temperature, but for newer models it
7319
- is B, C, A, Temperature. These tags are extracted only when the Unknown
7322
+ is B, C, A, Temperature. These tags are extracted only when the L<Unknown|../ExifTool.html#Unknown>
7320
7323
  option is used.
7321
7324
  },
7322
7325
  0x00 => { Name => 'CameraColorCalibration01', %cameraColorCalibration },
@@ -8497,7 +8500,7 @@ my %filterConv = (
8497
8500
  GROUPS => { 0 => 'MakerNotes', 1 => 'Canon', 2 => 'Image' },
8498
8501
  PROCESS_PROC => \&ProcessCTMD,
8499
8502
  NOTES => q{
8500
- Canon Timed MetaData tags found in CR3 images. The ExtractEmbedded option
8503
+ Canon Timed MetaData tags found in CR3 images. The L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> option
8501
8504
  is automatically applied when reading CR3 files to be able to extract this
8502
8505
  information.
8503
8506
  },
@@ -8953,9 +8956,10 @@ sub PrintLensID(@)
8953
8956
  }
8954
8957
  @matches = @best if @best;
8955
8958
  }
8959
+ @matches = @likely unless @matches;
8960
+ @matches = @maybe unless @matches;
8961
+ Image::ExifTool::Exif::MatchLensModel(\@matches, $lensModel);
8956
8962
  return join(' or ', @matches) if @matches;
8957
- return join(' or ', @likely) if @likely;
8958
- return join(' or ', @maybe) if @maybe;
8959
8963
  } elsif ($lensModel and $lensModel =~ /\d/) {
8960
8964
  # use lens model as written by the camera
8961
8965
  if ($printConv eq \%canonLensTypes) {
@@ -9303,7 +9307,7 @@ sub PrintAFPoints1D($)
9303
9307
  $focusing = "$row$col" if $focus eq $focusPt;
9304
9308
  push @points, "$row$col" if shift @bits;
9305
9309
  }
9306
- $focusing or $focusing = ($focus eq 0xff) ? 'Auto' : sprintf('Unknown (0x%.2x)',$focus);
9310
+ $focusing or $focusing = ($focus == 0xff) ? 'Auto' : sprintf('Unknown (0x%.2x)',$focus);
9307
9311
  return "$focusing (" . join(',',@points) . ')';
9308
9312
  }
9309
9313