exiftool_vendored 12.32.0 → 12.33.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0bc0b6355809096e7387138e8c7f308c4936ec9b0cdb4ce1461aadcae9ae2381
4
- data.tar.gz: 67a7595eb439fa6601eaf2a5e6bb90ec67de6f84094133a5c1f7490c5dd5b300
3
+ metadata.gz: c2579a96159a6bebe1550982f10cbb416ee1760ac092cb135c725e8704a66ed8
4
+ data.tar.gz: 22a1963fc56a05e435fada1b55e74df2fcbd1782bd84a902595950ebe25ac923
5
5
  SHA512:
6
- metadata.gz: 859265135559c94c11c104df0804ab031e8c0ffa648b3249e824ceaaa273420a4190b14e77f03855cd6a3e8685938e58a0d48a9b57aa2ceebca2314d20804676
7
- data.tar.gz: 35e9504f1ae4d31477f721cd94dad5da1740f2324e53242930600eb7b12abe17e3501e7fa7fe19c3a947516d1169a37d12a6e54465a96a2e2a7e55f4b03f2656
6
+ metadata.gz: bab490d296c90b99ed805c0a4b80b48f5d08282657f17f97ca856af36e6e4b32799c9162be40e3f0e4996d892530edebe582f37961df6ebb9717a892e935f3a2
7
+ data.tar.gz: 8ac18abe9d185ce0b4fcf43909554caba45c904b73b10a8ae6e93c4011e120fd299b1d05f4dd404d7d1ab9c255a48b96c57d31057286f42e5a41717429ba2864
data/bin/Changes CHANGED
@@ -7,6 +7,24 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 12.30. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Oct. 16, 2021 - Version 12.33
11
+
12
+ - Added support for DNG version 1.6.0.0
13
+ - Added two new Sony LensType values (thanks Jos Roost and LibRaw)
14
+ - Added some new elements to the XMP-crs:Look structure (thanks Herb)
15
+ - Added a few new IPTC XMP tags (thanks Michael Steidl)
16
+ - Added a new Canon RF lens (thanks Norbert Wasser)
17
+ - Decode Canon ShutterMode (thanks John Moyer)
18
+ - Extract LensModel from some Olympus MOV videos
19
+ - Generate MediaDataOffset/Size for MOV videos with zero-sized MDAT chunk
20
+ - Improvements to CBOR reader, including hex dump with -v3 option
21
+ - Recognize Final Cut Pro XML files
22
+ - Allow binary data of Protected tags to be extracted with the -X -j and -php
23
+ options with -b by setting the API RequestAll option to 3
24
+ - Changed name of "Canon EF 80-200mm f/4.5-5.6" lens with LensType 38 to add
25
+ "II" to the name (Exiv2 issue 1906)
26
+ - Fixed runtime warning when processing files with a .DIR extension
27
+
10
28
  Sept. 30, 2021 - Version 12.32
11
29
 
12
30
  - Added support for CBOR-format metadata in JUMBF (note that JUMBF support is
@@ -1484,8 +1502,8 @@ Oct. 9, 2018 - Version 11.13
1484
1502
  - Added a new Canon LensType (thanks LibRaw)
1485
1503
  - Minor improvements to verbose dump of streaming GPS metadata
1486
1504
  - Reverted change of version 10.71 which resulted in Windows not recognizing
1487
- PNG CreationTime as written by ExifTool (added this feature to the
1488
- StrictDate API option instead)
1505
+ PNG CreationTime as written by ExifTool (added this feature to the API
1506
+ StrictDate option instead)
1489
1507
  - Improved decoding of Nikon CropHiSpeed (thanks LibRaw)
1490
1508
  - Improved -fast option to reduce memory usage when reading JPG, PNG,
1491
1509
  QuickTime-based and RIFF-based files via a sequential stream
@@ -1599,7 +1617,7 @@ June 21, 2018 - Version 11.03
1599
1617
  June 13, 2018 - Version 11.02
1600
1618
 
1601
1619
  - Added support for a different format of Apple iWorks files
1602
- - Added undocumented FixCorruptedMOV API option to allow fixing MOV videos
1620
+ - Added undocumented API FixCorruptedMOV option to allow fixing MOV videos
1603
1621
  with multiple 'mdat' atoms which were corrupted by ExifTool
1604
1622
  - Decode more QuickTime tags
1605
1623
  - Decode more PanasonicRaw tags (thanks Klaus Homeister)
data/bin/META.json CHANGED
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "12.32"
50
+ "version" : "12.33"
51
51
  }
data/bin/META.yml CHANGED
@@ -28,4 +28,4 @@ recommends:
28
28
  Time::HiRes: 0
29
29
  requires:
30
30
  perl: 5.004
31
- version: 12.32
31
+ version: 12.33
data/bin/README CHANGED
@@ -107,8 +107,8 @@ your home directory, then you would type the following commands in a
107
107
  terminal window to extract and run ExifTool:
108
108
 
109
109
  cd ~/Desktop
110
- gzip -dc Image-ExifTool-12.32.tar.gz | tar -xf -
111
- cd Image-ExifTool-12.32
110
+ gzip -dc Image-ExifTool-12.33.tar.gz | tar -xf -
111
+ cd Image-ExifTool-12.33
112
112
  ./exiftool t/images/ExifTool.jpg
113
113
 
114
114
  Note: These commands extract meta information from one of the test images.
data/bin/exiftool CHANGED
@@ -10,7 +10,7 @@
10
10
  use strict;
11
11
  require 5.004;
12
12
 
13
- my $version = '12.32';
13
+ my $version = '12.33';
14
14
 
15
15
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
16
16
  my $exeDir;
@@ -1619,7 +1619,7 @@ if (@newValues) {
1619
1619
  next;
1620
1620
  }
1621
1621
  my %opts = ( Shift => 0 ); # shift values if possible instead of adding/deleting
1622
- # allow writing of 'unsafe' tags unless specified by wildcard
1622
+ # allow writing of 'Unsafe' tags unless specified by wildcard
1623
1623
  $opts{Protected} = 1 unless $tag =~ /[?*]/;
1624
1624
 
1625
1625
  if ($tag =~ s/<// and defined $newVal) {
@@ -2285,7 +2285,7 @@ TAG: foreach $tag (@foundTags) {
2285
2285
  # avoid extracting Protected binary tags (eg. data blocks) [insider information]
2286
2286
  my $lcTag = lc $tag;
2287
2287
  $lcTag =~ s/ .*//;
2288
- next unless $$et{REQ_TAG_LOOKUP}{$lcTag};
2288
+ next unless $$et{REQ_TAG_LOOKUP}{$lcTag} or ($$et{OPTIONS}{RequestAll} || 0) > 2;
2289
2289
  }
2290
2290
  $val = ConvertBinary($val); # convert SCALAR references
2291
2291
  next unless defined $val;
@@ -4732,11 +4732,11 @@ I<TAG> may contain one or more leading family 0, 1, 2 or 7 group names,
4732
4732
  prefixed by optional family numbers, and separated colons. If no group name
4733
4733
  is specified, the tag is created in the preferred group, and updated in any
4734
4734
  other location where a same-named tag already exists. The preferred group
4735
- is the first group in the following list where I<TAG> is valid: 1) EXIF, 2)
4736
- IPTC, 3) XMP.
4735
+ in JPEG and TIFF-format images is the first group in the following list
4736
+ where I<TAG> is valid: 1) EXIF, 2) IPTC, 3) XMP.
4737
4737
 
4738
4738
  The wildcards C<*> and C<?> may be used in tag names to assign the same
4739
- value to multiple tags. When specified with wildcards, "unsafe" tags are
4739
+ value to multiple tags. When specified with wildcards, "Unsafe" tags are
4740
4740
  not written. A tag name of C<All> is equivalent to C<*> (except that it
4741
4741
  doesn't require quoting, while arguments with wildcards do on systems with
4742
4742
  shell globbing), and is often used when deleting all metadata (ie. C<-All=>)
@@ -4882,10 +4882,10 @@ See L</COPYING EXAMPLES> for examples using B<-tagsFromFile>.
4882
4882
  Notes:
4883
4883
 
4884
4884
  1) Some tags (generally tags which may affect the appearance of the image)
4885
- are considered "unsafe" to write, and are only copied if specified
4885
+ are considered "Unsafe" to write, and are only copied if specified
4886
4886
  explicitly (ie. no wildcards). See the
4887
4887
  L<tag name documentation|Image::ExifTool::TagNames> for more details about
4888
- "unsafe" tags.
4888
+ "Unsafe" tags.
4889
4889
 
4890
4890
  2) Be aware of the difference between excluding a tag from being copied
4891
4891
  (--I<TAG>), and deleting a tag (-I<TAG>=). Excluding a tag prevents it from
@@ -4983,7 +4983,7 @@ intermediate file (C<out.args> in this example):
4983
4983
  exiftool -@ out.args -sep ', ' dst.jpg
4984
4984
 
