summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorexiftool <exiftool@users.sourceforge.net>2021-10-16 13:35:13 -0400
committerexiftool <exiftool@users.sourceforge.net>2021-10-16 13:35:13 -0400
commit426df98011695c533f3b133fc9332c139aeaaa10 (patch)
treeb29be3acdbde27c4553960b274b36709fa63a7e8 /lib
parentb9a23ab696b7dca4178fd3e24043d2b9dcc1a8f3 (diff)
Update to 12.33
Diffstat (limited to 'lib')
-rw-r--r--lib/Image/ExifTool.pm25
-rw-r--r--lib/Image/ExifTool/BuildTagLookup.pm2
-rw-r--r--lib/Image/ExifTool/CBOR.pm116
-rw-r--r--lib/Image/ExifTool/Canon.pm18
-rw-r--r--lib/Image/ExifTool/Exif.pm100
-rw-r--r--lib/Image/ExifTool/JSON.pm6
-rw-r--r--lib/Image/ExifTool/Jpeg2000.pm4
-rw-r--r--lib/Image/ExifTool/MacOS.pm4
-rw-r--r--lib/Image/ExifTool/Olympus.pm6
-rw-r--r--lib/Image/ExifTool/QuickTime.pm8
-rw-r--r--lib/Image/ExifTool/QuickTimeStream.pl2
-rw-r--r--lib/Image/ExifTool/README4
-rw-r--r--lib/Image/ExifTool/Sony.pm4
-rw-r--r--lib/Image/ExifTool/TagLookup.pm23
-rw-r--r--lib/Image/ExifTool/TagNames.pod36
-rw-r--r--lib/Image/ExifTool/XMP.pm9
-rw-r--r--lib/Image/ExifTool/XMP2.pl1
17 files changed, 299 insertions, 69 deletions
diff --git a/lib/Image/ExifTool.pm b/lib/Image/ExifTool.pm
index cf2644db..bf905ec5 100644
--- a/lib/Image/ExifTool.pm
+++ b/lib/Image/ExifTool.pm
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
%jpegMarker %specialTags %fileTypeLookup $testLen $exePath
%static_vars);
-$VERSION = '12.32';
+$VERSION = '12.33';
$RELEASE = '';
@ISA = qw(Exporter);
%EXPORT_TAGS = (
@@ -808,6 +808,7 @@ my %moduleName = (
DEX => 0,
DOCX => 'OOXML',
DCX => 0,
+ DIR => 0,
DR4 => 'CanonVRD',
DSS => 'Olympus',
DWF => 0,
@@ -1155,14 +1156,14 @@ my %systemTagsNotes = (
Groups => { 1 => 'System', 2 => 'Other' },
Notes => q{
file name without extension. Not generated unless specifically requested or
- the L<RequestAll|../ExifTool.html#RequestAll> API option is set
+ the API L<RequestAll|../ExifTool.html#RequestAll> option is set
},
},
FilePath => {
Groups => { 1 => 'System', 2 => 'Other' },
Notes => q{
absolute path of source file. Not generated unless specifically requested or
- the L<RequestAll|../ExifTool.html#RequestAll> API option is set. Does not support Windows Unicode file
+ the API L<RequestAll|../ExifTool.html#RequestAll> option is set. Does not support Windows Unicode file
names
},
},
@@ -1185,7 +1186,7 @@ my %systemTagsNotes = (
sequence number for each source file when extracting or copying information,
including files that fail the -if condition of the command-line application,
beginning at 0 for the first file. Not generated unless specifically
- requested or the L<RequestAll|../ExifTool.html#RequestAll> API option is set
+ requested or the API L<RequestAll|../ExifTool.html#RequestAll> option is set
},
},
FileSize => {
@@ -1258,7 +1259,7 @@ my %systemTagsNotes = (
the filesystem creation date/time. Windows/Mac only. In Windows, the file
creation date/time is preserved by default when writing if Win32API::File
and Win32::API are available. On Mac, this tag is extracted only if it or
- the MacOS group is specifically requested or the L<RequestAll|../ExifTool.html#RequestAll> API option is
+ the MacOS group is specifically requested or the API L<RequestAll|../ExifTool.html#RequestAll> option is
set to 2 or higher. Requires "setfile" for writing on Mac, which may be
installed by typing C<xcode-select --install> in the Terminal
},
@@ -1649,7 +1650,7 @@ my %systemTagsNotes = (
sub-sampling values to generate the value of this tag. The result is
compared to known values in an attempt to deduce the originating software
based only on the JPEG image data. For performance reasons, this tag is
- generated only if specifically requested or the L<RequestAll|../ExifTool.html#RequestAll> API option is set
+ generated only if specifically requested or the API L<RequestAll|../ExifTool.html#RequestAll> option is set
to 3 or higher
},
},
@@ -1657,14 +1658,14 @@ my %systemTagsNotes = (
Notes => q{
an estimate of the IJG JPEG quality setting for the image, calculated from
the quantization tables. For performance reasons, this tag is generated
- only if specifically requested or the L<RequestAll|../ExifTool.html#RequestAll> API option is set to 3 or
+ only if specifically requested or the API L<RequestAll|../ExifTool.html#RequestAll> option is set to 3 or
higher
},
},
JPEGImageLength => {
Notes => q{
byte length of JPEG image without metadata. For performance reasons, this
- tag is generated only if specifically requested or the L<RequestAll|../ExifTool.html#RequestAll> API option
+ tag is generated only if specifically requested or the API L<RequestAll|../ExifTool.html#RequestAll> option
is set to 3 or higher
},
},
@@ -1674,7 +1675,7 @@ my %systemTagsNotes = (
Notes => q{
the current date/time. Useful when setting the tag values, eg.
C<"-modifydate<now">. Not generated unless specifically requested or the
- L<RequestAll|../ExifTool.html#RequestAll> API option is set
+ API L<RequestAll|../ExifTool.html#RequestAll> option is set
},
PrintConv => '$self->ConvertDateTime($val)',
},
@@ -1685,7 +1686,7 @@ my %systemTagsNotes = (
YYYYmmdd-HHMM-SSNN-PPPP-RRRRRRRRRRRR, where Y=year, m=month, d=day, H=hour,
M=minute, S=second, N=file sequence number in hex, P=process ID in hex, and
R=random hex number; without dashes with the -n option. Not generated
- unless specifically requested or the L<RequestAll|../ExifTool.html#RequestAll> API option is set
+ unless specifically requested or the API L<RequestAll|../ExifTool.html#RequestAll> option is set
},
PrintConv => '$val =~ s/(.{8})(.{4})(.{4})(.{4})/$1-$2-$3-$4-/; $val',
},
@@ -1778,7 +1779,7 @@ my %systemTagsNotes = (
Groups => { 0 => 'Trailer' },
Notes => q{
the full JPEG trailer data block. Extracted only if specifically requested
- or the RequestAll API option is set to 3 or higher
+ or the API RequestAll option is set to 3 or higher
},
Writable => 1,
Protected => 1,
@@ -6469,7 +6470,7 @@ sub ProcessJPEG($$)
next;
} elsif ($marker == 0xdb and length($$segDataPt) and # DQT
# save the DQT data only if JPEGDigest has been requested
- # (Note: since we aren't checking the RequestAll API option here, the application
+ # (Note: since we aren't checking the API RequestAll option here, the application
# must use the RequestTags option to generate these tags if they have not been
# specifically requested. The reason is that there is too much overhead involved
# in the calculation of this tag to make this worth the CPU time.)
diff --git a/lib/Image/ExifTool/BuildTagLookup.pm b/lib/Image/ExifTool/BuildTagLookup.pm
index 87b1ccf9..585bcee9 100644
--- a/lib/Image/ExifTool/BuildTagLookup.pm
+++ b/lib/Image/ExifTool/BuildTagLookup.pm
@@ -460,7 +460,7 @@ According to the specification, integer-format QuickTime date/time tags
should be stored as UTC. Unfortunately, digital cameras often store local
time values instead (presumably because they don't know the time zone). For
this reason, by default ExifTool does not assume a time zone for these
-values. However, if the L<QuickTimeUTC|../ExifTool.html#QuickTimeUTC> API option is set, then ExifTool will
+values. However, if the API L<QuickTimeUTC|../ExifTool.html#QuickTimeUTC> option is set, then ExifTool will
assume these values are properly stored as UTC, and will convert them to
local time when extracting.
diff --git a/lib/Image/ExifTool/CBOR.pm b/lib/Image/ExifTool/CBOR.pm
index 2028042a..55cd1260 100644
--- a/lib/Image/ExifTool/CBOR.pm
+++ b/lib/Image/ExifTool/CBOR.pm
@@ -15,12 +15,12 @@ use vars qw($VERSION);
use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::JSON;
-$VERSION = '1.00';
+$VERSION = '1.01';
sub ProcessCBOR($$$);
sub ReadCBORValue($$$$);
-# optional CBOR type codes
+# optional CBOR type code
my %cborType6 = (
0 => 'date/time string',
1 => 'epoch-based date/time',
@@ -78,6 +78,7 @@ sub ReadCBORValue($$$$)
return(undef, 'Truncated CBOR data', $pos) if $pos >= $end;
my $verbose = $$et{OPTIONS}{Verbose};
my $indent = $$et{INDENT};
+ my $dumpStart = $pos;
my $fmt = Get8u($dataPt, $pos++);
my $dat = $fmt & 0x1f;
my ($num, $val, $err, $size);
@@ -95,28 +96,22 @@ sub ReadCBORValue($$$$)
$num = ReadValue($dataPt, $pos, $format, 1, $size);
$pos += $size;
}
- my ($pre, $opt) = ('', ':');
- if ($verbose and $fmt != 6) {
- if (defined $$et{cbor_pre}) {
- $pre = "$$et{cbor_pre}";
- delete $$et{cbor_pre};
- }
- if (defined $$et{cbor_opt}) {
- $opt = ", $$et{cbor_opt}:";
- delete $$et{cbor_opt};
- }
+ my $pre = '';
+ if (defined $$et{cbor_pre} and $fmt != 6) {
+ $pre = $$et{cbor_pre};
+ delete $$et{cbor_pre};
}
if ($fmt == 0) { # positive integer
$val = $num;
- $et->VPrint(1, "$$et{INDENT} ${pre}int+$opt $val\n");
+ $et->VPrint(1, "$$et{INDENT} ${pre}int+: $val\n");
} elsif ($fmt == 1) { # negative integer
$val = -1 * $num;
- $et->VPrint(1, "$$et{INDENT} ${pre}int-$opt $val\n");
+ $et->VPrint(1, "$$et{INDENT} ${pre}int-: $val\n");
} elsif ($fmt == 2 or $fmt == 3) { # byte/UTF8 string
return(undef, 'Truncated CBOR string value', $pos) if $pos + $num > $end;
if ($num < 0) { # (should not happen in C2PA)
my $string = '';
- $$et{INDENT} .= ' ';
+ $$et{INDENT} .= ' ';
for (;;) {
($val, $err, $pos) = ReadCBORValue($et, $dataPt, $pos, $end);
return(undef, $err, $pos) if $err;
@@ -125,26 +120,34 @@ sub ReadCBORValue($$$$)
$string .= $val;
}
$$et{INDENT} = $indent;
- return($string, undef, $pos); # return concatenated strings
+ return($string, undef, $pos); # return concatenated byte/text string
} else {
$val = substr($$dataPt, $pos, $num);
}
$pos += $num;
- if ($fmt == 2) {
- $et->VPrint(1, "$$et{INDENT} ${pre}byte$opt <binary data ".length($val)." bytes>\n");
- return(\$val, undef, $pos); # (byte string)
+ if ($fmt == 2) { # (byte string)
+ $et->VPrint(1, "$$et{INDENT} ${pre}byte: <binary data ".length($val)." bytes>\n");
+ my $dat = $val;
+ $val = \$dat; # use scalar reference for binary data
+ } else { # (text string)
+ $val = $et->Decode($val, 'UTF8');
+ $et->VPrint(1, "$$et{INDENT} ${pre}text: '${val}'\n");
}
- $et->VPrint(1, "$$et{INDENT} ${pre}text$opt '${val}'\n");
} elsif ($fmt == 4 or $fmt == 5) { # list/hash
if ($fmt == 4) {
- $et->VPrint(1, "$$et{INDENT} ${pre}list$opt <$num elements>\n");
+ $et->VPrint(1, "$$et{INDENT} ${pre}list: <$num elements>\n");
} else {
- $et->VPrint(1, "$$et{INDENT} ${pre}hash$opt <$num pairs>\n");
+ $et->VPrint(1, "$$et{INDENT} ${pre}hash: <$num pairs>\n");
$num *= 2;
}
- $$et{INDENT} .= ' ';
+ $$et{INDENT} .= ' ';
my $i = 0;
my @list;
+ Image::ExifTool::HexDump($dataPt, $pos - $dumpStart,
+ Start => $dumpStart,
+ DataPos => $$et{cbor_datapos},
+ Prefix => $$et{INDENT},
+ ) if $verbose > 2;
while ($num) {
$$et{cbor_pre} = "$i) ";
if ($fmt == 4) {
@@ -162,6 +165,7 @@ sub ReadCBORValue($$$$)
push @list, $val;
--$num;
}
+ $dumpStart = $pos;
$$et{INDENT} = $indent;
if ($fmt == 5) {
my ($i, @keys);
@@ -174,9 +178,40 @@ sub ReadCBORValue($$$$)
} else {
$val = \@list;
}
- } elsif ($fmt == 6) { # optional type
- $$et{cbor_opt} = $cborType6{$num} || "<unknown type $num>";
+ } elsif ($fmt == 6) { # optional tag
+ if ($verbose) {
+ my $str = "$num (" . ($cborType6{$num} || 'unknown') . ')';
+ my $spc = $$et{cbor_pre} ? (' ' x length $$et{cbor_pre}) : '';
+ $et->VPrint(1, "$$et{INDENT} $spc<CBOR optional type $str>\n");
+ Image::ExifTool::HexDump($dataPt, $pos - $dumpStart,
+ Start => $dumpStart,
+ DataPos => $$et{cbor_datapos},
+ Prefix => $$et{INDENT} . ' ',
+ ) if $verbose > 2;
+ }
+ # read next value (note: in the case of multiple tags,
+ # this nesting will apply the tags in the correct order)
($val, $err, $pos) = ReadCBORValue($et, $dataPt, $pos, $end);
+ $dumpStart = $pos;
+ # convert some values according to the optional tag number (untested)
+ if ($num == 0 and not ref $val) { # date/time string
+ require Image::ExifTool::XMP;
+ $val = Image::ExifTool::XMP::ConvertXMPDate($val);
+ } elsif ($num == 1 and not ref $val) { # epoch-based date/time
+ if (Image::ExifTool::IsFloat($val)) {
+ my $dec = ($val == int($val)) ? undef : 6;
+ $val = Image::ExifTool::ConvertUnixTime($val, 1, $dec);
+ }
+ } elsif (($num == 2 or $num == 3) and ref($val) eq 'SCALAR') { # pos/neg bignum
+ my $big = 0;
+ $big = 256 * $big + Get8u($val,$_) foreach 0..(length($$val) - 1);
+ $val = $num==2 ? $big : -$big;
+ } elsif (($num == 4 or $num == 5) and # decimal fraction or bigfloat
+ ref($val) eq 'ARRAY' and @$val == 2 and
+ Image::ExifTool::IsInt($$val[0]) and Image::ExifTool::IsInt($$val[1]))
+ {
+ $val = $$val[1] * ($num == 4 ? 10 : 2) ** $$val[0];
+ }
} elsif ($fmt == 7) {
if ($dat == 31) {
undef $val; # "break" = end of indefinite array/hash (not used in C2PA)
@@ -202,10 +237,16 @@ sub ReadCBORValue($$$$)
} else {
return(undef, "Invalid CBOR type 7 variant $num", $pos);
}
- $et->VPrint(1, "$$et{INDENT} ${pre}typ7$opt ".(defined $val ? $val : '<break>')."\n");
+ $et->VPrint(1, "$$et{INDENT} ${pre}typ7: ".(defined $val ? $val : '<break>')."\n");
} else {
return(undef, "Unknown CBOR format $fmt", $pos);
}
+ Image::ExifTool::HexDump($dataPt, $pos - $dumpStart,
+ Start => $dumpStart,
+ DataPos => $$et{cbor_datapos},
+ Prefix => $$et{INDENT} . ' ',
+ MaxLen => $verbose < 5 ? ($verbose == 3 ? 96 : 2048) : undef,
+ ) if $verbose > 2;
return($val, $err, $pos);
}
@@ -219,15 +260,28 @@ sub ProcessCBOR($$$)
my $dataPt = $$dirInfo{DataPt};
my $pos = $$dirInfo{DirStart};
my $end = $pos + $$dirInfo{DirLen};
+ my ($val, $err, $tag, $i);
+
$et->VerboseDir('CBOR', undef, $$dirInfo{DirLen});
- my ($val, $err, $tag);
- require Image::ExifTool::CBOR;
+
+ $$et{cbor_datapos} = $$dirInfo{DataPos} + $$dirInfo{Base};
+
while ($pos < $end) {
($val, $err, $pos) = ReadCBORValue($et, $dataPt, $pos, $end);
$err and $et->Warn($err), last;
- ref $val eq 'HASH' or $et->VPrint(1, "$$et{INDENT} CBOR end: Non-hash encountered\n"), last;
- foreach $tag (@{$$val{_ordered_keys_}}) {
- Image::ExifTool::JSON::ProcessTag($et, $tagTablePtr, $tag, $$val{$tag});
+ if (ref $val eq 'HASH') {
+ foreach $tag (@{$$val{_ordered_keys_}}) {
+ Image::ExifTool::JSON::ProcessTag($et, $tagTablePtr, $tag, $$val{$tag});
+ }
+ } elsif (ref $val eq 'ARRAY') {
+ for ($i=0; $i<@$val; ++$i) {
+ Image::ExifTool::JSON::ProcessTag($et, $tagTablePtr, "Item$i", $$val[$i]);
+ }
+ } elsif ($val eq '0') {
+ $et->VPrint(1, "$$et{INDENT} <CBOR end>\n");
+ last; # (treat as padding)
+ } else {
+ $et->VPrint(1, "$$et{INDENT} Unknown value: $val\n");
}
}
return 1;
diff --git a/lib/Image/ExifTool/Canon.pm b/lib/Image/ExifTool/Canon.pm
index b0c9b1a1..aebb358d 100644
--- a/lib/Image/ExifTool/Canon.pm
+++ b/lib/Image/ExifTool/Canon.pm
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
sub ProcessExifInfo($$$);
sub SwapWords($);
-$VERSION = '4.51';
+$VERSION = '4.52';
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -187,7 +187,7 @@ $VERSION = '4.51';
37.2 => 'Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical [IF] Macro (A20)', #38
37.3 => 'Tamron SP AF 17-50mm f/2.8 XR Di II VC LD Aspherical [IF]', #34
37.4 => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC LD Aspherical [IF] Macro', #forum2937
- 38 => 'Canon EF 80-200mm f/4.5-5.6', #32
+ 38 => 'Canon EF 80-200mm f/4.5-5.6 II', #32 (II added ref https://github.com/Exiv2/exiv2/issues/1906)
39 => 'Canon EF 75-300mm f/4-5.6',
40 => 'Canon EF 28-80mm f/3.5-5.6',
41 => 'Canon EF 28-90mm f/4-5.6', #32
@@ -595,6 +595,7 @@ $VERSION = '4.51';
'61182.21' => 'Canon RF 70-200mm F4L IS USM', #42
'61182.22' => 'Canon RF 50mm F1.8 STM', #42
'61182.23' => 'Canon RF 14-35mm F4L IS USM', #IB
+ '61182.24' => 'Canon RF 16mm F2.8 STM', #42
#'61182.xx' => 'Canon RF 100mm F2.8L MACRO IS USM',
65535 => 'n/a',
);
@@ -6731,7 +6732,17 @@ my %ciMaxFocal = (
PrintConvInv => '$val =~ s/ ?m$//; IsFloat($val) ? $val : 655.35',
},
# 22 - values: 0, 1
- # 23 - values: 0, 21, 22
+ 23 => { #JohnMoyer (forum12925)
+ Name => 'ShutterMode',
+ PrintConv => {
+ 0 => 'Mechanical',
+ 1 => 'Electronic First Curtain',
+ 2 => 'Electronic',
+ # 3 => ?
+ # 21 => ?
+ # 22 => ?
+ },
+ },
25 => { #PH
Name => 'FlashExposureLock',
PrintConv => \%offOn,
@@ -6765,6 +6776,7 @@ my %ciMaxFocal = (
278 => 'Canon RF 70-200mm F4L IS USM', #42
280 => 'Canon RF 50mm F1.8 STM', #42
281 => 'Canon RF 14-35mm F4L IS USM', #42/IB
+ 288 => 'Canon RF 16mm F2.8 STM', #42
#xxx => 'Canon RF 100mm F2.8L MACRO IS USM',
# Note: add new RF lenses to %canonLensTypes with ID 61182
},
diff --git a/lib/Image/ExifTool/Exif.pm b/lib/Image/ExifTool/Exif.pm
index 60578b23..75b0e225 100644
--- a/lib/Image/ExifTool/Exif.pm
+++ b/lib/Image/ExifTool/Exif.pm
@@ -56,7 +56,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::MakerNotes;
-$VERSION = '4.36';
+$VERSION = '4.37';
sub ProcessExif($$$);
sub WriteExif($$$);
@@ -265,6 +265,7 @@ sub BINARY_DATA_LIMIT { return 10 * 1024 * 1024; }
32892 => 'Sequential Color Filter', #JR (Sony ARQ)
34892 => 'Linear Raw', #2
51177 => 'Depth Map', # (DNG 1.5)
+ 52527 => 'Semantic Mask', # (DNG 1.6)
);
%orientation = (
@@ -291,6 +292,7 @@ sub BINARY_DATA_LIMIT { return 10 * 1024 * 1024; }
9 => 'Depth map of reduced-resolution image', # (DNG 1.5)
16 => 'Enhanced image data', # (DNG 1.5)
0x10001 => 'Alternate reduced-resolution image', # (DNG 1.2)
+ 0x10004 => 'Semantic Mask', # (DNG 1.6)
0xffffffff => 'invalid', #(found in E5700 NEF's)
BITMASK => {
0 => 'Reduced resolution',
@@ -366,6 +368,7 @@ my %opcodeInfo = (
11 => 'DeltaPerColumn',
12 => 'ScalePerRow',
13 => 'ScalePerColumn',
+ 14 => 'WarpRectilinear2', # (DNG 1.6)
},
PrintConvInv => undef, # (so the inverse conversion is not performed)
);
@@ -3038,12 +3041,12 @@ my %opcodeInfo = (
},
},
#
-# DNG tags 0xc6XX and 0xc7XX (ref 2 unless otherwise stated)
+# DNG tags 0xc6XX, 0xc7XX and 0xcdXX (ref 2 unless otherwise stated)
#
0xc612 => {
Name => 'DNGVersion',
Notes => q{
- tags 0xc612-0xc7b5 are defined by the DNG specification unless otherwise
+ tags 0xc612-0xcd3b are defined by the DNG specification unless otherwise
noted. See L<https://helpx.adobe.com/photoshop/digital-negative.html> for
the specification
},
@@ -4041,6 +4044,97 @@ my %opcodeInfo = (
Protected => 1,
WriteGroup => 'IFD0',
},
+ 0xcd2d => { # DNG 1.6
+ Name => 'ProfileGainTableMap',
+ Writable => 'undef',
+ WriteGroup => 'SubIFD',
+ Protected => 1,
+ Binary => 1,
+ },
+ 0xcd2e => { # DNG 1.6
+ Name => 'SemanticName',
+ # Writable => 'string',
+ WriteGroup => 'SubIFD' #? (NC) Semantic Mask IFD (only for Validate)
+ },
+ 0xcd30 => { # DNG 1.6
+ Name => 'SemanticInstanceIFD',
+ # Writable => 'string',
+ WriteGroup => 'SubIFD' #? (NC) Semantic Mask IFD (only for Validate)
+ },
+ 0xcd31 => { # DNG 1.6
+ Name => 'CalibrationIlluminant3',
+ Writable => 'int16u',
+ WriteGroup => 'IFD0',
+ Protected => 1,
+ SeparateTable => 'LightSource',
+ PrintConv => \%lightSource,
+ },
+ 0xcd32 => { # DNG 1.6
+ Name => 'CameraCalibration3',
+ Writable => 'rational64s',
+ WriteGroup => 'IFD0',
+ Count => -1,
+ Protected => 1,
+ },
+ 0xcd33 => { # DNG 1.6
+ Name => 'ColorMatrix3',
+ Writable => 'rational64s',
+ WriteGroup => 'IFD0',
+ Count => -1,
+ Protected => 1,
+ },
+ 0xcd34 => { # DNG 1.6
+ Name => 'ForwardMatrix3',
+ Writable => 'rational64s',
+ WriteGroup => 'IFD0',
+ Count => -1,
+ Protected => 1,
+ },
+ 0xcd35 => { # DNG 1.6
+ Name => 'IlluminantData1',
+ Writable => 'undef',
+ WriteGroup => 'IFD0',
+ Protected => 1,
+ },
+ 0xcd36 => { # DNG 1.6
+ Name => 'IlluminantData2',
+ Writable => 'undef',
+ WriteGroup => 'IFD0',
+ Protected => 1,
+ },
+ 0xcd37 => { # DNG 1.6
+ Name => 'IlluminantData3',
+ Writable => 'undef',
+ WriteGroup => 'IFD0',
+ Protected => 1,
+ },
+ 0xcd38 => { # DNG 1.6
+ Name => 'MaskSubArea',
+ # Writable => 'int32u',
+ WriteGroup => 'SubIFD', #? (NC) Semantic Mask IFD (only for Validate)
+ Count => 4,
+ },
+ 0xcd39 => { # DNG 1.6
+ Name => 'ProfileHueSatMapData3',
+ %longBin,
+ Writable => 'float',
+ WriteGroup => 'IFD0',
+ Count => -1,
+ Protected => 1,
+ },
+ 0xcd3a => { # DNG 1.6
+ Name => 'ReductionMatrix3',
+ Writable => 'rational64s',
+ WriteGroup => 'IFD0',
+ Count => -1,
+ Protected => 1,
+ },
+ 0xcd3b => { # DNG 1.6
+ Name => 'RGBTables',
+ Writable => 'undef',
+ WriteGroup => 'IFD0',
+ Protected => 1,
+ },
0xea1c => { #13
Name => 'Padding',
Binary => 1,
diff --git a/lib/Image/ExifTool/JSON.pm b/lib/Image/ExifTool/JSON.pm
index e95c8e2f..2e520aa9 100644
--- a/lib/Image/ExifTool/JSON.pm
+++ b/lib/Image/ExifTool/JSON.pm
@@ -14,7 +14,7 @@ use vars qw($VERSION);
use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::Import;
-$VERSION = '1.04';
+$VERSION = '1.05';
sub ProcessJSON($$);
sub ProcessTag($$$$%);
@@ -86,7 +86,9 @@ sub ProcessTag($$$$%)
# support hashes with ordered keys
my @keys = $$val{_ordered_keys_} ? @{$$val{_ordered_keys_}} : sort keys %$val;
foreach (@keys) {
- ProcessTag($et, $tagTablePtr, $tag . ucfirst, $$val{$_}, %flags, Flat => 1);
+ my $tg = $tag . ((/^\d/ and $tag =~ /\d$/) ? '_' : '') . ucfirst;
+ $tg =~ s/([^a-zA-Z])([a-z])/$1\U$2/g;
+ ProcessTag($et, $tagTablePtr, $tg, $$val{$_}, %flags, Flat => 1);
}
} elsif (ref $val eq 'ARRAY') {
foreach (@$val) {
diff --git a/lib/Image/ExifTool/Jpeg2000.pm b/lib/Image/ExifTool/Jpeg2000.pm
index b42ad29e..cdb7b49b 100644
--- a/lib/Image/ExifTool/Jpeg2000.pm
+++ b/lib/Image/ExifTool/Jpeg2000.pm
@@ -340,12 +340,14 @@ my %j2cMarker = (
},
{
Name => 'UUID-Signature', # (seen in JUMB data of JPEG images)
+ # (may be able to remove this when JUMBF specification is finalized)
Condition => '$$valPt=~/^casg\x00\x11\x00\x10\x80\x00\x00\xaa\x00\x38\x9b\x71/',
Format => 'undef',
ValueConv => 'substr($val,16)',
},
{
- Name => 'UUID-C2PAClaimSignature', # (seen in JUMB data of JPEG images)
+ Name => 'UUID-C2PAClaimSignature', # (seen in incorrectly-formatted JUMB data of JPEG images)
+ # (may be able to remove this when JUMBF specification is finalized)
Condition => '$$valPt=~/^c2cs\x00\x11\x00\x10\x80\x00\x00\xaa\x00\x38\x9b\x71/',
SubDirectory => {
TagTable => 'Image::ExifTool::CBOR::Main',
diff --git a/lib/Image/ExifTool/MacOS.pm b/lib/Image/ExifTool/MacOS.pm
index c28584b8..30c4c79d 100644
--- a/lib/Image/ExifTool/MacOS.pm
+++ b/lib/Image/ExifTool/MacOS.pm
@@ -52,7 +52,7 @@ my %mdDateInfo = (
NOTES => q{
MDItem tags are extracted using the "mdls" utility. They are extracted if
any "MDItem*" tag or the MacOS group is specifically requested, or by
- setting the L<MDItemTags|../ExifTool.html#MDItemTags> API option to 1 or the L<RequestAll|../ExifTool.html#RequestAll> API option to 2 or
+ setting the API L<MDItemTags|../ExifTool.html#MDItemTags> option to 1 or the API L<RequestAll|../ExifTool.html#RequestAll> option to 2 or
higher. Note that these tags do not necessarily reflect the current
metadata of a file -- it may take some time for the MacOS mdworker daemon to
index the file after a metadata change.
@@ -244,7 +244,7 @@ my %mdDateInfo = (
NOTES => q{
XAttr tags are extracted using the "xattr" utility. They are extracted if
any "XAttr*" tag or the MacOS group is specifically requested, or by setting
- the L<XAttrTags|../ExifTool.html#XAttrTags> API option to 1 or the L<RequestAll|../ExifTool.html#RequestAll> API option to 2 or higher.
+ the API L<XAttrTags|../ExifTool.html#XAttrTags> option to 1 or the API L<RequestAll|../ExifTool.html#RequestAll> option to 2 or higher.
And they are extracted by default from MacOS "._" files when reading
these files directly.
},
diff --git a/lib/Image/ExifTool/Olympus.pm b/lib/Image/ExifTool/Olympus.pm
index 930aef88..24746869 100644
--- a/lib/Image/ExifTool/Olympus.pm
+++ b/lib/Image/ExifTool/Olympus.pm
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::Exif;
use Image::ExifTool::APP12;
-$VERSION = '2.74';
+$VERSION = '2.75';
sub PrintLensInfo($$$);
@@ -3609,6 +3609,10 @@ my %indexInfo = (
Format => 'string[24]',
Groups => { 2 => 'Time' },
},
+ 0x17f => {
+ Name => 'LensModel',
+ Format => 'string[32]'
+ },
);
# yet a different "thmb" atom format (PH, E-M5)
diff --git a/lib/Image/ExifTool/QuickTime.pm b/lib/Image/ExifTool/QuickTime.pm
index dceff6eb..fb2535dd 100644
--- a/lib/Image/ExifTool/QuickTime.pm
+++ b/lib/Image/ExifTool/QuickTime.pm
@@ -47,7 +47,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::Exif;
use Image::ExifTool::GPS;
-$VERSION = '2.69';
+$VERSION = '2.70';
sub ProcessMOV($$;$);
sub ProcessKeys($$$);
@@ -9113,6 +9113,12 @@ sub ProcessMOV($$;$)
} else {
my $t = PrintableTagID($tag,2);
$et->VPrint(0,"$$et{INDENT}Tag '${t}' extends to end of file");
+ if ($$tagTablePtr{"$tag-size"}) {
+ my $pos = $raf->Tell();
+ $raf->Seek(0, 2);
+ $et->HandleTag($tagTablePtr, "$tag-size", $raf->Tell() - $pos);
+ $et->HandleTag($tagTablePtr, "$tag-offset", $pos) if $$tagTablePtr{"$tag-offset"};
+ }
}
last;
}
diff --git a/lib/Image/ExifTool/QuickTimeStream.pl b/lib/Image/ExifTool/QuickTimeStream.pl
index 2b08e208..d64ebacb 100644
--- a/lib/Image/ExifTool/QuickTimeStream.pl
+++ b/lib/Image/ExifTool/QuickTimeStream.pl
@@ -107,7 +107,7 @@ my %insvLimit = (
GPSAltitude => { PrintConv => '(sprintf("%.4f", $val) + 0) . " m"' }, # round to 4 decimals
GPSSpeed => { PrintConv => 'sprintf("%.4f", $val) + 0', Notes => 'in km/h unless GPSSpeedRef says otherwise' },
GPSSpeedRef => { PrintConv => { K => 'km/h', M => 'mph', N => 'knots' } },
- GPSTrack => { PrintConv => 'sprintf("%.4f", $val) + 0', Notes => 'true north unless GPSTrackRef says otherwise' },
+ GPSTrack => { PrintConv => 'sprintf("%.4f", $val) + 0', Notes => 'relative to true north unless GPSTrackRef says otherwise' },
GPSTrackRef => { PrintConv => { M => 'Magnetic North', T => 'True North' } },
GPSDateTime => {
Groups => { 2 => 'Time' },
diff --git a/lib/Image/ExifTool/README b/lib/Image/ExifTool/README
index 9d9c38a0..11fbac84 100644
--- a/lib/Image/ExifTool/README
+++ b/lib/Image/ExifTool/README
@@ -474,9 +474,9 @@ numerical, and generated automatically otherwise.
tags in IFD1 of JPEG images which default to priority 0.
'Protected' - bit mask to protect tags from writing:
- Bit 0x01 indicates an 'unsafe' tag, which is not set via
+ Bit 0x01 indicates an 'Unsafe' tag, which is not set via
SetNewValuesFromFile() unless specified explicitly.
- Bit 0x02 indicates a 'protected' tag, which should not be set
+ Bit 0x02 indicates a 'Protected' tag, which should not be set
directly by the user.
'PutFirst' - [EXIF only] flag to place this value before IFD0
diff --git a/lib/Image/ExifTool/Sony.pm b/lib/Image/ExifTool/Sony.pm
index 597ca965..b9b25e26 100644
--- a/lib/Image/ExifTool/Sony.pm
+++ b/lib/Image/ExifTool/Sony.pm
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::Exif;
use Image::ExifTool::Minolta;
-$VERSION = '3.45';
+$VERSION = '3.46';
sub ProcessSRF($$$);
sub ProcessSR2($$$);
@@ -154,6 +154,7 @@ sub PrintInvLensSpec($;$$);
32866 => 'Sony FE 24mm F2.8 G', #IB
32867 => 'Sony FE 40mm F2.5 G', #IB
32868 => 'Sony FE 50mm F2.5 G', #IB
+ 32874 => 'Sony FE 70-200mm F2.8 GM OSS II', #IB
# (comment this out so LensID will report the LensModel, which is more useful)
# 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($;$$);
49465 => 'Tamron 17-70mm F2.8 Di III-A VC RXD', #JR (Model B070)
49466 => 'Tamron 150-500mm F5-6.7 Di III VC VXD', #JR (Model A057)
49467 => 'Tamron 11-20mm F2.8 Di III-A RXD', #JR (Model B060)
+ 49468 => 'Tamron 18-300mm F3.5-6.3 Di III-A VC VXD', #JR (Model B061)
49473 => 'Tokina atx-m 85mm F1.8 FE or Viltrox lens', #JR
49473.1 => 'Viltrox 23mm F1.4 E', #JR
diff --git a/lib/Image/ExifTool/TagLookup.pm b/lib/Image/ExifTool/TagLookup.pm
index f20d3020..e00f59d5 100644
--- a/lib/Image/ExifTool/TagLookup.pm
+++ b/lib/Image/ExifTool/TagLookup.pm
@@ -892,6 +892,7 @@ my %tagLookup = (
'alternatetitletext' => { 484 => [\'alternateTitle','alternateTitleText'] },
'altitude' => { 192 => 0x6 },
'alttapename' => { 494 => 'altTapeName' },
+ 'alttextaccessibility' => { 479 => 'AltTextAccessibility' },
'alttimecode' => { 494 => 'altTimecode' },
'alttimecodetimeformat' => { 494 => [\'altTimecode','altTimecodeTimeFormat'] },
'alttimecodetimevalue' => { 494 => [\'altTimecode','altTimecodeTimeValue'] },
@@ -1180,6 +1181,7 @@ my %tagLookup = (
'calibrationhistory' => { 135 => 0x9c9 },
'calibrationilluminant1' => { 117 => 0xc65a },
'calibrationilluminant2' => { 117 => 0xc65b },
+ 'calibrationilluminant3' => { 117 => 0xcd31 },
'calibrationversion' => { 135 => 0x9c6 },
'callforimage' => { 458 => 'CallForImage' },
'camera' => { 448 => [\'Cameras','CamerasCamera'] },
@@ -1192,6 +1194,7 @@ my %tagLookup = (
'cameracalibration' => { 388 => 0x11f },
'cameracalibration1' => { 117 => 0xc623 },
'cameracalibration2' => { 117 => 0xc624 },
+ 'cameracalibration3' => { 117 => 0xcd32 },
'cameracalibrationsig' => { 117 => 0xc6f3 },
'cameracolorcalibration01' => { 36 => 0x0, 37 => 0x0 },
'cameracolorcalibration02' => { 36 => 0x4, 37 => 0x5 },
@@ -1542,6 +1545,7 @@ my %tagLookup = (
'colormatrix' => { 292 => 0x200, 293 => 0x1011, 385 => 0xa030 },
'colormatrix1' => { 117 => 0xc621, 355 => 0x106 },
'colormatrix2' => { 117 => 0xc622, 296 => 0x200, 355 => 0x226 },
+ 'colormatrix3' => { 117 => 0xcd33 },
'colormatrixa' => { 346 => 0x203 },
'colormatrixa2' => { 346 => 0x21c },
'colormatrixadobergb' => { 385 => 0xa032 },
@@ -2341,7 +2345,7 @@ my %tagLookup = (
'eventfieldnotes' => { 116 => [\'Event','EventFieldNotes'] },
'eventfieldnumber' => { 116 => [\'Event','EventFieldNumber'] },
'eventhabitat' => { 116 => [\'Event','EventHabitat'] },
- 'eventid' => { 116 => [\'Event','EventEventID'] },
+ 'eventid' => { 116 => [\'Event','EventEventID'], 480 => 'EventID' },
'eventlatestdate' => { 116 => [\'Event','EventLatestDate'] },
'eventmonth' => { 116 => [\'Event','EventMonth'] },
'eventnumber' => { 372 => 0x9, 373 => 0x37, 374 => 0x3a },
@@ -2416,6 +2420,7 @@ my %tagLookup = (
'exposurewarning' => { 125 => 0x1302 },
'exrauto' => { 125 => 0x1033 },
'exrmode' => { 125 => 0x1034 },
+ 'extdescraccessibility' => { 479 => 'ExtDescrAccessibility' },
'extendedwbdetect' => { 288 => 0x902 },
'extender' => { 289 => 0x301 },
'extenderfirmwareversion' => { 289 => 0x304 },
@@ -2788,6 +2793,7 @@ my %tagLookup = (
'forwardlock' => { 489 => 'forwardlock' },
'forwardmatrix1' => { 117 => 0xc714 },
'forwardmatrix2' => { 117 => 0xc715 },
+ 'forwardmatrix3' => { 117 => 0xcd34 },
'fossilspecimen' => { 116 => 'FossilSpecimen' },
'fossilspecimenmaterialsampleid' => { 116 => [\'FossilSpecimen','FossilSpecimenMaterialSampleID'] },
'framecount' => { 65 => [0x2,0x4] },
@@ -3140,6 +3146,9 @@ my %tagLookup = (
'identifiedby' => { 116 => [\'Identification','IdentificationIdentifiedBy'] },
'identifier' => { 471 => 'identifier', 492 => 'Identifier' },
'ifcameramodel' => { 135 => 0x9c8 },
+ 'illuminantdata1' => { 117 => 0xcd35 },
+ 'illuminantdata2' => { 117 => 0xcd36 },
+ 'illuminantdata3' => { 117 => 0xcd37 },
'illumination' => { 282 => '0.5', 373 => 0x48 },
'imageabsolutex' => { 135 => 0x3fe },
'imageabsolutey' => { 135 => 0x3ff },
@@ -3681,6 +3690,9 @@ my %tagLookup = (
'lookparameterslooktable' => { 468 => [\'Look','LookParametersLookTable'], 470 => [\'Look','LookParametersLookTable'] },
'lookparametersprocessversion' => { 468 => [\'Look','LookParametersProcessVersion'], 470 => [\'Look','LookParametersProcessVersion'] },
'lookparameterstonecurvepv2012' => { 468 => [\'Look','LookParametersToneCurvePV2012'], 470 => [\'Look','LookParametersToneCurvePV2012'] },
+ 'lookparameterstonecurvepv2012blue' => { 468 => [\'Look','LookParametersToneCurvePV2012Blue'], 470 => [\'Look','LookParametersToneCurvePV2012Blue'] },
+ 'lookparameterstonecurvepv2012green' => { 468 => [\'Look','LookParametersToneCurvePV2012Green'], 470 => [\'Look','LookParametersToneCurvePV2012Green'] },
+ 'lookparameterstonecurvepv2012red' => { 468 => [\'Look','LookParametersToneCurvePV2012Red'], 470 => [\'Look','LookParametersToneCurvePV2012Red'] },
'lookparametersversion' => { 468 => [\'Look','LookParametersVersion'], 470 => [\'Look','LookParametersVersion'] },
'looksupportsamount' => { 468 => [\'Look','LookSupportsAmount'], 470 => [\'Look','LookSupportsAmount'] },
'looksupportsmonochrome' => { 468 => [\'Look','LookSupportsMonochrome'], 470 => [\'Look','LookSupportsMonochrome'] },
@@ -4825,8 +4837,10 @@ my %tagLookup = (
'profilecameraindices' => { 448 => [\'Profiles','ProfilesProfileCameraIndices'] },
'profilecopyright' => { 117 => 0xc6fe },
'profileembedpolicy' => { 117 => 0xc6fd },
+ 'profilegaintablemap' => { 117 => 0xcd2d },
'profilehuesatmapdata1' => { 117 => 0xc6fa },
'profilehuesatmapdata2' => { 117 => 0xc6fb },
+ 'profilehuesatmapdata3' => { 117 => 0xcd39 },
'profilehuesatmapdims' => { 117 => 0xc6f9 },
'profilehuesatmapencoding' => { 117 => 0xc7a3 },
'profilelooktabledata' => { 117 => 0xc726 },
@@ -5018,6 +5032,7 @@ my %tagLookup = (
'redsaturation' => { 468 => 'RedSaturation', 470 => 'RedSaturation' },
'reductionmatrix1' => { 117 => 0xc625 },
'reductionmatrix2' => { 117 => 0xc626 },
+ 'reductionmatrix3' => { 117 => 0xcd3a },
'reelname' => { 117 => 0xc789, 371 => 'reel' },
'reference1' => { 478 => [\'TagStructure','TagStructureReference'] },
'reference2' => { 478 => [\'TagStructure','TagStructureSubLabelsReference'] },
@@ -5197,6 +5212,7 @@ my %tagLookup = (
'rflenstype' => { 56 => 0x3d },
'rgbcurvelimits' => { 106 => 0x238 },
'rgbcurvepoints' => { 105 => 0x7, 106 => 0x20e },
+ 'rgbtables' => { 117 => 0xcd3b },
'richtextcomment' => { 477 => 'RichTextComment' },
'ricohdate' => { 377 => 0x6 },
'ricohimageheight' => { 377 => 0x2 },
@@ -5430,7 +5446,7 @@ my %tagLookup = (
'shuttercount2' => { 429 => 0x4c, 430 => [0x50,0x52,0x58], 431 => 0x50 },
'shuttercount3' => { 429 => [0x1a0,0x1aa,0x1bd], 430 => [0x19f,0x1cb,0x1cd] },
'shuttercurtainsync' => { 80 => 0xf, 81 => 0xf, 82 => 0x305, 83 => 0xe, 84 => 0xf, 85 => 0x8, 86 => 0x8, 87 => 0xf, 88 => 0x8 },
- 'shuttermode' => { 137 => 0x1b, 222 => 0x34 },
+ 'shuttermode' => { 56 => 0x17, 137 => 0x1b, 222 => 0x34 },
'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' },
'shutterreleasemethod' => { 95 => 0x1010 },
'shutterreleasenocfcard' => { 80 => 0x2, 81 => 0x2, 88 => 0xf },
@@ -9053,6 +9069,7 @@ my %tagExists = (
'markerid' => 1,
'markinfo' => 1,
'marl' => 1,
+ 'masksubarea' => 1,
'mastergainadjustment' => 1,
'matrixworldtocamera' => 1,
'matrixworldtoscreen' => 1,
@@ -10440,6 +10457,8 @@ my %tagExists = (
'selobjname' => 1,
'selobjtype' => 1,
'selobjversion' => 1,
+ 'semanticinstanceifd' => 1,
+ 'semanticname' => 1,
'sendduration' => 1,
'senderaddress' => 1,
'sendername' => 1,
diff --git a/lib/Image/ExifTool/TagNames.pod b/lib/Image/ExifTool/TagNames.pod
index 44d438d8..c98310ab 100644
--- a/lib/Image/ExifTool/TagNames.pod
+++ b/lib/Image/ExifTool/TagNames.pod
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
=head1 TAG TABLES
The tables listed below give the names of all tags recognized by ExifTool.
-They contain a total of 24338 tags, with 15779 unique tag names.
+They contain a total of 24363 tags, with 15798 unique tag names.
B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
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.
0xc7ec DepthUnits IFD0 int16u!
0xc7ed DepthMeasureType IFD0 int16u!
0xc7ee EnhanceParams IFD0 string!
+ 0xcd2d ProfileGainTableMap SubIFD undef!
+ 0xcd2e SemanticName SubIFD no
+ 0xcd30 SemanticInstanceIFD SubIFD no
+ 0xcd31 CalibrationIlluminant3 IFD0 int16u!
+ 0xcd32 CameraCalibration3 IFD0 rational64s[n]!
+ 0xcd33 ColorMatrix3 IFD0 rational64s[n]!
+ 0xcd34 ForwardMatrix3 IFD0 rational64s[n]!
+ 0xcd35 IlluminantData1 IFD0 undef!
+ 0xcd36 IlluminantData2 IFD0 undef!
+ 0xcd37 IlluminantData3 IFD0 undef!
+ 0xcd38 MaskSubArea SubIFD no
+ 0xcd39 ProfileHueSatMapData3 IFD0 float[n]!
+ 0xcd3a ReductionMatrix3 IFD0 rational64s[n]!
+ 0xcd3b RGBTables IFD0 undef!
0xea1c Padding ExifIFD undef!
0xea1d OffsetSchema ExifIFD int32s!
0xfde8 OwnerName ExifIFD string/
@@ -1730,6 +1744,9 @@ These tags belong to the ExifTool XMP-crd family 1 group.
LookParametersLookTable string/_
LookParametersProcessVersion string/_
LookParametersToneCurvePV2012 string/_+
+ LookParametersToneCurvePV2012Blue string/_+
+ LookParametersToneCurvePV2012Green string/_+
+ LookParametersToneCurvePV2012Red string/_+
LookParametersVersion string/_
LookSupportsAmount string/_
LookSupportsMonochrome string/_
@@ -2059,6 +2076,9 @@ These tags belong to the ExifTool XMP-crd family 1 group.
LookTable string
ProcessVersion string
ToneCurvePV2012 string+
+ ToneCurvePV2012Blue string+
+ ToneCurvePV2012Green string+
+ ToneCurvePV2012Red string+
Version string
=head3 XMP RetouchArea Struct
@@ -2394,6 +2414,9 @@ These tags belong to the ExifTool XMP-crs family 1 group.
LookParametersLookTable string_
LookParametersProcessVersion string_
LookParametersToneCurvePV2012 string_+
+ LookParametersToneCurvePV2012Blue string_+
+ LookParametersToneCurvePV2012Green string_+
+ LookParametersToneCurvePV2012Red string_+
LookParametersVersion string_
LookSupportsAmount string_
LookSupportsMonochrome string_
@@ -3487,6 +3510,7 @@ These tags belong to the ExifTool XMP-iptcCore family 1 group.
Tag Name Writable
-------- --------
+ AltTextAccessibility lang-alt
CountryCode string
CreatorContactInfo ContactInfo Struct
CreatorCity string_
@@ -3497,6 +3521,7 @@ These tags belong to the ExifTool XMP-iptcCore family 1 group.
CreatorWorkEmail string_
CreatorWorkTelephone string_
CreatorWorkURL string_
+ ExtDescrAccessibility lang-alt
IntellectualGenre string
Location string
Scene string+
@@ -3596,6 +3621,7 @@ These tags belong to the ExifTool XMP-iptcExt family 1 group.
ShownEvent Entity Struct+
ShownEventIdentifier string_+
ShownEventName lang-alt_+
+ EventID string+
ExternalMetadataLink string+
FeedIdentifier string
Genre CVTermDetails Struct+
@@ -7359,6 +7385,7 @@ WB tags for the Canon G9.
19 LiveViewShooting int16s
20 FocusDistanceUpper int16u
21 FocusDistanceLower int16u
+ 23 ShutterMode int16s
25 FlashExposureLock int16s
61 RFLensType int16u
@@ -15412,6 +15439,7 @@ such as the OM E-M5.
44 Model no
131 DateTime1 no
157 DateTime2 no
+ 383 LensModel no
=head3 Olympus scrn2 Tags
@@ -26042,7 +26070,7 @@ According to the specification, integer-format QuickTime date/time tags
should be stored as UTC. Unfortunately, digital cameras often store local
time values instead (presumably because they don't know the time zone). For
this reason, by default ExifTool does not assume a time zone for these
-values. However, if the QuickTimeUTC API option is set, then ExifTool will
+values. However, if the API QuickTimeUTC option is set, then ExifTool will
assume these values are properly stored as UTC, and will convert them to
local time when extracting.
@@ -35190,7 +35218,7 @@ options, but these files are not writable directly.
XAttr tags are extracted using the "xattr" utility. They are extracted if
any "XAttr*" tag or the MacOS group is specifically requested, or by setting
-the XAttrTags API option to 1 or the RequestAll API option to 2 or higher.
+the API XAttrTags option to 1 or the API RequestAll option to 2 or higher.
And they are extracted by default from MacOS "._" files when reading
these files directly.
@@ -35212,7 +35240,7 @@ these files directly.
MDItem tags are extracted using the "mdls" utility. They are extracted if
any "MDItem*" tag or the MacOS group is specifically requested, or by
-setting the MDItemTags API option to 1 or the RequestAll API option to 2 or
+setting the API MDItemTags option to 1 or the API RequestAll option to 2 or
higher. Note that these tags do not necessarily reflect the current
metadata of a file -- it may take some time for the MacOS mdworker daemon to
index the file after a metadata change.
diff --git a/lib/Image/ExifTool/XMP.pm b/lib/Image/ExifTool/XMP.pm
index e43be41b..5e6e12e9 100644
--- a/lib/Image/ExifTool/XMP.pm
+++ b/lib/Image/ExifTool/XMP.pm
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
use Image::ExifTool::GPS;
require Exporter;
-$VERSION = '3.44';
+$VERSION = '3.46';
@ISA = qw(Exporter);
@EXPORT_OK = qw(EscapeXML UnescapeXML);
@@ -1533,6 +1533,9 @@ my %sPantryItem = (
CameraProfile => { },
LookTable => { },
ToneCurvePV2012 => { List => 'Seq' },
+ ToneCurvePV2012Red => { List => 'Seq' },
+ ToneCurvePV2012Green => { List => 'Seq' },
+ ToneCurvePV2012Blue => { List => 'Seq' },
},
},
}
@@ -2346,6 +2349,8 @@ my %sPantryItem = (
Scene => { Groups => { 2 => 'Other' }, List => 'Bag' },
SubjectCode => { Groups => { 2 => 'Other' }, List => 'Bag' },
# Copyright - have seen this in a sample (Jan 2021), but I think it is non-standard
+ AltTextAccessibility =>{ Groups => { 2 => 'Other' }, Writable => 'lang-alt' }, # added 2021-10-13
+ ExtDescrAccessibility=>{ Groups => { 2 => 'Other' }, Writable => 'lang-alt' }, # added 2021-10-13
);
# Adobe Lightroom namespace properties (lr) (ref PH)
@@ -3960,7 +3965,7 @@ sub ProcessXMP($$;$)
} elsif ($1 eq 'REDXIF') {
$type = 'RMD';
$mime = 'application/xml';
- } else {
+ } elsif ($1 ne 'fcpxml') { # Final Cut Pro XML
return 0;
}
} elsif ($buf2 =~ /<svg[\s>]/) {
diff --git a/lib/Image/ExifTool/XMP2.pl b/lib/Image/ExifTool/XMP2.pl
index 2e32bf70..cc6f2fc0 100644
--- a/lib/Image/ExifTool/XMP2.pl
+++ b/lib/Image/ExifTool/XMP2.pl
@@ -797,6 +797,7 @@ my %sImageRegion = ( # new in 1.5
audioBitsPerSample => { Groups => { 2 => 'Audio' }, Writable => 'integer' },
# new IPTC Extension schema 1.5 property
ImageRegion => { Groups => { 2 => 'Image' }, List => 'Bag', Struct => \%sImageRegion },
+ EventID => { List => 'Bag' }, # added 2021-10-13
);
#------------------------------------------------------------------------------