4985
4985
  Note: Be careful when copying information with this technique since it is
4986
- easy to write tags which are normally considered "unsafe". For instance,
4986
+ easy to write tags which are normally considered "Unsafe". For instance,
4987
4987
  the FileName and Directory tags are excluded in the example above to avoid
4988
4988
  renaming and moving the destination file. Also note that the second command
4989
4989
  above will produce warning messages for any tags which are not writable.
@@ -5003,8 +5003,8 @@ are in the default output. By default, list items are separated by a
5003
5003
  newline when extracted with the B<-b> option, but this may be changed (see
5004
5004
  the B<-sep> option for details). May be combined with B<-j>, B<-php> or
5005
5005
  B<-X> to extract binary data in JSON, PHP or XML format, but note that
5006
- "unsafe" tags must be specified explicitly to be extracted as binary in
5007
- these formats.
5006
+ "Unsafe" tags are not extracted as binary unless they are specified explicitly or
5007
+ the API RequestAll option is set to 3 or higher.
5008
5008
 
5009
5009
  With a leading double dash (B<--b> or B<--binary>), tags which contain
5010
5010
  binary data are suppressed in the output when reading.
@@ -5205,7 +5205,7 @@ By default the resulting group name is simplified by removing any leading
5205
5205
  C<Main:> and collapsing adjacent identical group names, but this can be
5206
5206
  avoided by placing a colon before the first family number (eg. B<-g:3:1>).
5207
5207
  Use the B<-listg> option to list group names for a specified family. The
5208
- SavePath and SaveFormat API options are automatically enabled if the
5208
+ API SavePath and SaveFormat options are automatically enabled if the
5209
5209
  respective family 5 or 6 group names are requested. See the
5210
5210
  L<API GetGroup documentation|Image::ExifTool/GetGroup> for more information.
5211
5211
 
@@ -5408,7 +5408,7 @@ with this command:
5408
5408
 
5409
5409
  produces output like this:
5410
5410
 
5411
- -- Generated by ExifTool 12.32 --
5411
+ -- Generated by ExifTool 12.33 --
5412
5412
  File: a.jpg - 2003:10:31 15:44:19
5413
5413
  (f/5.6, 1/60s, ISO 100)
5414
5414
  File: b.jpg - 2006:05:23 11:57:38
@@ -5425,7 +5425,7 @@ are effectively processed as separate input files.
5425
5425
  If a specified tag does not exist, a minor warning is issued and the line
5426
5426
  with the missing tag is not printed. However, the B<-f> option may be used
5427
5427
  to set the value of missing tags to '-' (but this may be configured via the
5428
- MissingTagValue API option), or the B<-m> option may be used to ignore minor
5428
+ API MissingTagValue option), or the B<-m> option may be used to ignore minor
5429
5429
  warnings and leave the missing values empty. Alternatively, B<-q -q> may be
5430
5430
  used to simply suppress the warning messages.
5431
5431
 
@@ -460,7 +460,7 @@ According to the specification, integer-format QuickTime date/time tags
460
460
  should be stored as UTC. Unfortunately, digital cameras often store local
461
461
  time values instead (presumably because they don't know the time zone). For
462
462
  this reason, by default ExifTool does not assume a time zone for these
463
- values. However, if the L<QuickTimeUTC|../ExifTool.html#QuickTimeUTC> API option is set, then ExifTool will
463
+ values. However, if the API L<QuickTimeUTC|../ExifTool.html#QuickTimeUTC> option is set, then ExifTool will
464
464
  assume these values are properly stored as UTC, and will convert them to
465
465
  local time when extracting.
466
466
 
@@ -15,12 +15,12 @@ use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
  use Image::ExifTool::JSON;
17
17
 
18
- $VERSION = '1.00';
18
+ $VERSION = '1.01';
19
19
 
20
20
  sub ProcessCBOR($$$);
21
21
  sub ReadCBORValue($$$$);
22
22
 
23
- # optional CBOR type codes
23
+ # optional CBOR type code
24
24
  my %cborType6 = (
25
25
  0 => 'date/time string',
26
26
  1 => 'epoch-based date/time',
@@ -78,6 +78,7 @@ sub ReadCBORValue($$$$)
78
78
  return(undef, 'Truncated CBOR data', $pos) if $pos >= $end;
79
79
  my $verbose = $$et{OPTIONS}{Verbose};
80
80
  my $indent = $$et{INDENT};
81
+ my $dumpStart = $pos;
81
82
  my $fmt = Get8u($dataPt, $pos++);
82
83
  my $dat = $fmt & 0x1f;
83
84
  my ($num, $val, $err, $size);
@@ -95,28 +96,22 @@ sub ReadCBORValue($$$$)
95
96
  $num = ReadValue($dataPt, $pos, $format, 1, $size);
96
97
  $pos += $size;
97
98
  }
98
- my ($pre, $opt) = ('', ':');
99
- if ($verbose and $fmt != 6) {
100
- if (defined $$et{cbor_pre}) {
101
- $pre = "$$et{cbor_pre}";
102
- delete $$et{cbor_pre};
103
- }
104
- if (defined $$et{cbor_opt}) {
105
- $opt = ", $$et{cbor_opt}:";
106
- delete $$et{cbor_opt};
107
- }
99
+ my $pre = '';
100
+ if (defined $$et{cbor_pre} and $fmt != 6) {
101
+ $pre = $$et{cbor_pre};
102
+ delete $$et{cbor_pre};
108
103
  }
109
104
  if ($fmt == 0) { # positive integer
110
105
  $val = $num;
111
- $et->VPrint(1, "$$et{INDENT} ${pre}int+$opt $val\n");
106
+ $et->VPrint(1, "$$et{INDENT} ${pre}int+: $val\n");
112
107
  } elsif ($fmt == 1) { # negative integer
113
108
  $val = -1 * $num;
114
- $et->VPrint(1, "$$et{INDENT} ${pre}int-$opt $val\n");
109
+ $et->VPrint(1, "$$et{INDENT} ${pre}int-: $val\n");
115
110
  } elsif ($fmt == 2 or $fmt == 3) { # byte/UTF8 string
116
111
  return(undef, 'Truncated CBOR string value', $pos) if $pos + $num > $end;
117
112
  if ($num < 0) { # (should not happen in C2PA)
118
113
  my $string = '';
119
- $$et{INDENT} .= ' ';
114
+ $$et{INDENT} .= ' ';
120
115
  for (;;) {
121
116
  ($val, $err, $pos) = ReadCBORValue($et, $dataPt, $pos, $end);
122
117
  return(undef, $err, $pos) if $err;
@@ -125,26 +120,34 @@ sub ReadCBORValue($$$$)
125
120
  $string .= $val;
126
121
  }
127
122
  $$et{INDENT} = $indent;
128
- return($string, undef, $pos); # return concatenated strings
123
+ return($string, undef, $pos); # return concatenated byte/text string
129
124
  } else {
130
125
  $val = substr($$dataPt, $pos, $num);
131
126
  }
132
127
  $pos += $num;
133
- if ($fmt == 2) {
134
- $et->VPrint(1, "$$et{INDENT} ${pre}byte$opt <binary data ".length($val)." bytes>\n");
135
- return(\$val, undef, $pos); # (byte string)
128
+ if ($fmt == 2) { # (byte string)
129
+ $et->VPrint(1, "$$et{INDENT} ${pre}byte: <binary data ".length($val)." bytes>\n");
130
+ my $dat = $val;
131
+ $val = \$dat; # use scalar reference for binary data
132
+ } else { # (text string)
133
+ $val = $et->Decode($val, 'UTF8');
134
+ $et->VPrint(1, "$$et{INDENT} ${pre}text: '${val}'\n");
136
135
  }
137
- $et->VPrint(1, "$$et{INDENT} ${pre}text$opt '${val}'\n");
138
136
  } elsif ($fmt == 4 or $fmt == 5) { # list/hash
139
137
  if ($fmt == 4) {
140
- $et->VPrint(1, "$$et{INDENT} ${pre}list$opt <$num elements>\n");
138
+ $et->VPrint(1, "$$et{INDENT} ${pre}list: <$num elements>\n");
141
139
  } else {
142
- $et->VPrint(1, "$$et{INDENT} ${pre}hash$opt <$num pairs>\n");
140
+ $et->VPrint(1, "$$et{INDENT} ${pre}hash: <$num pairs>\n");
143
141
  $num *= 2;
144
142
  }
145
- $$et{INDENT} .= ' ';
143
+ $$et{INDENT} .= ' ';
146
144
  my $i = 0;
147
145
  my @list;
146
+ Image::ExifTool::HexDump($dataPt, $pos - $dumpStart,
147
+ Start => $dumpStart,
148
+ DataPos => $$et{cbor_datapos},
149
+ Prefix => $$et{INDENT},
150
+ ) if $verbose > 2;
148
151
  while ($num) {
149
152
  $$et{cbor_pre} = "$i) ";
150
153
  if ($fmt == 4) {
@@ -162,6 +165,7 @@ sub ReadCBORValue($$$$)
162
165
  push @list, $val;
163
166
  --$num;
164
167
  }
168
+ $dumpStart = $pos;
165
169
  $$et{INDENT} = $indent;
166
170
  if ($fmt == 5) {
167
171
  my ($i, @keys);
@@ -174,9 +178,40 @@ sub ReadCBORValue($$$$)
174
178
  } else {
175
179
  $val = \@list;
176
180
  }
177
- } elsif ($fmt == 6) { # optional type
178
- $$et{cbor_opt} = $cborType6{$num} || "<unknown type $num>";
181
+ } elsif ($fmt == 6) { # optional tag
182
+ if ($verbose) {
183
+ my $str = "$num (" . ($cborType6{$num} || 'unknown') . ')';
184
+ my $spc = $$et{cbor_pre} ? (' ' x length $$et{cbor_pre}) : '';
185
+ $et->VPrint(1, "$$et{INDENT} $spc<CBOR optional type $str>\n");
186
+ Image::ExifTool::HexDump($dataPt, $pos - $dumpStart,
187
+ Start => $dumpStart,
188
+ DataPos => $$et{cbor_datapos},
189
+ Prefix => $$et{INDENT} . ' ',
190
+ ) if $verbose > 2;
191
+ }
192
+ # read next value (note: in the case of multiple tags,
193
+ # this nesting will apply the tags in the correct order)
179
194
  ($val, $err, $pos) = ReadCBORValue($et, $dataPt, $pos, $end);
195
+ $dumpStart = $pos;
196
+ # convert some values according to the optional tag number (untested)
197
+ if ($num == 0 and not ref $val) { # date/time string
198
+ require Image::ExifTool::XMP;
199
+ $val = Image::ExifTool::XMP::ConvertXMPDate($val);
200
+ } elsif ($num == 1 and not ref $val) { # epoch-based date/time
201
+ if (Image::ExifTool::IsFloat($val)) {
202
+ my $dec = ($val == int($val)) ? undef : 6;
203
+ $val = Image::ExifTool::ConvertUnixTime($val, 1, $dec);
204
+ }
205
+ } elsif (($num == 2 or $num == 3) and ref($val) eq 'SCALAR') { # pos/neg bignum
206
+ my $big = 0;
207
+ $big = 256 * $big + Get8u($val,$_) foreach 0..(length($$val) - 1);
208
+ $val = $num==2 ? $big : -$big;
209
+ } elsif (($num == 4 or $num == 5) and # decimal fraction or bigfloat
210
+ ref($val) eq 'ARRAY' and @$val == 2 and
211
+ Image::ExifTool::IsInt($$val[0]) and Image::ExifTool::IsInt($$val[1]))
212
+ {
213
+ $val = $$val[1] * ($num == 4 ? 10 : 2) ** $$val[0];
214
+ }
180
215
  } elsif ($fmt == 7) {
181
216
  if ($dat == 31) {
182
217
  undef $val; # "break" = end of indefinite array/hash (not used in C2PA)
@@ -202,10 +237,16 @@ sub ReadCBORValue($$$$)
202
237
  } else {
203
238
  return(undef, "Invalid CBOR type 7 variant $num", $pos);
204
239
  }
205
- $et->VPrint(1, "$$et{INDENT} ${pre}typ7$opt ".(defined $val ? $val : '<break>')."\n");
240
+ $et->VPrint(1, "$$et{INDENT} ${pre}typ7: ".(defined $val ? $val : '<break>')."\n");
206
241
  } else {
207
242
  return(undef, "Unknown CBOR format $fmt", $pos);
208
243
  }
244
+ Image::ExifTool::HexDump($dataPt, $pos - $dumpStart,
245
+ Start => $dumpStart,
246
+ DataPos => $$et{cbor_datapos},
247
+ Prefix => $$et{INDENT} . ' ',
248
+ MaxLen => $verbose < 5 ? ($verbose == 3 ? 96 : 2048) : undef,
249
+ ) if $verbose > 2;
209
250
  return($val, $err, $pos);
210
251
  }
211
252
 
@@ -219,15 +260,28 @@ sub ProcessCBOR($$$)
219
260
  my $dataPt = $$dirInfo{DataPt};
220
261
  my $pos = $$dirInfo{DirStart};
221
262
  my $end = $pos + $$dirInfo{DirLen};
263
+ my ($val, $err, $tag, $i);
264
+
222
265
  $et->VerboseDir('CBOR', undef, $$dirInfo{DirLen});
223
- my ($val, $err, $tag);
224
- require Image::ExifTool::CBOR;
266
+
267
+ $$et{cbor_datapos} = $$dirInfo{DataPos} + $$dirInfo{Base};
268
+
225
269
  while ($pos < $end) {
226
270
  ($val, $err, $pos) = ReadCBORValue($et, $dataPt, $pos, $end);
227
271
  $err and $et->Warn($err), last;
228
- ref $val eq 'HASH' or $et->VPrint(1, "$$et{INDENT} CBOR end: Non-hash encountered\n"), last;
229
- foreach $tag (@{$$val{_ordered_keys_}}) {
230
- Image::ExifTool::JSON::ProcessTag($et, $tagTablePtr, $tag, $$val{$tag});
272
+ if (ref $val eq 'HASH') {
273
+ foreach $tag (@{$$val{_ordered_keys_}}) {
274
+ Image::ExifTool::JSON::ProcessTag($et, $tagTablePtr, $tag, $$val{$tag});
275
+ }
276
+ } elsif (ref $val eq 'ARRAY') {
277
+ for ($i=0; $i<@$val; ++$i) {
278
+ Image::ExifTool::JSON::ProcessTag($et, $tagTablePtr, "Item$i", $$val[$i]);
279
+ }
280
+ } elsif ($val eq '0') {
281
+ $et->VPrint(1, "$$et{INDENT} <CBOR end>\n");
282
+ last; # (treat as padding)
283
+ } else {
284
+ $et->VPrint(1, "$$et{INDENT} Unknown value: $val\n");
231
285
  }
232
286
  }
233
287
  return 1;
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.51';
91
+ $VERSION = '4.52';
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)
@@ -187,7 +187,7 @@ $VERSION = '4.51';
187
187
  37.2 => 'Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical [IF] Macro (A20)', #38
188
188
  37.3 => 'Tamron SP AF 17-50mm f/2.8 XR Di II VC LD Aspherical [IF]', #34
189
189
  37.4 => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC LD Aspherical [IF] Macro', #forum2937
190
- 38 => 'Canon EF 80-200mm f/4.5-5.6', #32
190
+ 38 => 'Canon EF 80-200mm f/4.5-5.6 II', #32 (II added ref https://github.com/Exiv2/exiv2/issues/1906)
191
191
  39 => 'Canon EF 75-300mm f/4-5.6',
192
192
  40 => 'Canon EF 28-80mm f/3.5-5.6',
193
193
  41 => 'Canon EF 28-90mm f/4-5.6', #32
@@ -595,6 +595,7 @@ $VERSION = '4.51';
595
595
  '61182.21' => 'Canon RF 70-200mm F4L IS USM', #42
596
596
  '61182.22' => 'Canon RF 50mm F1.8 STM', #42
597
597
  '61182.23' => 'Canon RF 14-35mm F4L IS USM', #IB
598
+ '61182.24' => 'Canon RF 16mm F2.8 STM', #42
598
599
  #'61182.xx' => 'Canon RF 100mm F2.8L MACRO IS USM',
599
600
  65535 => 'n/a',
600
601
  );
@@ -6731,7 +6732,17 @@ my %ciMaxFocal = (
6731
6732
  PrintConvInv => '$val =~ s/ ?m$//; IsFloat($val) ? $val : 655.35',
6732
6733
  },
6733
6734
  # 22 - values: 0, 1
6734
- # 23 - values: 0, 21, 22
6735
+ 23 => { #JohnMoyer (forum12925)
6736
+ Name => 'ShutterMode',
6737
+ PrintConv => {
6738
+ 0 => 'Mechanical',
6739
+ 1 => 'Electronic First Curtain',
6740
+ 2 => 'Electronic',
6741
+ # 3 => ?
6742
+ # 21 => ?
6743
+ # 22 => ?
6744
+ },
6745
+ },
6735
6746
  25 => { #PH
6736
6747
  Name => 'FlashExposureLock',
6737
6748
  PrintConv => \%offOn,
@@ -6765,6 +6776,7 @@ my %ciMaxFocal = (
6765
6776
  278 => 'Canon RF 70-200mm F4L IS USM', #42
6766
6777
  280 => 'Canon RF 50mm F1.8 STM', #42
6767
6778
  281 => 'Canon RF 14-35mm F4L IS USM', #42/IB
6779
+ 288 => 'Canon RF 16mm F2.8 STM', #42
6768
6780
  #xxx => 'Canon RF 100mm F2.8L MACRO IS USM',
6769
6781
  # Note: add new RF lenses to %canonLensTypes with ID 61182
6770
6782
  },
@@ -56,7 +56,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
56
56
  use Image::ExifTool qw(:DataAccess :Utils);
57
57
  use Image::ExifTool::MakerNotes;
58
58
 
59
- $VERSION = '4.36';
59
+ $VERSION = '4.37';
60
60
 
61
61
  sub ProcessExif($$$);
62
62
  sub WriteExif($$$);
@@ -265,6 +265,7 @@ sub BINARY_DATA_LIMIT { return 10 * 1024 * 1024; }
265
265
  32892 => 'Sequential Color Filter', #JR (Sony ARQ)
266
266
  34892 => 'Linear Raw', #2
267
267
  51177 => 'Depth Map', # (DNG 1.5)
268
+ 52527 => 'Semantic Mask', # (DNG 1.6)
268
269
  );
269
270
 
270
271
  %orientation = (
@@ -291,6 +292,7 @@ sub BINARY_DATA_LIMIT { return 10 * 1024 * 1024; }
291
292
  9 => 'Depth map of reduced-resolution image', # (DNG 1.5)
292
293
  16 => 'Enhanced image data', # (DNG 1.5)
293
294
  0x10001 => 'Alternate reduced-resolution image', # (DNG 1.2)
295
+ 0x10004 => 'Semantic Mask', # (DNG 1.6)
294
296
  0xffffffff => 'invalid', #(found in E5700 NEF's)
295
297
  BITMASK => {
296
298
  0 => 'Reduced resolution',
@@ -366,6 +368,7 @@ my %opcodeInfo = (
366
368
  11 => 'DeltaPerColumn',
367
369
  12 => 'ScalePerRow',
368
370
  13 => 'ScalePerColumn',
371
+ 14 => 'WarpRectilinear2', # (DNG 1.6)
369
372
  },
370
373
  PrintConvInv => undef, # (so the inverse conversion is not performed)
371
374
  );
@@ -3038,12 +3041,12 @@ my %opcodeInfo = (
3038
3041
  },
3039
3042
  },
3040
3043
  #
3041
- # DNG tags 0xc6XX and 0xc7XX (ref 2 unless otherwise stated)
3044
+ # DNG tags 0xc6XX, 0xc7XX and 0xcdXX (ref 2 unless otherwise stated)
3042
3045
  #
3043
3046
  0xc612 => {
3044
3047
  Name => 'DNGVersion',
3045
3048
  Notes => q{
3046
- tags 0xc612-0xc7b5 are defined by the DNG specification unless otherwise
3049
+ tags 0xc612-0xcd3b are defined by the DNG specification unless otherwise
3047
3050
  noted. See L<https://helpx.adobe.com/photoshop/digital-negative.html> for
3048
3051
  the specification
3049
3052
  },
@@ -4041,6 +4044,97 @@ my %opcodeInfo = (
4041
4044
  Protected => 1,
4042
4045
  WriteGroup => 'IFD0',
4043
4046
  },
4047
+ 0xcd2d => { # DNG 1.6
4048
+ Name => 'ProfileGainTableMap',
4049
+ Writable => 'undef',
4050
+ WriteGroup => 'SubIFD',
4051
+ Protected => 1,
4052
+ Binary => 1,
4053
+ },
4054
+ 0xcd2e => { # DNG 1.6
4055
+ Name => 'SemanticName',
4056
+ # Writable => 'string',
4057
+ WriteGroup => 'SubIFD' #? (NC) Semantic Mask IFD (only for Validate)
4058
+ },
4059
+ 0xcd30 => { # DNG 1.6
4060
+ Name => 'SemanticInstanceIFD',
4061
+ # Writable => 'string',
4062
+ WriteGroup => 'SubIFD' #? (NC) Semantic Mask IFD (only for Validate)
4063
+ },
4064
+ 0xcd31 => { # DNG 1.6
4065
+ Name => 'CalibrationIlluminant3',
4066
+ Writable => 'int16u',
4067
+ WriteGroup => 'IFD0',
4068
+ Protected => 1,
4069
+ SeparateTable => 'LightSource',
4070
+ PrintConv => \%lightSource,
4071
+ },
4072
+ 0xcd32 => { # DNG 1.6
4073
+ Name => 'CameraCalibration3',
4074
+ Writable => 'rational64s',
4075
+ WriteGroup => 'IFD0',
4076
+ Count => -1,
4077
+ Protected => 1,
4078
+ },
4079
+ 0xcd33 => { # DNG 1.6
4080
+ Name => 'ColorMatrix3',
4081
+ Writable => 'rational64s',
4082
+ WriteGroup => 'IFD0',
4083
+ Count => -1,
4084
+ Protected => 1,
4085
+ },
4086
+ 0xcd34 => { # DNG 1.6
4087
+ Name => 'ForwardMatrix3',
4088
+ Writable => 'rational64s',
4089
+ WriteGroup => 'IFD0',
4090
+ Count => -1,
4091
+ Protected => 1,
4092
+ },
4093
+ 0xcd35 => { # DNG 1.6
4094
+ Name => 'IlluminantData1',
4095
+ Writable => 'undef',
4096
+ WriteGroup => 'IFD0',
4097
+ Protected => 1,
4098
+ },
4099
+ 0xcd36 => { # DNG 1.6
4100
+ Name => 'IlluminantData2',
4101
+ Writable => 'undef',
4102
+ WriteGroup => 'IFD0',
4103
+ Protected => 1,
4104
+ },
4105
+ 0xcd37 => { # DNG 1.6
4106
+ Name => 'IlluminantData3',
4107
+ Writable => 'undef',
4108
+ WriteGroup => 'IFD0',
4109
+ Protected => 1,
4110
+ },
4111
+ 0xcd38 => { # DNG 1.6
4112
+ Name => 'MaskSubArea',
4113
+ # Writable => 'int32u',
4114
+ WriteGroup => 'SubIFD', #? (NC) Semantic Mask IFD (only for Validate)
4115
+ Count => 4,
4116
+ },
4117
+ 0xcd39 => { # DNG 1.6
4118
+ Name => 'ProfileHueSatMapData3',
4119
+ %longBin,
4120
+ Writable => 'float',
4121
+ WriteGroup => 'IFD0',
4122
+ Count => -1,
4123
+ Protected => 1,
4124
+ },
4125
+ 0xcd3a => { # DNG 1.6
4126
+ Name => 'ReductionMatrix3',
4127
+ Writable => 'rational64s',
4128
+ WriteGroup => 'IFD0',
4129
+ Count => -1,
4130
+ Protected => 1,
4131
+ },
4132
+ 0xcd3b => { # DNG 1.6
4133
+ Name => 'RGBTables',
4134
+ Writable => 'undef',
4135
+ WriteGroup => 'IFD0',
4136
+ Protected => 1,
4137
+ },
4044
4138
  0xea1c => { #13
4045
4139
  Name => 'Padding',
4046
4140
  Binary => 1,
@@ -14,7 +14,7 @@ use vars qw($VERSION);
14
14
  use Image::ExifTool qw(:DataAccess :Utils);
15
15
  use Image::ExifTool::Import;
16
16
 
17
- $VERSION = '1.04';
17
+ $VERSION = '1.05';
18
18
 
19
19
  sub ProcessJSON($$);
20
20
  sub ProcessTag($$$$%);
@@ -86,7 +86,9 @@ sub ProcessTag($$$$%)
86
86
  # support hashes with ordered keys
87
87
  my @keys = $$val{_ordered_keys_} ? @{$$val{_ordered_keys_}} : sort keys %$val;
88
88
  foreach (@keys) {
89
- ProcessTag($et, $tagTablePtr, $tag . ucfirst, $$val{$_}, %flags, Flat => 1);
89
+ my $tg = $tag . ((/^\d/ and $tag =~ /\d$/) ? '_' : '') . ucfirst;
90
+ $tg =~ s/([^a-zA-Z])([a-z])/$1\U$2/g;
91
+ ProcessTag($et, $tagTablePtr, $tg, $$val{$_}, %flags, Flat => 1);
90
92
  }
91
93
  } elsif (ref $val eq 'ARRAY') {
92
94
  foreach (@$val) {
@@ -340,12 +340,14 @@ my %j2cMarker = (
340
340
  },
341
341
  {
342
342
  Name => 'UUID-Signature', # (seen in JUMB data of JPEG images)
343
+ # (may be able to remove this when JUMBF specification is finalized)
343
344
  Condition => '$$valPt=~/^casg\x00\x11\x00\x10\x80\x00\x00\xaa\x00\x38\x9b\x71/',
344
345
  Format => 'undef',
345
346
  ValueConv => 'substr($val,16)',
346
347
  },
347
348
  {
348
- Name => 'UUID-C2PAClaimSignature', # (seen in JUMB data of JPEG images)
349
+ Name => 'UUID-C2PAClaimSignature', # (seen in incorrectly-formatted JUMB data of JPEG images)
350
+ # (may be able to remove this when JUMBF specification is finalized)
349
351
  Condition => '$$valPt=~/^c2cs\x00\x11\x00\x10\x80\x00\x00\xaa\x00\x38\x9b\x71/',
350
352
  SubDirectory => {
351
353
  TagTable => 'Image::ExifTool::CBOR::Main',
@@ -52,7 +52,7 @@ my %mdDateInfo = (
52
52
  NOTES => q{
53
53
  MDItem tags are extracted using the "mdls" utility. They are extracted if
54
54
  any "MDItem*" tag or the MacOS group is specifically requested, or by
55
- setting the L<MDItemTags|../ExifTool.html#MDItemTags> API option to 1 or the L<RequestAll|../ExifTool.html#RequestAll> API option to 2 or
55
+ setting the API L<MDItemTags|../ExifTool.html#MDItemTags> option to 1 or the API L<RequestAll|../ExifTool.html#RequestAll> option to 2 or
56
56
  higher. Note that these tags do not necessarily reflect the current
57
57
  metadata of a file -- it may take some time for the MacOS mdworker daemon to
58
58
  index the file after a metadata change.
@@ -244,7 +244,7 @@ my %mdDateInfo = (
244
244
  NOTES => q{
245
245
  XAttr tags are extracted using the "xattr" utility. They are extracted if
246
246
  any "XAttr*" tag or the MacOS group is specifically requested, or by setting
247
- the L<XAttrTags|../ExifTool.html#XAttrTags> API option to 1 or the L<RequestAll|../ExifTool.html#RequestAll> API option to 2 or higher.
247
+ the API L<XAttrTags|../ExifTool.html#XAttrTags> option to 1 or the API L<RequestAll|../ExifTool.html#RequestAll> option to 2 or higher.
248
248
  And they are extracted by default from MacOS "._" files when reading
249
249
  these files directly.
250
250
  },
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
40
40
  use Image::ExifTool::Exif;
41
41
  use Image::ExifTool::APP12;
42
42
 
43
- $VERSION = '2.74';
43
+ $VERSION = '2.75';
44
44
 
45
45
  sub PrintLensInfo($$$);
46
46
 
@@ -3609,6 +3609,10 @@ my %indexInfo = (
3609
3609
  Format => 'string[24]',
3610
3610
  Groups => { 2 => 'Time' },
3611
3611
  },
3612
+ 0x17f => {
3613
+ Name => 'LensModel',
3614
+ Format => 'string[32]'
3615
+ },
3612
3616
  );
3613
3617
 
3614
3618
  # yet a different "thmb" atom format (PH, E-M5)
@@ -47,7 +47,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
47
47
  use Image::ExifTool::Exif;
48
48
  use Image::ExifTool::GPS;
49
49
 
50
- $VERSION = '2.69';
50
+ $VERSION = '2.70';
51
51
 
52
52
  sub ProcessMOV($$;$);
53
53
  sub ProcessKeys($$$);
@@ -9113,6 +9113,12 @@ sub ProcessMOV($$;$)
9113
9113
  } else {
9114
9114
  my $t = PrintableTagID($tag,2);
9115
9115
  $et->VPrint(0,"$$et{INDENT}Tag '${t}' extends to end of file");
9116
+ if ($$tagTablePtr{"$tag-size"}) {
9117
+ my $pos = $raf->Tell();
9118
+ $raf->Seek(0, 2);
9119
+ $et->HandleTag($tagTablePtr, "$tag-size", $raf->Tell() - $pos);
9120
+ $et->HandleTag($tagTablePtr, "$tag-offset", $pos) if $$tagTablePtr{"$tag-offset"};
9121
+ }
9116
9122
  }
9117
9123
  last;
9118
9124
  }
@@ -107,7 +107,7 @@ my %insvLimit = (
107
107
  GPSAltitude => { PrintConv => '(sprintf("%.4f", $val) + 0) . " m"' }, # round to 4 decimals
108
108
  GPSSpeed => { PrintConv => 'sprintf("%.4f", $val) + 0', Notes => 'in km/h unless GPSSpeedRef says otherwise' },
109
109
  GPSSpeedRef => { PrintConv => { K => 'km/h', M => 'mph', N => 'knots' } },
110
- GPSTrack => { PrintConv => 'sprintf("%.4f", $val) + 0', Notes => 'true north unless GPSTrackRef says otherwise' },
110
+ GPSTrack => { PrintConv => 'sprintf("%.4f", $val) + 0', Notes => 'relative to true north unless GPSTrackRef says otherwise' },
111
111
  GPSTrackRef => { PrintConv => { M => 'Magnetic North', T => 'True North' } },
112
112
  GPSDateTime => {
113
113
  Groups => { 2 => 'Time' },
@@ -474,9 +474,9 @@ numerical, and generated automatically otherwise.
474
474
  tags in IFD1 of JPEG images which default to priority 0.
475
475
 
476
476
  'Protected' - bit mask to protect tags from writing:
477
- Bit 0x01 indicates an 'unsafe' tag, which is not set via
477
+ Bit 0x01 indicates an 'Unsafe' tag, which is not set via
478
478
  SetNewValuesFromFile() unless specified explicitly.
479
- Bit 0x02 indicates a 'protected' tag, which should not be set
479
+ Bit 0x02 indicates a 'Protected' tag, which should not be set
480
480
  directly by the user.
481
481
 
482
482
  'PutFirst' - [EXIF only] flag to place this value before IFD0
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
34
34
  use Image::ExifTool::Exif;
35
35
  use Image::ExifTool::Minolta;
36
36
 
37
- $VERSION = '3.45';
37
+ $VERSION = '3.46';
38
38
 
39
39
  sub ProcessSRF($$$);
40
40
  sub ProcessSR2($$$);
@@ -154,6 +154,7 @@ sub PrintInvLensSpec($;$$);
154
154
  32866 => 'Sony FE 24mm F2.8 G', #IB
155
155
  32867 => 'Sony FE 40mm F2.5 G', #IB
156
156
  32868 => 'Sony FE 50mm F2.5 G', #IB
157
+ 32874 => 'Sony FE 70-200mm F2.8 GM OSS II', #IB
157
158
 
158
159
  # (comment this out so LensID will report the LensModel, which is more useful)
159
160
  # 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
@@ -196,6 +197,7 @@ sub PrintInvLensSpec($;$$);
196
197
  49465 => 'Tamron 17-70mm F2.8 Di III-A VC RXD', #JR (Model B070)
197
198
  49466 => 'Tamron 150-500mm F5-6.7 Di III VC VXD', #JR (Model A057)
198
199
  49467 => 'Tamron 11-20mm F2.8 Di III-A RXD', #JR (Model B060)
200
+ 49468 => 'Tamron 18-300mm F3.5-6.3 Di III-A VC VXD', #JR (Model B061)
199
201
 
200
202
  49473 => 'Tokina atx-m 85mm F1.8 FE or Viltrox lens', #JR
201
203
  49473.1 => 'Viltrox 23mm F1.4 E', #JR
@@ -892,6 +892,7 @@ my %tagLookup = (
892
892
  'alternatetitletext' => { 484 => [\'alternateTitle','alternateTitleText'] },
893
893
  'altitude' => { 192 => 0x6 },
894
894
  'alttapename' => { 494 => 'altTapeName' },
895
+ 'alttextaccessibility' => { 479 => 'AltTextAccessibility' },
895
896
  'alttimecode' => { 494 => 'altTimecode' },
896
897
  'alttimecodetimeformat' => { 494 => [\'altTimecode','altTimecodeTimeFormat'] },
897
898
  'alttimecodetimevalue' => { 494 => [\'altTimecode','altTimecodeTimeValue'] },
@@ -1180,6 +1181,7 @@ my %tagLookup = (
1180
1181
  'calibrationhistory' => { 135 => 0x9c9 },
1181
1182
  'calibrationilluminant1' => { 117 => 0xc65a },
1182
1183
  'calibrationilluminant2' => { 117 => 0xc65b },
1184
+ 'calibrationilluminant3' => { 117 => 0xcd31 },
1183
1185
  'calibrationversion' => { 135 => 0x9c6 },
1184
1186
  'callforimage' => { 458 => 'CallForImage' },
1185
1187
  'camera' => { 448 => [\'Cameras','CamerasCamera'] },
@@ -1192,6 +1194,7 @@ my %tagLookup = (
1192
1194
  'cameracalibration' => { 388 => 0x11f },
1193
1195
  'cameracalibration1' => { 117 => 0xc623 },
1194
1196
  'cameracalibration2' => { 117 => 0xc624 },
1197
+ 'cameracalibration3' => { 117 => 0xcd32 },
1195
1198
  'cameracalibrationsig' => { 117 => 0xc6f3 },
1196
1199
  'cameracolorcalibration01' => { 36 => 0x0, 37 => 0x0 },
1197
1200
  'cameracolorcalibration02' => { 36 => 0x4, 37 => 0x5 },
@@ -1542,6 +1545,7 @@ my %tagLookup = (
1542
1545
  'colormatrix' => { 292 => 0x200, 293 => 0x1011, 385 => 0xa030 },
1543
1546
  'colormatrix1' => { 117 => 0xc621, 355 => 0x106 },
1544
1547
  'colormatrix2' => { 117 => 0xc622, 296 => 0x200, 355 => 0x226 },
1548
+ 'colormatrix3' => { 117 => 0xcd33 },
1545
1549
  'colormatrixa' => { 346 => 0x203 },
1546
1550
  'colormatrixa2' => { 346 => 0x21c },
1547
1551
  'colormatrixadobergb' => { 385 => 0xa032 },
@@ -2341,7 +2345,7 @@ my %tagLookup = (
2341
2345
  'eventfieldnotes' => { 116 => [\'Event','EventFieldNotes'] },
2342
2346
  'eventfieldnumber' => { 116 => [\'Event','EventFieldNumber'] },
2343
2347
  'eventhabitat' => { 116 => [\'Event','EventHabitat'] },
2344
- 'eventid' => { 116 => [\'Event','EventEventID'] },
2348
+ 'eventid' => { 116 => [\'Event','EventEventID'], 480 => 'EventID' },
2345
2349
  'eventlatestdate' => { 116 => [\'Event','EventLatestDate'] },
2346
2350
  'eventmonth' => { 116 => [\'Event','EventMonth'] },
2347
2351
  'eventnumber' => { 372 => 0x9, 373 => 0x37, 374 => 0x3a },
@@ -2416,6 +2420,7 @@ my %tagLookup = (
2416
2420
  'exposurewarning' => { 125 => 0x1302 },
2417
2421
  'exrauto' => { 125 => 0x1033 },
2418
2422
  'exrmode' => { 125 => 0x1034 },
2423
+ 'extdescraccessibility' => { 479 => 'ExtDescrAccessibility' },
2419
2424
  'extendedwbdetect' => { 288 => 0x902 },
2420
2425
  'extender' => { 289 => 0x301 },
2421
2426
  'extenderfirmwareversion' => { 289 => 0x304 },
@@ -2788,6 +2793,7 @@ my %tagLookup = (
2788
2793
  'forwardlock' => { 489 => 'forwardlock' },
2789
2794
  'forwardmatrix1' => { 117 => 0xc714 },
2790
2795
  'forwardmatrix2' => { 117 => 0xc715 },
2796
+ 'forwardmatrix3' => { 117 => 0xcd34 },
2791
2797
  'fossilspecimen' => { 116 => 'FossilSpecimen' },
2792
2798
  'fossilspecimenmaterialsampleid' => { 116 => [\'FossilSpecimen','FossilSpecimenMaterialSampleID'] },
2793
2799
  'framecount' => { 65 => [0x2,0x4] },
@@ -3140,6 +3146,9 @@ my %tagLookup = (
3140
3146
  'identifiedby' => { 116 => [\'Identification','IdentificationIdentifiedBy'] },
3141
3147
  'identifier' => { 471 => 'identifier', 492 => 'Identifier' },
3142
3148
  'ifcameramodel' => { 135 => 0x9c8 },
3149
+ 'illuminantdata1' => { 117 => 0xcd35 },
3150
+ 'illuminantdata2' => { 117 => 0xcd36 },
3151
+ 'illuminantdata3' => { 117 => 0xcd37 },
3143
3152
  'illumination' => { 282 => '0.5', 373 => 0x48 },
3144
3153
  'imageabsolutex' => { 135 => 0x3fe },
3145
3154
  'imageabsolutey' => { 135 => 0x3ff },
@@ -3681,6 +3690,9 @@ my %tagLookup = (
3681
3690
  'lookparameterslooktable' => { 468 => [\'Look','LookParametersLookTable'], 470 => [\'Look','LookParametersLookTable'] },
3682
3691
  'lookparametersprocessversion' => { 468 => [\'Look','LookParametersProcessVersion'], 470 => [\'Look','LookParametersProcessVersion'] },
3683
3692
  'lookparameterstonecurvepv2012' => { 468 => [\'Look','LookParametersToneCurvePV2012'], 470 => [\'Look','LookParametersToneCurvePV2012'] },
3693
+ 'lookparameterstonecurvepv2012blue' => { 468 => [\'Look','LookParametersToneCurvePV2012Blue'], 470 => [\'Look','LookParametersToneCurvePV2012Blue'] },
3694
+ 'lookparameterstonecurvepv2012green' => { 468 => [\'Look','LookParametersToneCurvePV2012Green'], 470 => [\'Look','LookParametersToneCurvePV2012Green'] },
3695
+ 'lookparameterstonecurvepv2012red' => { 468 => [\'Look','LookParametersToneCurvePV2012Red'], 470 => [\'Look','LookParametersToneCurvePV2012Red'] },
3684
3696
  'lookparametersversion' => { 468 => [\'Look','LookParametersVersion'], 470 => [\'Look','LookParametersVersion'] },
3685
3697
  'looksupportsamount' => { 468 => [\'Look','LookSupportsAmount'], 470 => [\'Look','LookSupportsAmount'] },
3686
3698
  'looksupportsmonochrome' => { 468 => [\'Look','LookSupportsMonochrome'], 470 => [\'Look','LookSupportsMonochrome'] },
@@ -4825,8 +4837,10 @@ my %tagLookup = (
4825
4837
  'profilecameraindices' => { 448 => [\'Profiles','ProfilesProfileCameraIndices'] },
4826
4838
  'profilecopyright' => { 117 => 0xc6fe },
4827
4839
  'profileembedpolicy' => { 117 => 0xc6fd },
4840
+ 'profilegaintablemap' => { 117 => 0xcd2d },
4828
4841
  'profilehuesatmapdata1' => { 117 => 0xc6fa },
4829
4842
  'profilehuesatmapdata2' => { 117 => 0xc6fb },
4843
+ 'profilehuesatmapdata3' => { 117 => 0xcd39 },
4830
4844
  'profilehuesatmapdims' => { 117 => 0xc6f9 },
4831
4845
  'profilehuesatmapencoding' => { 117 => 0xc7a3 },
4832
4846
  'profilelooktabledata' => { 117 => 0xc726 },
@@ -5018,6 +5032,7 @@ my %tagLookup = (
5018
5032
  'redsaturation' => { 468 => 'RedSaturation', 470 => 'RedSaturation' },
5019
5033
  'reductionmatrix1' => { 117 => 0xc625 },
5020
5034
  'reductionmatrix2' => { 117 => 0xc626 },
5035
+ 'reductionmatrix3' => { 117 => 0xcd3a },
5021
5036
  'reelname' => { 117 => 0xc789, 371 => 'reel' },
5022
5037
  'reference1' => { 478 => [\'TagStructure','TagStructureReference'] },
5023
5038
  'reference2' => { 478 => [\'TagStructure','TagStructureSubLabelsReference'] },
@@ -5197,6 +5212,7 @@ my %tagLookup = (
5197
5212
  'rflenstype' => { 56 => 0x3d },
5198
5213
  'rgbcurvelimits' => { 106 => 0x238 },
5199
5214
  'rgbcurvepoints' => { 105 => 0x7, 106 => 0x20e },
5215
+ 'rgbtables' => { 117 => 0xcd3b },
5200
5216
  'richtextcomment' => { 477 => 'RichTextComment' },
5201
5217
  'ricohdate' => { 377 => 0x6 },
5202
5218
  'ricohimageheight' => { 377 => 0x2 },
@@ -5430,7 +5446,7 @@ my %tagLookup = (
5430
5446
  'shuttercount2' => { 429 => 0x4c, 430 => [0x50,0x52,0x58], 431 => 0x50 },
5431
5447
  'shuttercount3' => { 429 => [0x1a0,0x1aa,0x1bd], 430 => [0x19f,0x1cb,0x1cd] },
5432
5448
  'shuttercurtainsync' => { 80 => 0xf, 81 => 0xf, 82 => 0x305, 83 => 0xe, 84 => 0xf, 85 => 0x8, 86 => 0x8, 87 => 0xf, 88 => 0x8 },
5433
- 'shuttermode' => { 137 => 0x1b, 222 => 0x34 },
5449
+ 'shuttermode' => { 56 => 0x17, 137 => 0x1b, 222 => 0x34 },
5434
5450
  'shutterreleasebuttonae-l' => { 271 => '17.7', 272 => '18.4', 274 => '78.4', 275 => '78.4', 276 => '16.1', 277 => '17.1', 278 => '17.1', 279 => '17.1', 280 => '7.1', 281 => '17.5', 284 => '18.4', 285 => '78.4', 286 => '18.2' },
5435
5451
  'shutterreleasemethod' => { 95 => 0x1010 },
5436
5452
  'shutterreleasenocfcard' => { 80 => 0x2, 81 => 0x2, 88 => 0xf },
@@ -9053,6 +9069,7 @@ my %tagExists = (
9053
9069
  'markerid' => 1,
9054
9070
  'markinfo' => 1,
9055
9071
  'marl' => 1,
9072
+ 'masksubarea' => 1,
9056
9073
  'mastergainadjustment' => 1,
9057
9074
  'matrixworldtocamera' => 1,
9058
9075
  'matrixworldtoscreen' => 1,
@@ -10440,6 +10457,8 @@ my %tagExists = (
10440
10457
  'selobjname' => 1,
10441
10458
  'selobjtype' => 1,
10442
10459
  'selobjversion' => 1,
10460
+ 'semanticinstanceifd' => 1,
10461
+ 'semanticname' => 1,
10443
10462
  'sendduration' => 1,
10444
10463
  'senderaddress' => 1,
10445
10464
  'sendername' => 1,
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
12
12
  =head1 TAG TABLES
13
13
 
14
14
  The tables listed below give the names of all tags recognized by ExifTool.
15
- They contain a total of 24338 tags, with 15779 unique tag names.
15
+ They contain a total of 24363 tags, with 15798 unique tag names.
16
16
 
17
17
  B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
18
18
  table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
@@ -925,6 +925,20 @@ for the official EXIF 2.32 specification.
925
925
  0xc7ec DepthUnits IFD0 int16u!
926
926
  0xc7ed DepthMeasureType IFD0 int16u!
927
927
  0xc7ee EnhanceParams IFD0 string!
928
+ 0xcd2d ProfileGainTableMap SubIFD undef!
929
+ 0xcd2e SemanticName SubIFD no
930
+ 0xcd30 SemanticInstanceIFD SubIFD no
931
+ 0xcd31 CalibrationIlluminant3 IFD0 int16u!
932
+ 0xcd32 CameraCalibration3 IFD0 rational64s[n]!
933
+ 0xcd33 ColorMatrix3 IFD0 rational64s[n]!
934
+ 0xcd34 ForwardMatrix3 IFD0 rational64s[n]!
935
+ 0xcd35 IlluminantData1 IFD0 undef!
936
+ 0xcd36 IlluminantData2 IFD0 undef!
937
+ 0xcd37 IlluminantData3 IFD0 undef!
938
+ 0xcd38 MaskSubArea SubIFD no
939
+ 0xcd39 ProfileHueSatMapData3 IFD0 float[n]!
940
+ 0xcd3a ReductionMatrix3 IFD0 rational64s[n]!
941
+ 0xcd3b RGBTables IFD0 undef!
928
942
  0xea1c Padding ExifIFD undef!
929
943
  0xea1d OffsetSchema ExifIFD int32s!
930
944
  0xfde8 OwnerName ExifIFD string/
@@ -1730,6 +1744,9 @@ These tags belong to the ExifTool XMP-crd family 1 group.
1730
1744
  LookParametersLookTable string/_
1731
1745
  LookParametersProcessVersion string/_
1732
1746
  LookParametersToneCurvePV2012 string/_+
1747
+ LookParametersToneCurvePV2012Blue string/_+
1748
+ LookParametersToneCurvePV2012Green string/_+
1749
+ LookParametersToneCurvePV2012Red string/_+
1733
1750
  LookParametersVersion string/_
1734
1751
  LookSupportsAmount string/_
1735
1752
  LookSupportsMonochrome string/_
@@ -2059,6 +2076,9 @@ These tags belong to the ExifTool XMP-crd family 1 group.
2059
2076
  LookTable string
2060
2077
  ProcessVersion string
2061
2078
  ToneCurvePV2012 string+
2079
+ ToneCurvePV2012Blue string+
2080
+ ToneCurvePV2012Green string+
2081
+ ToneCurvePV2012Red string+
2062
2082
  Version string
2063
2083
 
2064
2084
  =head3 XMP RetouchArea Struct
@@ -2394,6 +2414,9 @@ These tags belong to the ExifTool XMP-crs family 1 group.
2394
2414
  LookParametersLookTable string_
2395
2415
  LookParametersProcessVersion string_
2396
2416
  LookParametersToneCurvePV2012 string_+
2417
+ LookParametersToneCurvePV2012Blue string_+
2418
+ LookParametersToneCurvePV2012Green string_+
2419
+ LookParametersToneCurvePV2012Red string_+
2397
2420
  LookParametersVersion string_
2398
2421
  LookSupportsAmount string_
2399
2422
  LookSupportsMonochrome string_
@@ -3487,6 +3510,7 @@ These tags belong to the ExifTool XMP-iptcCore family 1 group.
3487
3510
 
3488
3511
  Tag Name Writable
3489
3512
  -------- --------
3513
+ AltTextAccessibility lang-alt
3490
3514
  CountryCode string
3491
3515
  CreatorContactInfo ContactInfo Struct
3492
3516
  CreatorCity string_
@@ -3497,6 +3521,7 @@ These tags belong to the ExifTool XMP-iptcCore family 1 group.
3497
3521
  CreatorWorkEmail string_
3498
3522
  CreatorWorkTelephone string_
3499
3523
  CreatorWorkURL string_
3524
+ ExtDescrAccessibility lang-alt
3500
3525
  IntellectualGenre string
3501
3526
  Location string
3502
3527
  Scene string+
@@ -3596,6 +3621,7 @@ These tags belong to the ExifTool XMP-iptcExt family 1 group.
3596
3621
  ShownEvent Entity Struct+
3597
3622
  ShownEventIdentifier string_+
3598
3623
  ShownEventName lang-alt_+
3624
+ EventID string+
3599
3625
  ExternalMetadataLink string+
3600
3626
  FeedIdentifier string
3601
3627
  Genre CVTermDetails Struct+
@@ -7359,6 +7385,7 @@ WB tags for the Canon G9.
7359
7385
  19 LiveViewShooting int16s
7360
7386
  20 FocusDistanceUpper int16u
7361
7387
  21 FocusDistanceLower int16u
7388
+ 23 ShutterMode int16s
7362
7389
  25 FlashExposureLock int16s
7363
7390
  61 RFLensType int16u
7364
7391
 
@@ -15412,6 +15439,7 @@ such as the OM E-M5.
15412
15439
  44 Model no
15413
15440
  131 DateTime1 no
15414
15441
  157 DateTime2 no
15442
+ 383 LensModel no
15415
15443
 
15416
15444
  =head3 Olympus scrn2 Tags
15417
15445
 
@@ -26042,7 +26070,7 @@ According to the specification, integer-format QuickTime date/time tags
26042
26070
  should be stored as UTC. Unfortunately, digital cameras often store local
26043
26071
  time values instead (presumably because they don't know the time zone). For
26044
26072
  this reason, by default ExifTool does not assume a time zone for these
26045
- values. However, if the QuickTimeUTC API option is set, then ExifTool will
26073
+ values. However, if the API QuickTimeUTC option is set, then ExifTool will
26046
26074
  assume these values are properly stored as UTC, and will convert them to
26047
26075
  local time when extracting.
26048
26076
 
@@ -35190,7 +35218,7 @@ options, but these files are not writable directly.
35190
35218
 
35191
35219
  XAttr tags are extracted using the "xattr" utility. They are extracted if
35192
35220
  any "XAttr*" tag or the MacOS group is specifically requested, or by setting
35193
- the XAttrTags API option to 1 or the RequestAll API option to 2 or higher.
35221
+ the API XAttrTags option to 1 or the API RequestAll option to 2 or higher.
35194
35222
  And they are extracted by default from MacOS "._" files when reading
35195
35223
  these files directly.
35196
35224
 
@@ -35212,7 +35240,7 @@ these files directly.
35212
35240
 
35213
35241
  MDItem tags are extracted using the "mdls" utility. They are extracted if
35214
35242
  any "MDItem*" tag or the MacOS group is specifically requested, or by
35215
- setting the MDItemTags API option to 1 or the RequestAll API option to 2 or
35243
+ setting the API MDItemTags option to 1 or the API RequestAll option to 2 or
35216
35244
  higher. Note that these tags do not necessarily reflect the current
35217
35245
  metadata of a file -- it may take some time for the MacOS mdworker daemon to
35218
35246
  index the file after a metadata change.
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
50
50
  use Image::ExifTool::GPS;
51
51
  require Exporter;
52
52
 
53
- $VERSION = '3.44';
53
+ $VERSION = '3.46';
54
54
  @ISA = qw(Exporter);
55
55
  @EXPORT_OK = qw(EscapeXML UnescapeXML);
56
56
 
@@ -1533,6 +1533,9 @@ my %sPantryItem = (
1533
1533
  CameraProfile => { },
1534
1534
  LookTable => { },
1535
1535
  ToneCurvePV2012 => { List => 'Seq' },
1536
+ ToneCurvePV2012Red => { List => 'Seq' },
1537
+ ToneCurvePV2012Green => { List => 'Seq' },
1538
+ ToneCurvePV2012Blue => { List => 'Seq' },
1536
1539
  },
1537
1540
  },
1538
1541
  }
@@ -2346,6 +2349,8 @@ my %sPantryItem = (
2346
2349
  Scene => { Groups => { 2 => 'Other' }, List => 'Bag' },
2347
2350
  SubjectCode => { Groups => { 2 => 'Other' }, List => 'Bag' },
2348
2351
  # Copyright - have seen this in a sample (Jan 2021), but I think it is non-standard
2352
+ AltTextAccessibility =>{ Groups => { 2 => 'Other' }, Writable => 'lang-alt' }, # added 2021-10-13
2353
+ ExtDescrAccessibility=>{ Groups => { 2 => 'Other' }, Writable => 'lang-alt' }, # added 2021-10-13
2349
2354
  );
2350
2355
 
2351
2356
  # Adobe Lightroom namespace properties (lr) (ref PH)
@@ -3960,7 +3965,7 @@ sub ProcessXMP($$;$)
3960
3965
  } elsif ($1 eq 'REDXIF') {
3961
3966
  $type = 'RMD';
3962
3967
  $mime = 'application/xml';
3963
- } else {
3968
+ } elsif ($1 ne 'fcpxml') { # Final Cut Pro XML
3964
3969
  return 0;
3965
3970
  }
3966
3971
  } elsif ($buf2 =~ /<svg[\s>]/) {
@@ -797,6 +797,7 @@ my %sImageRegion = ( # new in 1.5
797
797
  audioBitsPerSample => { Groups => { 2 => 'Audio' }, Writable => 'integer' },
798
798
  # new IPTC Extension schema 1.5 property
799
799
  ImageRegion => { Groups => { 2 => 'Image' }, List => 'Bag', Struct => \%sImageRegion },
800
+ EventID => { List => 'Bag' }, # added 2021-10-13
800
801
  );
801
802
 
802
803
  #------------------------------------------------------------------------------
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
29
29
  %jpegMarker %specialTags %fileTypeLookup $testLen $exePath
30
30
  %static_vars);
31
31
 
32
- $VERSION = '12.32';
32
+ $VERSION = '12.33';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -808,6 +808,7 @@ my %moduleName = (
808
808
  DEX => 0,
809
809
  DOCX => 'OOXML',
810
810
  DCX => 0,
811
+ DIR => 0,
811
812
  DR4 => 'CanonVRD',
812
813
  DSS => 'Olympus',
813
814
  DWF => 0,
@@ -1155,14 +1156,14 @@ my %systemTagsNotes = (
1155
1156
  Groups => { 1 => 'System', 2 => 'Other' },
1156
1157
  Notes => q{
1157
1158
  file name without extension. Not generated unless specifically requested or
1158
- the L<RequestAll|../ExifTool.html#RequestAll> API option is set
1159
+ the API L<RequestAll|../ExifTool.html#RequestAll> option is set
1159
1160
  },
1160
1161
  },
1161
1162
  FilePath => {
1162
1163
  Groups => { 1 => 'System', 2 => 'Other' },
1163
1164
  Notes => q{
1164
1165
  absolute path of source file. Not generated unless specifically requested or
1165
- the L<RequestAll|../ExifTool.html#RequestAll> API option is set. Does not support Windows Unicode file
1166
+ the API L<RequestAll|../ExifTool.html#RequestAll> option is set. Does not support Windows Unicode file
1166
1167
  names
1167
1168
  },
1168
1169
  },
@@ -1185,7 +1186,7 @@ my %systemTagsNotes = (
1185
1186
  sequence number for each source file when extracting or copying information,
1186
1187
  including files that fail the -if condition of the command-line application,
1187
1188
  beginning at 0 for the first file. Not generated unless specifically
1188
- requested or the L<RequestAll|../ExifTool.html#RequestAll> API option is set
1189
+ requested or the API L<RequestAll|../ExifTool.html#RequestAll> option is set
1189
1190
  },
1190
1191
  },
1191
1192
  FileSize => {
@@ -1258,7 +1259,7 @@ my %systemTagsNotes = (
1258
1259
  the filesystem creation date/time. Windows/Mac only. In Windows, the file
1259
1260
  creation date/time is preserved by default when writing if Win32API::File
1260
1261
  and Win32::API are available. On Mac, this tag is extracted only if it or
1261
- the MacOS group is specifically requested or the L<RequestAll|../ExifTool.html#RequestAll> API option is
1262
+ the MacOS group is specifically requested or the API L<RequestAll|../ExifTool.html#RequestAll> option is
1262
1263
  set to 2 or higher. Requires "setfile" for writing on Mac, which may be
1263
1264
  installed by typing C<xcode-select --install> in the Terminal
1264
1265
  },
@@ -1649,7 +1650,7 @@ my %systemTagsNotes = (
1649
1650
  sub-sampling values to generate the value of this tag. The result is
1650
1651
  compared to known values in an attempt to deduce the originating software
1651
1652
  based only on the JPEG image data. For performance reasons, this tag is
1652
- generated only if specifically requested or the L<RequestAll|../ExifTool.html#RequestAll> API option is set
1653
+ generated only if specifically requested or the API L<RequestAll|../ExifTool.html#RequestAll> option is set
1653
1654
  to 3 or higher
1654
1655
  },
1655
1656
  },
@@ -1657,14 +1658,14 @@ my %systemTagsNotes = (
1657
1658
  Notes => q{
1658
1659
  an estimate of the IJG JPEG quality setting for the image, calculated from
1659
1660
  the quantization tables. For performance reasons, this tag is generated
1660
- only if specifically requested or the L<RequestAll|../ExifTool.html#RequestAll> API option is set to 3 or
1661
+ only if specifically requested or the API L<RequestAll|../ExifTool.html#RequestAll> option is set to 3 or
1661
1662
  higher
1662
1663
  },
1663
1664
  },
1664
1665
  JPEGImageLength => {
1665
1666
  Notes => q{
1666
1667
  byte length of JPEG image without metadata. For performance reasons, this
1667
- tag is generated only if specifically requested or the L<RequestAll|../ExifTool.html#RequestAll> API option
1668
+ tag is generated only if specifically requested or the API L<RequestAll|../ExifTool.html#RequestAll> option
1668
1669
  is set to 3 or higher
1669
1670
  },
1670
1671
  },
@@ -1674,7 +1675,7 @@ my %systemTagsNotes = (
1674
1675
  Notes => q{
1675
1676
  the current date/time. Useful when setting the tag values, eg.
1676
1677
  C<"-modifydate<now">. Not generated unless specifically requested or the
1677
- L<RequestAll|../ExifTool.html#RequestAll> API option is set
1678
+ API L<RequestAll|../ExifTool.html#RequestAll> option is set
1678
1679
  },
1679
1680
  PrintConv => '$self->ConvertDateTime($val)',
1680
1681
  },
@@ -1685,7 +1686,7 @@ my %systemTagsNotes = (
1685
1686
  YYYYmmdd-HHMM-SSNN-PPPP-RRRRRRRRRRRR, where Y=year, m=month, d=day, H=hour,
1686
1687
  M=minute, S=second, N=file sequence number in hex, P=process ID in hex, and
1687
1688
  R=random hex number; without dashes with the -n option. Not generated
1688
- unless specifically requested or the L<RequestAll|../ExifTool.html#RequestAll> API option is set
1689
+ unless specifically requested or the API L<RequestAll|../ExifTool.html#RequestAll> option is set
1689
1690
  },
1690
1691
  PrintConv => '$val =~ s/(.{8})(.{4})(.{4})(.{4})/$1-$2-$3-$4-/; $val',
1691
1692
  },
@@ -1778,7 +1779,7 @@ my %systemTagsNotes = (
1778
1779
  Groups => { 0 => 'Trailer' },
1779
1780
  Notes => q{
1780
1781
  the full JPEG trailer data block. Extracted only if specifically requested
1781
- or the RequestAll API option is set to 3 or higher
1782
+ or the API RequestAll option is set to 3 or higher
1782
1783
  },
1783
1784
  Writable => 1,
1784
1785
  Protected => 1,
@@ -6469,7 +6470,7 @@ sub ProcessJPEG($$)
6469
6470
  next;
6470
6471
  } elsif ($marker == 0xdb and length($$segDataPt) and # DQT
6471
6472
  # save the DQT data only if JPEGDigest has been requested
6472
- # (Note: since we aren't checking the RequestAll API option here, the application
6473
+ # (Note: since we aren't checking the API RequestAll option here, the application
6473
6474
  # must use the RequestTags option to generate these tags if they have not been
6474
6475
  # specifically requested. The reason is that there is too much overhead involved
6475
6476
  # in the calculation of this tag to make this worth the CPU time.)
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 12.32
3
+ Version: 12.33
4
4
  Release: 1
5
5
  License: Artistic/GPL
6
6
  Group: Development/Libraries/Perl
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExiftoolVendored
4
- VERSION = Gem::Version.new('12.32.0')
4
+ VERSION = Gem::Version.new('12.33.0')
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exiftool_vendored
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.32.0
4
+ version: 12.33.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-10-05 00:00:00.000000000 Z
12
+ date: 2021-10-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool