diff options
author | exiftool <exiftool@users.sourceforge.net> | 2023-06-08 13:26:19 -0400 |
---|---|---|
committer | exiftool <exiftool@users.sourceforge.net> | 2023-06-08 13:26:19 -0400 |
commit | adc7447eae4d896541bbba3777686771828e9075 (patch) | |
tree | 6e74715a1cd4bc061e83af711fbf1a13d0322d89 /lib | |
parent | a2f26dc90ab031c687b5730cb1e6dffb35e3e029 (diff) |
Update to 12.63
Diffstat (limited to 'lib')
29 files changed, 2472 insertions, 1137 deletions
diff --git a/lib/Image/ExifTool.pm b/lib/Image/ExifTool.pm index b8e8893f..deb26186 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 $exeDir %static_vars); -$VERSION = '12.62'; +$VERSION = '12.63'; $RELEASE = ''; @ISA = qw(Exporter); %EXPORT_TAGS = ( @@ -114,7 +114,7 @@ sub WriteTIFF($$$); sub PackUTF8(@); sub UnpackUTF8($); sub SetPreferredByteOrder($;$); -sub ImageDataMD5($$$;$$); +sub ImageDataHash($$$;$$); sub CopyBlock($$$); sub CopyFileAttrs($$$); sub TimeNow(;$$); @@ -194,7 +194,7 @@ $defaultLang = 'en'; # default language PSD XMP BMP WPG BPG PPM RIFF AIFF ASF MOV MPEG Real SWF PSP FLV OGG FLAC APE MPC MKV MXF DV PMP IND PGF ICC ITC FLIR FLIF FPF LFP HTML VRD RTF FITS XCF DSS QTIF FPX PICT ZIP GZIP PLIST RAR - BZ2 CZI TAR EXE EXR HDR CHM LNK WMF AVC DEX DPX RAW Font RSRC + 7Z BZ2 CZI TAR EXE EXR HDR CHM LNK WMF AVC DEX DPX RAW Font RSRC M2TS MacOS PHP PCX DCX DWF DWG DXF WTV Torrent VCard LRI R3D AA PDB PFM2 MRC LIF JXL MOI ISO ALIAS JSON MP3 DICOM PCD ICO TXT); @@ -228,6 +228,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV); '3GP' => ['MOV', '3rd Gen. Partnership Project audio/video'], '3GP2'=> '3G2', '3GPP'=> '3GP', + '7Z' => ['7Z', '7z archive'], A => ['EXE', 'Static library'], AA => ['AA', 'Audible Audiobook'], AAE => ['PLIST','Apple edit information'], @@ -590,6 +591,7 @@ my %fileDescription = ( # types may be specified by some modules, eg. QuickTime.pm and RIFF.pm) %mimeType = ( '3FR' => 'image/x-hasselblad-3fr', + '7Z' => 'application/x-7z-compressed', AA => 'audio/audible', AAE => 'application/vnd.apple.photos', AI => 'application/vnd.adobe.illustrator', @@ -1827,15 +1829,16 @@ my %systemTagsNotes = ( if specifically requested }, }, - ImageDataMD5 => { + ImageDataHash => { Notes => q{ - MD5 of image data. Generated only if specifically requested for JPEG, TIFF, + Hash of image data. Generated only if specifically requested for JPEG, TIFF, PNG, CRW, CR3, MRW, RAF, X3F, IIQ, JP2, JXL, HEIC and AVIF images, MOV/MP4 - videos, and some RIFF-based files such as AVI, WAV and WEBP. The MD5 + videos, and some RIFF-based files such as AVI, WAV and WEBP. The hash includes the main image data, plus JpgFromRaw/OtherImage for some formats, but does not include ThumbnailImage or PreviewImage. Includes video and - audio data for MOV/MP4. The L<XMP-et:OriginalImageMD5 tag|XMP.html#ExifTool> - provides a place to store these values in the file. + audio data for MOV/MP4. The L<XMP-et:OriginalImageHash and + XMP-et:OriginalImageHashType tags|XMP.html#ExifTool> provide a way to store the this hash value + and the hash type in the file. }, }, ); @@ -2314,6 +2317,12 @@ sub Options($$;@) $newVal = defined $newVal ? "$oldVal|$newVal" : $oldVal; } $$options{$param} = $newVal; + } elsif ($param eq 'ImageHashType') { + if (defined $newVal and $newVal =~ /^(MD5|SHA256|SHA512)$/i) { + $$options{$param} = uc($newVal); + } else { + warn("Invalid $param setting '${newVal}'\n"), return $oldVal; + } } else { if ($param eq 'Escape') { # set ESCAPE_PROC @@ -2396,6 +2405,7 @@ sub ClearOptions($) HtmlDumpBase => undef, # base address for HTML dump IgnoreMinorErrors => undef, # ignore minor errors when reading/writing IgnoreTags => undef, # list of tags to ignore when extracting + ImageHashType => 'MD5', # image hash algorithm Lang => $defaultLang,# localized language for descriptions etc LargeFileSupport => undef, # flag indicating support of 64-bit file offsets List => undef, # extract lists of PrintConv values into arrays [no longer documented] @@ -2518,10 +2528,17 @@ sub ExtractInfo($;@) } } - # create MD5 object if ImageDataMD5 is requested - if ($$req{imagedatamd5} and not $$self{ImageDataMD5}) { - if (require Digest::MD5) { - $$self{ImageDataMD5} = Digest::MD5->new; + # create Hash object if ImageDataHash is requested + if ($$req{imagedatahash} and not $$self{ImageDataHash}) { + my $imageHashType = $self->Options('ImageHashType'); + if ($imageHashType =~ /^SHA(256|512)$/i) { + if (require Digest::SHA) { + $$self{ImageDataHash} = Digest::SHA->new($1); + } else { + $self->WarnOnce("Install Digest::SHA to calculate image data SHA$1"); + } + } elsif (require Digest::MD5) { + $$self{ImageDataHash} = Digest::MD5->new; } else { $self->WarnOnce('Install Digest::MD5 to calculate image data MD5'); } @@ -2915,10 +2932,13 @@ sub ExtractInfo($;@) # restore necessary members when exiting re-entrant code $$self{$_} = $$reEntry{$_} foreach keys %$reEntry; SetByteOrder($saveOrder); - } elsif ($$self{ImageDataMD5}) { - my $digest = $$self{ImageDataMD5}->hexdigest; + } elsif ($$self{ImageDataHash}) { + my $digest = $$self{ImageDataHash}->hexdigest; # (don't store empty digest) - $self->FoundTag(ImageDataMD5 => $digest) unless $digest eq 'd41d8cd98f00b204e9800998ecf8427e'; + $self->FoundTag(ImageDataHash => $digest) unless + $digest eq 'd41d8cd98f00b204e9800998ecf8427e' or + $digest eq 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' or + $digest eq 'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e'; } # ($type may be undef without an Error when processing sub-documents) @@ -5582,6 +5602,7 @@ my %formatSize = ( ifd => 4, ifd64 => 8, ue7 => 1, + utf8 => 1, # (Exif 3.0) ); my %readValueProc = ( int8s => \&Get8s, @@ -6487,15 +6508,15 @@ sub ProcessJPEG($$) my $req = $$self{REQ_TAG_LOOKUP}; my $htmlDump = $$self{HTML_DUMP}; my %dumpParms = ( Out => $out ); - my ($ch, $s, $length, $md5, $md5size); + my ($ch, $s, $length, $hash, $hashsize); my ($success, $wantTrailer, $trailInfo, $foundSOS, $gotSize, %jumbfChunk); my (@iccChunk, $iccChunkCount, $iccChunksTotal, @flirChunk, $flirCount, $flirTotal); my ($preview, $scalado, @dqt, $subSampling, $dumpEnd, %extendedXMP); - # get pointer to MD5 object if it exists and we are the top-level JPEG or JP2 + # get pointer to hash object if it exists and we are the top-level JPEG or JP2 if ($$self{FILE_TYPE} =~ /^(JPEG|JP2)$/ and not $$self{DOC_NUM}) { - $md5 = $$self{ImageDataMD5}; - $md5size = 0; + $hash = $$self{ImageDataHash}; + $hashsize = 0; } # check to be sure this is a valid JPG (or J2C, or EXV) file @@ -6544,7 +6565,7 @@ sub ProcessJPEG($$) # # read ahead to the next segment unless we have reached EOI, SOS or SOD # - unless ($marker and ($marker==0xd9 or ($marker==0xda and not $wantTrailer and not $md5) or + unless ($marker and ($marker==0xd9 or ($marker==0xda and not $wantTrailer and not $hash) or $marker==0x93)) { # read up to next marker (JPEG markers begin with 0xff) @@ -6576,19 +6597,19 @@ sub ProcessJPEG($$) $nextSegPos = $raf->Tell(); $len -= 4; # subtract size of length word last unless $raf->Seek($len, 1); - } elsif ($md5 and defined $marker and ($marker == 0x00 or $marker == 0xda or + } elsif ($hash and defined $marker and ($marker == 0x00 or $marker == 0xda or ($marker >= 0xd0 and $marker <= 0xd7))) { - # calculate MD5 for image data (includes leading ff d9 but not trailing ff da) - $md5->add("\xff" . chr($marker)); + # calculate hash for image data (includes leading ff d9 but not trailing ff da) + $hash->add("\xff" . chr($marker)); my $n = $skipped - (length($buff) - 1); # number of extra 0xff's if (not $n) { $buff = substr($buff, 0, -1); # remove trailing 0xff } elsif ($n > 1) { $buff .= "\xff" x ($n - 1); # add back extra 0xff's } - $md5->add($buff); - $md5size += $skipped + 2; + $hash->add($buff); + $hashsize += $skipped + 2; } # read second segment too if this was the first next unless defined $marker; @@ -6800,7 +6821,7 @@ sub ProcessJPEG($$) next if $trailInfo or $wantTrailer or $verbose > 2 or $htmlDump; } # must scan to EOI if Validate or JpegCompressionFactor used - next if $$options{Validate} or $calcImageLen or $$req{trailer} or $md5; + next if $$options{Validate} or $calcImageLen or $$req{trailer} or $hash; # nothing interesting to parse after start of scan (SOS) $success = 1; last; # all done parsing file @@ -6808,9 +6829,9 @@ sub ProcessJPEG($$) pop @$path; $verbose and print $out "JPEG SOD\n"; $success = 1; - if ($md5 and $$self{FILE_TYPE} eq 'JP2') { + if ($hash and $$self{FILE_TYPE} eq 'JP2') { my $pos = $raf->Tell(); - $self->ImageDataMD5($raf, undef, 'SOD'); + $self->ImageDataHash($raf, undef, 'SOD'); $raf->Seek($pos, 0); } next if $verbose > 2 or $htmlDump; @@ -6829,7 +6850,7 @@ sub ProcessJPEG($$) or ($$options{RequestAll} and $$options{RequestAll} > 2))) { my $num = unpack('C',$$segDataPt) & 0x0f; # get table index - $dqt[$num] = $$segDataPt if $num < 4; # save for MD5 calculation + $dqt[$num] = $$segDataPt if $num < 4; # save for hash calculation } # handle all other markers my $dumpType = ''; @@ -7612,8 +7633,8 @@ sub ProcessJPEG($$) delete $extendedXMP{$guid}; } } - # print verbose MD5 message if necessary - print $out "$$self{INDENT}(ImageDataMD5: $md5size bytes of JPEG image data)\n" if $md5size and $verbose; + # print verbose hash message if necessary + print $out "$$self{INDENT}(ImageDataHash: $hashsize bytes of JPEG image data)\n" if $hashsize and $verbose; # calculate JPEGDigest if requested if (@dqt) { require Image::ExifTool::JPEGDigest; @@ -7889,8 +7910,8 @@ sub DoProcessTIFF($$;$) if ($$self{TIFF_TYPE} eq 'TIFF') { $self->FoundTag(PageCount => $$self{PageCount}) if $$self{MultiPage}; } - if ($$self{ImageDataMD5} and $$self{A100DataOffset} and $raf->Seek($$self{A100DataOffset},0)) { - $self->ImageDataMD5($raf, undef, 'A100'); + if ($$self{ImageDataHash} and $$self{A100DataOffset} and $raf->Seek($$self{A100DataOffset},0)) { + $self->ImageDataHash($raf, undef, 'A100'); } return 1; } diff --git a/lib/Image/ExifTool.pod b/lib/Image/ExifTool.pod index 1ad96ac5..a70d2514 100644 --- a/lib/Image/ExifTool.pod +++ b/lib/Image/ExifTool.pod @@ -65,10 +65,11 @@ supported by ExifTool (r = read, w = write, c = create): File Types ------------+-------------+-------------+-------------+------------ - 360 r/w | DR4 r/w/c | JNG r/w | ODP r | RSRC r - 3FR r | DSS r | JP2 r/w | ODS r | RTF r - 3G2 r/w | DV r | JPEG r/w | ODT r | RW2 r/w - 3GP r/w | DVB r/w | JSON r | OFR r | RWL r/w + 360 r/w | DPX r | J2C r | O r | RIFF r + 3FR r | DR4 r/w/c | JNG r/w | ODP r | RSRC r + 3G2 r/w | DSS r | JP2 r/w | ODS r | RTF r + 3GP r/w | DV r | JPEG r/w | ODT r | RW2 r/w + 7Z r | DVB r/w | JSON r | OFR r | RWL r/w A r | DVR-MS r | JXL r | OGG r | RWZ r AA r | DYLIB r | K25 r | OGV r | RM r AAE r | EIP r | KDC r | ONP r | SEQ r @@ -107,7 +108,6 @@ supported by ExifTool (r = read, w = write, c = create): DNG r/w | INX r | NKSC r/w | RAM r | DOC r | ISO r | NRW r/w | RAR r | DOCX r | ITC r | NUMBERS r | RAW r/w | - DPX r | J2C r | O r | RIFF r | Meta Information ----------------------+----------------------+--------------------- @@ -301,6 +301,10 @@ of tag keys, and with other L</Sort> settings the entries may not be in the same order as requested.) If a requested tag doesn't exist, a tag key is still generated, but the tag value is undefined. +B<Note:> Do not reuse this list in subsequent calls to L</ImageInfo> because +it returns tag keys, not names, and the list will grow for each call +resulting in increasingly slower performance. + =item HASH ref Reference to a hash containing the options settings valid for this call @@ -569,7 +573,9 @@ Flag to generate Composite tags when extracting information. Default is 1. =item Compress Flag to write new values in compressed format if possible. Has no effect -unless Compress::Zlib is installed. Default is undef. +unless the relevant compression library is available. Valid when writing +metadata to PNG, JXL or MIE images. Setting this to zero causes JXL +metadata to be rewritten as uncompressed when edited. Default is undef. =item CoordFormat @@ -791,6 +797,11 @@ allowed. A special tag name of "All" may be used to ignore all tags except those specified by the L</RequestTags> option. Set to undef to clear the previous IgnoreTags list. Default is undef. +=item ImageHashType + +Sets type of hash algorithem used for the ImageDataHash tag calculation. +Supported options are 'MD5', 'SHA256', and 'SHA512'. Default is 'MD5'. + =item Lang Localized language for exiftool tag descriptions, etc. Available languages diff --git a/lib/Image/ExifTool/7Z.pm b/lib/Image/ExifTool/7Z.pm new file mode 100644 index 00000000..1b8d0bc9 --- /dev/null +++ b/lib/Image/ExifTool/7Z.pm @@ -0,0 +1,793 @@ +#------------------------------------------------------------------------------ +# File: 7Z.pm +# +# Description: Read 7z archive meta information +# +# Revisions: 2023/04/28 - Amir Gooran (Cyberno) +# 2023-05-06 - PH Minor changes in ExifTool interfacing +# +# References: 1) https://py7zr.readthedocs.io/en/latest/archive_format.html +#------------------------------------------------------------------------------ + +package Image::ExifTool::7Z; + +use strict; +use vars qw($VERSION); +use Image::ExifTool qw(:DataAccess :Utils); + +$VERSION = '1.00'; + +sub ReadUInt32 { + my $buff; + + $_[0]->Read($buff, 4); + my ($output) = unpack('L', $buff); + return $output; +} + +sub ReadUInt64 { + my $buff; + my $output; + + $_[0]->Read($buff, 1); + my $b = ord($buff); + if($b == 255){ # read real uint64 + $_[0]->Read($buff, 8); + my ($output) = unpack('Q', $buff); + return $output; + } + my @blen = (0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD, 0xFE); + + my $mask = 0x80; + my $vlen = 8; + + for (my $l = 0 ; $l < scalar(@blen) ; $l++) { + my $v = $blen[$l]; + if($b <= $v){ + $vlen = $l; + last; + } + $mask >>= 1; + } + if($vlen == 0){ + return $b & ($mask - 1); + } + $_[0]->Read($buff, $vlen); + $buff .= "\0\0\0\0\0\0\0\0"; + + my $value = unpack('Q', $buff); + my $highpart = $b & ($mask - 1); + return $value + ($highpart << ($vlen * 8)); +} + +sub ReadRealUInt64 { + my $buff; + + $_[0]->Read($buff, 8); + my $value = unpack('Q', $buff); + return $value; +} + +sub ReadBoolean { + my $buff; + my $count = $_[1]; + my $checkall = $_[2]; + my @result = (); + + if($checkall){ + $_[0]->Read($buff, 1); + my $all_defined = ord($buff); + if($all_defined != 0){ + @result = (1)x$count; + return @result; + } + } + + my $b = 0; + my $mask = 0; + + for (my $i = 0 ; $i < $count ; $i++) { + if($mask == 0){ + $_[0]->Read($buff, 1); + $b = ord($buff); + $mask = 0x80; + } + push(@result, ($b & $mask) != 0); + $mask >>= 1; + } + return @result; +} + +sub ReadUTF16 { + my $val = ""; + my $ch; + + for(my $i=0; $i < 65536; $i++){ + $_[0]->Read($ch, 2); + if($ch eq "\0\0"){ + last; + } + $val .= $ch; + } + return $val; +} + +sub ReadPackInfo { + my $et = shift; + + my $buff; + my %out_packinfo = (); + $out_packinfo{"packsizes"} = (); + + $out_packinfo{"packpos"} = ReadUInt64($_[0]); + my $numstreams = ReadUInt64($_[0]); + $et->VPrint(0, "Number Of Streams: $numstreams\n"); + + $_[0]->Read($buff, 1); + my $pid = ord($buff); + + my @packsizes; + if($pid == 9){ # size + for (my $i = 0 ; $i < $numstreams ; $i++) { + push(@{ $out_packinfo{"packsizes"} }, ReadUInt64($_[0])); + } + $_[0]->Read($buff, 1); + $pid = ord($buff); + if($pid == 10){ # crc + my @crcs; + my @digestdefined = ReadBoolean($_[0], $numstreams, 1); + foreach my $crcexist (@digestdefined) { + if($crcexist){ + push(@crcs, ReadUInt32($_[0])); + } + } + $_[0]->Read($buff, 1); + $pid = ord($buff); + } + } + if($pid != 0) { # end id expected + return 0; + } + return \%out_packinfo; +} + +sub findInBinPair { + my @bindpairs = @{$_[0]}; + my $index = $_[1]; + + for (my $i = 0; $i < scalar(@bindpairs); $i++) { + if($bindpairs[$i] == $index){ + return $i; + } + } + return -1; +} + +sub ReadFolder { + my $et = shift; + my $buff; + my $totalin = 0; + my $totalout = 0; + my %out_folder = (); + $out_folder{"packed_indices"} = (); + $out_folder{"bindpairs"} = (); + $out_folder{"coders"} = (); + + my $num_coders = ReadUInt64($_[0]); + $et->VPrint(0, "Number of coders: $num_coders\n"); + + for (my $i = 0; $i < $num_coders; $i++) { + my %c = (); + $_[0]->Read($buff, 1); + my $b = ord($buff); + my $methodsize = $b & 0xF; + my $iscomplex = ($b & 0x10) == 0x10; + my $hasattributes = ($b & 0x20) == 0x20; + if($methodsize > 0){ + $_[0]->Read($buff, $methodsize); + $c{"method"} = $buff; + } + else{ + $c{"method"} = "\0"; + } + if($iscomplex){ + $c{"numinstreams"} = ReadUInt64($_[0]); + $c{"numoutstreams"} = ReadUInt64($_[0]); + } + else{ + $c{"numinstreams"} = 1; + $c{"numoutstreams"} = 1; + } + $totalin += $c{"numinstreams"}; + $totalout += $c{"numoutstreams"}; + if($hasattributes){ + my $proplen = ReadUInt64($_[0]); + $_[0]->Read($buff, $proplen); + $c{"properties"} = $buff; + } + else { + $c{"properties"} = undef; + } + $et->VPrint(0, "Reading coder $i\n"); + push(@{ $out_folder{"coders"} }, \%c); + } + my $num_bindpairs = $totalout - 1; + for (my $i = 0; $i < $num_bindpairs; $i++) { + my @bond = (ReadUInt64($_[0]), ReadUInt64($_[0])); + push(@{ $out_folder{"bindpairs"} }, @bond); + } + my $num_packedstreams = $totalin - $num_bindpairs; + if($num_packedstreams == 1){ + for (my $i = 0; $i < $totalin; $i++) { + if(findInBinPair(\@{ $out_folder{"bindpairs"} }, $i) < 0){ + push(@{ $out_folder{"packed_indices"} }, $i); + } + } + } + else{ + for (my $i = 0; $i < $num_packedstreams; $i++) { + push(@{ $out_folder{"packed_indices"} }, ReadUInt64($_[0])); + } + } + + return \%out_folder; +} + +sub RetrieveCodersInfo{ + my $et = shift; + my $buff; + my @folders = @{ $_[1] }; + + $_[0]->Read($buff, 1); + my $pid = ord($buff); + + if($pid != 0x0c){ # coders unpack size id expected + return 0; + } + foreach my $folder (@folders) { + $folder->{"unpacksizes"} = (); + foreach my $c (@{ $folder->{"coders"} }) { + for (my $i = 0 ; $i < $c->{"numoutstreams"} ; $i++) { + push(@{ $folder->{"unpacksizes" } }, ReadUInt64($_[0])); + } + } + } + $_[0]->Read($buff, 1); + $pid = ord($buff); + + if($pid == 0x0a){ #crc + my $numfolders = scalar(@folders); + $et->VPrint(0, "Number of folders: $numfolders\n"); + my @defined = ReadBoolean($_[0], $numfolders, 1); + my @crcs; + foreach my $crcexist (@defined) { + if($crcexist){ + push(@crcs, ReadUInt32($_[0])); + } + } + for (my $i = 0 ; $i < $numfolders ; $i++) { + $folders[$i]->{"digestdefined"} = $defined[$i]; + $folders[$i]->{"crc"} = $crcs[$i]; + } + $_[0]->Read($buff, 1); + $pid = ord($buff); + } + + if($pid != 0x00){ # end id expected + $et->VPrint(0, "Invalid PID: $pid\n"); + return 0; + } + return 1; +} + +sub ReadUnpackInfo { + my $et = shift; + my $buff; + my %out_unpackinfo = (); + + $_[0]->Read($buff, 1); + my $pid = ord($buff); + + if($pid != 0xb) { # folder id expected + return 0; + } + + $out_unpackinfo{"numfolders"} = ReadUInt64($_[0]); + $out_unpackinfo{"folders"} = (); + + $_[0]->Read($buff, 1); + my $external = ord($buff); + + if($external == 0x00){ + for (my $i = 0 ; $i < $out_unpackinfo{"numfolders"}; $i++) { + $et->VPrint(0, "Reading folder $i\n"); + my $folder = ReadFolder($et, $_[0]); + push(@{ $out_unpackinfo{"folders"} }, $folder); + } + } + return 0 unless RetrieveCodersInfo($et, $_[0], $out_unpackinfo{"folders"}); + return \%out_unpackinfo; +} + +sub ReadSubstreamsInfo { + my $et = shift; + my $buff; + my %out_substreamsinfo = (); + $out_substreamsinfo{"num_unpackstreams_folders"} = (); + + my $numfolders = $_[1]; + my $folders = $_[2]; + + $_[0]->Read($buff, 1); + my $pid = ord($buff); + if($pid == 13){ # num unpack stream + $et->VPrint(0, "Num unpack stream detected.\n"); + for (my $i = 0 ; $i < $numfolders; $i++) { + push(@{ $out_substreamsinfo{"num_unpackstreams_folders"} }, ReadUInt64($_[0])); + } + $_[0]->Read($buff, 1); + $pid = ord($buff); + } + else{ + @{ $out_substreamsinfo{"num_unpackstreams_folders"} } = (1)x$numfolders; + } + if($pid == 9){ # size property + $et->VPrint(0, "Size property detected.\n"); + $out_substreamsinfo{"unpacksizes"} = (); + for(my $i=0; $i< scalar(@{ $out_substreamsinfo{"num_unpackstreams_folders"} }); $i++){ + my $totalsize = 0; + for(my $j=1; $j < @{ $out_substreamsinfo{"num_unpackstreams_folders"} }[$i]; $j++){ + my $size = ReadUInt64($_[0]); + push(@{ $out_substreamsinfo{"unpacksizes"} }, $size); + $totalsize += $size; + } + # self.unpacksizes.append(folders[i].get_unpack_size() - totalsize) + } + $_[0]->Read($buff, 1); + $pid = ord($buff); + } + my $num_digests = 0; + my $num_digests_total = 0; + for (my $i = 0 ; $i < $numfolders; $i++) { + my $numsubstreams = @{ $out_substreamsinfo{"num_unpackstreams_folders"} }[$i]; + if($numsubstreams != 1 or not @{ $folders }[$i]->{"digestdefined"}){ + $num_digests += $numsubstreams; + } + $num_digests_total += $numsubstreams; + } + $et->VPrint(0, "Num Digests Total: $num_digests_total\n"); + if($pid == 10) { # crc property + $et->VPrint(0, "CRC property detected.\n"); + my @crcs; + my @defined = ReadBoolean($_[0], $num_digests, 1); + foreach my $crcexist (@defined) { + push(@crcs, ReadUInt32($_[0])); + } + $_[0]->Read($buff, 1); + $pid = ord($buff); + } + if($pid != 0x00){ # end id expected + return 0; + } + return \%out_substreamsinfo; +} + +sub ReadStreamsInfo { + my $et = shift; + my $buff; + my $unpackinfo; + my %out_streamsinfo = (); + + $_[0]->Read($buff, 1); + my $pid = ord($buff); + if($pid == 6){ # pack info + my $packinfo = ReadPackInfo($et, $_[0]); + return 0 unless $packinfo; + $out_streamsinfo{"packinfo"} = $packinfo; + $_[0]->Read($buff, 1); + $pid = ord($buff); + } + if($pid == 7) { # unpack info + $et->VPrint(0, "Unpack info data detected.\n"); + $unpackinfo = ReadUnpackInfo($et, $_[0]); + return 0 unless $unpackinfo; + $out_streamsinfo{"unpackinfo"} = $unpackinfo; + $_[0]->Read($buff, 1); + $pid = ord($buff); + } + if($pid == 8){ # substreams info + $et->VPrint(0, "Substreams info data detected.\n"); + my $substreamsinfo = ReadSubstreamsInfo($et, $_[0], $unpackinfo->{"numfolders"}, $unpackinfo->{"folders"}); + return 0 unless $substreamsinfo; + $out_streamsinfo{"substreamsinfo"} = $substreamsinfo; + $_[0]->Read($buff, 1); + $pid = ord($buff); + } + if($pid != 0x00){ # end id expected + $et->VPrint(0, "Invalid PID: $pid\n"); + return 0; + } + return \%out_streamsinfo; +} + +sub IsNativeCoder { + my $coder = $_[0]; + + if(ord(substr($coder->{"method"}, 0, 1)) == 3){ + if(ord(substr($coder->{"method"}, 1, 1)) == 1) { + if(ord(substr($coder->{"method"}, 2, 1)) == 1) { + return "LZMA"; + } + } + } + elsif(ord(substr($coder->{"method"}, 0, 1)) == 6){ + if(ord(substr($coder->{"method"}, 1, 1)) == 0xf1) { + if(ord(substr($coder->{"method"}, 2, 1)) == 7) { + if(ord(substr($coder->{"method"}, 3, 1)) == 1) { + return "7zAES"; + } + } + } + } +} + +sub GetDecompressor { + my $et = shift; + + my $folder = $_[0]; + my %out_decompressor = (); + $out_decompressor{"chain"} = (); + $out_decompressor{"input_size"} = $_[1]; + $out_decompressor{"_unpacksizes"} = $folder->{"unpacksizes"}; + @{ $out_decompressor{"_unpacked"} } = (0) x scalar(@{ $out_decompressor{"_unpacksizes"} }); + $out_decompressor{"consumed"} = 0; + $out_decompressor{"block_size"} = 32768; + $out_decompressor{"_unused"} = []; + + foreach my $coder (@{ $folder->{"coders"} }) { + my $algorithm = IsNativeCoder($coder); + if($algorithm eq "7zAES") { + $et->Warn("File is encrypted.", 0); + return 0; + } + else{ + push(@{ $out_decompressor{"chain"} }, $algorithm); + } + } + + return \%out_decompressor; +} + +sub ReadData { + my $et = shift; + my $decompressor = $_[1]; + my $rest_size = $decompressor->{"input_size"} - $decompressor->{"consumed"}; + my $unused_s = scalar(@{ $decompressor->{"_unused"} }); + my $read_size = $rest_size - $unused_s; + my $data = ""; + if($read_size > $decompressor->{"block_size"} - $unused_s){ + $read_size = $decompressor->{"block_size"} - $unused_s; + } + if($read_size > 0){ + $decompressor->{"consumed"} += $_[0]->Read($data, $read_size); + $et->VPrint(0, "Compressed size: $read_size\n"); + } + return $data; +} + +sub Decompress_Internal { + my $data = ""; + for(my $i=0; $i < scalar(@{ $_[0]->{"chain"} }); $i++){ + if(@{ $_[0]->{"_unpacked"} }[$i] < @{ $_[0]->{"_unpacksizes"} }[$i]){ + my %opts = (); + $opts{"Filter"} = Lzma::Filter::Lzma1(); + my ($z, $status) = Compress::Raw::Lzma::RawDecoder->new( %opts ); + $status = $z->code($_[1], $data); + @{ $_[0]->{"_unpacked"} }[$i] += length($data); + } + } + return $data; +} + +sub Decompress { + my $et = shift; + my $max_length = $_[1]; + my $data = ReadData($et, $_[0], $_[1]); + my $tmp = Decompress_Internal($_[1], $data); + return $tmp; +} + +sub ReadName { + my $numfiles = $_[1]; + + for(my $i=0; $i < $numfiles; $i++){ + @{ $_[2] }[$i]->{"filename"} = ReadUTF16($_[0]); + } +} + +sub ReadTimes { + my $et = shift; + my $external; + my $numfiles = $_[1]; + my $name = $_[2]; + + my @defined = ReadBoolean($_[0], $numfiles, 1); + $_[0]->Read($external, 1); + if(ord($external) != 0){ + $et->Warn("Invalid or corrupted file. (ReadTimes)"); + return 0; + } + + for(my $i=0; $i < $numfiles; $i++){ + if($defined[$i]){ + my $value = ReadRealUInt64($_[0]); + $value = $value / 10000000.0 - 11644473600; + @{ $_[3] }[$i]->{$name} = $value; + } + else{ + @{ $_[3] }[$i]->{$name} = undef; + } + } +} + +sub ReadAttributes { + my $numfiles = $_[1]; + + for(my $i=0; $i < $numfiles; $i++){ + if($_[2][$i]){ + my $value = ReadUInt32($_[0]); + @{ $_[3] }[$i]->{"attributes"} = $value >> 8; + } + else{ + @{ $_[3] }[$i]->{"attributes"} = undef; + } + } +} + +sub ReadFilesInfo { + my $et = shift; + my $buff; + + my $numfiles = ReadUInt64($_[0]); + my @out_files = (); + for(my $i = 0; $i < $numfiles; $i++){ + my %new_file = (); + $new_file{"emptystream"} = 0; + push(@out_files, \%new_file); + } + my $numemptystreams = 0; + $et->VPrint(0, "Number of files: $numfiles\n"); + while(1){ + $_[0]->Read($buff, 1); + my $prop = ord($buff); + if($prop == 0){ # end + return \@out_files; + } + my $size = ReadUInt64($_[0]); + if($prop == 25) { # dummy + $_[0]->Seek($size, 1); + next; + } + $_[0]->Read($buff, $size); + my $buffer = new File::RandomAccess(\$buff); + if($prop == 14){ # empty stream + my @isempty = ReadBoolean($buffer, $numfiles, 0); + my $numemptystreams = 0; + for(my $i = 0; $i < $numfiles; $i++){ + if($isempty[$i] == 0){ + $out_files[$i]->{"emptystream"} = 0; + } + else{ + $out_files[$i]->{"emptystream"} = 1; + $numemptystreams++; + } + } + } + elsif($prop == 15) { # empty file + + } + elsif($prop == 17){ # name + $et->VPrint(0, "Name prop detected.\n"); + my $external; + $buffer->Read($external, 1); + my $is_external = ord($external); + if($is_external == 0){ + ReadName($buffer, $numfiles, \@out_files); + } + } + elsif($prop == 20){ # last write time + $et->VPrint(0, "Last write time detected.\n"); + ReadTimes($et, $buffer, $numfiles, "lastwritetime", \@out_files); + } + elsif($prop == 21){ # attributes + $et->VPrint(0, "File attributes detected.\n"); + my $external; + my @defined = ReadBoolean($buffer, $numfiles, 1); + $_[0]->Read($external, 1); + if(ord($external) == 0){ + ReadAttributes($buffer, $numfiles, \@defined, \@out_files); + } + else{ + my $dataindex = ReadUINT64($buffer); + #TODO: try to read external data + } + } + } +} + +sub ExtractHeaderInfo { + my $et = shift; + my $buff; + my %out_headerinfo = (); + $out_headerinfo{"files_info"} = (); + my $files_info; + + $_[0]->Read($buff, 1); + my $pid = ord($buff); + + if($pid == 0x04){ + my $mainstreams = ReadStreamsInfo($et, $_[0]); + if($mainstreams == 0){ + $et->Warn("Invalid or corrupted file. (ExtractHeaderInfo)"); + return 0; + } + $_[0]->Read($buff, 1); + $pid = ord($buff); + } + if($pid == 0x05){ + $et->VPrint(0, "File info pid reached.\n"); + $files_info = ReadFilesInfo($et, $_[0]); + push(@{ $out_headerinfo{"files_info"} }, $files_info); + $_[0]->Read($buff, 1); + $pid = ord($buff); + } + if($pid != 0x00){ # end id expected + $et->VPrint(0, "Invalid PID: $pid\n"); + return 0; + } + return \%out_headerinfo; +} + +sub DisplayFiles { + my $et = shift; + my $docNum = 0; + my $tagTablePtr = GetTagTable('Image::ExifTool::ZIP::RAR5'); + + foreach my $currentfile (@{ $_[0] }){ + $$et{DOC_NUM} = ++$docNum; + $et->HandleTag($tagTablePtr, 'ModifyDate', $currentfile->{"lastwritetime"}); + $et->HandleTag($tagTablePtr, 'ArchivedFileName', $currentfile->{"filename"}); + } + delete $$et{DOC_NUM}; + if($docNum > 1 and not $et->Options('Duplicates')){ + $et->Warn("Use the Duplicates option to extract tags for all $docNum files", 1); + } +} + +#------------------------------------------------------------------------------ +# Extract information from a 7z file +# Inputs: 0) ExifTool object reference, 1) dirInfo reference +# Returns: 1 on success, 0 if this wasn't a valid 7z file +sub Process7Z($$) +{ + my ($et, $dirInfo) = @_; + my $raf = $$dirInfo{RAF}; + my ($flags, $buff); + + return 0 unless $raf->Read($buff, 6) and $buff eq "7z\xbc\xaf\x27\x1c"; + + $et->SetFileType(); + + $raf->Read($buff, 2); + my ($major_version, $minor_version) = unpack('cc', $buff); + my $tagTablePtr = GetTagTable('Image::ExifTool::ZIP::RAR5'); + $et->HandleTag($tagTablePtr, 'FileVersion', sprintf('7z v%d.%.2d',$major_version,$minor_version)); + + $raf->Seek(4, 1); # skip Start Header CRC + + $raf->Read($buff, 20); + my ($nextheaderoffset, $nextheadersize) = unpack('QQx', $buff); + $et->VPrint(0, "NextHeaderOffset: $nextheaderoffset, NextHeaderSize: $nextheadersize\n"); + + $raf->Seek($nextheaderoffset, 1); # going to next header offset + $raf->Read($buff, 1); + my $pid = ord($buff); + if($pid == 1){ # normal header + $et->VPrint(0,"Normal header detected. trying to decode\n"); + my $headerinfo = ExtractHeaderInfo($et, $raf); + if($headerinfo == 0){ + $et->Warn("Invalid or corrupted file."); + return 1; + } + DisplayFiles($et, @{ $headerinfo->{"files_info"} }); + } + elsif($pid == 23){ # encoded header + unless (eval { require Compress::Raw::Lzma }) { + $et->Warn("Install Compress::Raw::Lzma to read encoded 7z information"); + return 1; + } + $et->VPrint(0, "Encoded Header detected. trying to decode\n"); + my $streamsinfo = ReadStreamsInfo($et, $raf); + if($streamsinfo == 0){ + $et->Warn("Invalid or corrupted file."); + return 1; + } + my $buffer2 = (); + foreach my $folder (@{ $streamsinfo->{"unpackinfo"}->{"folders"} }) { + my @uncompressed = @{ $folder->{"unpacksizes"} }; + my $compressed_size = $streamsinfo->{"packinfo"}->{"packsizes"}[0]; + my $uncompressed_size = @uncompressed[scalar(@uncompressed) - 1]; + my $decomporessor = GetDecompressor($et, $folder, $compressed_size); + if($decomporessor == 0){ + $et->Warn("Invalid or corrupted file."); + return 1; + } + + my $src_start = 32; + $src_start += $streamsinfo->{"packinfo"}->{"packpos"}; + $raf->Seek($src_start, 0); + my $remaining = $uncompressed_size; + my $folder_data = ""; + while($remaining > 0){ + $folder_data .= Decompress($et, $raf, $decomporessor, $remaining); + $remaining = $uncompressed_size - length($folder_data); + } + $buffer2 = new File::RandomAccess(\$folder_data); + } + $buffer2->Seek(0, 0); + $buffer2->Read($buff, 1); + $pid = ord($buff); + if($pid != 0x01){ # header field expected + return 0; + } + my $headerinfo = ExtractHeaderInfo($et, $buffer2); + if($headerinfo == 0){ + $et->Warn("Invalid or corrupted file."); + return 1; + } + DisplayFiles($et, @{ $headerinfo->{"files_info"} }); + }else{ # Unknown header + return 0; + } + + return 1; +} + +1; # end + +__END__ + +=head1 NAME + +Image::ExifTool::7Z - Read 7z archives + +=head1 SYNOPSIS + +This module is used by Image::ExifTool + +=head1 DESCRIPTION + +This module contains definitions required by Image::ExifTool to extract meta +information from 7z archives. + +=head1 AUTHOR + +Copyright 2023, Amir Gooran + +This library is free software; you can redistribute it and/or modify it +under the same terms as Perl itself. + +=head1 REFERENCES + +=over 4 + +=item L<https://py7zr.readthedocs.io/en/latest/archive_format.html> + +=back + +=head1 SEE ALSO + +L<Image::ExifTool::TagNames/ZIP RAR5 Tags> + +=cut + diff --git a/lib/Image/ExifTool/Canon.pm b/lib/Image/ExifTool/Canon.pm index 65e1b022..30ba70ab 100644 --- a/lib/Image/ExifTool/Canon.pm +++ b/lib/Image/ExifTool/Canon.pm @@ -2092,6 +2092,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' ); TagTable => 'Image::ExifTool::Canon::AFConfig', } }, + # 0x402b - crop information (forum14904) 0x403f => { #25 Name => 'RawBurstModeRoll', SubDirectory => { diff --git a/lib/Image/ExifTool/CanonRaw.pm b/lib/Image/ExifTool/CanonRaw.pm index 58805865..53f619f9 100644 --- a/lib/Image/ExifTool/CanonRaw.pm +++ b/lib/Image/ExifTool/CanonRaw.pm @@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; use Image::ExifTool::Canon; -$VERSION = '1.60'; +$VERSION = '1.61'; sub WriteCRW($$); sub ProcessCanonRaw($$$); @@ -698,9 +698,9 @@ sub ProcessCanonRaw($$$) $format ne 'string' and not $subdir; } else { $valueDataPos = $ptr; - # do MD5 of image data if requested - if ($$et{ImageDataMD5} and $tagID == 0x2005) { - $raf->Seek($ptr, 0) and $et->ImageDataMD5($raf, $size, 'raw'); + # do hash of image data if requested + if ($$et{ImageDataHash} and $tagID == 0x2005) { + $raf->Seek($ptr, 0) and $et->ImageDataHash($raf, $size, 'raw'); } if ($size <= 512 or ($verbose > 2 and $size <= 65536) or ($tagInfo and ($$tagInfo{SubDirectory} diff --git a/lib/Image/ExifTool/Exif.pm b/lib/Image/ExifTool/Exif.pm index 9382c5f4..55b41159 100644 --- a/lib/Image/ExifTool/Exif.pm +++ b/lib/Image/ExifTool/Exif.pm @@ -43,6 +43,7 @@ # 30) http://geotiff.maptools.org/spec/geotiffhome.html # 31) https://android.googlesource.com/platform/external/dng_sdk/+/refs/heads/master/source/dng_tag_codes.h # 32) Jeffry Friedl private communication +# 33) https://www.cipa.jp/std/documents/download_e.html?DC-008-Translation-2023-E (Exif 3.0) # IB) Iliah Borg private communication (LibRaw) # JD) Jens Duttke private communication #------------------------------------------------------------------------------ @@ -65,7 +66,7 @@ sub RebuildMakerNotes($$$); sub EncodeExifText($$); sub ValidateIFD($;$); sub ValidateImageData($$$;$); -sub AddImageDataMD5($$$); +sub AddImageDataHash($$$); sub ProcessTiffIFD($$$); sub PrintParameter($$$); sub GetOffList($$$$$); @@ -79,6 +80,7 @@ sub BINARY_DATA_LIMIT { return 10 * 1024 * 1024; } # byte sizes for the various EXIF format types below @formatSize = (undef,1,1,2,4,8,1,1,2,4,8,4,8,4,2,8,8,8,8); +$formatSize[129] = 1; # (Exif 3.0) @formatName = ( undef, 'int8u', 'string', 'int16u', @@ -87,6 +89,7 @@ sub BINARY_DATA_LIMIT { return 10 * 1024 * 1024; } 'double', 'ifd', 'unicode', 'complex', 'int64u', 'int64s', 'ifd64', # (new BigTIFF formats) ); +$formatName[129] = 'utf8'; # (Exif 3.0) # hash to look up EXIF format numbers by name # (format types are all lower case) @@ -110,6 +113,7 @@ sub BINARY_DATA_LIMIT { return 10 * 1024 * 1024; } 'int64u' => 16, # LONG8 [BigTIFF] 'int64s' => 17, # SLONG8 [BigTIFF] 'ifd64' => 18, # IFD8 (with int64u format) [BigTIFF] + 'utf8' => 129,# UTF-8 (Exif 3.0) # Note: unicode and complex types are not yet properly supported by ExifTool. # These are types which have been observed in the Adobe DNG SDK code, but # aren't fully supported there either. We know the sizes, but that's about it. @@ -2823,6 +2827,13 @@ my %opcodeInfo = ( 0xa433 => { Name => 'LensMake', Writable => 'string' }, #24 0xa434 => { Name => 'LensModel', Writable => 'string' }, #24 0xa435 => { Name => 'LensSerialNumber', Writable => 'string' }, #24 + 0xa436 => { Name => 'Title', Writable => 'string', Avoid => 1 }, #33 + 0xa437 => { Name => 'Photographer', Writable => 'string' }, #33 + 0xa438 => { Name => 'ImageEditor', Writable => 'string' }, #33 + 0xa439 => { Name => 'CameraFirmware', Writable => 'string' }, #33 + 0xa43a => { Name => 'RAWDevelopingSoftware', Writable => 'string' }, #33 + 0xa43b => { Name => 'ImageEditingSoftware', Writable => 'string' }, #33 + 0xa43c => { Name => 'MetadataEditingSoftware', Writable => 'string' }, #33 0xa460 => { #Exif2.32 Name => 'CompositeImage', Writable => 'int16u', @@ -4910,10 +4921,10 @@ my %subSecConv = ( Writable => 1, Protected => 1, WriteAlso => { - GPSLatitude => '(defined $val and $val =~ /(.*?)( ?[NS])?,/) ? $1 : undef', - GPSLatitudeRef => '(defined $val and $val =~ /(-?)(.*?) ?([NS]?),/) ? ($3 || ($1 ? "S" : "N")) : undef', - GPSLongitude => '(defined $val and $val =~ /, ?(.*?)( ?[EW]?)$/) ? $1 : undef', - GPSLongitudeRef => '(defined $val and $val =~ /, ?(-?)(.*?) ?([EW]?)$/) ? ($3 || ($1 ? "W" : "E")) : undef', + GPSLatitude => '(defined $val and $val =~ /(.*) /) ? $1 : undef', + GPSLatitudeRef => '(defined $val and $val =~ /(-?)(.*?) /) ? ($1 ? "S" : "N") : undef', + GPSLongitude => '(defined $val and $val =~ / (.*)$/) ? $1 : undef', + GPSLongitudeRef => '(defined $val and $val =~ / (-?)/) ? ($1 ? "W" : "E") : undef', }, PrintConvInv => q{ return undef unless $val =~ /(.*? ?[NS]?), ?(.*? ?[EW]?)$/; @@ -4921,7 +4932,7 @@ my %subSecConv = ( require Image::ExifTool::GPS; $lat = Image::ExifTool::GPS::ToDegrees($lat, 1, "lat"); $lon = Image::ExifTool::GPS::ToDegrees($lon, 1, "lon"); - return "$lat, $lon"; + return "$lat $lon"; }, Require => { 0 => 'GPSLatitude', @@ -5929,12 +5940,12 @@ sub ProcessExif($$$) my ($verbose,$validate,$saveFormat) = @{$$et{OPTIONS}}{qw(Verbose Validate SaveFormat)}; my $htmlDump = $$et{HTML_DUMP}; my $success = 1; - my ($tagKey, $dirSize, $makerAddr, $strEnc, %offsetInfo, $offName, $nextOffName, $doMD5); + my ($tagKey, $dirSize, $makerAddr, $strEnc, %offsetInfo, $offName, $nextOffName, $doHash); my $inMakerNotes = $$tagTablePtr{GROUPS}{0} eq 'MakerNotes'; my $isExif = ($tagTablePtr eq \%Image::ExifTool::Exif::Main); - # set flag to calculate image data MD5 if requested - $doMD5 = 1 if $$et{ImageDataMD5} and (($$et{FILE_TYPE} eq 'TIFF' and not $base and not $inMakerNotes) or + # set flag to calculate image data hash if requested + $doHash = 1 if $$et{ImageDataHash} and (($$et{FILE_TYPE} eq 'TIFF' and not $base and not $inMakerNotes) or ($$et{FILE_TYPE} eq 'RAF' and $dirName eq 'FujiIFD')); # set encoding to assume for strings @@ -6088,7 +6099,7 @@ sub ProcessExif($$$) my $format = Get16u($dataPt, $entry+2); my $count = Get32u($dataPt, $entry+4); # (Apple uses the BigTIFF format code 16 in the maker notes of their ProRaw DNG files) - if (($format < 1 or $format > 13) and not ($format == 16 and $$et{Make} eq 'Apple' and $inMakerNotes)) { + if (($format < 1 or $format > 13) and $format != 129 and not ($format == 16 and $$et{Make} eq 'Apple' and $inMakerNotes)) { if ($mapFmt and $$mapFmt{$format}) { $format = $$mapFmt{$format}; } else { @@ -6404,7 +6415,13 @@ sub ProcessExif($$$) # convert according to specified format $val = ReadValue($valueDataPt,$valuePtr,$formatStr,$count,$readSize,\$rational); # re-code if necessary - $val = $et->Decode($val, $strEnc) if $strEnc and $formatStr eq 'string' and defined $val; + if (defined $val) { + if ($formatStr eq 'utf8') { + $val = $et->Decode($val, 'UTF8'); + } elsif ($strEnc and $formatStr eq 'string') { + $val = $et->Decode($val, $strEnc); + } + } } } @@ -6781,7 +6798,7 @@ sub ProcessExif($$$) } $val = join(' ', @vals); } - if ($validate or $doMD5) { + if ($validate or $doHash) { if ($$tagInfo{OffsetPair}) { $offsetInfo{$tagID} = [ $tagInfo, $val ]; } elsif ($saveForValidate{$tagID} and $isExif) { @@ -6800,8 +6817,8 @@ sub ProcessExif($$$) } if (%offsetInfo) { - # calculate image data MD5 if requested - AddImageDataMD5($et, $dirInfo, \%offsetInfo) if $doMD5; + # calculate image data hash if requested + AddImageDataHash($et, $dirInfo, \%offsetInfo) if $doHash; # validate image data offsets for this IFD (note: modifies %offsetInfo) Image::ExifTool::Validate::ValidateOffsetInfo($et, \%offsetInfo, $dirName, $inMakerNotes) if $validate; } diff --git a/lib/Image/ExifTool/FujiFilm.pm b/lib/Image/ExifTool/FujiFilm.pm index a73d5dc9..36c5f383 100644 --- a/lib/Image/ExifTool/FujiFilm.pm +++ b/lib/Image/ExifTool/FujiFilm.pm @@ -31,7 +31,7 @@ use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; -$VERSION = '1.87'; +$VERSION = '1.88'; sub ProcessFujiDir($$$); sub ProcessFaceRec($$$); @@ -1687,8 +1687,8 @@ sub ProcessRAF($$) my $tagTablePtr = GetTagTable('Image::ExifTool::FujiFilm::IFD'); # this is TIFF-format data only for some models, so no warning if it fails unless ($et->ProcessTIFF(\%dirInfo, $tagTablePtr, \&Image::ExifTool::ProcessTIFF)) { - # do MD5 of image data if necessary - $et->ImageDataMD5($raf, $len, 'raw') if $$et{ImageDataMD5} and $raf->Seek($start,0); + # do hash of image data if necessary + $et->ImageDataHash($raf, $len, 'raw') if $$et{ImageDataHash} and $raf->Seek($start,0); } delete $$et{SET_GROUP1}; $ifdNum = ($ifdNum || 1) + 1; diff --git a/lib/Image/ExifTool/GPS.pm b/lib/Image/ExifTool/GPS.pm index be75ee45..1804aa8e 100644 --- a/lib/Image/ExifTool/GPS.pm +++ b/lib/Image/ExifTool/GPS.pm @@ -106,8 +106,10 @@ my %coordConv = ( return undef unless $inv and $val =~ /^([-+0-9])/; return($1 eq '-' ? 1 : 0); }, - 0 => 'Above Sea Level', - 1 => 'Below Sea Level', + 0 => 'Above Sea Level', # (ellipsoidal surface, Exif 3.0) + 1 => 'Below Sea Level', # (ellipsoidal surface, Exif 3.0) + # 2 => 'Above Sea Level', # (Exif 3.0) + # 3 => 'Below Sea Level', # (Exif 3.0) }, }, 0x0006 => { @@ -289,6 +291,7 @@ my %coordConv = ( Name => 'GPSProcessingMethod', Writable => 'undef', Notes => 'values of "GPS", "CELLID", "WLAN" or "MANUAL" by the EXIF spec.', + # (or QZZSS, GALILEO, GLONASS, BEIDOU or NAVIC in Exif 3.0) RawConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val,1,$tag)', RawConvInv => 'Image::ExifTool::Exif::EncodeExifText($self,$val)', }, diff --git a/lib/Image/ExifTool/Geotag.pm b/lib/Image/ExifTool/Geotag.pm index 7b91dcfa..34b7a8d0 100644 --- a/lib/Image/ExifTool/Geotag.pm +++ b/lib/Image/ExifTool/Geotag.pm @@ -29,7 +29,7 @@ use vars qw($VERSION); use Image::ExifTool qw(:Public); use Image::ExifTool::GPS; -$VERSION = '1.71'; +$VERSION = '1.72'; sub JITTER() { return 2 } # maximum time jitter @@ -224,6 +224,9 @@ sub LoadTrackLog($$;$) # determine file format if (not $format) { s/^\xef\xbb\xbf//; # remove leading BOM if it exists + if (/^\xff\xfe|\xfe\xff/) { + return "ExifTool doesn't yet read UTF16-format track logs"; + } if (/^<(\?xml|gpx)[\s>]/) { # look for XML or GPX header $format = 'XML'; # check for NMEA sentence diff --git a/lib/Image/ExifTool/Jpeg2000.pm b/lib/Image/ExifTool/Jpeg2000.pm index d71a6066..8b5a8c93 100644 --- a/lib/Image/ExifTool/Jpeg2000.pm +++ b/lib/Image/ExifTool/Jpeg2000.pm @@ -16,7 +16,7 @@ use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); -$VERSION = '1.34'; +$VERSION = '1.35'; sub ProcessJpeg2000Box($$$); sub ProcessJUMD($$$); @@ -130,7 +130,10 @@ my %j2cMarker = ( NOTES => q{ The tags below are found in JPEG 2000 images and the JUMBF metadata in JPEG images, but not all of these are extracted. Note that ExifTool currently - writes only EXIF, IPTC and XMP tags in Jpeg2000 images. + writes only EXIF, IPTC and XMP tags in Jpeg2000 images, and EXIF and XMP in + JXL images. ExifTool will read/write Brotli-compressed EXIF and XMP in JXL + images, but the API Compress option must be set to create new EXIF and XMP + in compressed format. }, # # NOTE: ONLY TAGS WITH "Format" DEFINED ARE EXTRACTED! @@ -262,7 +265,7 @@ my %j2cMarker = ( uuid => [ { Name => 'UUID-EXIF', - # (this is the EXIF that we create) + # (this is the EXIF that we create in JP2) Condition => '$$valPt=~/^JpgTiffExif->JP2(?!Exif\0\0)/', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', @@ -298,7 +301,7 @@ my %j2cMarker = ( }, { Name => 'UUID-IPTC', - # (this is the IPTC that we create) + # (this is the IPTC that we create in JP2) Condition => '$$valPt=~/^\x33\xc7\xa4\xd2\xb8\x1d\x47\x23\xa0\xba\xf1\xa3\xe0\x97\xad\x38/', SubDirectory => { TagTable => 'Image::ExifTool::IPTC::Main', @@ -431,7 +434,6 @@ my %j2cMarker = ( # stuff seen in JPEG XL images: # # jbrd - JPEG Bitstream Reconstruction Data (allows lossless conversion back to original JPG) - # jxlp - partial JXL codestream jxlc => { Name => 'JXLCodestream', Format => 'undef', @@ -441,6 +443,15 @@ my %j2cMarker = ( }, RawConv => 'Image::ExifTool::Jpeg2000::ProcessJXLCodestream($self,\$val); undef', }, + jxlp => { + Name => 'PartialJXLCodestream', + Format => 'undef', + Notes => q{ + Partial codestreams in JPEG XL image. Currently processed only to determine + ImageSize + }, + RawConv => 'Image::ExifTool::Jpeg2000::ProcessJXLCodestream($self,\$val); undef', + }, Exif => { Name => 'EXIF', SubDirectory => { @@ -451,6 +462,38 @@ my %j2cMarker = ( Start => '$valuePtr + 4 + (length($$dataPt)-$valuePtr > 4 ? unpack("N", $$dataPt) : 0)', }, }, + hrgm => { + Name => 'GainMapImage', + Groups => { 2 => 'Preview' }, + Format => 'undef', + Binary => 1, + }, + brob => [{ # Brotli-encoded metadata (see https://libjxl.readthedocs.io/en/latest/api_decoder.html) + Name => 'BrotliXMP', + Condition => '$$valPt =~ /^xml /i', + SubDirectory => { + TagTable => 'Image::ExifTool::XMP::Main', + ProcessProc => \&ProcessBrotli, + WriteProc => \&ProcessBrotli, + # (don't set DirName to 'XMP' because this would enable a block write of raw XMP) + }, + },{ + Name => 'BrotliEXIF', + Condition => '$$valPt =~ /^exif/i', + SubDirectory => { + TagTable => 'Image::ExifTool::Exif::Main', + ProcessProc => \&ProcessBrotli, + WriteProc => \&ProcessBrotli, + # (don't set DirName to 'EXIF' because this would enable a block write of raw EXIF) + }, + },{ + Name => 'BrotliJUMB', + Condition => '$$valPt =~ /^jumb/i', + SubDirectory => { + TagTable => 'Image::ExifTool::Jpeg2000::Main', + ProcessProc => \&ProcessBrotli, + }, + }], ); %Image::ExifTool::Jpeg2000::ImageHeader = ( @@ -840,12 +883,31 @@ sub CreateNewBoxes($$) $tagTable = GetTagTable('Image::ExifTool::XMP::Main') if $dir eq 'XMP'; my %dirInfo = ( DirName => $dir, - Parent => 'JP2', + Parent => $tag, ); + my $compress = $et->Options('Compress'); + $dirInfo{Compact} = 1 if $$et{IsJXL} and $compress; my $newdir = $et->WriteDirectory(\%dirInfo, $tagTable, $$subdir{WriteProc}); if (defined $newdir and length $newdir) { # not sure why, but EXIF box is padded with leading 0's in my sample my $pad = $dirName eq 'Exif' ? "\0\0\0\0" : ''; + if ($$et{IsJXL} and $compress) { + # create as Brotli-compressed metadata + if (eval { require IO::Compress::Brotli }) { + my $compressed; + eval { $compressed = IO::Compress::Brotli::bro($pad . $newdir) }; + if ($@ or not $compressed) { + $et->Warn("Error encoding $dirName brob box"); + } else { + $et->VPrint(0, " Writing Brotli-compressed $dir\n"); + $newdir = $compressed; + $pad = $tag; + $tag = 'brob'; + } + } else { + $et->WarnOnce('Install IO::Compress::Brotli to create Brotli-compressed metadata'); + } + } my $boxhdr = pack('N', length($newdir) + length($pad) + 8) . $tag; Write($outfile, $boxhdr, $pad, $newdir) or return 0; next; @@ -934,7 +996,7 @@ sub ProcessJpeg2000Box($$$) my $raf = $$dirInfo{RAF}; my $outfile = $$dirInfo{OutFile}; my $dirEnd = $dirStart + $dirLen; - my ($err, $outBuff, $verbose, $doColour, $md5); + my ($err, $outBuff, $verbose, $doColour, $hash); if ($outfile) { unless ($raf) { @@ -952,8 +1014,8 @@ sub ProcessJpeg2000Box($$$) # (must not set verbose flag when writing!) $verbose = $$et{OPTIONS}{Verbose}; $et->VerboseDir($$dirInfo{DirName}) if $verbose; - # do MD5 if requested, but only for top-level image data - $md5 = $$et{ImageDataMD5} if $raf; + # do hash if requested, but only for top-level image data + $hash = $$et{ImageDataHash} if $raf; } # loop through all contained boxes my ($pos, $boxLen, $lastBox); @@ -1023,8 +1085,8 @@ sub ProcessJpeg2000Box($$$) my $msg = sprintf("offset 0x%.4x to end of file", $dataPos + $base + $pos); $et->VPrint(0, "$$et{INDENT}- Tag '${boxID}' ($msg)\n"); } - if ($md5 and $isImageData{$boxID}) { - $et->ImageDataMD5($raf, undef, $boxID); + if ($hash and $isImageData{$boxID}) { + $et->ImageDataHash($raf, undef, $boxID); } } last; # (ignore the rest of the file when reading) @@ -1042,8 +1104,8 @@ sub ProcessJpeg2000Box($$$) Write($outfile, $$dataPt) or $err = 1; $raf->Read($buff,$boxLen) == $boxLen or $err = '', last; Write($outfile, $buff) or $err = 1; - } elsif ($md5 and $isImageData{$boxID}) { - $et->ImageDataMD5($raf, $boxLen, $boxID); + } elsif ($hash and $isImageData{$boxID}) { + $et->ImageDataHash($raf, $boxLen, $boxID); } else { $raf->Seek($boxLen, 1) or $err = 'Seek error', last; } @@ -1056,9 +1118,9 @@ sub ProcessJpeg2000Box($$$) # read the box data $dataPos = $raf->Tell() - $base; $raf->Read($buff,$boxLen) == $boxLen or $err = '', last; - if ($md5 and $isImageData{$boxID}) { - $md5->add($buff); - $et->VPrint(0, "$$et{INDENT}(ImageDataMD5: $boxLen bytes of $boxID data)\n"); + if ($hash and $isImageData{$boxID}) { + $hash->add($buff); + $et->VPrint(0, "$$et{INDENT}(ImageDataHash: $boxLen bytes of $boxID data)\n"); } $valuePtr = 0; $dataLen = $boxLen; @@ -1144,19 +1206,66 @@ sub ProcessJpeg2000Box($$$) $subdirInfo{DirName} =~ s/^UUID-//; my $subTable = GetTagTable($$subdir{TagTable}) || $tagTablePtr; if ($outfile) { - # remove this directory from our create list - delete $$et{AddJp2Dirs}{$$tagInfo{Name}}; # (eg. 'EXIF' or 'XMP') - delete $$et{AddJp2Dirs}{$boxID}; # (eg. 'Exif' or 'xml ') + # (special case for brob box, which may be EXIF or XMP) + my $fakeID = $boxID; + if ($boxID eq 'brob') { + # I have seen 'brob' ID's with funny cases, so standardize these + $fakeID = 'xml ' if $$dataPt =~ /^xml /i; + $fakeID = 'Exif' if $$dataPt =~ /^Exif/i; + } my $newdir; # only edit writable UUID, Exif and jp2h boxes - if ($uuid or $boxID eq 'Exif' or ($boxID eq 'xml ' and $$et{IsJXL}) or + if ($uuid or $fakeID eq 'Exif' or ($fakeID eq 'xml ' and $$et{IsJXL}) or ($boxID eq 'jp2h' and $$et{EDIT_DIRS}{jp2h})) { + my $compress = $et->Options('Compress'); + $subdirInfo{Parent} = $fakeID; + $subdirInfo{Compact} = 1 if $compress and $$et{IsJXL}; $newdir = $et->WriteDirectory(\%subdirInfo, $subTable, $$subdir{WriteProc}); next if defined $newdir and not length $newdir; # next if deleting the box + # compress JXL EXIF or XMP metadata if requested + if (defined $newdir and $$et{IsJXL} and defined $compress and + ($fakeID eq 'Exif' or $fakeID eq 'xml ')) + { + if ($compress and $boxID ne 'brob') { + # rewrite as a Brotli-compressed 'brob' box + if (eval { require IO::Compress::Brotli }) { + my $pad = $boxID eq 'Exif' ? "\0\0\0\0" : ''; + my $compressed; + eval { $compressed = IO::Compress::Brotli::bro($pad . $newdir) }; + if ($@ or not $compressed) { + $et->Warn("Error encoding $boxID brob box"); + } else { + $et->VPrint(0, " Writing Brotli-compressed $boxID\n"); + $newdir = $boxID . $compressed; + $boxID = 'brob'; + $subdirStart = $valuePtr = 0; + ++$$et{CHANGED}; + } + } else { + $et->WarnOnce('Install IO::Compress::Brotli to write Brotli-compressed metadata'); + } + } elsif (not $compress and $boxID eq 'brob') { + # (in this case, ProcessBrotli has returned uncompressed data, + # so change to the uncompressed 'xml ' or 'Exif' box type) + $et->VPrint(0, " Writing uncompressed $fakeID\n"); + $boxID = $fakeID; + $subdirStart = $valuePtr = 0; + ++$$et{CHANGED}; + } + } } elsif (defined $uuid) { $et->Warn("Not editing $$tagInfo{Name} box", 1); } + # remove this directory from our create list + delete $$et{AddJp2Dirs}{$fakeID}; # (eg. 'Exif' or 'xml ') + if ($boxID eq 'brob') { + # (can't make tag Name 'XMP' or 'Exif' for Brotli-compressed tags because it + # would break the logic in WriteDirectory(), so we do a lookup here instead) + delete $$et{AddJp2Dirs}{{'xml '=>'XMP','Exif'=>'EXIF'}->{$fakeID}}; + } else { + delete $$et{AddJp2Dirs}{$$tagInfo{Name}}; # (eg. 'EXIF' or 'XMP') + } # use old box data if not changed defined $newdir or $newdir = substr($$dataPt, $subdirStart, $subdirLen); my $prefixLen = $subdirStart - $valuePtr; @@ -1233,18 +1342,106 @@ sub GetBits($$) } #------------------------------------------------------------------------------ +# Read/write Brotli-encoded metadata +# Inputs: 0) ExifTool ref, 1) dirInfoRef, 2) tag table ref +# Returns: 1 on success when reading, or new data when writing (undef if unchanged) +# (ref https://libjxl.readthedocs.io/en/latest/api_decoder.html) +sub ProcessBrotli($$$) +{ + my ($et, $dirInfo, $tagTablePtr) = @_; + my $dataPt = $$dirInfo{DataPt}; + + return 0 unless length($$dataPt) > 4; + + my $isWriting = $$dirInfo{IsWriting}; + my $type = substr($$dataPt, 0, 4); + $et->VerboseDir("Decrypted Brotli '${type}'") unless $isWriting; + my %knownType = ( exif => 'Exif', 'xml ' => 'xml ', jumb => 'jumb' ); + my $stdType = $knownType{lc $type}; + unless ($stdType) { + $et->Warn('Unknown Brotli box type', 1); + return 1; + } + if ($type ne $stdType) { + $et->Warn("Incorrect case for Brotli '${type}' data (should be '${stdType}')"); + $type = $stdType; + } + if (eval { require IO::Uncompress::Brotli }) { + if ($isWriting and not eval { require IO::Compress::Brotli }) { + $et->WarnOnce('Install IO::Compress::Brotli to write Brotli-compressed metadata'); + return undef; + } + my $compress = $et->Options('Compress'); + my $verbose = $isWriting ? 0 : $et->Options('Verbose'); + my $dat = substr($$dataPt, 4); + eval { $dat = IO::Uncompress::Brotli::unbro($dat, 100000000) }; + $@ and $et->Warn("Error decoding $type brob box"), return 1; + $verbose > 2 and $et->VerboseDump(\$dat, Prefix => $$et{INDENT} . ' '); + my %dirInfo = ( DataPt => \$dat ); + if ($type eq 'xml ') { + $dirInfo{DirName} = 'XMP'; # (necessary for block read/write) + require Image::ExifTool::XMP; + if ($isWriting) { + $dirInfo{Compact} = 1 if $compress; # (no need to add padding if writing compressed) + $dat = $et->WriteDirectory(\%dirInfo, $tagTablePtr); + } else { + Image::ExifTool::XMP::ProcessXMP($et, \%dirInfo, $tagTablePtr); + } + } elsif ($type eq 'Exif') { + $dirInfo{DirName} = 'EXIF'; # (necessary for block read/write) + $dirInfo{DirStart} = 4 + (length($dat) > 4 ? unpack("N", $dat) : 0); + if ($dirInfo{DirStart} > length $dat) { + $et->Warn("Corrupted Brotli '${type}' data"); + } elsif ($isWriting) { + $dat = $et->WriteDirectory(\%dirInfo, $tagTablePtr, \&Image::ExifTool::WriteTIFF); + # add back header word + $dat = "\0\0\0\0" . $dat if defined $dat and length $dat; + } else { + $et->ProcessTIFF(\%dirInfo, $tagTablePtr); + } + } elsif ($type eq 'jumb') { + return undef if $isWriting; # (can't yet write JUMBF) + Image::ExifTool::ProcessJUMB($et, \%dirInfo, $tagTablePtr); # (untested) + } + if ($isWriting) { + return undef unless defined $dat; + # rewrite as uncompressed if Compress option is set to 0 (or '') + return $dat if defined $compress and not $compress; + eval { $dat = IO::Compress::Brotli::bro($dat) }; + $@ and $et->Warn("Error encoding $type brob box"), return undef; + $et->VPrint(0, " Writing Brotli-compressed $type\n"); + return $type . $dat; + } + } else { + $et->WarnOnce('Install IO::Uncompress::Brotli to decode Brotli-compressed metadata'); + return undef if $isWriting; + } + return 1; +} + +#------------------------------------------------------------------------------ # Extract parameters from JPEG XL codestream [unverified!] # Inputs: 0) ExifTool ref, 1) codestream ref -# Returns: 1 +# Returns: 1 on success sub ProcessJXLCodestream($$) { my ($et, $dataPt) = @_; - # add padding if necessary to avoid unpacking past end of data - if (length $$dataPt < 14) { - my $tmp = $$dataPt . ("\0" x 14); - $dataPt = \$tmp; + + return 0 unless $$dataPt =~ /^(\0\0\0\0)?\xff\x0a/; # validate codestream + # ignore if already extracted (ie. subsequent jxlp boxes) + return 0 if $$et{VALUE}{ImageWidth}; + # work with first 64 bytes of codestream data + # (and add padding if necessary to avoid unpacking past end of data) + my $dat; + if (length $$dataPt > 64) { + $dat = substr($$dataPt, 0, 64); + } elsif (length $$dataPt < 18) { + $dat = $$dataPt . ("\0" x 18); # (so we'll have a minimum 14 bytes to work with) + } else { + $dat = $$dataPt; } - my @a = unpack 'x2C12', $$dataPt; + $dat =~ s/^\0\0\0\0//; # remove jxlp header word + my @a = unpack 'x2C12', $dat; my ($x, $y); my $small = GetBits(\@a, 1); if ($small) { @@ -1362,8 +1559,8 @@ sub ProcessJXL($$) $$dirInfo{RAF} = new File::RandomAccess(\$buff); } else { $et->SetFileType('JXL Codestream','image/jxl', 'jxl'); - if ($$et{ImageDataMD5} and $raf->Seek(0,0)) { - $et->ImageDataMD5($raf, undef, 'JXL'); + if ($$et{ImageDataHash} and $raf->Seek(0,0)) { + $et->ImageDataHash($raf, undef, 'JXL'); } return ProcessJXLCodestream($et, \$hdr); } diff --git a/lib/Image/ExifTool/MPF.pm b/lib/Image/ExifTool/MPF.pm index 9d05adeb..f87fb77d 100644 --- a/lib/Image/ExifTool/MPF.pm +++ b/lib/Image/ExifTool/MPF.pm @@ -15,7 +15,7 @@ use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; -$VERSION = '1.14'; +$VERSION = '1.15'; sub ProcessMPImageList($$$); @@ -131,6 +131,7 @@ sub ProcessMPImageList($$$); 0x020002 => 'Multi-frame Disparity', 0x020003 => 'Multi-angle', 0x030000 => 'Baseline MP Primary Image', + 0x040000 => 'Original Preservation Image', # (Exif 3.0) }, }, 4 => { diff --git a/lib/Image/ExifTool/MinoltaRaw.pm b/lib/Image/ExifTool/MinoltaRaw.pm index 1961b3ea..7fa04e60 100644 --- a/lib/Image/ExifTool/MinoltaRaw.pm +++ b/lib/Image/ExifTool/MinoltaRaw.pm @@ -17,7 +17,7 @@ use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Minolta; -$VERSION = '1.18'; +$VERSION = '1.19'; sub ProcessMRW($$;$); sub WriteMRW($$;$); @@ -489,7 +489,7 @@ sub ProcessMRW($$;$) $err and $et->Error("MRW format error", $$et{TIFF_TYPE} eq 'ARW'); } else { $err and $et->Warn("MRW format error"); - $et->ImageDataMD5($raf, undef, 'raw') unless $$et{A100DataOffset}; + $et->ImageDataHash($raf, undef, 'raw') unless $$et{A100DataOffset}; } return $rtnVal; } diff --git a/lib/Image/ExifTool/PNG.pm b/lib/Image/ExifTool/PNG.pm index 0a426ed9..d39c3cef 100644 --- a/lib/Image/ExifTool/PNG.pm +++ b/lib/Image/ExifTool/PNG.pm @@ -36,7 +36,7 @@ use strict; use vars qw($VERSION $AUTOLOAD %stdCase); use Image::ExifTool qw(:DataAccess :Utils); -$VERSION = '1.63'; +$VERSION = '1.64'; sub ProcessPNG_tEXt($$$); sub ProcessPNG_iTXt($$$); @@ -1374,7 +1374,7 @@ sub ProcessPNG($$) my $datCount = 0; my $datBytes = 0; my $fastScan = $et->Options('FastScan'); - my $md5 = $$et{ImageDataMD5}; + my $hash = $$et{ImageDataHash}; my ($n, $sig, $err, $hbuf, $dbuf, $cbuf); my ($wasHdr, $wasEnd, $wasDat, $doTxt, @txtOffset); @@ -1454,7 +1454,7 @@ sub ProcessPNG($$) if ($datCount and $chunk ne $datChunk) { my $s = $datCount > 1 ? 's' : ''; print $out "$fileType $datChunk ($datCount chunk$s, total $datBytes bytes)\n"; - print $out "$$et{INDENT}(ImageDataMD5: $datBytes bytes of $datChunk data)\n" if $md5; + print $out "$$et{INDENT}(ImageDataHash: $datBytes bytes of $datChunk data)\n" if $hash; $datCount = $datBytes = 0; } } @@ -1541,8 +1541,8 @@ sub ProcessPNG($$) } # skip over data chunks if possible/necessary } elsif (not $validate or $len > $chunkSizeLimit) { - if ($md5) { - $et->ImageDataMD5($raf, $len); + if ($hash) { + $et->ImageDataHash($raf, $len); $raf->Read($cbuf, 4) == 4 or $et->Warn('Truncated data'), last; } else { $raf->Seek($len + 4, 1) or $et->Warn('Seek error'), last; @@ -1565,7 +1565,7 @@ sub ProcessPNG($$) $et->Warn("Corrupted $fileType image") unless $wasEnd; last; } - $md5->add($dbuf) if $md5 and $datChunk; # add to MD5 if necessary + $hash->add($dbuf) if $hash and $datChunk; # add to hash if necessary if ($verbose or $validate or ($outfile and not $fastScan)) { # check CRC when in verbose mode (since we don't care about speed) my $crc = CalculateCRC(\$hbuf, undef, 4); diff --git a/lib/Image/ExifTool/PhaseOne.pm b/lib/Image/ExifTool/PhaseOne.pm index 2fa64f0a..eba7349a 100644 --- a/lib/Image/ExifTool/PhaseOne.pm +++ b/lib/Image/ExifTool/PhaseOne.pm @@ -15,7 +15,7 @@ use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; -$VERSION = '1.08'; +$VERSION = '1.09'; sub WritePhaseOne($$$); sub ProcessPhaseOne($$$); @@ -585,7 +585,7 @@ sub ProcessPhaseOne($$$) my $dirLen = $$dirInfo{DirLen} || $$dirInfo{DataLen} - $dirStart; my $binary = $et->Options('Binary'); my $verbose = $et->Options('Verbose'); - my $md5 = $$et{ImageDataMD5}; + my $hash = $$et{ImageDataHash}; my $htmlDump = $$et{HTML_DUMP}; return 0 if $dirLen < 12; @@ -678,16 +678,16 @@ sub ProcessPhaseOne($$$) } } } - if ($md5 and $tagInfo and $$tagInfo{IsImageData}) { + if ($hash and $tagInfo and $$tagInfo{IsImageData}) { my ($pos, $len) = ($valuePtr, $size); while ($len) { my $n = $len > 65536 ? 65536 : $len; my $tmp = substr($$dataPt, $pos, $n); - $md5->add($tmp); + $hash->add($tmp); $len -= $n; $pos += $n; } - $et->VPrint(0, "$$et{INDENT}(ImageDataMD5: $size bytes of PhaseOne:$$tagInfo{Name})\n"); + $et->VPrint(0, "$$et{INDENT}(ImageDataHash: $size bytes of PhaseOne:$$tagInfo{Name})\n"); } my %parms = ( DirName => $ifdType, diff --git a/lib/Image/ExifTool/QuickTime.pm b/lib/Image/ExifTool/QuickTime.pm index fde189c3..73c21bdd 100644 --- a/lib/Image/ExifTool/QuickTime.pm +++ b/lib/Image/ExifTool/QuickTime.pm @@ -447,8 +447,8 @@ my %dupDirOK = ( ipco => 1, '----' => 1 ); my %eeStd = ( stco => 'stbl', co64 => 'stbl', stsz => 'stbl', stz2 => 'stbl', stsc => 'stbl', stts => 'stbl' ); -# atoms required for generating ImageDataMD5 -my %md5Box = ( vide => { %eeStd }, soun => { %eeStd } ); +# atoms required for generating ImageDataHash +my %hashBox = ( vide => { %eeStd }, soun => { %eeStd } ); # boxes and their containers for the various handler types that we want to save # when the ExtractEmbedded is enabled (currently only the 'gps ' container name is @@ -2867,6 +2867,25 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 ); Name => 'AV1Configuration', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::AV1Config' }, }, + clli => { + Name => 'ContentLightLevel', + SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::ContentLightLevel' }, + }, + # ref https://nokiatech.github.io/heif/technical.html + # cclv - Content Color Volume + # mdcv - Mastering Display Color Volume + # rrtp - Required reference types + # crtt - Creation time information + # mdft - Modification time information + # udes - User description + # altt - Accessibility text + # aebr - Auto exposure information + # wbbr - White balance information + # fobr - Focus information + # afbr - Flash exposure information + # dobr - Depth of field information + # pano - Panorama information + # iscl - Image Scaling ); # ref https://aomediacodec.github.io/av1-spec/av1-spec.pdf @@ -3128,6 +3147,16 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 ); }, ); +# ref https://android.googlesource.com/platform/frameworks/av/+/master/media/libstagefright/MPEG4Writer.cpp +%Image::ExifTool::QuickTime::ContentLightLevel = ( + PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, + GROUPS => { 2 => 'Video' }, + FIRST_ENTRY => 0, + FORMAT => 'int16u', + 0 => 'MaxContentLightLevel', + 1 => 'MaxPicAverageLightLevel', +); + %Image::ExifTool::QuickTime::ItemRef = ( PROCESS_PROC => \&ProcessMOV, WRITE_PROC => \&WriteQuickTime, @@ -8787,15 +8816,15 @@ sub HandleItemInfo($) $et->VPrint(0, "$$et{INDENT} [snip $snip bytes]\n") if $snip; } } - # do MD5 checksum of AVIF "av01" and HEIC image data - if ($isImageData{$type} and $$et{ImageDataMD5}) { - my $md5 = $$et{ImageDataMD5}; + # do hash of AVIF "av01" and HEIC image data + if ($isImageData{$type} and $$et{ImageDataHash}) { + my $hash = $$et{ImageDataHash}; my $tot = 0; foreach $extent (@{$$item{Extents}}) { $raf->Seek($$extent[1] + $base, 0) or $et->Warn("Seek error in $type image data"), last; - $tot += $et->ImageDataMD5($raf, $$extent[2], "$type image", 1); + $tot += $et->ImageDataHash($raf, $$extent[2], "$type image", 1); } - $et->VPrint(0, "$$et{INDENT}(ImageDataMD5: $tot bytes of $type data)\n") if $tot; + $et->VPrint(0, "$$et{INDENT}(ImageDataHash: $tot bytes of $type data)\n") if $tot; } next unless $name; # assemble the data for this item @@ -9299,8 +9328,8 @@ sub ProcessMOV($$;$) $$raf{NoBuffer} = 1 if $fast; # disable buffering in FastScan mode my $ee = $$et{OPTIONS}{ExtractEmbedded}; - my $md5 = $$et{ImageDataMD5}; - if ($ee or $md5) { + my $hash = $$et{ImageDataHash}; + if ($ee or $hash) { $unkOpt = $$et{OPTIONS}{Unknown}; require 'Image/ExifTool/QuickTimeStream.pl'; } @@ -9382,7 +9411,7 @@ sub ProcessMOV($$;$) # set flag to store additional information for ExtractEmbedded option my $handlerType = $$et{HandlerType}; if ($eeBox{$handlerType} and $eeBox{$handlerType}{$tag}) { - if ($ee or $md5) { + if ($ee or $hash) { # (there is another 'gps ' box with a track log that doesn't contain offsets) if ($tag ne 'gps ' or $eeBox{$handlerType}{$tag} eq $dirID) { $eeTag = 1; @@ -9394,7 +9423,7 @@ sub ProcessMOV($$;$) } elsif ($ee and $ee > 1 and $eeBox2{$handlerType} and $eeBox2{$handlerType}{$tag}) { $eeTag = 1; $$et{OPTIONS}{Unknown} = 1; - } elsif ($md5 and $md5Box{$handlerType} and $md5Box{$handlerType}{$tag}) { + } elsif ($hash and $hashBox{$handlerType} and $hashBox{$handlerType}{$tag}) { $eeTag = 1; $$et{OPTIONS}{Unknown} = 1; } @@ -9629,7 +9658,7 @@ ItemID: foreach $id (keys %$items) { } if ($tag eq 'stbl') { # process sample data when exiting SampleTable box if extracting embedded - ProcessSamples($et) if $ee or $md5; + ProcessSamples($et) if $ee or $hash; } elsif ($tag eq 'minf') { $$et{HandlerType} = ''; # reset handler type at end of media info box } diff --git a/lib/Image/ExifTool/QuickTimeStream.pl b/lib/Image/ExifTool/QuickTimeStream.pl index 8fd9f51a..32fd893a 100644 --- a/lib/Image/ExifTool/QuickTimeStream.pl +++ b/lib/Image/ExifTool/QuickTimeStream.pl @@ -1128,14 +1128,14 @@ sub Process_text($$$;$) # Inputs: 0) ExifTool ref # Notes: Also accesses ExifTool RAF*, SET_GROUP1, HandlerType, MetaFormat, # ee*, and avcC elements (* = must exist) -# - may be called either due to ExtractEmbedded option, or ImageDataMD5 requested -# - MD5 includes only video and audio data +# - may be called either due to ExtractEmbedded option, or ImageDataHash requested +# - hash includes only video and audio data sub ProcessSamples($) { my $et = shift; my ($raf, $ee) = @$et{qw(RAF ee)}; - my ($i, $buff, $pos, $hdrLen, $hdrFmt, @time, @dur, $oldIndent, $md5); - my ($mdatOffset, $mdatSize); # (for range-checking samples when MD5 is done) + my ($i, $buff, $pos, $hdrLen, $hdrFmt, @time, @dur, $oldIndent, $hash); + my ($mdatOffset, $mdatSize); # (for range-checking samples when hash is done) return unless $ee; delete $$et{ee}; # use only once @@ -1144,22 +1144,22 @@ sub ProcessSamples($) my $type = $$et{HandlerType} || ''; if ($type eq 'vide') { # only process specific types of video streams - $md5 = $$et{ImageDataMD5}; + $hash = $$et{ImageDataHash}; # only process specific video types if ExtractEmbedded was used - # (otherwise we are only here to calculate the audio/video MD5) + # (otherwise we are only here to calculate the audio/video hash) if ($eeOpt) { if ($$ee{avcC}) { $type = 'avcC' } elsif ($$ee{JPEG}) { $type = 'JPEG' } - else { return unless $md5 } + else { return unless $hash } } } elsif ($type eq 'soun') { - $md5 = $$et{ImageDataMD5}; - return unless $md5; + $hash = $$et{ImageDataHash}; + return unless $hash; } else { - return unless $eeOpt; # (don't do MD5 on other types) + return unless $eeOpt; # (don't do hash on other types) } - my $md5size = 0; + my $hashSize = 0; my ($start, $size) = @$ee{qw(start size)}; # # determine sample start offsets from chunk offsets (stco) and sample-to-chunk table (stsc), @@ -1213,7 +1213,7 @@ Sample: for ($i=0; ; ) { ++$iChunk; } @$start == @$size or $et->WarnOnce('Incorrect sample start/size count'), return; - # process as chunks if we are only interested in calculating MD5 + # process as chunks if we are only interested in calculating hash if ($type eq 'soun' or $type eq 'vide') { $start = $stco; $size = \@chunkSize; @@ -1232,7 +1232,7 @@ Sample: for ($i=0; ; ) { $oldIndent = $$et{INDENT}; $$et{INDENT} = ''; } - if ($md5) { + if ($hash) { $mdatSize = $$et{MediaDataSize}; $mdatOffset = $$et{MediaDataOffset} if defined $mdatSize; } @@ -1249,7 +1249,7 @@ Sample: for ($i=0; ; ) { delete $$et{FoundGPSLatitude}; delete $$et{FoundGPSDateTime}; - # range check the sample data for MD5 if necessary + # range check the sample data for hash if necessary my $size = $$size[$i]; if (defined $mdatOffset) { if ($$start[$i] < $mdatOffset) { @@ -1268,9 +1268,9 @@ Sample: for ($i=0; ; ) { next unless $n; $size = $n; } - if ($md5) { - $md5->add($buff); - $md5size += length $buff; + if ($hash) { + $hash->add($buff); + $hashSize += length $buff; } if ($type eq 'avcC') { next if length($buff) <= $hdrLen; @@ -1399,7 +1399,7 @@ Sample: for ($i=0; ; ) { } if ($verbose) { my $str = $type eq 'soun' ? 'Audio' : 'Video'; - $et->VPrint(0, "$$et{INDENT}(ImageDataMD5: $md5size bytes of $str data)\n") if $md5size; + $et->VPrint(0, "$$et{INDENT}(ImageDataHash: $hashSize bytes of $str data)\n") if $hashSize; $$et{INDENT} = $oldIndent; $et->VPrint(0, "--------------------------\n"); } diff --git a/lib/Image/ExifTool/README b/lib/Image/ExifTool/README index a365df39..1286870b 100644 --- a/lib/Image/ExifTool/README +++ b/lib/Image/ExifTool/README @@ -412,7 +412,7 @@ numerical, and generated automatically otherwise. 'IsComposite' - flag set for Composite tags 'IsImageData' - flag set if this is an image data offset to - be included in ImageDataMD5 calculation. Must have an + be included in ImageDataHash calculation. Must have an OffsetPair entry which is the ID of the corresponding size. 'IsOffset' - flag set if the tag represents an offset to some diff --git a/lib/Image/ExifTool/RIFF.pm b/lib/Image/ExifTool/RIFF.pm index 0d43ad6d..cb841df4 100644 --- a/lib/Image/ExifTool/RIFF.pm +++ b/lib/Image/ExifTool/RIFF.pm @@ -30,7 +30,7 @@ use strict; use vars qw($VERSION $AUTOLOAD); use Image::ExifTool qw(:DataAccess :Utils); -$VERSION = '1.64'; +$VERSION = '1.65'; sub ConvertTimecode($); sub ProcessSGLT($$$); @@ -38,7 +38,7 @@ sub ProcessSLLT($$$); sub ProcessLucas($$$); sub WriteRIFF($$); -# RIFF chunks containing image data (to include in ImageDataMD5 digest) +# RIFF chunks containing image data (to include in ImageDataHash digest) my %isImageData = ( LIST_movi => 1, # (AVI: contains ##db, ##dc, ##wb) data => 1, # (WAV) @@ -652,6 +652,7 @@ my %code2charset = ( Name => 'Acidizer', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::Acidizer' }, }, + guan => 'Guano', #forum14831 ); # the maker notes used by some digital cameras @@ -1987,7 +1988,7 @@ sub ProcessRIFF($$) my $unknown = $et->Options('Unknown'); my $validate = $et->Options('Validate'); my $ee = $et->Options('ExtractEmbedded'); - my $md5 = $$et{ImageDataMD5}; + my $hash = $$et{ImageDataHash}; # verify this is a valid RIFF file return 0 unless $raf->Read($buff, 12) == 12; @@ -2045,6 +2046,7 @@ sub ProcessRIFF($$) } else { next; } + last; } # stop when we hit the audio data or AVI index or AVI movie data # --> no more because Adobe Bridge stores XMP after this!! @@ -2067,9 +2069,9 @@ sub ProcessRIFF($$) # (in LIST_movi chunk: ##db = uncompressed DIB, ##dc = compressed DIB, ##wb = audio data) if ($tagInfo or (($verbose or $unknown) and $tag !~ /^(data|idx1|LIST_movi|RIFF|\d{2}(db|dc|wb))$/)) { $raf->Read($buff, $len2) == $len2 or $err=1, last; - if ($md5 and $isImageData{$tag}) { - $md5->add($buff); - $et->VPrint(0, "$$et{INDENT}(ImageDataMD5: '${tag}' chunk, $len2 bytes)\n"); + if ($hash and $isImageData{$tag}) { + $hash->add($buff); + $et->VPrint(0, "$$et{INDENT}(ImageDataHash: '${tag}' chunk, $len2 bytes)\n"); } my $setGroups; if ($tagInfo and ref $tagInfo eq 'HASH' and $$tagInfo{SetGroups}) { @@ -2099,10 +2101,10 @@ sub ProcessRIFF($$) next; # (must not increment $pos) } else { my $rewind; - # do MD5 if required - if ($md5 and $isImageData{$tag}) { + # do hash if required + if ($hash and $isImageData{$tag}) { $rewind = $raf->Tell(); - $et->ImageDataMD5($raf, $len2, "'${tag}' chunk"); + $et->ImageDataHash($raf, $len2, "'${tag}' chunk"); } if ($tag eq 'LIST_movi' and $ee) { $raf->Seek($rewind, 0) or $err = 1, last if $rewind; diff --git a/lib/Image/ExifTool/Shortcuts.pm b/lib/Image/ExifTool/Shortcuts.pm index b17f935b..34e09ac0 100644 --- a/lib/Image/ExifTool/Shortcuts.pm +++ b/lib/Image/ExifTool/Shortcuts.pm @@ -19,7 +19,7 @@ package Image::ExifTool::Shortcuts; use strict; use vars qw($VERSION); -$VERSION = '1.67'; +$VERSION = '1.68'; # this is a special table used to define command-line shortcuts # (documentation Notes may be added for these via %shortcutNotes in BuildTagLookup.pm) @@ -276,6 +276,7 @@ $VERSION = '1.67'; 'FileModifyDate', 'FileName', ], + ImageDataMD5 => [ 'ImageDataHash' ], # (for backward compatibilty) ); #------------------------------------------------------------------------------ diff --git a/lib/Image/ExifTool/SigmaRaw.pm b/lib/Image/ExifTool/SigmaRaw.pm index 45d47143..1c840945 100644 --- a/lib/Image/ExifTool/SigmaRaw.pm +++ b/lib/Image/ExifTool/SigmaRaw.pm @@ -16,7 +16,7 @@ use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Sigma; -$VERSION = '1.30'; +$VERSION = '1.31'; sub ProcessX3FHeader($$$); sub ProcessX3FDirectory($$$); @@ -549,9 +549,9 @@ sub ProcessX3FDirectory($$$) $len -= 28; # ignore all image data but JPEG compressed (version 2.0, type 2, format 18) unless ($buff =~ /^SECi\0\0\x02\0\x02\0\0\0\x12\0\0\0/) { - # do MD5 on non-preview data if requested - if ($$et{ImageDataMD5} and substr($buff,8,1) ne "\x02") { - $et->ImageDataMD5($raf, $len, 'SigmaRaw IMAG'); + # do hash on non-preview data if requested + if ($$et{ImageDataHash} and substr($buff,8,1) ne "\x02") { + $et->ImageDataHash($raf, $len, 'SigmaRaw IMAG'); } next; } diff --git a/lib/Image/ExifTool/Sony.pm b/lib/Image/ExifTool/Sony.pm index 7dbae6d9..2a3c1ee4 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.60'; +$VERSION = '3.61'; sub ProcessSRF($$$); sub ProcessSR2($$$); @@ -1061,7 +1061,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 ); SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010h' }, },{ Name => 'Tag2010i', # ? - Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3A?|7RM4A?|9|9M2)|DSC-(RX10M4|RX100M6|RX100M5A|RX100M7|HX99|RX0M2)|ZV-(1F?|E10))\b/', + Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3A?|7RM4A?|9|9M2)|DSC-(RX10M4|RX100M6|RX100M5A|RX100M7|HX95|HX99|RX0M2)|ZV-(1F?|E10))\b/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010i' }, },{ Name => 'Tag_0x2010', @@ -1137,7 +1137,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 ); # FocusMode for SLT/HV/ILCA and NEX/ILCE; doesn't seem to apply to DSC models (always 0) # from 2018: at least DSC-RX10M4 and RX100M6 also use this tag Name => 'FocusMode', - Condition => '($$self{Model} !~ /^DSC-/) or ($$self{Model} =~ /^DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX99|RX0M2)/)', + Condition => '($$self{Model} !~ /^DSC-/) or ($$self{Model} =~ /^DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX95|HX99|RX0M2)/)', Writable => 'int8u', Priority => 0, PrintConv => { @@ -1169,7 +1169,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 ); }, },{ Name => 'AFAreaModeSetting', - Condition => '$$self{Model} =~ /^(NEX-|ILCE-|ILME-|ZV-E|DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX99|RX0M2))/', + Condition => '$$self{Model} =~ /^(NEX-|ILCE-|ILME-|ZV-|DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX95|HX99|RX0M2))/', Notes => 'NEX, ILCE and some DSC models', RawConv => '$$self{AFAreaILCE} = $val', DataMember => 'AFAreaILCE', @@ -1205,7 +1205,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 ); # observed values in range (0 0) to (640 480), with center (320 240) often seen # for NEX-5R/6, positions appear to be in an 11x9 grid Name => 'FlexibleSpotPosition', - Condition => '$$self{Model} =~ /^(NEX-|ILCE-|ILME-|ZV-E|DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX99|RX0M2))/', + Condition => '$$self{Model} =~ /^(NEX-|ILCE-|ILME-|ZV-|DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX95|HX99|RX0M2))/', Writable => 'int16u', Count => 2, Notes => q{ @@ -1365,7 +1365,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 ); # from 2018: at least DSC-RX10M4 and RX100M6 also use this tag 0x2021 => { #JR Name => 'AFTracking', - Condition => '($$self{Model} !~ /^DSC-/) or ($$self{Model} =~ /^DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX99|RX0M2)/)', + Condition => '($$self{Model} !~ /^DSC-/) or ($$self{Model} =~ /^DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX95|HX99|RX0M2)/)', Writable => 'int8u', PrintConv => { 0 => 'Off', @@ -2070,6 +2070,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 ); 390 => 'ILCE-7RM5', #IB 391 => 'ILME-FX30', #JR 393 => 'ZV-E1', #JR + 395 => 'ZV-1M2', #JR }, }, 0xb020 => { #2 @@ -6182,6 +6183,7 @@ my %pictureProfile2010 = ( 31 => 'Gamma S-Log3 (PP8 or PP9)', #14 33 => 'Gamma HLG2 (PP10)', #14 34 => 'Gamma HLG3', #IB + 36 => 'Off', 37 => 'FL', 38 => 'VV2', 39 => 'IN', @@ -6637,8 +6639,30 @@ my %isoSetting2010 = ( }, #0x1914 => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x1918 => { Name => 'SonyImageHeight', Format => 'int16u' }, + 0x192c => { + Name => 'AspectRatio', + Condition => '$$self{Model} !~ /^(DSC-RX100|Stellar)\b/', + PrintConv => { + 0 => '16:9', + 1 => '4:3', + 2 => '3:2', + 3 => '1:1', + 5 => 'Panorama', + }, + }, #0x192e => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x1930 => { Name => 'SonyImageHeight', Format => 'int16u' }, + 0x1a88 => { + Name => 'AspectRatio', + Condition => '$$self{Model} =~ /^(DSC-RX100|Stellar)\b/', + PrintConv => { + 0 => '16:9', + 1 => '4:3', + 2 => '3:2', + 3 => '1:1', + 5 => 'Panorama', + }, + }, ); %Image::ExifTool::Sony::Tag2010f = ( #JR @@ -6714,6 +6738,16 @@ my %isoSetting2010 = ( }, #0x1914 => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x1918 => { Name => 'SonyImageHeight', Format => 'int16u' }, + 0x192c => { + Name => 'AspectRatio', + PrintConv => { + 0 => '16:9', + 1 => '4:3', + 2 => '3:2', + 3 => '1:1', + 5 => 'Panorama', + }, + }, #0x192e => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x1930 => { Name => 'SonyImageHeight', Format => 'int16u' }, ); @@ -6845,6 +6879,16 @@ my %isoSetting2010 = ( }, # 0x1940 => { Name => 'SonyImageWidth', Format => 'int16u' }, # 0x1944 => { Name => 'SonyImageHeight', Format => 'int16u' }, + 0x1958 => { + Name => 'AspectRatio', + PrintConv => { + 0 => '16:9', + 1 => '4:3', + 2 => '3:2', + 3 => '1:1', + 5 => 'Panorama', + }, + }, # 0x195a => { Name => 'SonyImageWidth', Format => 'int16u' }, # 0x195c => { Name => 'SonyImageHeight', Format => 'int16u' }, ); @@ -6982,6 +7026,16 @@ my %isoSetting2010 = ( Condition => '$$self{Model} !~ /^DSC-/', PrintConv => { 11 => '11 (APS-C)', 16 => '16 (Full-frame)'}, }, + 0x192c => { + Name => 'AspectRatio', + PrintConv => { + 0 => '16:9', + 1 => '4:3', + 2 => '3:2', + 3 => '1:1', + 5 => 'Panorama', + }, + }, # 0x1970 => { Name => 'SonyImageWidth', Format => 'int16u' }, # 0x1974 => { Name => 'SonyImageHeight', Format => 'int16u' }, # 0x198a => { Name => 'SonyImageWidth', Format => 'int16u' }, @@ -7113,6 +7167,16 @@ my %isoSetting2010 = ( Condition => '$$self{Model} !~ /^DSC-/', PrintConv => { 11 => '11 (APS-C)', 16 => '16 (Full-frame)'}, }, + 0x188c => { + Name => 'AspectRatio', + PrintConv => { + 0 => '16:9', + 1 => '4:3', + 2 => '3:2', + 3 => '1:1', + 5 => 'Panorama', + }, + }, ); %Image::ExifTool::Sony::Tag202a = ( @@ -8273,6 +8337,30 @@ my %isoSetting2010 = ( Format => 'int8u', PrintConv => 'sprintf("20%.2d", $val)', }, + 0x0133 => { + Name => 'ShutterType', + Condition => '$$self{Model} =~ /^(DSC-(HX350|HX400V|HX60V|HX80|HX90|HX90V|QX30|RX10|RX10M2|RX10M3|RX100M3|RX100M4))\b/', + PrintConv => { + 7 => 'Electronic', + 23 => 'Mechanical', + }, + }, + 0x0139 => { + Name => 'ShutterType', + Condition => '$$self{Model} =~ /^(DSC-(HX95|HX99|RX0|RX0M2|RX10M4|RX100M5|RX100M5A|RX100M6))\b/', + PrintConv => { + 7 => 'Electronic', + 23 => 'Mechanical', + }, + }, + 0x013f => { + Name => 'ShutterType', + Condition => '$$self{Model} =~ /^(DSC-RX100M7|ZV-(1|1F|1M2))\b/', + PrintConv => { + 7 => 'Electronic', + 23 => 'Mechanical', + }, + }, ); %Image::ExifTool::Sony::Tag9401 = ( # JR @@ -8284,7 +8372,7 @@ my %isoSetting2010 = ( FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, DATAMEMBER => [ 0 ], - IS_SUBDIR => [ 0x03e2, 0x044e, 0x0498, 0x049d, 0x04a1, 0x04a2, 0x059d, 0x0634, 0x0636, 0x064c, 0x0653, 0x0678, 0x06b8, 0x06de, 0x06e7 ], + IS_SUBDIR => [ 0x03e2, 0x044e, 0x0498, 0x049d, 0x04a1, 0x04a2, 0x04ba, 0x059d, 0x0634, 0x0636, 0x064c, 0x0653, 0x0678, 0x06b8, 0x06de, 0x06e7 ], 0x0000 => { Name => 'Ver9401', Hidden => 1, RawConv => '$$self{Ver9401} = $val; $$self{OPTIONS}{Unknown}<2 ? undef : $val' }, 0x03e2 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 181', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } }, @@ -8292,7 +8380,8 @@ my %isoSetting2010 = ( 0x0498 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 148', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } }, 0x049d => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 167', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } }, 0x04a1 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(160|164)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } }, - 0x04a2 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(152|154|155)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } }, + 0x04a2 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(152|154|155)/ and $$self{Model} !~ /^ZV-1M2/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } }, + 0x04ba => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 155 and $$self{Model} =~ /^ZV-1M2/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } }, 0x059d => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(144|146)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } }, 0x0634 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 68', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } }, 0x0636 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(73|74)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } }, @@ -8690,6 +8779,11 @@ my %isoSetting2010 = ( 10 => 'Night View/Portrait', 11 => 'Autumn Leaves', 13 => 'Sepia', + 15 => 'FL', + 16 => 'VV2', + 17 => 'IN', + 18 => 'SH', + 255 => 'Off', }, }, 0x0052 => { diff --git a/lib/Image/ExifTool/TagLookup.pm b/lib/Image/ExifTool/TagLookup.pm index 5e417cc0..93ae8363 100644 --- a/lib/Image/ExifTool/TagLookup.pm +++ b/lib/Image/ExifTool/TagLookup.pm @@ -537,9 +537,11 @@ my @tableList = ( 'Image::ExifTool::XMP::extensis', 'Image::ExifTool::XMP::fpv', 'Image::ExifTool::XMP::hdr', + 'Image::ExifTool::XMP::hdrgm', 'Image::ExifTool::XMP::ics', 'Image::ExifTool::XMP::iptcCore', 'Image::ExifTool::XMP::iptcExt', + 'Image::ExifTool::XMP::panorama', 'Image::ExifTool::XMP::pdf', 'Image::ExifTool::XMP::photoshop', 'Image::ExifTool::XMP::pmi', @@ -564,15 +566,15 @@ my @tableList = ( # lookup for all writable tags my %tagLookup = ( 'aberrationcorrectiondistance' => { 109 => 0x69 }, - 'about' => { 515 => 'about' }, - 'aboutcvterm' => { 507 => 'AboutCvTerm' }, - 'aboutcvtermcvid' => { 507 => [\'AboutCvTerm','AboutCvTermCvId'] }, - 'aboutcvtermid' => { 507 => [\'AboutCvTerm','AboutCvTermCvTermId'] }, - 'aboutcvtermname' => { 507 => [\'AboutCvTerm','AboutCvTermCvTermName'] }, - 'aboutcvtermrefinedabout' => { 507 => [\'AboutCvTerm','AboutCvTermCvTermRefinedAbout'] }, + 'about' => { 517 => 'about' }, + 'aboutcvterm' => { 508 => 'AboutCvTerm' }, + 'aboutcvtermcvid' => { 508 => [\'AboutCvTerm','AboutCvTermCvId'] }, + 'aboutcvtermid' => { 508 => [\'AboutCvTerm','AboutCvTermCvTermId'] }, + 'aboutcvtermname' => { 508 => [\'AboutCvTerm','AboutCvTermCvTermName'] }, + 'aboutcvtermrefinedabout' => { 508 => [\'AboutCvTerm','AboutCvTermCvTermRefinedAbout'] }, 'absolutealtitude' => { 116 => 'AbsoluteAltitude' }, - 'abspeakaudiofilepath' => { 521 => 'absPeakAudioFilePath' }, - 'academicfield' => { 511 => 'academicField' }, + 'abspeakaudiofilepath' => { 523 => 'absPeakAudioFilePath' }, + 'academicfield' => { 513 => 'academicField' }, 'acceleration' => { 119 => 0x9404, 501 => 'Acceleration' }, 'accelerationtracking' => { 84 => 0x518 }, 'accelerationvector' => { 1 => 0x8 }, @@ -590,18 +592,18 @@ my %tagLookup = ( 'adaptervoltage' => { 138 => 0x407 }, 'addaspectratioinfo' => { 84 => 0x80e }, 'addiptcinformation' => { 84 => 0x815 }, - 'additionalmodelinformation' => { 507 => 'AddlModelInfo' }, + 'additionalmodelinformation' => { 508 => 'AddlModelInfo' }, 'addoriginaldecisiondata' => { 84 => 0x80f, 85 => 0x11, 86 => 0x13, 89 => 0x14 }, 'address' => { 161 => 'Address' }, 'adjustmentmode' => { 412 => 0x15 }, 'adlbracketingstep' => { 197 => 0x17 }, 'adlbracketingtype' => { 197 => 0x18 }, 'adobe' => { 120 => 'Adobe' }, - 'adultcontentwarning' => { 322 => 'AdultContentWarning', 514 => 'adultContentWarning' }, + 'adultcontentwarning' => { 322 => 'AdultContentWarning', 516 => 'adultContentWarning' }, 'advancedfilter' => { 127 => 0x1201 }, 'advancedraw' => { 287 => 0x76a43203 }, 'advancedscenetype' => { 335 => 0x3d }, - 'advisory' => { 519 => 'Advisory' }, + 'advisory' => { 521 => 'Advisory' }, 'ae_iso' => { 343 => 0x2, 344 => 0x4, 345 => 0x12 }, 'aeaperture' => { 343 => 0x1, 344 => 0x3, 345 => 0x11 }, 'aeaperturesteps' => { 343 => 0x8, 344 => 0xb }, @@ -909,9 +911,9 @@ my %tagLookup = ( 'aftrackingsensitivity' => { 2 => 0x2 }, 'aftype' => { 415 => 0x2 }, 'afwithshutter' => { 422 => 0x2a }, - 'aggregateissuenumber' => { 511 => 'aggregateIssueNumber' }, - 'aggregationtype' => { 511 => 'aggregationType' }, - 'agreement' => { 514 => 'agreement' }, + 'aggregateissuenumber' => { 513 => 'aggregateIssueNumber' }, + 'aggregationtype' => { 513 => 'aggregationType' }, + 'agreement' => { 516 => 'agreement' }, 'ah2greeninterpolationthreshold' => { 138 => 0xe4e }, 'airplanemode' => { 238 => 0x624, 239 => 0x654 }, 'aiservocontinuousshooting' => { 83 => 0x15 }, @@ -923,23 +925,23 @@ my %tagLookup = ( 'aiservotrackingmethod' => { 84 => 0x504 }, 'aiservotrackingsensitivity' => { 83 => 0x14, 84 => 0x502 }, 'aisubjecttrackingmode' => { 312 => 0x309 }, - 'album' => { 387 => ['albm',"\xa9alb"], 389 => 'album', 395 => ['albm',"\xa9alb"], 521 => 'album' }, + 'album' => { 387 => ['albm',"\xa9alb"], 389 => 'album', 395 => ['albm',"\xa9alb"], 523 => 'album' }, 'albumartist' => { 179 => 'WM/AlbumArtist', 387 => 'aART', 395 => 'albr' }, 'albumcoverurl' => { 179 => 'WM/AlbumCoverURL' }, 'albumtitle' => { 179 => 'WM/AlbumTitle' }, 'albumtitleid' => { 387 => 'atID' }, 'alreadyapplied' => { 494 => 'AlreadyApplied', 496 => 'AlreadyApplied' }, - 'alternatetitle' => { 511 => 'alternateTitle' }, - 'alternatetitlea-lang' => { 511 => [\'alternateTitle','alternateTitleA-lang'] }, - 'alternatetitlea-platform' => { 511 => [\'alternateTitle','alternateTitleA-platform'] }, - 'alternatetitletext' => { 511 => [\'alternateTitle','alternateTitleText'] }, + 'alternatetitle' => { 513 => 'alternateTitle' }, + 'alternatetitlea-lang' => { 513 => [\'alternateTitle','alternateTitleA-lang'] }, + 'alternatetitlea-platform' => { 513 => [\'alternateTitle','alternateTitleA-platform'] }, + 'alternatetitletext' => { 513 => [\'alternateTitle','alternateTitleText'] }, 'altitude' => { 196 => 0x6 }, - 'alttapename' => { 521 => 'altTapeName' }, - 'alttextaccessibility' => { 506 => 'AltTextAccessibility' }, - 'alttimecode' => { 521 => 'altTimecode' }, - 'alttimecodetimeformat' => { 521 => [\'altTimecode','altTimecodeTimeFormat'] }, - 'alttimecodetimevalue' => { 521 => [\'altTimecode','altTimecodeTimeValue'] }, - 'alttimecodevalue' => { 521 => [\'altTimecode','altTimecodeValue'] }, + 'alttapename' => { 523 => 'altTapeName' }, + 'alttextaccessibility' => { 507 => 'AltTextAccessibility' }, + 'alttimecode' => { 523 => 'altTimecode' }, + 'alttimecodetimeformat' => { 523 => [\'altTimecode','altTimecodeTimeFormat'] }, + 'alttimecodetimevalue' => { 523 => [\'altTimecode','altTimecodeTimeValue'] }, + 'alttimecodevalue' => { 523 => [\'altTimecode','altTimecodeValue'] }, 'ambienceselection' => { 4 => 0x1 }, 'ambientinfrared' => { 398 => 0x5c }, 'ambientlight' => { 398 => 0x5e }, @@ -978,7 +980,7 @@ my %tagLookup = ( 'approvedby' => { 502 => 'ApprovedBy' }, 'approximatefnumber' => { 330 => 0x313, 337 => 0x3406 }, 'approximatefocusdistance' => { 491 => 'ApproximateFocusDistance' }, - 'appversion' => { 505 => 'AppVersion' }, + 'appversion' => { 506 => 'AppVersion' }, 'aps-csizecapture' => { 454 => 0x114, 455 => [0x114,0x1eb,0x1ee,0x21a,0x21c] }, 'aquahsl' => { 103 => 0x20914 }, 'armidentifier' => { 132 => 0x78 }, @@ -988,30 +990,30 @@ my %tagLookup = ( 'artdirector' => { 387 => "\xa9ard" }, 'artfilter' => { 312 => 0x529 }, 'artfiltereffect' => { 312 => 0x52f }, - 'artist' => { 119 => 0x13b, 325 => 'Artist', 340 => 0x13b, 370 => 0x22e, 387 => "\xa9ART", 389 => 'artist', 395 => "\xa9ART", 517 => 'Artist', 521 => 'artist' }, + 'artist' => { 119 => 0x13b, 325 => 'Artist', 340 => 0x13b, 370 => 0x22e, 387 => "\xa9ART", 389 => 'artist', 395 => "\xa9ART", 519 => 'Artist', 523 => 'artist' }, 'artmode' => { 113 => 0x301b }, 'artmodeparameters' => { 113 => 0x310b }, 'artwork' => { 389 => 'artwork' }, - 'artworkcircadatecreated' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAOCircaDateCreated'] }, - 'artworkcontentdescription' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAOContentDescription'] }, - 'artworkcontributiondescription' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAOContributionDescription'] }, - 'artworkcopyrightnotice' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAOCopyrightNotice'] }, - 'artworkcopyrightownerid' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAOCurrentCopyrightOwnerId'] }, - 'artworkcopyrightownername' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAOCurrentCopyrightOwnerName'] }, - 'artworkcreator' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAOCreator'] }, - 'artworkcreatorid' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAOCreatorId'] }, - 'artworkdatecreated' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAODateCreated'] }, - 'artworklicensorid' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAOCurrentLicensorId'] }, - 'artworklicensorname' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAOCurrentLicensorName'] }, - 'artworkorobject' => { 507 => 'ArtworkOrObject' }, - 'artworkphysicaldescription' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAOPhysicalDescription'] }, - 'artworksource' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAOSource'] }, - 'artworksourceinventoryno' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAOSourceInvNo'] }, - 'artworksourceinvurl' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAOSourceInvURL'] }, - 'artworkstyleperiod' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAOStylePeriod'] }, - 'artworktitle' => { 507 => [\'ArtworkOrObject','ArtworkOrObjectAOTitle'] }, + 'artworkcircadatecreated' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAOCircaDateCreated'] }, + 'artworkcontentdescription' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAOContentDescription'] }, + 'artworkcontributiondescription' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAOContributionDescription'] }, + 'artworkcopyrightnotice' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAOCopyrightNotice'] }, + 'artworkcopyrightownerid' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAOCurrentCopyrightOwnerId'] }, + 'artworkcopyrightownername' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAOCurrentCopyrightOwnerName'] }, + 'artworkcreator' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAOCreator'] }, + 'artworkcreatorid' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAOCreatorId'] }, + 'artworkdatecreated' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAODateCreated'] }, + 'artworklicensorid' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAOCurrentLicensorId'] }, + 'artworklicensorname' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAOCurrentLicensorName'] }, + 'artworkorobject' => { 508 => 'ArtworkOrObject' }, + 'artworkphysicaldescription' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAOPhysicalDescription'] }, + 'artworksource' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAOSource'] }, + 'artworksourceinventoryno' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAOSourceInvNo'] }, + 'artworksourceinvurl' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAOSourceInvURL'] }, + 'artworkstyleperiod' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAOStylePeriod'] }, + 'artworktitle' => { 508 => [\'ArtworkOrObject','ArtworkOrObjectAOTitle'] }, 'aspectframe' => { 316 => 0x1113 }, - 'aspectratio' => { 5 => 0x0, 316 => 0x1112, 370 => 0x80, 422 => 0x55, 423 => 0x55, 424 => 0xa }, + 'aspectratio' => { 5 => 0x0, 316 => 0x1112, 370 => 0x80, 422 => 0x55, 423 => 0x55, 424 => 0xa, 448 => [0x192c,0x1a88], 449 => 0x192c, 450 => 0x1958, 451 => 0x192c, 452 => 0x188c }, 'assetid' => { 484 => 'AssetID' }, 'asshoticcprofile' => { 119 => 0xc68f }, 'asshotneutral' => { 119 => 0xc628 }, @@ -1039,29 +1041,29 @@ my %tagLookup = ( 'attributionname' => { 492 => 'attributionName' }, 'attributionurl' => { 492 => 'attributionURL' }, 'audio' => { 335 => 0x20 }, - 'audiobitrate' => { 67 => 0x6c, 507 => 'audioBitRate' }, - 'audiobitratemode' => { 507 => 'audioBitRateMode' }, - 'audiobitspersample' => { 507 => 'audioBitsPerSample' }, + 'audiobitrate' => { 67 => 0x6c, 508 => 'audioBitRate' }, + 'audiobitratemode' => { 508 => 'audioBitRateMode' }, + 'audiobitspersample' => { 508 => 'audioBitsPerSample' }, 'audiobutton' => { 310 => 0x17b }, 'audiobuttonplaybackmode' => { 310 => 0x1b9 }, - 'audiochannelcount' => { 507 => 'audioChannelCount' }, + 'audiochannelcount' => { 508 => 'audioChannelCount' }, 'audiochannels' => { 67 => 0x70 }, - 'audiochanneltype' => { 521 => 'audioChannelType' }, + 'audiochanneltype' => { 523 => 'audioChannelType' }, 'audiocompression' => { 84 => 0x816, 155 => 'Compression' }, - 'audiocompressor' => { 521 => 'audioCompressor' }, + 'audiocompressor' => { 523 => 'audioCompressor' }, 'audiodata' => { 476 => 'Data' }, 'audioduration' => { 131 => 0x99 }, 'audiogain' => { 389 => 'player.movie.audio.gain' }, 'audiomimetype' => { 476 => 'Mime' }, - 'audiomoddate' => { 521 => 'audioModDate' }, + 'audiomoddate' => { 523 => 'audioModDate' }, 'audiooutcue' => { 131 => 0x9a }, - 'audiosamplerate' => { 67 => 0x6e, 521 => 'audioSampleRate' }, - 'audiosampletype' => { 521 => 'audioSampleType' }, + 'audiosamplerate' => { 67 => 0x6e, 523 => 'audioSampleRate' }, + 'audiosampletype' => { 523 => 'audioSampleType' }, 'audiosamplingrate' => { 131 => 0x97 }, 'audiosamplingresolution' => { 131 => 0x98 }, 'audiotype' => { 131 => 0x96 }, - 'author' => { 157 => 'Author', 321 => 'Author', 325 => 'Author', 386 => 'Author', 387 => ['auth',"\xa9aut"], 389 => 'author', 395 => 'auth', 489 => 'author', 508 => 'Author', 519 => 'Author' }, - 'authorsposition' => { 509 => 'AuthorsPosition' }, + 'author' => { 157 => 'Author', 321 => 'Author', 325 => 'Author', 386 => 'Author', 387 => ['auth',"\xa9aut"], 389 => 'author', 395 => 'auth', 489 => 'author', 510 => 'Author', 521 => 'Author' }, + 'authorsposition' => { 511 => 'AuthorsPosition' }, 'authorurl' => { 179 => 'WM/AuthorURL' }, 'autoafpointcolortracking' => { 84 => 0x51c }, 'autoafpointseleositraf' => { 2 => 0xa }, @@ -1105,7 +1107,7 @@ my %tagLookup = ( 'azimuth' => { 165 => 'Azimuth' }, 'babyage' => { 335 => [0x8010,0x33] }, 'babyname' => { 335 => 0x66 }, - 'backgroundalpha' => { 516 => 'bgalpha' }, + 'backgroundalpha' => { 518 => 'bgalpha' }, 'balance' => { 389 => 'player.movie.audio.balance' }, 'baseexposurecompensation' => { 351 => 0x15 }, 'baseiso' => { 77 => 0x2, 97 => 0x101c, 138 => 0x903, 337 => 0x312a, 466 => 0x6 }, @@ -1117,7 +1119,8 @@ my %tagLookup = ( 'baselineexposureoffset' => { 119 => 0xc7a5 }, 'baselinenoise' => { 119 => 0xc62b }, 'baselinesharpness' => { 119 => 0xc62c }, - 'baseurl' => { 519 => 'BaseURL' }, + 'baserenditionishdr' => { 505 => 'BaseRenditionIsHDR' }, + 'baseurl' => { 521 => 'BaseURL' }, 'bass' => { 389 => 'player.movie.audio.bass' }, 'batterylevel' => { 335 => 0x38, 422 => 0x51, 426 => 0xc, 427 => 0x4, 428 => 0x4, 467 => 0x7 }, 'batterylevelgrip1' => { 467 => 0x6 }, @@ -1134,12 +1137,12 @@ my %tagLookup = ( 'bayergreensplit' => { 119 => 0xc62d }, 'bayerpattern' => { 137 => 0xf902, 188 => 0x17 }, 'beatsperminute' => { 387 => 'tmpo' }, - 'beatspliceparams' => { 521 => 'beatSpliceParams' }, - 'beatspliceparamsriseindecibel' => { 521 => [\'beatSpliceParams','beatSpliceParamsRiseInDecibel'] }, - 'beatspliceparamsriseintimeduration' => { 521 => [\'beatSpliceParams','beatSpliceParamsRiseInTimeDuration'] }, - 'beatspliceparamsriseintimedurationscale' => { 521 => [\'beatSpliceParams','beatSpliceParamsRiseInTimeDurationScale'] }, - 'beatspliceparamsriseintimedurationvalue' => { 521 => [\'beatSpliceParams','beatSpliceParamsRiseInTimeDurationValue'] }, - 'beatspliceparamsusefilebeatsmarker' => { 521 => [\'beatSpliceParams','beatSpliceParamsUseFileBeatsMarker'] }, + 'beatspliceparams' => { 523 => 'beatSpliceParams' }, + 'beatspliceparamsriseindecibel' => { 523 => [\'beatSpliceParams','beatSpliceParamsRiseInDecibel'] }, + 'beatspliceparamsriseintimeduration' => { 523 => [\'beatSpliceParams','beatSpliceParamsRiseInTimeDuration'] }, + 'beatspliceparamsriseintimedurationscale' => { 523 => [\'beatSpliceParams','beatSpliceParamsRiseInTimeDurationScale'] }, + 'beatspliceparamsriseintimedurationvalue' => { 523 => [\'beatSpliceParams','beatSpliceParamsRiseInTimeDurationValue'] }, + 'beatspliceparamsusefilebeatsmarker' => { 523 => [\'beatSpliceParams','beatSpliceParamsUseFileBeatsMarker'] }, 'beep' => { 294 => '13.1', 295 => '5.4', 296 => '0.1', 299 => '2.1', 300 => '3.1', 301 => '3.1', 303 => '10.1', 305 => '0.1', 307 => '5.5', 309 => '4.1' }, 'beeppitch' => { 304 => '3.1' }, 'beepvolume' => { 304 => '4.5' }, @@ -1147,7 +1150,7 @@ my %tagLookup = ( 'bestshotmode' => { 113 => 0x3007 }, 'bitdepth' => { 162 => 'BitDepth', 188 => 0x11, 254 => 0x41 }, 'bitspercomponent' => { 133 => 0x87 }, - 'bitspersample' => { 119 => 0x102, 340 => 0xa, 517 => 'BitsPerSample' }, + 'bitspersample' => { 119 => 0x102, 340 => 0xa, 519 => 'BitsPerSample' }, 'blackacquirerows' => { 138 => 0x18ba }, 'blacklevel' => { 119 => [0x7310,0xc61a], 206 => 0x20, 233 => 0x3d, 317 => [0x401,0x1012], 379 => 0x21d, 442 => [0x7300,0x7310] }, 'blacklevel2' => { 316 => 0x600, 320 => 0x600 }, @@ -1168,8 +1171,8 @@ my %tagLookup = ( 'blacksadj' => { 470 => 0x9018 }, 'bleachbypasstoning' => { 370 => 0x7f }, 'blockshotafresponse' => { 297 => '1.5', 298 => '1.5', 308 => '1.5', 310 => 0x7 }, - 'blogtitle' => { 511 => 'blogTitle' }, - 'blogurl' => { 511 => 'blogURL' }, + 'blogtitle' => { 513 => 'blogTitle' }, + 'blogurl' => { 513 => 'blogURL' }, 'bluebalance' => { 317 => 0x1018, 340 => 0x12, 370 => 0x1b }, 'bluecurvelimits' => { 108 => 0x1fe }, 'bluecurvepoints' => { 107 => 0x79, 108 => 0x1d4 }, @@ -1189,7 +1192,7 @@ my %tagLookup = ( 'bodyfirmware' => { 403 => 0x0 }, 'bodyfirmwareversion' => { 313 => 0x104, 314 => 0x100, 317 => 0x104 }, 'bodyserialnumber' => { 403 => 0x10 }, - 'bookedition' => { 511 => 'bookEdition' }, + 'bookedition' => { 513 => 'bookEdition' }, 'bootloaderversion' => { 397 => 0x26 }, 'bracketincrement' => { 238 => 0x21a, 239 => 0x22e }, 'bracketmode' => { 57 => 0x3 }, @@ -1222,7 +1225,7 @@ my %tagLookup = ( 'bwmode' => { 317 => 0x203 }, 'by-line' => { 131 => 0x50 }, 'by-linetitle' => { 131 => 0x55 }, - 'bytecount' => { 511 => 'byteCount' }, + 'bytecount' => { 513 => 'byteCount' }, 'c14configuration' => { 138 => 0x1964 }, 'cacheversion' => { 119 => 0xc7aa }, 'calibratedfocallength' => { 116 => 'CalibratedFocalLength' }, @@ -1236,7 +1239,7 @@ my %tagLookup = ( 'calibrationversion' => { 138 => 0x9c6 }, 'callforimage' => { 484 => 'CallForImage' }, 'camera' => { 473 => [\'Cameras','CamerasCamera'] }, - 'cameraangle' => { 395 => 'angl', 521 => 'cameraAngle' }, + 'cameraangle' => { 395 => 'angl', 523 => 'cameraAngle' }, 'cameraappinfo' => { 473 => [\'Cameras','CamerasCameraAppInfo'] }, 'cameraappinfoapplication' => { 473 => [\'Cameras','CamerasCameraAppInfoApplication'] }, 'cameraappinfoitemuri' => { 473 => [\'Cameras','CamerasCameraAppInfoItemURI'] }, @@ -1278,6 +1281,7 @@ my %tagLookup = ( 'camerae-mountversion' => { 469 => 0xb }, 'cameraelevationangle' => { 119 => 0x9405, 501 => 'CameraElevationAngle' }, 'camerafilename' => { 484 => 'CameraFilename' }, + 'camerafirmware' => { 119 => 0xa439 }, 'cameraid' => { 317 => 0x209, 395 => 'cmid', 411 => 0x209 }, 'cameraidentifier' => { 389 => 'camera.identifier' }, 'cameraimage' => { 473 => [\'Cameras','CamerasCameraImage'] }, @@ -1295,18 +1299,18 @@ my %tagLookup = ( 'cameraimagingmodelprincipalpointy' => { 473 => [\'Cameras','CamerasCameraImagingModelPrincipalPointY'] }, 'cameraimagingmodelskew' => { 473 => [\'Cameras','CamerasCameraImagingModelSkew'] }, 'cameraiso' => { 34 => 0x10 }, - 'cameralabel' => { 119 => 0xc7a1, 521 => 'cameraLabel' }, + 'cameralabel' => { 119 => 0xc7a1, 523 => 'cameraLabel' }, 'cameralightestimate' => { 473 => [\'Cameras','CamerasCameraLightEstimate'] }, 'cameralightestimatecolorcorrectionb' => { 473 => [\'Cameras','CamerasCameraLightEstimateColorCorrectionB'] }, 'cameralightestimatecolorcorrectiong' => { 473 => [\'Cameras','CamerasCameraLightEstimateColorCorrectionG'] }, 'cameralightestimatecolorcorrectionr' => { 473 => [\'Cameras','CamerasCameraLightEstimateColorCorrectionR'] }, 'cameralightestimatepixelintensity' => { 473 => [\'Cameras','CamerasCameraLightEstimatePixelIntensity'] }, 'cameramakemodel' => { 484 => 'CameraMakeModel' }, - 'cameramodel' => { 379 => 0x410, 521 => 'cameraModel' }, + 'cameramodel' => { 379 => 0x410, 523 => 'cameraModel' }, 'cameramodelid' => { 176 => 'CameraModelID' }, 'cameramodelrestriction' => { 494 => 'CameraModelRestriction', 496 => 'CameraModelRestriction' }, 'cameramotion' => { 389 => 'direction.motion' }, - 'cameramove' => { 521 => 'cameraMove' }, + 'cameramove' => { 523 => 'cameraMove' }, 'cameraorientation' => { 7 => 0x30, 9 => 0x7d, 11 => 0x30, 13 => 0x35, 14 => 0x30, 15 => 0x30, 16 => 0x31, 17 => 0x31, 18 => 0x35, 19 => 0x27, 20 => 0x31, 21 => 0x7d, 22 => 0x38, 23 => [0x36,0x3a], 24 => 0x7d, 25 => 0x83, 26 => 0x84, 27 => 0x96, 28 => 0x35, 29 => 0x96, 335 => 0x8f, 374 => 0x1, 379 => 0x100, 428 => [0x16,0x18], 457 => 0x28, 458 => 0x24, 459 => 0x29 }, 'cameraowner' => { 141 => 0xc353 }, 'cameraparameters' => { 317 => 0x2050 }, @@ -1327,29 +1331,29 @@ my %tagLookup = ( 'cameraposetimestamp' => { 473 => [\'Cameras','CamerasCameraPoseTimestamp'] }, 'cameraprofile' => { 494 => 'CameraProfile', 496 => 'CameraProfile' }, 'cameraprofiledigest' => { 494 => 'CameraProfileDigest', 496 => 'CameraProfileDigest' }, - 'cameraprofiles' => { 509 => 'CameraProfiles' }, - 'cameraprofilesaperturevalue' => { 509 => [\'CameraProfiles','CameraProfilesApertureValue'] }, - 'cameraprofilesauthor' => { 509 => [\'CameraProfiles','CameraProfilesAuthor'] }, - 'cameraprofilesautoscale' => { 509 => [\'CameraProfiles','CameraProfilesAutoScale'] }, - 'cameraprofilescameraprettyname' => { 509 => [\'CameraProfiles','CameraProfilesCameraPrettyName'] }, - 'cameraprofilescamerarawprofile' => { 509 => [\'CameraProfiles','CameraProfilesCameraRawProfile'] }, - 'cameraprofilesfocallength' => { 509 => [\'CameraProfiles','CameraProfilesFocalLength'] }, - 'cameraprofilesfocusdistance' => { 509 => [\'CameraProfiles','CameraProfilesFocusDistance'] }, - 'cameraprofileslens' => { 509 => [\'CameraProfiles','CameraProfilesLens'] }, - 'cameraprofileslensprettyname' => { 509 => [\'CameraProfiles','CameraProfilesLensPrettyName'] }, - 'cameraprofilesmake' => { 509 => [\'CameraProfiles','CameraProfilesMake'] }, - 'cameraprofilesmodel' => { 509 => [\'CameraProfiles','CameraProfilesModel'] }, - 'cameraprofilesperspectivemodel' => { 509 => [\'CameraProfiles','CameraProfilesPerspectiveModel'] }, - 'cameraprofilesperspectivemodelimagexcenter' => { 509 => [\'CameraProfiles','CameraProfilesPerspectiveModelImageXCenter'] }, - 'cameraprofilesperspectivemodelimageycenter' => { 509 => [\'CameraProfiles','CameraProfilesPerspectiveModelImageYCenter'] }, - 'cameraprofilesperspectivemodelradialdistortparam1' => { 509 => [\'CameraProfiles','CameraProfilesPerspectiveModelRadialDistortParam1'] }, - 'cameraprofilesperspectivemodelradialdistortparam2' => { 509 => [\'CameraProfiles','CameraProfilesPerspectiveModelRadialDistortParam2'] }, - 'cameraprofilesperspectivemodelradialdistortparam3' => { 509 => [\'CameraProfiles','CameraProfilesPerspectiveModelRadialDistortParam3'] }, - 'cameraprofilesperspectivemodelscalefactor' => { 509 => [\'CameraProfiles','CameraProfilesPerspectiveModelScaleFactor'] }, - 'cameraprofilesperspectivemodelversion' => { 509 => [\'CameraProfiles','CameraProfilesPerspectiveModelVersion'] }, - 'cameraprofilesprofilename' => { 509 => [\'CameraProfiles','CameraProfilesProfileName'] }, - 'cameraprofilessensorformatfactor' => { 509 => [\'CameraProfiles','CameraProfilesSensorFormatFactor'] }, - 'cameraprofilesuniquecameramodel' => { 509 => [\'CameraProfiles','CameraProfilesUniqueCameraModel'] }, + 'cameraprofiles' => { 511 => 'CameraProfiles' }, + 'cameraprofilesaperturevalue' => { 511 => [\'CameraProfiles','CameraProfilesApertureValue'] }, + 'cameraprofilesauthor' => { 511 => [\'CameraProfiles','CameraProfilesAuthor'] }, + 'cameraprofilesautoscale' => { 511 => [\'CameraProfiles','CameraProfilesAutoScale'] }, + 'cameraprofilescameraprettyname' => { 511 => [\'CameraProfiles','CameraProfilesCameraPrettyName'] }, + 'cameraprofilescamerarawprofile' => { 511 => [\'CameraProfiles','CameraProfilesCameraRawProfile'] }, + 'cameraprofilesfocallength' => { 511 => [\'CameraProfiles','CameraProfilesFocalLength'] }, + 'cameraprofilesfocusdistance' => { 511 => [\'CameraProfiles','CameraProfilesFocusDistance'] }, + 'cameraprofileslens' => { 511 => [\'CameraProfiles','CameraProfilesLens'] }, + 'cameraprofileslensprettyname' => { 511 => [\'CameraProfiles','CameraProfilesLensPrettyName'] }, + 'cameraprofilesmake' => { 511 => [\'CameraProfiles','CameraProfilesMake'] }, + 'cameraprofilesmodel' => { 511 => [\'CameraProfiles','CameraProfilesModel'] }, + 'cameraprofilesperspectivemodel' => { 511 => [\'CameraProfiles','CameraProfilesPerspectiveModel'] }, + 'cameraprofilesperspectivemodelimagexcenter' => { 511 => [\'CameraProfiles','CameraProfilesPerspectiveModelImageXCenter'] }, + 'cameraprofilesperspectivemodelimageycenter' => { 511 => [\'CameraProfiles','CameraProfilesPerspectiveModelImageYCenter'] }, + 'cameraprofilesperspectivemodelradialdistortparam1' => { 511 => [\'CameraProfiles','CameraProfilesPerspectiveModelRadialDistortParam1'] }, + 'cameraprofilesperspectivemodelradialdistortparam2' => { 511 => [\'CameraProfiles','CameraProfilesPerspectiveModelRadialDistortParam2'] }, + 'cameraprofilesperspectivemodelradialdistortparam3' => { 511 => [\'CameraProfiles','CameraProfilesPerspectiveModelRadialDistortParam3'] }, + 'cameraprofilesperspectivemodelscalefactor' => { 511 => [\'CameraProfiles','CameraProfilesPerspectiveModelScaleFactor'] }, + 'cameraprofilesperspectivemodelversion' => { 511 => [\'CameraProfiles','CameraProfilesPerspectiveModelVersion'] }, + 'cameraprofilesprofilename' => { 511 => [\'CameraProfiles','CameraProfilesProfileName'] }, + 'cameraprofilessensorformatfactor' => { 511 => [\'CameraProfiles','CameraProfilesSensorFormatFactor'] }, + 'cameraprofilesuniquecameramodel' => { 511 => [\'CameraProfiles','CameraProfilesUniqueCameraModel'] }, 'camerarawcolortone' => { 109 => 0xe1 }, 'camerarawcontrast' => { 109 => 0xe3 }, 'camerarawhighlightpoint' => { 109 => 0xe6 }, @@ -1393,7 +1397,7 @@ my %tagLookup = ( 'caption-abstract' => { 131 => 0x78 }, 'captionsauthornames' => { 499 => 'CaptionsAuthorNames' }, 'captionsdatetimestamps' => { 499 => 'CaptionsDateTimeStamps' }, - 'captionwriter' => { 509 => 'CaptionWriter' }, + 'captionwriter' => { 511 => 'CaptionWriter' }, 'captureframerate' => { 113 => 0x4001 }, 'captureheightnormal' => { 138 => 0x1839 }, 'capturelook' => { 138 => 0xc48 }, @@ -1405,7 +1409,7 @@ my %tagLookup = ( 'casioimagesize' => { 113 => 0x9 }, 'catalogsets' => { 131 => 0xff, 475 => 'CatalogSets', 487 => 'CatalogSets' }, 'categories' => { 64 => 0x23, 489 => 'categories' }, - 'category' => { 131 => 0xf, 179 => 'WM/Category', 311 => 0x30, 387 => 'catg', 509 => 'Category' }, + 'category' => { 131 => 0xf, 179 => 'WM/Category', 311 => 0x30, 387 => 'catg', 511 => 'Category' }, 'cbcrgain' => { 409 => 0xa036 }, 'cbcrgaindefault' => { 409 => 0xa035 }, 'cbcrmatrix' => { 409 => 0xa034 }, @@ -1428,7 +1432,7 @@ my %tagLookup = ( 'centerfocuspoint' => { 309 => '2.2' }, 'centerpixel' => { 138 => 0x40c }, 'centerweightedareasize' => { 294 => '7.1', 295 => '8.1', 297 => '8.1', 298 => '8.1', 302 => '7.1', 303 => '5.1', 304 => '7.1', 305 => '6.3', 307 => '8.1', 308 => '8.1', 309 => '8.1', 310 => 0x1f }, - 'certificate' => { 525 => 'Certificate' }, + 'certificate' => { 527 => 'Certificate' }, 'cfainterpolationalgorithm' => { 138 => 0xe60 }, 'cfainterpolationmetric' => { 138 => 0xe61 }, 'cfaoffsetcols' => { 138 => 0xc71 }, @@ -1440,18 +1444,18 @@ my %tagLookup = ( 'cfapatternvalues' => { 500 => [\'CFAPattern','CFAPatternValues'] }, 'cfarepeatpatterndim' => { 119 => 0x828d }, 'cfazipperfixthreshold' => { 138 => 0xe62 }, - 'channel' => { 511 => 'channel' }, - 'channela-lang' => { 511 => [\'channel','channelA-lang'] }, - 'channelchannel' => { 511 => [\'channel','channelChannel'] }, + 'channel' => { 513 => 'channel' }, + 'channela-lang' => { 513 => [\'channel','channelA-lang'] }, + 'channelchannel' => { 513 => [\'channel','channelChannel'] }, 'channels' => { 155 => 'Channels' }, - 'channelsubchannel1' => { 511 => [\'channel','channelSubchannel1'] }, - 'channelsubchannel2' => { 511 => [\'channel','channelSubchannel2'] }, - 'channelsubchannel3' => { 511 => [\'channel','channelSubchannel3'] }, - 'channelsubchannel4' => { 511 => [\'channel','channelSubchannel4'] }, + 'channelsubchannel1' => { 513 => [\'channel','channelSubchannel1'] }, + 'channelsubchannel2' => { 513 => [\'channel','channelSubchannel2'] }, + 'channelsubchannel3' => { 513 => [\'channel','channelSubchannel3'] }, + 'channelsubchannel4' => { 513 => [\'channel','channelSubchannel4'] }, 'chapterlist' => { 395 => 'chpl' }, 'checkmark' => { 103 => 0x10101, 108 => 0x26a }, 'checkmark2' => { 109 => 0x8e }, - 'childfontfiles' => { 526 => [\'Fonts','FontsChildFontFiles'] }, + 'childfontfiles' => { 528 => [\'Fonts','FontsChildFontFiles'] }, 'chmodeshootingspeed' => { 294 => '10.3', 295 => '11.2', 310 => 0x10b }, 'chromablurradius' => { 119 => 0xc631 }, 'chromanoisecolorspace' => { 138 => 0xe6d }, @@ -1470,7 +1474,7 @@ my %tagLookup = ( 'chromaticaberrationsetting' => { 80 => 0x6 }, 'chrominancenoisereduction' => { 103 => 0x20601, 109 => 0x5e, 412 => 0x1a }, 'chrominancenr_tiff_jpeg' => { 109 => 0x60 }, - 'circadatecreated' => { 507 => 'CircaDateCreated' }, + 'circadatecreated' => { 508 => 'CircaDateCreated' }, 'circgradbasedcorractive' => { 494 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionActive'], 496 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionActive'] }, 'circgradbasedcorramount' => { 494 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionAmount'], 496 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionAmount'] }, 'circgradbasedcorrblacks2012' => { 494 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalBlacks2012'], 496 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalBlacks2012'] }, @@ -1614,7 +1618,7 @@ my %tagLookup = ( 'circgradbasedcorrwhat' => { 494 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsWhat'], 496 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsWhat'] }, 'circgradbasedcorrwhites2012' => { 494 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalWhites2012'], 496 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalWhites2012'] }, 'circulargradientbasedcorrections' => { 494 => 'CircularGradientBasedCorrections', 496 => 'CircularGradientBasedCorrections' }, - 'city' => { 131 => 0x5a, 161 => 'City', 335 => 0x6d, 509 => 'City' }, + 'city' => { 131 => 0x5a, 161 => 'City', 335 => 0x6d, 511 => 'City' }, 'city2' => { 335 => 0x80 }, 'clarity' => { 127 => 0x100f, 247 => 0x35, 248 => 0x3d, 435 => 0x2036, 494 => 'Clarity', 496 => 'Clarity' }, 'clarity2012' => { 494 => 'Clarity2012', 496 => 'Clarity2012' }, @@ -1623,7 +1627,7 @@ my %tagLookup = ( 'classifystate' => { 131 => 0xe1 }, 'clearretouch' => { 335 => 0x7c }, 'clearretouchvalue' => { 335 => 0xa3 }, - 'client' => { 521 => 'client' }, + 'client' => { 523 => 'client' }, 'clientname' => { 502 => 'ClientName' }, 'clipboardaspectratio' => { 494 => 'ClipboardAspectRatio', 496 => 'ClipboardAspectRatio' }, 'clipboardorientation' => { 494 => 'ClipboardOrientation', 496 => 'ClipboardOrientation' }, @@ -1647,26 +1651,26 @@ my %tagLookup = ( 'collectionname' => { 170 => [\'Collections','CollectionsCollectionName'], 395 => 'coll' }, 'collections' => { 170 => 'Collections', 489 => 'collections' }, 'collectionuri' => { 170 => [\'Collections','CollectionsCollectionURI'] }, - 'color' => { 389 => 'player.movie.visual.color', 510 => 'color' }, + 'color' => { 389 => 'player.movie.visual.color', 512 => 'color' }, 'coloraberrationcontrol' => { 287 => 0xc89224b }, 'coloradjustment' => { 412 => 0x14 }, 'coloradjustmentmode' => { 411 => 0x210 }, - 'coloranta' => { 526 => [\'Colorants','ColorantsA'] }, - 'colorantb' => { 526 => [\'Colorants','ColorantsB'] }, - 'colorantblack' => { 526 => [\'Colorants','ColorantsBlack'] }, - 'colorantblue' => { 526 => [\'Colorants','ColorantsBlue'] }, - 'colorantcyan' => { 526 => [\'Colorants','ColorantsCyan'] }, - 'colorantgray' => { 526 => [\'Colorants','ColorantsGray'] }, - 'colorantgreen' => { 526 => [\'Colorants','ColorantsGreen'] }, - 'colorantl' => { 526 => [\'Colorants','ColorantsL'] }, - 'colorantmagenta' => { 526 => [\'Colorants','ColorantsMagenta'] }, - 'colorantmode' => { 526 => [\'Colorants','ColorantsMode'] }, - 'colorantred' => { 526 => [\'Colorants','ColorantsRed'] }, - 'colorants' => { 526 => 'Colorants' }, - 'colorantswatchname' => { 526 => [\'Colorants','ColorantsSwatchName'] }, - 'coloranttint' => { 526 => [\'Colorants','ColorantsTint'] }, - 'coloranttype' => { 526 => [\'Colorants','ColorantsType'] }, - 'colorantyellow' => { 526 => [\'Colorants','ColorantsYellow'] }, + 'coloranta' => { 528 => [\'Colorants','ColorantsA'] }, + 'colorantb' => { 528 => [\'Colorants','ColorantsB'] }, + 'colorantblack' => { 528 => [\'Colorants','ColorantsBlack'] }, + 'colorantblue' => { 528 => [\'Colorants','ColorantsBlue'] }, + 'colorantcyan' => { 528 => [\'Colorants','ColorantsCyan'] }, + 'colorantgray' => { 528 => [\'Colorants','ColorantsGray'] }, + 'colorantgreen' => { 528 => [\'Colorants','ColorantsGreen'] }, + 'colorantl' => { 528 => [\'Colorants','ColorantsL'] }, + 'colorantmagenta' => { 528 => [\'Colorants','ColorantsMagenta'] }, + 'colorantmode' => { 528 => [\'Colorants','ColorantsMode'] }, + 'colorantred' => { 528 => [\'Colorants','ColorantsRed'] }, + 'colorants' => { 528 => 'Colorants' }, + 'colorantswatchname' => { 528 => [\'Colorants','ColorantsSwatchName'] }, + 'coloranttint' => { 528 => [\'Colorants','ColorantsTint'] }, + 'coloranttype' => { 528 => [\'Colorants','ColorantsType'] }, + 'colorantyellow' => { 528 => [\'Colorants','ColorantsYellow'] }, 'colorbalance' => { 156 => 'ColorBalance' }, 'colorbalanceadj' => { 287 => 0x76a43202 }, 'colorbalanceblue' => { 181 => 0x1e }, @@ -1715,7 +1719,7 @@ my %tagLookup = ( 'colormatrixb2' => { 370 => 0x21d }, 'colormatrixnumber' => { 317 => 0x1019 }, 'colormatrixsrgb' => { 409 => 0xa031 }, - 'colormode' => { 113 => 0x3015, 127 => 0x1210, 140 => 0x66, 181 => 0x28, 184 => 0x16, 186 => 0x101, 187 => 0x36, 189 => 0x7, 233 => 0x3, 277 => 0x4, 335 => 0x32, 412 => 0x2c, 435 => 0xb029, 509 => 'ColorMode' }, + 'colormode' => { 113 => 0x3015, 127 => 0x1210, 140 => 0x66, 181 => 0x28, 184 => 0x16, 186 => 0x101, 187 => 0x36, 189 => 0x7, 233 => 0x3, 277 => 0x4, 335 => 0x32, 412 => 0x2c, 435 => 0xb029, 511 => 'ColorMode' }, 'colormoirereduction' => { 103 => 0x20670, 288 => 0x15 }, 'colormoirereductionmode' => { 288 => 0x5 }, 'colormoirereductionon' => { 103 => '0x20670.0' }, @@ -1844,10 +1848,10 @@ my %tagLookup = ( 'compimagesumexposureused' => { 501 => [\'CompositeImageExposureTimes','CompositeImageExposureTimesSumOfExposureTimesOfUsed'] }, 'compimagetotalexposureperiod' => { 501 => [\'CompositeImageExposureTimes','CompositeImageExposureTimesTotalExposurePeriod'] }, 'compimagevalues' => { 501 => [\'CompositeImageExposureTimes','CompositeImageExposureTimesValues'] }, - 'complianceprofile' => { 511 => 'complianceProfile' }, + 'complianceprofile' => { 513 => 'complianceProfile' }, 'componentsconfiguration' => { 119 => 0x9101, 162 => 'Components', 500 => 'ComponentsConfiguration' }, 'componentversion' => { 97 => 0x80c }, - 'composer' => { 179 => 'WM/Composer', 387 => ["\xa9com","\xa9wrt"], 395 => ["\xa9com","\xa9wrt"], 521 => 'composer' }, + 'composer' => { 179 => 'WM/Composer', 387 => ["\xa9com","\xa9wrt"], 395 => ["\xa9com","\xa9wrt"], 523 => 'composer' }, 'composerkeywords' => { 395 => "\xa9cok" }, 'compositeimage' => { 119 => 0xa460, 501 => 'CompositeImage' }, 'compositeimagecount' => { 119 => 0xa461, 501 => 'CompositeImageCount' }, @@ -1859,7 +1863,7 @@ my %tagLookup = ( 'compositionadjusty' => { 369 => 0x6 }, 'compressedbitsperpixel' => { 119 => 0x9102, 500 => 'CompressedBitsPerPixel' }, 'compressedimagesize' => { 186 => 0x40, 317 => 0x40 }, - 'compression' => { 119 => 0x103, 340 => 0xb, 517 => 'Compression' }, + 'compression' => { 119 => 0x103, 340 => 0xb, 519 => 'Compression' }, 'compressionfactor' => { 312 => 0x50d }, 'compressionformat' => { 63 => 0x4 }, 'compressionratio' => { 162 => 'Compression', 317 => 0x1034 }, @@ -1880,7 +1884,7 @@ my %tagLookup = ( 'constrainedcropheight' => { 108 => 0x266, 381 => 0xd6 }, 'constrainedcropwidth' => { 108 => 0x262, 381 => 0xd5 }, 'contact' => { 131 => 0x76 }, - 'contactinfo' => { 494 => 'ContactInfo', 496 => 'ContactInfo', 510 => 'contactInfo' }, + 'contactinfo' => { 494 => 'ContactInfo', 496 => 'ContactInfo', 512 => 'contactInfo' }, 'container' => { 473 => 'Container' }, 'containerdirectory' => { 473 => [\'Container','ContainerDirectory'] }, 'containerdirectoryitem' => { 473 => [\'Container','ContainerDirectoryItem'] }, @@ -1888,16 +1892,16 @@ my %tagLookup = ( 'containerdirectoryitemlength' => { 473 => [\'Container','ContainerDirectoryItemLength'] }, 'containerdirectoryitemmime' => { 473 => [\'Container','ContainerDirectoryItemMime'] }, 'containerdirectoryitempadding' => { 473 => [\'Container','ContainerDirectoryItemPadding'] }, - 'containerformat' => { 507 => 'ContainerFormat' }, - 'containerformatidentifier' => { 507 => [\'ContainerFormat','ContainerFormatIdentifier'] }, - 'containerformatname' => { 507 => [\'ContainerFormat','ContainerFormatName'] }, + 'containerformat' => { 508 => 'ContainerFormat' }, + 'containerformatidentifier' => { 508 => [\'ContainerFormat','ContainerFormatIdentifier'] }, + 'containerformatname' => { 508 => [\'ContainerFormat','ContainerFormatName'] }, 'contentcreatedate' => { 387 => "\xa9day", 395 => ['@day',"\xa9day"] }, 'contentdistributor' => { 179 => 'WM/ContentDistributor' }, 'contentdistributorid' => { 395 => 'cdis' }, 'contentid' => { 395 => 'ccid' }, 'contentlocationcode' => { 131 => 0x1a }, 'contentlocationname' => { 131 => 0x1b }, - 'contenttype' => { 511 => 'contentType' }, + 'contenttype' => { 513 => 'contentType' }, 'continuousbracketing' => { 184 => 0x20 }, 'continuousdrive' => { 34 => 0x5 }, 'continuousmodedisplay' => { 310 => 0x51 }, @@ -1926,24 +1930,24 @@ my %tagLookup = ( 'contrastuserdef1' => { 19 => 0xee, 70 => 0x90, 71 => 0xa8 }, 'contrastuserdef2' => { 19 => 0xef, 70 => 0xa8, 71 => 0xc0 }, 'contrastuserdef3' => { 19 => 0xf0, 70 => 0xc0, 71 => 0xd8 }, - 'contributedmedia' => { 521 => 'contributedMedia' }, - 'contributedmediaduration' => { 521 => [\'contributedMedia','contributedMediaDuration'] }, - 'contributedmediadurationscale' => { 521 => [\'contributedMedia','contributedMediaDurationScale'] }, - 'contributedmediadurationvalue' => { 521 => [\'contributedMedia','contributedMediaDurationValue'] }, - 'contributedmediamanaged' => { 521 => [\'contributedMedia','contributedMediaManaged'] }, - 'contributedmediapath' => { 521 => [\'contributedMedia','contributedMediaPath'] }, - 'contributedmediastarttime' => { 521 => [\'contributedMedia','contributedMediaStartTime'] }, - 'contributedmediastarttimescale' => { 521 => [\'contributedMedia','contributedMediaStartTimeScale'] }, - 'contributedmediastarttimevalue' => { 521 => [\'contributedMedia','contributedMediaStartTimeValue'] }, - 'contributedmediatrack' => { 521 => [\'contributedMedia','contributedMediaTrack'] }, - 'contributedmediawebstatement' => { 521 => [\'contributedMedia','contributedMediaWebStatement'] }, - 'contributor' => { 497 => 'contributor', 507 => 'Contributor' }, - 'contributoridentifier' => { 507 => [\'Contributor','ContributorIdentifier'] }, - 'contributorname' => { 507 => [\'Contributor','ContributorName'] }, - 'contributorrole' => { 507 => [\'Contributor','ContributorRole'] }, + 'contributedmedia' => { 523 => 'contributedMedia' }, + 'contributedmediaduration' => { 523 => [\'contributedMedia','contributedMediaDuration'] }, + 'contributedmediadurationscale' => { 523 => [\'contributedMedia','contributedMediaDurationScale'] }, + 'contributedmediadurationvalue' => { 523 => [\'contributedMedia','contributedMediaDurationValue'] }, + 'contributedmediamanaged' => { 523 => [\'contributedMedia','contributedMediaManaged'] }, + 'contributedmediapath' => { 523 => [\'contributedMedia','contributedMediaPath'] }, + 'contributedmediastarttime' => { 523 => [\'contributedMedia','contributedMediaStartTime'] }, + 'contributedmediastarttimescale' => { 523 => [\'contributedMedia','contributedMediaStartTimeScale'] }, + 'contributedmediastarttimevalue' => { 523 => [\'contributedMedia','contributedMediaStartTimeValue'] }, + 'contributedmediatrack' => { 523 => [\'contributedMedia','contributedMediaTrack'] }, + 'contributedmediawebstatement' => { 523 => [\'contributedMedia','contributedMediaWebStatement'] }, + 'contributor' => { 497 => 'contributor', 508 => 'Contributor' }, + 'contributoridentifier' => { 508 => [\'Contributor','ContributorIdentifier'] }, + 'contributorname' => { 508 => [\'Contributor','ContributorName'] }, + 'contributorrole' => { 508 => [\'Contributor','ContributorRole'] }, 'contributors' => { 157 => 'Contributors' }, 'controldialset' => { 184 => 0x46 }, - 'controlledvocabularyterm' => { 507 => 'CVterm' }, + 'controlledvocabularyterm' => { 508 => 'CVterm' }, 'controllerboardversion' => { 330 => 0x332 }, 'controlmode' => { 77 => 0x12 }, 'controlringresponse' => { 310 => 0x1d5 }, @@ -1951,9 +1955,9 @@ my %tagLookup = ( 'conversionlens' => { 313 => 0x403, 335 => 0x35 }, 'converter' => { 119 => 0xfe4d, 277 => 0xb, 494 => 'Converter', 496 => 'Converter' }, 'converttograyscale' => { 494 => 'ConvertToGrayscale', 496 => 'ConvertToGrayscale' }, - 'cookingequipment' => { 513 => 'cookingEquipment' }, - 'cookingmethod' => { 513 => 'cookingMethod' }, - 'copyright' => { 0 => 0x3, 119 => 0x8298, 157 => 'Copyright', 325 => 'Copyright', 340 => 0x8298, 370 => 0x22f, 386 => 'Copyright', 387 => ['cprt',"\xa9cpy"], 389 => 'copyright', 395 => ['cprt',"\xa9cpy"], 494 => 'Copyright', 496 => 'Copyright', 508 => 'Copyright', 514 => 'copyright', 517 => 'Copyright', 521 => 'copyright' }, + 'cookingequipment' => { 515 => 'cookingEquipment' }, + 'cookingmethod' => { 515 => 'cookingMethod' }, + 'copyright' => { 0 => 0x3, 119 => 0x8298, 157 => 'Copyright', 325 => 'Copyright', 340 => 0x8298, 370 => 0x22f, 386 => 'Copyright', 387 => ['cprt',"\xa9cpy"], 389 => 'copyright', 395 => ['cprt',"\xa9cpy"], 494 => 'Copyright', 496 => 'Copyright', 510 => 'Copyright', 516 => 'copyright', 519 => 'Copyright', 523 => 'copyright' }, 'copyrightflag' => { 384 => 0x40a }, 'copyrightnotice' => { 131 => 0x74 }, 'copyrightowner' => { 322 => 'CopyrightOwner' }, @@ -1962,48 +1966,48 @@ my %tagLookup = ( 'copyrightownername' => { 322 => [\'CopyrightOwner','CopyrightOwnerCopyrightOwnerName'] }, 'copyrightregistrationnumber' => { 322 => 'CopyrightRegistrationNumber' }, 'copyrightstatus' => { 322 => 'CopyrightStatus' }, - 'copyrightyear' => { 507 => 'CopyrightYear', 511 => 'copyrightYear' }, + 'copyrightyear' => { 508 => 'CopyrightYear', 513 => 'copyrightYear' }, 'coringfilter' => { 316 => 0x310, 317 => 0x102d, 320 => 0x310 }, 'coringvalues' => { 316 => 0x311, 320 => 0x311 }, - 'corporateentity' => { 511 => 'corporateEntity' }, + 'corporateentity' => { 513 => 'corporateEntity' }, 'correlatedcolortemp' => { 334 => 0x35b }, - 'country' => { 161 => 'Country', 335 => 0x69, 509 => 'Country' }, + 'country' => { 161 => 'Country', 335 => 0x69, 511 => 'Country' }, 'country-primarylocationcode' => { 131 => 0x64 }, 'country-primarylocationname' => { 131 => 0x65 }, - 'countrycode' => { 232 => 0x5, 382 => 'CountryCode', 506 => 'CountryCode' }, - 'course' => { 513 => 'course' }, + 'countrycode' => { 232 => 0x5, 382 => 'CountryCode', 507 => 'CountryCode' }, + 'course' => { 515 => 'course' }, 'coverage' => { 497 => 'coverage' }, 'coverart' => { 387 => 'covr' }, - 'coverdate' => { 511 => 'coverDate' }, - 'coverdisplaydate' => { 511 => 'coverDisplayDate' }, + 'coverdate' => { 513 => 'coverDate' }, + 'coverdisplaydate' => { 513 => 'coverDisplayDate' }, 'coveruri' => { 395 => 'cvru' }, 'cpufirmwareversion' => { 370 => 0x28 }, 'crc32' => { 498 => 'crc32' }, - 'createdate' => { 119 => 0x9004, 157 => 'CreateDate', 321 => 'CreationDate', 325 => 'create-date', 386 => 'CreationDate', 392 => 0x1, 519 => 'CreateDate' }, - 'creationdate' => { 389 => 'creationdate', 508 => 'CreationDate', 511 => 'creationDate' }, + 'createdate' => { 119 => 0x9004, 157 => 'CreateDate', 321 => 'CreationDate', 325 => 'create-date', 386 => 'CreationDate', 392 => 0x1, 521 => 'CreateDate' }, + 'creationdate' => { 389 => 'creationdate', 510 => 'CreationDate', 513 => 'creationDate' }, 'creationtime' => { 325 => 'Creation Time' }, 'creativestyle' => { 422 => 0x1a, 423 => 0x18, 433 => 0x41, 435 => 0xb020, 466 => 0x4a }, 'creativestylesetting' => { 424 => 0xf, 440 => 0x7 }, 'creativestylewaschanged' => { 470 => 0x8001 }, - 'creator' => { 321 => 'Creator', 386 => 'Creator', 497 => 'creator', 507 => 'Creator', 508 => 'Creator' }, - 'creatoraddress' => { 506 => [\'CreatorContactInfo','CreatorContactInfoCiAdrExtadr'] }, + 'creator' => { 321 => 'Creator', 386 => 'Creator', 497 => 'creator', 508 => 'Creator', 510 => 'Creator' }, + 'creatoraddress' => { 507 => [\'CreatorContactInfo','CreatorContactInfoCiAdrExtadr'] }, 'creatorappid' => { 178 => 'CreatorAppId' }, - 'creatorcity' => { 506 => [\'CreatorContactInfo','CreatorContactInfoCiAdrCity'] }, - 'creatorcontactinfo' => { 506 => 'CreatorContactInfo' }, - 'creatorcountry' => { 506 => [\'CreatorContactInfo','CreatorContactInfoCiAdrCtry'] }, - 'creatoridentifier' => { 507 => [\'Creator','CreatorIdentifier'] }, - 'creatorname' => { 507 => [\'Creator','CreatorName'] }, + 'creatorcity' => { 507 => [\'CreatorContactInfo','CreatorContactInfoCiAdrCity'] }, + 'creatorcontactinfo' => { 507 => 'CreatorContactInfo' }, + 'creatorcountry' => { 507 => [\'CreatorContactInfo','CreatorContactInfoCiAdrCtry'] }, + 'creatoridentifier' => { 508 => [\'Creator','CreatorIdentifier'] }, + 'creatorname' => { 508 => [\'Creator','CreatorName'] }, 'creatoropenwithuioptions' => { 178 => 'CreatorOpenWithUIOptions' }, - 'creatorpostalcode' => { 506 => [\'CreatorContactInfo','CreatorContactInfoCiAdrPcode'] }, - 'creatorregion' => { 506 => [\'CreatorContactInfo','CreatorContactInfoCiAdrRegion'] }, - 'creatorrole' => { 507 => [\'Creator','CreatorRole'] }, - 'creatortool' => { 519 => 'CreatorTool' }, - 'creatorworkemail' => { 506 => [\'CreatorContactInfo','CreatorContactInfoCiEmailWork'] }, - 'creatorworktelephone' => { 506 => [\'CreatorContactInfo','CreatorContactInfoCiTelWork'] }, - 'creatorworkurl' => { 506 => [\'CreatorContactInfo','CreatorContactInfoCiUrlWork'] }, - 'credit' => { 131 => 0x6e, 509 => 'Credit' }, - 'creditline' => { 514 => 'creditLine' }, - 'creditlinereq' => { 524 => 'CreditLineReq' }, + 'creatorpostalcode' => { 507 => [\'CreatorContactInfo','CreatorContactInfoCiAdrPcode'] }, + 'creatorregion' => { 507 => [\'CreatorContactInfo','CreatorContactInfoCiAdrRegion'] }, + 'creatorrole' => { 508 => [\'Creator','CreatorRole'] }, + 'creatortool' => { 521 => 'CreatorTool' }, + 'creatorworkemail' => { 507 => [\'CreatorContactInfo','CreatorContactInfoCiEmailWork'] }, + 'creatorworktelephone' => { 507 => [\'CreatorContactInfo','CreatorContactInfoCiTelWork'] }, + 'creatorworkurl' => { 507 => [\'CreatorContactInfo','CreatorContactInfoCiUrlWork'] }, + 'credit' => { 131 => 0x6e, 511 => 'Credit' }, + 'creditline' => { 516 => 'creditLine' }, + 'creditlinereq' => { 526 => 'CreditLineReq' }, 'creditlinerequired' => { 322 => 'CreditLineRequired' }, 'cropactive' => { 101 => 0x0, 108 => 0x244 }, 'cropangle' => { 494 => 'CropAngle', 496 => 'CropAngle' }, @@ -2058,7 +2062,7 @@ my %tagLookup = ( 'cropy' => { 101 => 0x4, 488 => 'CropY' }, 'crossprocess' => { 370 => 0x7b }, 'crossprocessparams' => { 370 => 0x235 }, - 'cuisine' => { 513 => 'cuisine' }, + 'cuisine' => { 515 => 'cuisine' }, 'currenticcprofile' => { 119 => 0xc691 }, 'currentpreprofilematrix' => { 119 => 0xc692 }, 'currentversion' => { 470 => 0xd000 }, @@ -2138,26 +2142,26 @@ my %tagLookup = ( 'darkpedestal' => { 138 => 0xc7f }, 'datacompressionmethod' => { 133 => 0x6e }, 'dataimprint' => { 181 => 0x34 }, - 'dataonscreen' => { 507 => 'DataOnScreen' }, - 'dataonscreenregion' => { 507 => [\'DataOnScreen','DataOnScreenRegion'] }, - 'dataonscreenregiond' => { 507 => [\'DataOnScreen','DataOnScreenRegionD'] }, - 'dataonscreenregionh' => { 507 => [\'DataOnScreen','DataOnScreenRegionH'] }, - 'dataonscreenregiontext' => { 507 => [\'DataOnScreen','DataOnScreenRegionText'] }, - 'dataonscreenregionunit' => { 507 => [\'DataOnScreen','DataOnScreenRegionUnit'] }, - 'dataonscreenregionw' => { 507 => [\'DataOnScreen','DataOnScreenRegionW'] }, - 'dataonscreenregionx' => { 507 => [\'DataOnScreen','DataOnScreenRegionX'] }, - 'dataonscreenregiony' => { 507 => [\'DataOnScreen','DataOnScreenRegionY'] }, + 'dataonscreen' => { 508 => 'DataOnScreen' }, + 'dataonscreenregion' => { 508 => [\'DataOnScreen','DataOnScreenRegion'] }, + 'dataonscreenregiond' => { 508 => [\'DataOnScreen','DataOnScreenRegionD'] }, + 'dataonscreenregionh' => { 508 => [\'DataOnScreen','DataOnScreenRegionH'] }, + 'dataonscreenregiontext' => { 508 => [\'DataOnScreen','DataOnScreenRegionText'] }, + 'dataonscreenregionunit' => { 508 => [\'DataOnScreen','DataOnScreenRegionUnit'] }, + 'dataonscreenregionw' => { 508 => [\'DataOnScreen','DataOnScreenRegionW'] }, + 'dataonscreenregionx' => { 508 => [\'DataOnScreen','DataOnScreenRegionX'] }, + 'dataonscreenregiony' => { 508 => [\'DataOnScreen','DataOnScreenRegionY'] }, 'datascaling' => { 370 => 0x3d }, 'date' => { 370 => 0x6, 497 => 'date' }, 'dateacquired' => { 178 => 'DateAcquired', 179 => '{2CBAA8F5-D81F-47CA-B17A-F8D822300131} 100' }, - 'datecreated' => { 131 => 0x37, 509 => 'DateCreated' }, + 'datecreated' => { 131 => 0x37, 511 => 'DateCreated' }, 'datedisplayformat' => { 279 => 0x3 }, 'dateidentified' => { 118 => [\'Identification','IdentificationDateIdentified'] }, 'dateimprint' => { 299 => '4.2' }, - 'daterecieved' => { 511 => 'dateRecieved' }, + 'daterecieved' => { 513 => 'dateRecieved' }, 'datesent' => { 132 => 0x46 }, 'datestampmode' => { 64 => 0x1c, 233 => 0x9d }, - 'datetime' => { 489 => 'datetime', 517 => 'DateTime' }, + 'datetime' => { 489 => 'datetime', 519 => 'DateTime' }, 'datetimedigitized' => { 500 => 'DateTimeDigitized' }, 'datetimeoriginal' => { 100 => 0x0, 119 => 0x9003, 154 => 0x14, 157 => 'OriginalDate', 390 => 'IDIT', 395 => 'date', 396 => 0xb, 397 => 0x3b, 398 => 0x3e, 500 => 'DateTimeOriginal' }, 'datetimestamp' => { 140 => 0x64 }, @@ -2240,31 +2244,31 @@ my %tagLookup = ( 'depthmeasuretype' => { 119 => 0xc7ed }, 'depthnear' => { 119 => 0xc7ea }, 'depthunits' => { 119 => 0xc7ec }, - 'derivedfrom' => { 522 => 'DerivedFrom' }, - 'derivedfromalternatepaths' => { 522 => [\'DerivedFrom','DerivedFromAlternatePaths'] }, - 'derivedfromdocumentid' => { 522 => [\'DerivedFrom','DerivedFromDocumentID'] }, - 'derivedfromfilepath' => { 522 => [\'DerivedFrom','DerivedFromFilePath'] }, - 'derivedfromfrompart' => { 522 => [\'DerivedFrom','DerivedFromFromPart'] }, - 'derivedfrominstanceid' => { 522 => [\'DerivedFrom','DerivedFromInstanceID'] }, - 'derivedfromlastmodifydate' => { 522 => [\'DerivedFrom','DerivedFromLastModifyDate'] }, - 'derivedfromlasturl' => { 522 => [\'DerivedFrom','DerivedFromLastURL'] }, - 'derivedfromlinkcategory' => { 522 => [\'DerivedFrom','DerivedFromLinkCategory'] }, - 'derivedfromlinkform' => { 522 => [\'DerivedFrom','DerivedFromLinkForm'] }, - 'derivedfrommanager' => { 522 => [\'DerivedFrom','DerivedFromManager'] }, - 'derivedfrommanagervariant' => { 522 => [\'DerivedFrom','DerivedFromManagerVariant'] }, - 'derivedfrommanageto' => { 522 => [\'DerivedFrom','DerivedFromManageTo'] }, - 'derivedfrommanageui' => { 522 => [\'DerivedFrom','DerivedFromManageUI'] }, - 'derivedfrommaskmarkers' => { 522 => [\'DerivedFrom','DerivedFromMaskMarkers'] }, - 'derivedfromoriginaldocumentid' => { 522 => [\'DerivedFrom','DerivedFromOriginalDocumentID'] }, - 'derivedfrompartmapping' => { 522 => [\'DerivedFrom','DerivedFromPartMapping'] }, - 'derivedfromplacedresolutionunit' => { 522 => [\'DerivedFrom','DerivedFromPlacedResolutionUnit'] }, - 'derivedfromplacedxresolution' => { 522 => [\'DerivedFrom','DerivedFromPlacedXResolution'] }, - 'derivedfromplacedyresolution' => { 522 => [\'DerivedFrom','DerivedFromPlacedYResolution'] }, - 'derivedfromrenditionclass' => { 522 => [\'DerivedFrom','DerivedFromRenditionClass'] }, - 'derivedfromrenditionparams' => { 522 => [\'DerivedFrom','DerivedFromRenditionParams'] }, - 'derivedfromtopart' => { 522 => [\'DerivedFrom','DerivedFromToPart'] }, - 'derivedfromversionid' => { 522 => [\'DerivedFrom','DerivedFromVersionID'] }, - 'description' => { 325 => 'Description', 387 => ['desc','dscp',"\xa9des"], 389 => 'description', 395 => 'dscp', 494 => 'Description', 496 => 'Description', 497 => 'description', 519 => 'Description' }, + 'derivedfrom' => { 524 => 'DerivedFrom' }, + 'derivedfromalternatepaths' => { 524 => [\'DerivedFrom','DerivedFromAlternatePaths'] }, + 'derivedfromdocumentid' => { 524 => [\'DerivedFrom','DerivedFromDocumentID'] }, + 'derivedfromfilepath' => { 524 => [\'DerivedFrom','DerivedFromFilePath'] }, + 'derivedfromfrompart' => { 524 => [\'DerivedFrom','DerivedFromFromPart'] }, + 'derivedfrominstanceid' => { 524 => [\'DerivedFrom','DerivedFromInstanceID'] }, + 'derivedfromlastmodifydate' => { 524 => [\'DerivedFrom','DerivedFromLastModifyDate'] }, + 'derivedfromlasturl' => { 524 => [\'DerivedFrom','DerivedFromLastURL'] }, + 'derivedfromlinkcategory' => { 524 => [\'DerivedFrom','DerivedFromLinkCategory'] }, + 'derivedfromlinkform' => { 524 => [\'DerivedFrom','DerivedFromLinkForm'] }, + 'derivedfrommanager' => { 524 => [\'DerivedFrom','DerivedFromManager'] }, + 'derivedfrommanagervariant' => { 524 => [\'DerivedFrom','DerivedFromManagerVariant'] }, + 'derivedfrommanageto' => { 524 => [\'DerivedFrom','DerivedFromManageTo'] }, + 'derivedfrommanageui' => { 524 => [\'DerivedFrom','DerivedFromManageUI'] }, + 'derivedfrommaskmarkers' => { 524 => [\'DerivedFrom','DerivedFromMaskMarkers'] }, + 'derivedfromoriginaldocumentid' => { 524 => [\'DerivedFrom','DerivedFromOriginalDocumentID'] }, + 'derivedfrompartmapping' => { 524 => [\'DerivedFrom','DerivedFromPartMapping'] }, + 'derivedfromplacedresolutionunit' => { 524 => [\'DerivedFrom','DerivedFromPlacedResolutionUnit'] }, + 'derivedfromplacedxresolution' => { 524 => [\'DerivedFrom','DerivedFromPlacedXResolution'] }, + 'derivedfromplacedyresolution' => { 524 => [\'DerivedFrom','DerivedFromPlacedYResolution'] }, + 'derivedfromrenditionclass' => { 524 => [\'DerivedFrom','DerivedFromRenditionClass'] }, + 'derivedfromrenditionparams' => { 524 => [\'DerivedFrom','DerivedFromRenditionParams'] }, + 'derivedfromtopart' => { 524 => [\'DerivedFrom','DerivedFromToPart'] }, + 'derivedfromversionid' => { 524 => [\'DerivedFrom','DerivedFromVersionID'] }, + 'description' => { 325 => 'Description', 387 => ['desc','dscp',"\xa9des"], 389 => 'description', 395 => 'dscp', 494 => 'Description', 496 => 'Description', 497 => 'description', 521 => 'Description' }, 'destination' => { 132 => 0x5 }, 'destinationcity' => { 370 => 0x24, 376 => 0x3 }, 'destinationcitycode' => { 377 => 0x1001 }, @@ -2280,7 +2284,7 @@ my %tagLookup = ( 'deviantwhiteflash' => { 138 => 0x841 }, 'deviantwhitefluorescent' => { 138 => 0x840 }, 'deviantwhitetungsten' => { 138 => 0x83f }, - 'device' => { 511 => 'device' }, + 'device' => { 513 => 'device' }, 'devicesettingdescription' => { 500 => 'DeviceSettingDescription' }, 'devicesettingdescriptioncolumns' => { 500 => [\'DeviceSettingDescription','DeviceSettingDescriptionColumns'] }, 'devicesettingdescriptionrows' => { 500 => [\'DeviceSettingDescription','DeviceSettingDescriptionRows'] }, @@ -2289,7 +2293,7 @@ my %tagLookup = ( 'dewarpdata' => { 116 => 'DewarpData' }, 'dewarpflag' => { 116 => 'DewarpFlag' }, 'dialdirectiontvav' => { 84 => 0x706 }, - 'dietaryneeds' => { 513 => 'dietaryNeeds' }, + 'dietaryneeds' => { 515 => 'dietaryNeeds' }, 'diffractioncompensation' => { 222 => 0x20e, 237 => 0x142, 238 => 0x1a2, 239 => 0x1b6 }, 'diffractioncorrection' => { 335 => 0xbc, 360 => 0x3 }, 'diffractioncorrectionon' => { 103 => 0x2070b }, @@ -2322,31 +2326,31 @@ my %tagLookup = ( 'digitalgain' => { 74 => 0xb }, 'digitalgem' => { 217 => 0x0 }, 'digitalice' => { 254 => 0x100 }, - 'digitalimageguid' => { 507 => 'DigImageGUID' }, + 'digitalimageguid' => { 508 => 'DigImageGUID' }, 'digitallensoptimizer' => { 62 => 0xa }, 'digitallensoptimizersetting' => { 80 => 0x9 }, 'digitalroc' => { 251 => 0x0 }, - 'digitalsourcefiletype' => { 507 => 'DigitalSourcefileType' }, - 'digitalsourcetype' => { 507 => 'DigitalSourceType' }, + 'digitalsourcefiletype' => { 508 => 'DigitalSourcefileType' }, + 'digitalsourcetype' => { 508 => 'DigitalSourceType' }, 'digitalzoom' => { 34 => 0xc, 112 => 0xa, 127 => 0x1044, 140 => 0x68, 151 => 0x22, 152 => 0x1e, 156 => 'DigitalZoom', 181 => 0xc, 233 => 0x86, 277 => 0xa, 317 => 0x204, 370 => 0x1e, 377 => 0xa, 411 => 0x204, 457 => 0x12, 458 => 0x12 }, 'digitalzoomon' => { 411 => 0x21b }, 'digitalzoomratio' => { 119 => 0xa404, 446 => 0x200, 448 => 0x21c, 500 => 'DigitalZoomRatio' }, - 'director' => { 179 => 'WM/Director', 387 => "\xa9dir", 389 => 'director', 395 => "\xa9dir", 521 => 'director' }, - 'directorphotography' => { 521 => 'directorPhotography' }, + 'director' => { 179 => 'WM/Director', 387 => "\xa9dir", 389 => 'director', 395 => "\xa9dir", 523 => 'director' }, + 'directorphotography' => { 523 => 'directorPhotography' }, 'directory' => { 120 => 'Directory' }, 'directoryindex' => { 7 => 0x137, 9 => 0x2dc, 11 => 0x17e, 13 => 0x238, 14 => 0x13f, 15 => 0x133, 16 => 0x1df, 17 => 0x1a7, 18 => 0x1f0, 19 => 0xcc, 20 => 0x1c7, 21 => 0x298, 22 => 0x1e7, 23 => 0x1e5, 24 => [0x27c,0x280], 25 => 0x2b6, 26 => 0x2bf, 28 => 0x1f7, 29 => 0x4ba }, 'directoryindex2' => { 21 => 0x29c }, 'directorynumber' => { 210 => 0x3, 398 => 0x12 }, 'disableautocreation' => { 477 => 'DisableAutoCreation' }, 'disclaimer' => { 325 => 'Disclaimer' }, - 'discnumber' => { 521 => 'discNumber' }, - 'dishtype' => { 513 => 'dishType' }, + 'discnumber' => { 523 => 'discNumber' }, + 'dishtype' => { 515 => 'dishType' }, 'disknumber' => { 387 => 'disk' }, 'displayallafpoints' => { 84 => 0x514 }, 'displayaperture' => { 34 => 0x23 }, 'displayedunitsx' => { 385 => 0x2 }, 'displayedunitsy' => { 385 => 0x6 }, - 'displayname' => { 389 => 'displayname', 510 => 'displayName' }, + 'displayname' => { 389 => 'displayname', 512 => 'displayName' }, 'distance1' => { 140 => 0x28 }, 'distance2' => { 140 => 0x2c }, 'distance3' => { 140 => 0x30 }, @@ -2371,14 +2375,14 @@ my %tagLookup = ( 'distortionparam09' => { 339 => 0x9 }, 'distortionparam11' => { 339 => 0xb }, 'distortionscale' => { 339 => 0x5 }, - 'distributor' => { 511 => 'distributor' }, - 'distributorproductid' => { 510 => 'distributorProductID' }, + 'distributor' => { 513 => 'distributor' }, + 'distributorproductid' => { 512 => 'distributorProductID' }, 'dloon' => { 103 => '0x20706.0', 109 => 0xdc }, 'dlosetting' => { 103 => 0x20706, 109 => 0xdd }, 'dlosettingapplied' => { 102 => 0x4 }, 'dloshootingdistance' => { 109 => 0xde }, 'dloversion' => { 102 => 0x5 }, - 'dmcomment' => { 521 => 'comment' }, + 'dmcomment' => { 523 => 'comment' }, 'dmdithermatrix' => { 138 => 0xc7a }, 'dmdithermatrixheight' => { 138 => 0xc7c }, 'dmdithermatrixwidth' => { 138 => 0xc7b }, @@ -2389,16 +2393,16 @@ my %tagLookup = ( 'dngprivatedata' => { 119 => 0xc634 }, 'dngversion' => { 119 => 0xc612 }, 'document' => { 325 => 'Document' }, - 'documentancestors' => { 509 => 'DocumentAncestors' }, + 'documentancestors' => { 511 => 'DocumentAncestors' }, 'documenthistory' => { 131 => 0xe7 }, - 'documentid' => { 522 => 'DocumentID' }, + 'documentid' => { 524 => 'DocumentID' }, 'documentname' => { 119 => 0x10d }, 'documentnotes' => { 131 => 0xe6 }, - 'doi' => { 511 => 'doi' }, - 'dopesheet' => { 507 => 'Dopesheet' }, - 'dopesheetlink' => { 507 => 'DopesheetLink' }, - 'dopesheetlinklink' => { 507 => [\'DopesheetLink','DopesheetLinkLink'] }, - 'dopesheetlinklinkqualifier' => { 507 => [\'DopesheetLink','DopesheetLinkLinkQualifier'] }, + 'doi' => { 513 => 'doi' }, + 'dopesheet' => { 508 => 'Dopesheet' }, + 'dopesheetlink' => { 508 => 'DopesheetLink' }, + 'dopesheetlinklink' => { 508 => [\'DopesheetLink','DopesheetLinkLink'] }, + 'dopesheetlinklinkqualifier' => { 508 => [\'DopesheetLink','DopesheetLinkLinkQualifier'] }, 'doublingmicrovolts' => { 138 => 0xc82 }, 'dpp' => { 489 => 'dpp' }, 'dr4cameramodel' => { 104 => 0x3 }, @@ -2410,9 +2414,9 @@ my %tagLookup = ( 'drivemodesetting' => { 424 => 0x4 }, 'drivespeed' => { 125 => '0.2' }, 'dspfirmwareversion' => { 370 => 0x27 }, - 'duration' => { 67 => 0x6a, 155 => 'Duration', 169 => 'Duration', 513 => 'duration', 521 => 'duration' }, - 'durationscale' => { 521 => [\'duration','durationScale'] }, - 'durationvalue' => { 521 => [\'duration','durationValue'] }, + 'duration' => { 67 => 0x6a, 155 => 'Duration', 169 => 'Duration', 515 => 'duration', 523 => 'duration' }, + 'durationscale' => { 523 => [\'duration','durationScale'] }, + 'durationvalue' => { 523 => [\'duration','durationValue'] }, 'dustremovaldata' => { 64 => 0x97 }, 'dxcropalert' => { 238 => 0x23c, 239 => 0x250 }, 'dynamicafarea' => { 294 => '1.4', 303 => '1.4' }, @@ -2463,24 +2467,24 @@ my %tagLookup = ( 'edit7' => { 395 => "\xa9ed7" }, 'edit8' => { 395 => "\xa9ed8" }, 'edit9' => { 395 => "\xa9ed9" }, - 'edition' => { 511 => 'edition' }, + 'edition' => { 513 => 'edition' }, 'editorialupdate' => { 131 => 0x8 }, 'editstatus' => { 131 => 0x7, 382 => 'EditStatus', 489 => 'EditStatus' }, 'editversionname' => { 287 => 0x3d136244 }, 'effectivelv' => { 370 => 0x2d }, 'effectivemaxaperture' => { 226 => 0x12, 227 => 0x13, 231 => 0x14 }, - 'eissn' => { 511 => 'eIssn' }, + 'eissn' => { 513 => 'eIssn' }, 'electricalblackcolumns' => { 138 => 0x1810 }, 'electronicfront-curtainshutter' => { 297 => '5.2', 298 => '5.2', 307 => '5.3', 308 => '5.2' }, 'electronicfrontcurtainshutter' => { 435 => 0x201a }, 'elevation' => { 165 => 'Elevation' }, 'email' => { 157 => 'EMail' }, - 'embargodate' => { 514 => 'embargoDate' }, - 'embdencrightsexpr' => { 507 => 'EmbdEncRightsExpr' }, - 'embeddedencodedrightsexpr' => { 507 => [\'EmbdEncRightsExpr','EmbdEncRightsExprEncRightsExpr'] }, - 'embeddedencodedrightsexprlangid' => { 507 => [\'EmbdEncRightsExpr','EmbdEncRightsExprRightsExprLangId'] }, - 'embeddedencodedrightsexprtype' => { 507 => [\'EmbdEncRightsExpr','EmbdEncRightsExprRightsExprEncType'] }, - 'embeddedxmpdigest' => { 509 => 'EmbeddedXMPDigest' }, + 'embargodate' => { 516 => 'embargoDate' }, + 'embdencrightsexpr' => { 508 => 'EmbdEncRightsExpr' }, + 'embeddedencodedrightsexpr' => { 508 => [\'EmbdEncRightsExpr','EmbdEncRightsExprEncRightsExpr'] }, + 'embeddedencodedrightsexprlangid' => { 508 => [\'EmbdEncRightsExpr','EmbdEncRightsExprRightsExprLangId'] }, + 'embeddedencodedrightsexprtype' => { 508 => [\'EmbdEncRightsExpr','EmbdEncRightsExprRightsExprEncType'] }, + 'embeddedxmpdigest' => { 511 => 'EmbeddedXMPDigest' }, 'emissivity' => { 121 => 0x3 }, 'emptyslotrelease' => { 238 => 0x625, 239 => 0x655 }, 'enablechromanoisereduction' => { 138 => 0xe6e }, @@ -2491,12 +2495,12 @@ my %tagLookup = ( 'encoderid' => { 395 => "\xa9enc" }, 'encodingtime' => { 179 => 'WM/EncodingTime' }, 'encryptionkey' => { 409 => 0xa020 }, - 'endingpage' => { 511 => 'endingPage' }, + 'endingpage' => { 513 => 'endingPage' }, 'enduser' => { 322 => 'EndUser' }, 'enduserid' => { 322 => [\'EndUser','EndUserEndUserID'] }, 'endusername' => { 322 => [\'EndUser','EndUserEndUserName'] }, 'energysavingmode' => { 238 => 0x648, 239 => 0x678 }, - 'engineer' => { 521 => 'engineer' }, + 'engineer' => { 523 => 'engineer' }, 'enhancedarktones' => { 280 => 0x8 }, 'enhancedenoisealreadyapplied' => { 491 => 'EnhanceDenoiseAlreadyApplied' }, 'enhancedenoiselumaamount' => { 491 => 'EnhanceDenoiseLumaAmount' }, @@ -2513,11 +2517,11 @@ my %tagLookup = ( 'envelopenumber' => { 132 => 0x28 }, 'envelopepriority' => { 132 => 0x3c }, 'enveloperecordversion' => { 132 => 0x0 }, - 'episode' => { 507 => 'Episode' }, + 'episode' => { 508 => 'Episode' }, 'episodeglobaluniqueid' => { 387 => 'egid' }, - 'episodeidentifier' => { 507 => [\'Episode','EpisodeIdentifier'] }, - 'episodename' => { 507 => [\'Episode','EpisodeName'] }, - 'episodenumber' => { 507 => [\'Episode','EpisodeNumber'] }, + 'episodeidentifier' => { 508 => [\'Episode','EpisodeIdentifier'] }, + 'episodename' => { 508 => [\'Episode','EpisodeName'] }, + 'episodenumber' => { 508 => [\'Episode','EpisodeNumber'] }, 'epsonimageheight' => { 317 => 0x20c }, 'epsonimagewidth' => { 317 => 0x20b }, 'epsonsoftware' => { 317 => 0x20d }, @@ -2525,17 +2529,17 @@ my %tagLookup = ( 'equipmentmanufacturer' => { 472 => 'EquipmentManufacturer' }, 'equipmentversion' => { 313 => 0x0 }, 'ettlii' => { 84 => 0x304, 85 => 0xd, 86 => 0xe, 87 => 0x7, 88 => 0x7, 89 => 0xe }, - 'event' => { 475 => 'Event', 487 => 'Event', 507 => 'Event', 511 => 'event' }, - 'eventalias' => { 510 => 'eventAlias' }, + 'event' => { 475 => 'Event', 487 => 'Event', 508 => 'Event', 513 => 'event' }, + 'eventalias' => { 512 => 'eventAlias' }, 'eventdate' => { 118 => [\'Event','EventEventDate'] }, 'eventday' => { 118 => [\'Event','EventDay'] }, 'eventearliestdate' => { 118 => [\'Event','EventEarliestDate'] }, - 'eventend' => { 510 => 'eventEnd' }, + 'eventend' => { 512 => 'eventEnd' }, 'eventenddayofyear' => { 118 => [\'Event','EventEndDayOfYear'] }, 'eventfieldnotes' => { 118 => [\'Event','EventFieldNotes'] }, 'eventfieldnumber' => { 118 => [\'Event','EventFieldNumber'] }, 'eventhabitat' => { 118 => [\'Event','EventHabitat'] }, - 'eventid' => { 118 => [\'Event','EventEventID'], 507 => 'EventId' }, + 'eventid' => { 118 => [\'Event','EventEventID'], 508 => 'EventId' }, 'eventlatestdate' => { 118 => [\'Event','EventLatestDate'] }, 'eventmonth' => { 118 => [\'Event','EventMonth'] }, 'eventnumber' => { 396 => 0x9, 397 => 0x37, 398 => 0x3a }, @@ -2545,11 +2549,11 @@ my %tagLookup = ( 'eventsamplesizevalue' => { 118 => [\'Event','EventSampleSizeValue'] }, 'eventsamplingeffort' => { 118 => [\'Event','EventSamplingEffort'] }, 'eventsamplingprotocol' => { 118 => [\'Event','EventSamplingProtocol'] }, - 'eventstart' => { 510 => 'eventStart' }, + 'eventstart' => { 512 => 'eventStart' }, 'eventstartdayofyear' => { 118 => [\'Event','EventStartDayOfYear'] }, - 'eventsubtype' => { 510 => 'eventSubtype' }, + 'eventsubtype' => { 512 => 'eventSubtype' }, 'eventtime' => { 118 => [\'Event','EventEventTime'] }, - 'eventtype' => { 510 => 'eventType' }, + 'eventtype' => { 512 => 'eventType' }, 'eventverbatimeventdate' => { 118 => [\'Event','EventVerbatimEventDate'] }, 'eventyear' => { 118 => [\'Event','EventYear'] }, 'evfgrid' => { 310 => 0x165 }, @@ -2560,7 +2564,7 @@ my %tagLookup = ( 'evsteps' => { 351 => '1.2', 353 => 0x0 }, 'evstepsize' => { 299 => '5.1', 300 => '6.1', 301 => '6.1', 305 => '0.7' }, 'exclusivecoverage' => { 484 => 'ExclusiveCoverage' }, - 'exclusivityenddate' => { 514 => 'exclusivityEndDate' }, + 'exclusivityenddate' => { 516 => 'exclusivityEndDate' }, 'excursiontolerance' => { 133 => 0x82 }, 'executiveproducer' => { 387 => "\xa9xpd" }, 'exif' => { 120 => 'EXIF' }, @@ -2571,7 +2575,7 @@ my %tagLookup = ( 'exifunicodebyteorder' => { 120 => 'ExifUnicodeByteOrder' }, 'exifversion' => { 119 => 0x9000, 500 => 'ExifVersion' }, 'exitpupilposition' => { 226 => 0x4, 227 => 0x4, 231 => 0x4 }, - 'expirationdate' => { 131 => 0x25, 514 => 'expirationDate' }, + 'expirationdate' => { 131 => 0x25, 516 => 'expirationDate' }, 'expirationtime' => { 131 => 0x26 }, 'exposure' => { 119 => 0xfe51, 494 => 'Exposure', 496 => 'Exposure' }, 'exposure2012' => { 494 => 'Exposure2012', 496 => 'Exposure2012' }, @@ -2615,7 +2619,7 @@ my %tagLookup = ( 'exposurewarning' => { 127 => 0x1302 }, 'exrauto' => { 127 => 0x1033 }, 'exrmode' => { 127 => 0x1034 }, - 'extdescraccessibility' => { 506 => 'ExtDescrAccessibility' }, + 'extdescraccessibility' => { 507 => 'ExtDescrAccessibility' }, 'extendedmenubanks' => { 238 => 0x114, 239 => 0x124 }, 'extendedshutterspeeds' => { 310 => 0x102 }, 'extendedwbdetect' => { 312 => 0x902 }, @@ -2643,7 +2647,7 @@ my %tagLookup = ( 'externalflashstatus' => { 215 => '8.2' }, 'externalflashzoom' => { 315 => 0x1205, 317 => 0x1027 }, 'externalflashzoomoverride' => { 215 => '8.1' }, - 'externalmetadatalink' => { 507 => 'ExternalMetadataLink' }, + 'externalmetadatalink' => { 508 => 'ExternalMetadataLink' }, 'externalsensorbrightnessvalue' => { 330 => 0x311, 333 => 0x311, 334 => 0x311, 337 => 0x3408 }, 'extrainfoversion' => { 426 => 0x1a }, 'eyestartaf' => { 184 => 0x40 }, @@ -2753,15 +2757,15 @@ my %tagLookup = ( 'faithfulunsharpmaskthreshold' => { 109 => 0xae }, 'far' => { 479 => 'Far' }, 'fastresetlinetime' => { 138 => 0x1860 }, - 'feedidentifier' => { 507 => 'FeedIdentifier' }, + 'feedidentifier' => { 508 => 'FeedIdentifier' }, 'femicroadjustment' => { 84 => 0x111 }, 'ffid' => { 498 => 'ffid' }, - 'field' => { 510 => 'field' }, + 'field' => { 512 => 'field' }, 'fieldcount' => { 317 => 0x103f }, 'fieldofview' => { 395 => "FOV\x00" }, 'fifoenonepixeldelay' => { 138 => 0x1901 }, 'filecreatedate' => { 120 => 'FileCreateDate' }, - 'filedatarate' => { 521 => 'fileDataRate' }, + 'filedatarate' => { 523 => 'fileDataRate' }, 'fileformat' => { 95 => 0x0, 132 => 0x14, 412 => [0x22,0x26], 435 => 0xb000 }, 'filegroupid' => { 120 => 'FileGroupID' }, 'fileindex' => { 7 => 0x143, 9 => 0x2d0, 11 => 0x172, 13 => 0x22c, 14 => 0x133, 15 => 0x13f, 16 => 0x1d3, 17 => 0x19b, 18 => 0x1e4, 19 => 0xd0, 20 => 0x1bb, 21 => 0x28c, 22 => 0x1db, 23 => 0x1d9, 24 => [0x270,0x274], 25 => 0x2aa, 26 => 0x2b3, 28 => 0x1eb, 29 => 0x4ae, 336 => 0x0 }, @@ -3000,18 +3004,18 @@ my %tagLookup = ( 'focuswarning' => { 127 => 0x1301 }, 'foldername' => { 181 => 0x27 }, 'foldernumber' => { 422 => 0x9a, 424 => [0x402,0x114,0x316] }, - 'fontcomposite' => { 526 => [\'Fonts','FontsComposite'] }, - 'fontface' => { 526 => [\'Fonts','FontsFontFace'] }, - 'fontfamily' => { 526 => [\'Fonts','FontsFontFamily'] }, - 'fontfilename' => { 526 => [\'Fonts','FontsFontFileName'] }, - 'fontname' => { 526 => [\'Fonts','FontsFontName'] }, - 'fonts' => { 526 => 'Fonts' }, - 'fonttype' => { 526 => [\'Fonts','FontsFontType'] }, - 'fontversion' => { 526 => [\'Fonts','FontsVersionString'] }, + 'fontcomposite' => { 528 => [\'Fonts','FontsComposite'] }, + 'fontface' => { 528 => [\'Fonts','FontsFontFace'] }, + 'fontfamily' => { 528 => [\'Fonts','FontsFontFamily'] }, + 'fontfilename' => { 528 => [\'Fonts','FontsFontFileName'] }, + 'fontname' => { 528 => [\'Fonts','FontsFontName'] }, + 'fonts' => { 528 => 'Fonts' }, + 'fonttype' => { 528 => [\'Fonts','FontsFontType'] }, + 'fontversion' => { 528 => [\'Fonts','FontsVersionString'] }, 'for' => { 386 => 'For' }, 'forcewrite' => { 120 => 'ForceWrite' }, - 'format' => { 395 => "\xa9fmt", 479 => 'Format', 497 => 'format', 519 => 'Format' }, - 'forwardlock' => { 516 => 'forwardlock' }, + 'format' => { 395 => "\xa9fmt", 479 => 'Format', 497 => 'format', 521 => 'Format' }, + 'forwardlock' => { 518 => 'forwardlock' }, 'forwardmatrix1' => { 119 => 0xc714 }, 'forwardmatrix2' => { 119 => 0xc715 }, 'forwardmatrix3' => { 119 => 0xcd34 }, @@ -3024,7 +3028,7 @@ my %tagLookup = ( 'framerate' => { 67 => [0x1,0x6], 119 => 0xc764, 127 => 0x3820 }, 'framereadouttime' => { 389 => 'camera.framereadouttimeinmicroseconds' }, 'framewidth' => { 127 => 0x3821 }, - 'framing' => { 510 => 'framing' }, + 'framing' => { 512 => 'framing' }, 'freebytes' => { 97 => 0x1 }, 'freememorycardimages' => { 182 => [0x37,0x54], 183 => [0x2d,0x4a], 184 => 0x32 }, 'frontfacingcamera' => { 1 => 0x45 }, @@ -3054,7 +3058,9 @@ my %tagLookup = ( 'functionbutton' => { 301 => '13.1', 305 => '5.2' }, 'gainbase' => { 316 => 0x610 }, 'gaincontrol' => { 119 => 0xa407, 500 => 'GainControl' }, - 'gamma' => { 119 => 0xa500, 138 => 0x8fe, 323 => 'gAMA', 340 => 0x11c, 501 => 'Gamma' }, + 'gainmapmax' => { 505 => 'GainMapMax' }, + 'gainmapmin' => { 505 => 'GainMapMin' }, + 'gamma' => { 119 => 0xa500, 138 => 0x8fe, 323 => 'gAMA', 340 => 0x11c, 501 => 'Gamma', 505 => 'Gamma' }, 'gammablackpoint' => { 105 => 0xc }, 'gammacolortone' => { 105 => 0x3 }, 'gammacompensatedvalue' => { 133 => 0x91 }, @@ -3077,13 +3083,13 @@ my %tagLookup = ( 'geimagesize' => { 127 => 0x1304 }, 'gemake' => { 129 => 0x300 }, 'gemodel' => { 129 => 0x207 }, - 'genre' => { 387 => ['gnre',"\xa9gen"], 389 => 'genre', 395 => ['gnre',"\xa9gen"], 507 => 'Genre', 511 => 'genre', 521 => 'genre' }, - 'genrecvid' => { 507 => [\'Genre','GenreCvId'] }, - 'genrecvtermid' => { 507 => [\'Genre','GenreCvTermId'] }, - 'genrecvtermname' => { 507 => [\'Genre','GenreCvTermName'] }, - 'genrecvtermrefinedabout' => { 507 => [\'Genre','GenreCvTermRefinedAbout'] }, + 'genre' => { 387 => ['gnre',"\xa9gen"], 389 => 'genre', 395 => ['gnre',"\xa9gen"], 508 => 'Genre', 513 => 'genre', 523 => 'genre' }, + 'genrecvid' => { 508 => [\'Genre','GenreCvId'] }, + 'genrecvtermid' => { 508 => [\'Genre','GenreCvTermId'] }, + 'genrecvtermname' => { 508 => [\'Genre','GenreCvTermName'] }, + 'genrecvtermrefinedabout' => { 508 => [\'Genre','GenreCvTermRefinedAbout'] }, 'genreid' => { 387 => 'geID' }, - 'geography' => { 512 => 'geography' }, + 'geography' => { 514 => 'geography' }, 'geologicalcontext' => { 118 => 'GeologicalContext' }, 'geologicalcontextbed' => { 118 => [\'GeologicalContext','GeologicalContextBed'] }, 'geologicalcontextformation' => { 118 => [\'GeologicalContext','GeologicalContextFormation'] }, @@ -3103,7 +3109,7 @@ my %tagLookup = ( 'gimbalyawdegree' => { 116 => 'GimbalYawDegree' }, 'globalaltitude' => { 384 => 0x419 }, 'globalangle' => { 384 => 0x40d }, - 'good' => { 521 => 'good' }, + 'good' => { 523 => 'good' }, 'googlehostheader' => { 387 => 'gshh' }, 'googlepingmessage' => { 387 => 'gspm' }, 'googlepingurl' => { 387 => 'gspu' }, @@ -3328,21 +3334,23 @@ my %tagLookup = ( 'h3resetblackpixels' => { 138 => 0x18b0 }, 'halftonehints' => { 119 => 0x141 }, 'hardlink' => { 120 => 'HardLink' }, - 'hasalternative' => { 511 => 'hasAlternative' }, - 'hascorrection' => { 511 => 'hasCorrection' }, - 'hascorrectiona-lang' => { 511 => [\'hasCorrection','hasCorrectionA-lang'] }, - 'hascorrectiona-platform' => { 511 => [\'hasCorrection','hasCorrectionA-platform'] }, - 'hascorrectiontext' => { 511 => [\'hasCorrection','hasCorrectionText'] }, + 'hasalternative' => { 513 => 'hasAlternative' }, + 'hascorrection' => { 513 => 'hasCorrection' }, + 'hascorrectiona-lang' => { 513 => [\'hasCorrection','hasCorrectionA-lang'] }, + 'hascorrectiona-platform' => { 513 => [\'hasCorrection','hasCorrectionA-platform'] }, + 'hascorrectiontext' => { 513 => [\'hasCorrection','hasCorrectionText'] }, 'hascrop' => { 494 => 'HasCrop', 496 => 'HasCrop' }, - 'hasextendedxmp' => { 523 => 'HasExtendedXMP' }, + 'hasextendedxmp' => { 525 => 'HasExtendedXMP' }, 'hassettings' => { 494 => 'HasSettings', 496 => 'HasSettings' }, - 'hastranslation' => { 511 => 'hasTranslation' }, - 'hasvisibleoverprint' => { 526 => 'HasVisibleOverprint' }, - 'hasvisibletransparency' => { 526 => 'HasVisibleTransparency' }, + 'hastranslation' => { 513 => 'hasTranslation' }, + 'hasvisibleoverprint' => { 528 => 'HasVisibleOverprint' }, + 'hasvisibletransparency' => { 528 => 'HasVisibleTransparency' }, 'hdmioutputn-log' => { 237 => 0x35a }, 'hdmioutputresolution' => { 238 => 0x610, 239 => 0x640 }, 'hdmiviewassist' => { 310 => 0x20f }, 'hdr' => { 60 => 0x1, 218 => 0x4, 219 => 0x4, 335 => 0x9e, 370 => 0x85, 435 => 0x200a }, + 'hdrcapacitymax' => { 505 => 'HDRCapacityMax' }, + 'hdrcapacitymin' => { 505 => 'HDRCapacityMin' }, 'hdreditmode' => { 494 => 'HDREditMode', 496 => 'HDREditMode' }, 'hdreffect' => { 60 => 0x2 }, 'hdrgain' => { 1 => 0x30 }, @@ -3355,7 +3363,7 @@ my %tagLookup = ( 'hdrshot' => { 335 => 0x76 }, 'hdrsmoothing' => { 218 => 0x6 }, 'hdvideo' => { 387 => 'hdvd' }, - 'headline' => { 131 => 0x69, 507 => 'Headline', 509 => 'Headline' }, + 'headline' => { 131 => 0x69, 508 => 'Headline', 511 => 'Headline' }, 'hierarchicalkeywords' => { 171 => [\'Keywords','KeywordsHierarchy'] }, 'hierarchicalkeywords1' => { 171 => [\'Keywords','KeywordsHierarchyKeyword'] }, 'hierarchicalkeywords1applied' => { 171 => [\'Keywords','KeywordsHierarchyApplied'] }, @@ -3401,13 +3409,13 @@ my %tagLookup = ( 'highspeedsync' => { 184 => 0x5, 310 => 0x55, 422 => 0x2, 423 => 0x2 }, 'hintversion' => { 395 => 'hinv' }, 'histogramxml' => { 287 => 0x83a1a25 }, - 'history' => { 509 => 'History', 522 => 'History' }, - 'historyaction' => { 522 => [\'History','HistoryAction'] }, - 'historychanged' => { 522 => [\'History','HistoryChanged'] }, - 'historyinstanceid' => { 522 => [\'History','HistoryInstanceID'] }, - 'historyparameters' => { 522 => [\'History','HistoryParameters'] }, - 'historysoftwareagent' => { 522 => [\'History','HistorySoftwareAgent'] }, - 'historywhen' => { 522 => [\'History','HistoryWhen'] }, + 'history' => { 511 => 'History', 524 => 'History' }, + 'historyaction' => { 524 => [\'History','HistoryAction'] }, + 'historychanged' => { 524 => [\'History','HistoryChanged'] }, + 'historyinstanceid' => { 524 => [\'History','HistoryInstanceID'] }, + 'historyparameters' => { 524 => [\'History','HistoryParameters'] }, + 'historysoftwareagent' => { 524 => [\'History','HistorySoftwareAgent'] }, + 'historywhen' => { 524 => [\'History','HistoryWhen'] }, 'holefilldarkdeltathreshold' => { 138 => 0xc88 }, 'holefilldeltathreshold' => { 138 => 0xc7e }, 'hometowncity' => { 113 => 0x3006, 370 => 0x23, 376 => 0x2 }, @@ -3451,7 +3459,7 @@ my %tagLookup = ( 'humanobservationyear' => { 118 => [\'HumanObservation','HumanObservationYear'] }, 'humidity' => { 119 => 0x9401, 501 => 'Humidity' }, 'icc_profile' => { 120 => 'ICC_Profile' }, - 'iccprofilename' => { 509 => 'ICCProfile' }, + 'iccprofilename' => { 511 => 'ICCProfile' }, 'iconuri' => { 395 => 'icnu' }, 'idccreativestyle' => { 470 => 0x8000 }, 'idcpreviewlength' => { 470 => 0x202 }, @@ -3464,7 +3472,7 @@ my %tagLookup = ( 'identificationverificationstatus' => { 118 => [\'Identification','IdentificationIdentificationVerificationStatus'] }, 'identifiedby' => { 118 => [\'Identification','IdentificationIdentifiedBy'] }, 'identifiedbyid' => { 118 => [\'Identification','IdentificationIdentifiedByID'] }, - 'identifier' => { 497 => 'identifier', 519 => 'Identifier' }, + 'identifier' => { 497 => 'identifier', 521 => 'Identifier' }, 'ifcameramodel' => { 138 => 0x9c8 }, 'illuminantdata1' => { 119 => 0xcd35 }, 'illuminantdata2' => { 119 => 0xcd36 }, @@ -3489,17 +3497,19 @@ my %tagLookup = ( 'imagecropy' => { 138 => 0x420 }, 'imagedata' => { 481 => 'Data' }, 'imagedatasize' => { 233 => 0xa2 }, - 'imagedescription' => { 119 => 0x10e, 517 => 'ImageDescription' }, + 'imagedescription' => { 119 => 0x10e, 519 => 'ImageDescription' }, 'imageduplicationconstraints' => { 322 => 'ImageDuplicationConstraints' }, 'imagedustoff' => { 287 => 0xfe443a45 }, 'imageeditcount' => { 370 => 0x41 }, 'imageediting' => { 370 => 0x32 }, + 'imageeditingsoftware' => { 119 => 0xa43b }, + 'imageeditor' => { 119 => 0xa438 }, 'imageeffects' => { 402 => 0x1010 }, 'imagefileconstraints' => { 322 => 'ImageFileConstraints' }, 'imagefileformatasdelivered' => { 322 => 'ImageFileFormatAsDelivered' }, 'imagefilesizeasdelivered' => { 322 => 'ImageFileSizeAsDelivered' }, 'imagegeneration' => { 127 => 0x1436 }, - 'imageheight' => { 119 => 0x101, 188 => 0xc, 379 => 0x10d, 479 => 'ImageHeight', 517 => 'ImageLength' }, + 'imageheight' => { 119 => 0x101, 188 => 0xc, 379 => 0x10d, 479 => 'ImageHeight', 519 => 'ImageLength' }, 'imagehistory' => { 119 => 0x9213, 499 => 'ImageHistory' }, 'imageidnumber' => { 330 => 0x340 }, 'imagemimetype' => { 481 => 'Mime' }, @@ -3518,27 +3528,27 @@ my %tagLookup = ( 'imagerbiassettlingdelaymsec' => { 138 => 0x600 }, 'imagerboardversion' => { 138 => 0x439 }, 'imagercols' => { 138 => 0x17d4 }, - 'imageref' => { 505 => 'ImageRef' }, - 'imageregion' => { 507 => 'ImageRegion' }, - 'imageregionboundary' => { 507 => [\'ImageRegion','ImageRegionRegionBoundary'] }, - 'imageregionboundaryh' => { 507 => [\'ImageRegion','ImageRegionRegionBoundaryRbH'] }, - 'imageregionboundaryrx' => { 507 => [\'ImageRegion','ImageRegionRegionBoundaryRbRx'] }, - 'imageregionboundaryshape' => { 507 => [\'ImageRegion','ImageRegionRegionBoundaryRbShape'] }, - 'imageregionboundaryunit' => { 507 => [\'ImageRegion','ImageRegionRegionBoundaryRbUnit'] }, - 'imageregionboundaryvertices' => { 507 => [\'ImageRegion','ImageRegionRegionBoundaryRbVertices'] }, - 'imageregionboundaryverticesx' => { 507 => [\'ImageRegion','ImageRegionRegionBoundaryRbVerticesRbX'] }, - 'imageregionboundaryverticesy' => { 507 => [\'ImageRegion','ImageRegionRegionBoundaryRbVerticesRbY'] }, - 'imageregionboundaryw' => { 507 => [\'ImageRegion','ImageRegionRegionBoundaryRbW'] }, - 'imageregionboundaryx' => { 507 => [\'ImageRegion','ImageRegionRegionBoundaryRbX'] }, - 'imageregionboundaryy' => { 507 => [\'ImageRegion','ImageRegionRegionBoundaryRbY'] }, - 'imageregionctype' => { 507 => [\'ImageRegion','ImageRegionRCtype'] }, - 'imageregionctypeidentifier' => { 507 => [\'ImageRegion','ImageRegionRCtypeIdentifier'] }, - 'imageregionctypename' => { 507 => [\'ImageRegion','ImageRegionRCtypeName'] }, - 'imageregionid' => { 507 => [\'ImageRegion','ImageRegionRId'] }, - 'imageregionname' => { 507 => [\'ImageRegion','ImageRegionName'] }, - 'imageregionrole' => { 507 => [\'ImageRegion','ImageRegionRRole'] }, - 'imageregionroleidentifier' => { 507 => [\'ImageRegion','ImageRegionRRoleIdentifier'] }, - 'imageregionrolename' => { 507 => [\'ImageRegion','ImageRegionRRoleName'] }, + 'imageref' => { 506 => 'ImageRef' }, + 'imageregion' => { 508 => 'ImageRegion' }, + 'imageregionboundary' => { 508 => [\'ImageRegion','ImageRegionRegionBoundary'] }, + 'imageregionboundaryh' => { 508 => [\'ImageRegion','ImageRegionRegionBoundaryRbH'] }, + 'imageregionboundaryrx' => { 508 => [\'ImageRegion','ImageRegionRegionBoundaryRbRx'] }, + 'imageregionboundaryshape' => { 508 => [\'ImageRegion','ImageRegionRegionBoundaryRbShape'] }, + 'imageregionboundaryunit' => { 508 => [\'ImageRegion','ImageRegionRegionBoundaryRbUnit'] }, + 'imageregionboundaryvertices' => { 508 => [\'ImageRegion','ImageRegionRegionBoundaryRbVertices'] }, + 'imageregionboundaryverticesx' => { 508 => [\'ImageRegion','ImageRegionRegionBoundaryRbVerticesRbX'] }, + 'imageregionboundaryverticesy' => { 508 => [\'ImageRegion','ImageRegionRegionBoundaryRbVerticesRbY'] }, + 'imageregionboundaryw' => { 508 => [\'ImageRegion','ImageRegionRegionBoundaryRbW'] }, + 'imageregionboundaryx' => { 508 => [\'ImageRegion','ImageRegionRegionBoundaryRbX'] }, + 'imageregionboundaryy' => { 508 => [\'ImageRegion','ImageRegionRegionBoundaryRbY'] }, + 'imageregionctype' => { 508 => [\'ImageRegion','ImageRegionRCtype'] }, + 'imageregionctypeidentifier' => { 508 => [\'ImageRegion','ImageRegionRCtypeIdentifier'] }, + 'imageregionctypename' => { 508 => [\'ImageRegion','ImageRegionRCtypeName'] }, + 'imageregionid' => { 508 => [\'ImageRegion','ImageRegionRId'] }, + 'imageregionname' => { 508 => [\'ImageRegion','ImageRegionName'] }, + 'imageregionrole' => { 508 => [\'ImageRegion','ImageRegionRRole'] }, + 'imageregionroleidentifier' => { 508 => [\'ImageRegion','ImageRegionRRoleIdentifier'] }, + 'imageregionrolename' => { 508 => [\'ImageRegion','ImageRegionRRoleName'] }, 'imageresolution' => { 138 => 0x944 }, 'imageresolutionjpg' => { 138 => 0x945 }, 'imagereview' => { 296 => '0.4', 305 => '0.4' }, @@ -3554,7 +3564,7 @@ my %tagLookup = ( 'imagesegmentstartline' => { 138 => 0x184c }, 'imagesize' => { 162 => 'ImageSize' }, 'imagesizeraw' => { 233 => 0x3e }, - 'imagesizerestriction' => { 514 => 'imageSizeRestriction' }, + 'imagesizerestriction' => { 516 => 'imageSizeRestriction' }, 'imagesourcedata' => { 119 => 0x935c }, 'imagespace' => { 138 => 0x909 }, 'imagestabilization' => { 34 => 0x22, 113 => 0x3020, 127 => 0x1422, 156 => 'ImageStabilization', 182 => 0xbd, 183 => 0x71, 184 => 0x57, 185 => 0x0, 186 => [0x18,0x107,0x113], 187 => 0x49c2, 233 => 0xac, 312 => 0x604, 315 => 0x1600, 335 => 0x1a, 427 => 0x12, 428 => 0x11, 435 => 0xb026 }, @@ -3570,41 +3580,41 @@ my %tagLookup = ( 'imagetone' => { 370 => 0x4f }, 'imagetype' => { 131 => 0x82, 322 => 'ImageType' }, 'imageuniqueid' => { 1 => 0x15, 64 => 0x28, 119 => 0xa420, 499 => 'ImageUniqueID', 500 => 'ImageUniqueID' }, - 'imagewidth' => { 119 => 0x100, 188 => 0xe, 379 => 0x10c, 479 => 'ImageWidth', 517 => 'ImageWidth' }, + 'imagewidth' => { 119 => 0x100, 188 => 0xe, 379 => 0x10c, 479 => 'ImageWidth', 519 => 'ImageWidth' }, 'inclinationangle' => { 470 => 0x900f }, 'inclinationcorrection' => { 470 => 0x900e }, 'incrementaltemperature' => { 494 => 'IncrementalTemperature', 496 => 'IncrementalTemperature' }, 'incrementaltint' => { 494 => 'IncrementalTint', 496 => 'IncrementalTint' }, - 'industry' => { 511 => 'industry', 512 => 'industry' }, + 'industry' => { 513 => 'industry', 514 => 'industry' }, 'infobuttonwhenshooting' => { 84 => 0x409 }, 'information' => { 389 => 'information', 395 => "\xa9inf" }, 'infourl' => { 395 => 'infu' }, 'infraredilluminator' => { 396 => 0x28 }, - 'ingredientexclusion' => { 513 => 'ingredientExclusion' }, - 'ingredients' => { 522 => 'Ingredients' }, - 'ingredientsalternatepaths' => { 522 => [\'Ingredients','IngredientsAlternatePaths'] }, - 'ingredientsdocumentid' => { 522 => [\'Ingredients','IngredientsDocumentID'] }, - 'ingredientsfilepath' => { 522 => [\'Ingredients','IngredientsFilePath'] }, - 'ingredientsfrompart' => { 522 => [\'Ingredients','IngredientsFromPart'] }, - 'ingredientsinstanceid' => { 522 => [\'Ingredients','IngredientsInstanceID'] }, - 'ingredientslastmodifydate' => { 522 => [\'Ingredients','IngredientsLastModifyDate'] }, - 'ingredientslasturl' => { 522 => [\'Ingredients','IngredientsLastURL'] }, - 'ingredientslinkcategory' => { 522 => [\'Ingredients','IngredientsLinkCategory'] }, - 'ingredientslinkform' => { 522 => [\'Ingredients','IngredientsLinkForm'] }, - 'ingredientsmanager' => { 522 => [\'Ingredients','IngredientsManager'] }, - 'ingredientsmanagervariant' => { 522 => [\'Ingredients','IngredientsManagerVariant'] }, - 'ingredientsmanageto' => { 522 => [\'Ingredients','IngredientsManageTo'] }, - 'ingredientsmanageui' => { 522 => [\'Ingredients','IngredientsManageUI'] }, - 'ingredientsmaskmarkers' => { 522 => [\'Ingredients','IngredientsMaskMarkers'] }, - 'ingredientsoriginaldocumentid' => { 522 => [\'Ingredients','IngredientsOriginalDocumentID'] }, - 'ingredientspartmapping' => { 522 => [\'Ingredients','IngredientsPartMapping'] }, - 'ingredientsplacedresolutionunit' => { 522 => [\'Ingredients','IngredientsPlacedResolutionUnit'] }, - 'ingredientsplacedxresolution' => { 522 => [\'Ingredients','IngredientsPlacedXResolution'] }, - 'ingredientsplacedyresolution' => { 522 => [\'Ingredients','IngredientsPlacedYResolution'] }, - 'ingredientsrenditionclass' => { 522 => [\'Ingredients','IngredientsRenditionClass'] }, - 'ingredientsrenditionparams' => { 522 => [\'Ingredients','IngredientsRenditionParams'] }, - 'ingredientstopart' => { 522 => [\'Ingredients','IngredientsToPart'] }, - 'ingredientsversionid' => { 522 => [\'Ingredients','IngredientsVersionID'] }, + 'ingredientexclusion' => { 515 => 'ingredientExclusion' }, + 'ingredients' => { 524 => 'Ingredients' }, + 'ingredientsalternatepaths' => { 524 => [\'Ingredients','IngredientsAlternatePaths'] }, + 'ingredientsdocumentid' => { 524 => [\'Ingredients','IngredientsDocumentID'] }, + 'ingredientsfilepath' => { 524 => [\'Ingredients','IngredientsFilePath'] }, + 'ingredientsfrompart' => { 524 => [\'Ingredients','IngredientsFromPart'] }, + 'ingredientsinstanceid' => { 524 => [\'Ingredients','IngredientsInstanceID'] }, + 'ingredientslastmodifydate' => { 524 => [\'Ingredients','IngredientsLastModifyDate'] }, + 'ingredientslasturl' => { 524 => [\'Ingredients','IngredientsLastURL'] }, + 'ingredientslinkcategory' => { 524 => [\'Ingredients','IngredientsLinkCategory'] }, + 'ingredientslinkform' => { 524 => [\'Ingredients','IngredientsLinkForm'] }, + 'ingredientsmanager' => { 524 => [\'Ingredients','IngredientsManager'] }, + 'ingredientsmanagervariant' => { 524 => [\'Ingredients','IngredientsManagerVariant'] }, + 'ingredientsmanageto' => { 524 => [\'Ingredients','IngredientsManageTo'] }, + 'ingredientsmanageui' => { 524 => [\'Ingredients','IngredientsManageUI'] }, + 'ingredientsmaskmarkers' => { 524 => [\'Ingredients','IngredientsMaskMarkers'] }, + 'ingredientsoriginaldocumentid' => { 524 => [\'Ingredients','IngredientsOriginalDocumentID'] }, + 'ingredientspartmapping' => { 524 => [\'Ingredients','IngredientsPartMapping'] }, + 'ingredientsplacedresolutionunit' => { 524 => [\'Ingredients','IngredientsPlacedResolutionUnit'] }, + 'ingredientsplacedxresolution' => { 524 => [\'Ingredients','IngredientsPlacedXResolution'] }, + 'ingredientsplacedyresolution' => { 524 => [\'Ingredients','IngredientsPlacedYResolution'] }, + 'ingredientsrenditionclass' => { 524 => [\'Ingredients','IngredientsRenditionClass'] }, + 'ingredientsrenditionparams' => { 524 => [\'Ingredients','IngredientsRenditionParams'] }, + 'ingredientstopart' => { 524 => [\'Ingredients','IngredientsToPart'] }, + 'ingredientsversionid' => { 524 => [\'Ingredients','IngredientsVersionID'] }, 'initialafpointaiservoaf' => { 84 => 0x51e }, 'initialafpointinservo' => { 2 => 0x13 }, 'initialcameradolly' => { 482 => 'InitialCameraDolly' }, @@ -3618,13 +3628,13 @@ my %tagLookup = ( 'initialzoomsetting' => { 294 => '9.3', 303 => '27.3' }, 'inkset' => { 119 => 0x14c }, 'inputprofile' => { 138 => 0x1389 }, - 'instanceid' => { 522 => 'InstanceID' }, + 'instanceid' => { 524 => 'InstanceID' }, 'instantplaybacksetup' => { 184 => 0x3e }, 'instantplaybacktime' => { 184 => 0x3d }, - 'instructions' => { 509 => 'Instructions' }, - 'instrument' => { 521 => 'instrument' }, + 'instructions' => { 511 => 'Instructions' }, + 'instrument' => { 523 => 'instrument' }, 'integrationtime' => { 138 => 0x423 }, - 'intellectualgenre' => { 506 => 'IntellectualGenre' }, + 'intellectualgenre' => { 507 => 'IntellectualGenre' }, 'intelligentauto' => { 435 => 0xb052, 462 => 0xd, 463 => 0xe, 464 => 0xd }, 'intelligentcontrast' => { 52 => 0x4 }, 'intelligentd-range' => { 335 => 0x79 }, @@ -3657,9 +3667,9 @@ my %tagLookup = ( 'intervalpriority' => { 222 => 0x186, 237 => 0xba }, 'intervals' => { 222 => 0x17c, 237 => 0xb0, 238 => 0xbc, 239 => 0xcc }, 'intervalshooting' => { 223 => 0x24, 255 => 0x24, 256 => 0x28, 370 => 0x92 }, - 'introtime' => { 521 => 'introTime' }, - 'introtimescale' => { 521 => [\'introTime','introTimeScale'] }, - 'introtimevalue' => { 521 => [\'introTime','introTimeValue'] }, + 'introtime' => { 523 => 'introTime' }, + 'introtimescale' => { 523 => [\'introTime','introTimeScale'] }, + 'introtimevalue' => { 523 => [\'introTime','introTimeValue'] }, 'ipaversion' => { 138 => 0xdae }, 'ipfcameramodel' => { 138 => 0xe4d }, 'iptc' => { 120 => 'IPTC' }, @@ -3669,13 +3679,13 @@ my %tagLookup = ( 'iptcimageheight' => { 133 => 0x1e }, 'iptcimagerotation' => { 133 => 0x66 }, 'iptcimagewidth' => { 133 => 0x14 }, - 'iptclastedited' => { 507 => 'IptcLastEdited' }, + 'iptclastedited' => { 508 => 'IptcLastEdited' }, 'iptcpicturenumber' => { 133 => 0xa }, 'iptcpixelheight' => { 133 => 0x32 }, 'iptcpixelwidth' => { 133 => 0x28 }, - 'isalternativeof' => { 511 => 'isAlternativeOf' }, - 'isbn' => { 511 => 'isbn' }, - 'iscorrectionof' => { 511 => 'isCorrectionOf' }, + 'isalternativeof' => { 513 => 'isAlternativeOf' }, + 'isbn' => { 513 => 'isbn' }, + 'iscorrectionof' => { 513 => 'isCorrectionOf' }, 'iscustompicturestyle' => { 109 => 0x3 }, 'ismergedhdr' => { 491 => 'IsMergedHDR' }, 'ismergedpanorama' => { 491 => 'IsMergedPanorama' }, @@ -3706,20 +3716,20 @@ my %tagLookup = ( 'isostepsize' => { 294 => '6.1', 295 => '7.2', 297 => '7.2', 298 => '7.2', 303 => '4.1', 307 => '7.2', 308 => '7.2', 310 => 0x15d }, 'isovalue' => { 317 => 0x1001 }, 'isrccode' => { 395 => "\xa9isr" }, - 'issn' => { 511 => 'issn' }, - 'issueidentifier' => { 511 => 'issueIdentifier' }, - 'issuename' => { 511 => 'issueName' }, - 'issueteaser' => { 511 => 'issueTeaser' }, - 'issuetype' => { 511 => 'issueType' }, - 'istranslationof' => { 511 => 'isTranslationOf' }, + 'issn' => { 513 => 'issn' }, + 'issueidentifier' => { 513 => 'issueIdentifier' }, + 'issuename' => { 513 => 'issueName' }, + 'issueteaser' => { 513 => 'issueTeaser' }, + 'issuetype' => { 513 => 'issueType' }, + 'istranslationof' => { 513 => 'isTranslationOf' }, 'itemsubtype' => { 178 => 'ItemSubType' }, 'itunesu' => { 387 => 'itnu' }, 'jobid' => { 131 => 0xb8 }, 'jobname' => { 502 => 'JobName' }, - 'jobref' => { 520 => 'JobRef' }, - 'jobrefid' => { 520 => [\'JobRef','JobRefId'] }, - 'jobrefname' => { 520 => [\'JobRef','JobRefName'] }, - 'jobrefurl' => { 520 => [\'JobRef','JobRefUrl'] }, + 'jobref' => { 522 => 'JobRef' }, + 'jobrefid' => { 522 => [\'JobRef','JobRefId'] }, + 'jobrefname' => { 522 => [\'JobRef','JobRefName'] }, + 'jobrefurl' => { 522 => [\'JobRef','JobRefUrl'] }, 'jobstatus' => { 502 => 'JobStatus' }, 'jpeg-heifswitch' => { 435 => 0x2039 }, 'jpeghandling' => { 494 => 'JPEGHandling', 496 => 'JPEGHandling' }, @@ -3750,16 +3760,16 @@ my %tagLookup = ( 'kelvinwb_16' => { 359 => 0x41 }, 'kelvinwb_daylight' => { 359 => 0x1 }, 'kerneldenominators' => { 138 => 0x933 }, - 'key' => { 521 => 'key' }, + 'key' => { 523 => 'key' }, 'keystonecompensation' => { 316 => 0x1900 }, 'keystonedirection' => { 316 => 0x1901 }, 'keystonevalue' => { 316 => 0x1906 }, - 'keyword' => { 387 => 'keyw', 511 => 'keyword' }, + 'keyword' => { 387 => 'keyw', 513 => 'keyword' }, 'keywordinfo' => { 171 => 'Keywords' }, - 'keywords' => { 131 => 0x19, 157 => 'Keywords', 321 => 'Keywords', 386 => 'Keywords', 389 => 'keywords', 489 => 'keywords', 508 => 'Keywords', 519 => 'Keywords' }, - 'killdate' => { 511 => 'killDate' }, - 'killdatea-platform' => { 511 => [\'killDate','killDateA-platform'] }, - 'killdatedate' => { 511 => [\'killDate','killDateDate'] }, + 'keywords' => { 131 => 0x19, 157 => 'Keywords', 321 => 'Keywords', 386 => 'Keywords', 389 => 'keywords', 489 => 'keywords', 510 => 'Keywords', 521 => 'Keywords' }, + 'killdate' => { 513 => 'killDate' }, + 'killdatea-platform' => { 513 => [\'killDate','killDateA-platform'] }, + 'killdatedate' => { 513 => [\'killDate','killDateDate'] }, 'kodakimageheight' => { 137 => 0xf908, 140 => 0xe, 142 => [0xfa1e,0xfa52], 148 => 0x70 }, 'kodakimagewidth' => { 137 => 0xf907, 140 => 0xc, 142 => [0xfa1d,0xfa51], 148 => 0x6c }, 'kodakinfotype' => { 137 => 0xfa00 }, @@ -3769,13 +3779,13 @@ my %tagLookup = ( 'kodakmodel' => { 140 => 0x0, 148 => 0x28 }, 'kodaktag' => { 138 => 0x3ea }, 'kodakversion' => { 138 => 0x0 }, - 'label' => { 325 => 'Label', 519 => 'Label' }, - 'labelname1' => { 505 => [\'TagStructure','TagStructureLabelName'] }, - 'labelname2' => { 505 => [\'TagStructure','TagStructureSubLabelsLabelName'] }, - 'labelname3' => { 505 => [\'TagStructure','TagStructureSubLabelsSubLabelsLabelName'] }, - 'labelname4' => { 505 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsLabelName'] }, - 'labelname5' => { 505 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsLabelName'] }, - 'labelname6' => { 505 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsLabelName'] }, + 'label' => { 325 => 'Label', 521 => 'Label' }, + 'labelname1' => { 506 => [\'TagStructure','TagStructureLabelName'] }, + 'labelname2' => { 506 => [\'TagStructure','TagStructureSubLabelsLabelName'] }, + 'labelname3' => { 506 => [\'TagStructure','TagStructureSubLabelsSubLabelsLabelName'] }, + 'labelname4' => { 506 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsLabelName'] }, + 'labelname5' => { 506 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsLabelName'] }, + 'labelname6' => { 506 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsLabelName'] }, 'landmark' => { 335 => 0x6f }, 'landscapeoutputhighlightpoint' => { 109 => 0x26 }, 'landscapeoutputshadowpoint' => { 109 => 0x27 }, @@ -3801,7 +3811,7 @@ my %tagLookup = ( 'lastkeywordiptc' => { 178 => 'LastKeywordIPTC' }, 'lastkeywordxmp' => { 178 => 'LastKeywordXMP' }, 'lastphotodate' => { 482 => 'LastPhotoDate' }, - 'lasturl' => { 522 => 'LastURL' }, + 'lasturl' => { 524 => 'LastURL' }, 'lateralchromaticaberration' => { 435 => 0x2012 }, 'lateralchromaticaberrationcorrectionalreadyapplied' => { 491 => 'LateralChromaticAberrationCorrectionAlreadyApplied' }, 'latestageorhigheststage' => { 118 => [\'GeologicalContext','GeologicalContextLatestAgeOrHighestStage'] }, @@ -3831,7 +3841,7 @@ my %tagLookup = ( 'lcdmatrixmarvin' => { 138 => 0xe76 }, 'lcdpanels' => { 83 => 0x8 }, 'lcheditor' => { 287 => 0x8ae85e }, - 'legacyiptcdigest' => { 509 => 'LegacyIPTCDigest' }, + 'legacyiptcdigest' => { 511 => 'LegacyIPTCDigest' }, 'legalcode' => { 492 => 'legalcode' }, 'lens' => { 119 => 0xfdea, 233 => 0x84, 491 => 'Lens' }, 'lensafstopbutton' => { 82 => 0x11, 83 => 0x13, 84 => 0x506, 85 => 0x10, 86 => 0x12, 89 => 0x13, 90 => 0x9 }, @@ -3961,12 +3971,12 @@ my %tagLookup = ( 'linearityuppermargin' => { 41 => 0x32c, 42 => 0x282, 45 => [0x2ba,0x2d1,0x2d5], 47 => 0x1e5, 48 => [0x1fe,0x2de], 49 => [0x232,0x310], 50 => 0x31e }, 'linearizationtable' => { 119 => 0xc618 }, 'linearresponselimit' => { 119 => 0xc62e }, - 'link' => { 511 => 'link' }, + 'link' => { 513 => 'link' }, 'linkaetoafpoint' => { 351 => '14.2' }, - 'linkedencodedrightsexpr' => { 507 => [\'LinkedEncRightsExpr','LinkedEncRightsExprLinkedRightsExpr'] }, - 'linkedencodedrightsexprlangid' => { 507 => [\'LinkedEncRightsExpr','LinkedEncRightsExprRightsExprLangId'] }, - 'linkedencodedrightsexprtype' => { 507 => [\'LinkedEncRightsExpr','LinkedEncRightsExprRightsExprEncType'] }, - 'linkedencrightsexpr' => { 507 => 'LinkedEncRightsExpr' }, + 'linkedencodedrightsexpr' => { 508 => [\'LinkedEncRightsExpr','LinkedEncRightsExprLinkedRightsExpr'] }, + 'linkedencodedrightsexprlangid' => { 508 => [\'LinkedEncRightsExpr','LinkedEncRightsExprRightsExprLangId'] }, + 'linkedencodedrightsexprtype' => { 508 => [\'LinkedEncRightsExpr','LinkedEncRightsExprRightsExprEncType'] }, + 'linkedencrightsexpr' => { 508 => 'LinkedEncRightsExpr' }, 'linlogcoring' => { 138 => 0x904 }, 'lithostratigraphicterms' => { 118 => [\'GeologicalContext','GeologicalContextLithostratigraphicTerms'] }, 'livephotoauto' => { 389 => 'live-photo.auto' }, @@ -3989,44 +3999,44 @@ my %tagLookup = ( 'localcaption' => { 131 => 0x79 }, 'localizedcameramodel' => { 119 => 0xc615 }, 'locallocationname' => { 409 => 0x30 }, - 'location' => { 232 => 0x9, 335 => 0x67, 487 => 'Location', 506 => 'Location', 510 => 'location', 511 => 'location' }, + 'location' => { 232 => 0x9, 335 => 0x67, 487 => 'Location', 507 => 'Location', 512 => 'location', 513 => 'location' }, 'locationaccuracyhorizontal' => { 389 => 'location.accuracy.horizontal' }, 'locationareacode' => { 493 => 'lac' }, 'locationbody' => { 389 => 'location.body' }, - 'locationcreated' => { 507 => 'LocationCreated' }, - 'locationcreatedcity' => { 507 => [\'LocationCreated','LocationCreatedCity'] }, - 'locationcreatedcountrycode' => { 507 => [\'LocationCreated','LocationCreatedCountryCode'] }, - 'locationcreatedcountryname' => { 507 => [\'LocationCreated','LocationCreatedCountryName'] }, - 'locationcreatedgpsaltitude' => { 507 => [\'LocationCreated','LocationCreatedGPSAltitude'] }, - 'locationcreatedgpslatitude' => { 507 => [\'LocationCreated','LocationCreatedGPSLatitude'] }, - 'locationcreatedgpslongitude' => { 507 => [\'LocationCreated','LocationCreatedGPSLongitude'] }, - 'locationcreatedidentifier' => { 507 => [\'LocationCreated','LocationCreatedIdentifier'] }, - 'locationcreatedlocationid' => { 507 => [\'LocationCreated','LocationCreatedLocationId'] }, - 'locationcreatedlocationname' => { 507 => [\'LocationCreated','LocationCreatedLocationName'] }, - 'locationcreatedprovincestate' => { 507 => [\'LocationCreated','LocationCreatedProvinceState'] }, - 'locationcreatedsublocation' => { 507 => [\'LocationCreated','LocationCreatedSublocation'] }, - 'locationcreatedworldregion' => { 507 => [\'LocationCreated','LocationCreatedWorldRegion'] }, + 'locationcreated' => { 508 => 'LocationCreated' }, + 'locationcreatedcity' => { 508 => [\'LocationCreated','LocationCreatedCity'] }, + 'locationcreatedcountrycode' => { 508 => [\'LocationCreated','LocationCreatedCountryCode'] }, + 'locationcreatedcountryname' => { 508 => [\'LocationCreated','LocationCreatedCountryName'] }, + 'locationcreatedgpsaltitude' => { 508 => [\'LocationCreated','LocationCreatedGPSAltitude'] }, + 'locationcreatedgpslatitude' => { 508 => [\'LocationCreated','LocationCreatedGPSLatitude'] }, + 'locationcreatedgpslongitude' => { 508 => [\'LocationCreated','LocationCreatedGPSLongitude'] }, + 'locationcreatedidentifier' => { 508 => [\'LocationCreated','LocationCreatedIdentifier'] }, + 'locationcreatedlocationid' => { 508 => [\'LocationCreated','LocationCreatedLocationId'] }, + 'locationcreatedlocationname' => { 508 => [\'LocationCreated','LocationCreatedLocationName'] }, + 'locationcreatedprovincestate' => { 508 => [\'LocationCreated','LocationCreatedProvinceState'] }, + 'locationcreatedsublocation' => { 508 => [\'LocationCreated','LocationCreatedSublocation'] }, + 'locationcreatedworldregion' => { 508 => [\'LocationCreated','LocationCreatedWorldRegion'] }, 'locationdate' => { 389 => 'location.date' }, 'locationinformation' => { 395 => 'loci' }, 'locationinfoversion' => { 232 => 0x0 }, 'locationname' => { 389 => 'location.name', 409 => 0x31 }, 'locationnote' => { 389 => 'location.note' }, 'locationrole' => { 389 => 'location.role' }, - 'locationshown' => { 507 => 'LocationShown' }, - 'locationshowncity' => { 507 => [\'LocationShown','LocationShownCity'] }, - 'locationshowncountrycode' => { 507 => [\'LocationShown','LocationShownCountryCode'] }, - 'locationshowncountryname' => { 507 => [\'LocationShown','LocationShownCountryName'] }, - 'locationshowngpsaltitude' => { 507 => [\'LocationShown','LocationShownGPSAltitude'] }, - 'locationshowngpslatitude' => { 507 => [\'LocationShown','LocationShownGPSLatitude'] }, - 'locationshowngpslongitude' => { 507 => [\'LocationShown','LocationShownGPSLongitude'] }, - 'locationshownidentifier' => { 507 => [\'LocationShown','LocationShownIdentifier'] }, - 'locationshownlocationid' => { 507 => [\'LocationShown','LocationShownLocationId'] }, - 'locationshownlocationname' => { 507 => [\'LocationShown','LocationShownLocationName'] }, - 'locationshownprovincestate' => { 507 => [\'LocationShown','LocationShownProvinceState'] }, - 'locationshownsublocation' => { 507 => [\'LocationShown','LocationShownSublocation'] }, - 'locationshownworldregion' => { 507 => [\'LocationShown','LocationShownWorldRegion'] }, + 'locationshown' => { 508 => 'LocationShown' }, + 'locationshowncity' => { 508 => [\'LocationShown','LocationShownCity'] }, + 'locationshowncountrycode' => { 508 => [\'LocationShown','LocationShownCountryCode'] }, + 'locationshowncountryname' => { 508 => [\'LocationShown','LocationShownCountryName'] }, + 'locationshowngpsaltitude' => { 508 => [\'LocationShown','LocationShownGPSAltitude'] }, + 'locationshowngpslatitude' => { 508 => [\'LocationShown','LocationShownGPSLatitude'] }, + 'locationshowngpslongitude' => { 508 => [\'LocationShown','LocationShownGPSLongitude'] }, + 'locationshownidentifier' => { 508 => [\'LocationShown','LocationShownIdentifier'] }, + 'locationshownlocationid' => { 508 => [\'LocationShown','LocationShownLocationId'] }, + 'locationshownlocationname' => { 508 => [\'LocationShown','LocationShownLocationName'] }, + 'locationshownprovincestate' => { 508 => [\'LocationShown','LocationShownProvinceState'] }, + 'locationshownsublocation' => { 508 => [\'LocationShown','LocationShownSublocation'] }, + 'locationshownworldregion' => { 508 => [\'LocationShown','LocationShownWorldRegion'] }, 'lockmicrophonebutton' => { 84 => 0x709 }, - 'logcomment' => { 521 => 'logComment' }, + 'logcomment' => { 523 => 'logComment' }, 'logscale' => { 138 => 0x902 }, 'longdescription' => { 387 => 'ldes' }, 'longexposurenoisereduction' => { 62 => 0x4, 84 => 0x201, 85 => 0x1, 86 => 0x2, 87 => 0x1, 88 => 0x1, 89 => 0x2, 90 => 0x1, 335 => 0x49, 422 => 0x2b, 423 => 0x25, 424 => 0x25, 435 => 0x2008, 440 => 0x11, 466 => 0x44 }, @@ -4054,7 +4064,7 @@ my %tagLookup = ( 'looksupportsmonochrome' => { 494 => [\'Look','LookSupportsMonochrome'], 496 => [\'Look','LookSupportsMonochrome'] }, 'looksupportsoutputreferred' => { 494 => [\'Look','LookSupportsOutputReferred'], 496 => [\'Look','LookSupportsOutputReferred'] }, 'lookuuid' => { 494 => [\'Look','LookUUID'], 496 => [\'Look','LookUUID'] }, - 'loop' => { 521 => 'loop' }, + 'loop' => { 523 => 'loop' }, 'loopstyle' => { 395 => 'LOOP' }, 'lowestbiostratigraphiczone' => { 118 => [\'GeologicalContext','GeologicalContextLowestBiostratigraphicZone'] }, 'luminanceadjustmentaqua' => { 494 => 'LuminanceAdjustmentAqua', 496 => 'LuminanceAdjustmentAqua' }, @@ -4074,7 +4084,7 @@ my %tagLookup = ( 'luminancenr_tiff_jpeg' => { 109 => 0x6d }, 'luminancesmoothing' => { 494 => 'LuminanceSmoothing', 496 => 'LuminanceSmoothing' }, 'lvshootingareadisplay' => { 84 => [0x40b,0x40c] }, - 'lyrics' => { 387 => "\xa9lyr", 395 => "\xa9lyr", 521 => 'lyrics' }, + 'lyrics' => { 387 => "\xa9lyr", 395 => "\xa9lyr", 523 => 'lyrics' }, 'lyricsuri' => { 395 => 'lrcu' }, 'm16cversion' => { 330 => 0x333 }, 'macatom' => { 495 => 'macAtom' }, @@ -4111,9 +4121,9 @@ my %tagLookup = ( 'magnifiedview' => { 86 => 0x11, 88 => 0x9 }, 'mainboardversion' => { 138 => 0x438 }, 'maindialexposurecomp' => { 305 => '0.6' }, - 'mainingredient' => { 513 => 'mainIngredient' }, + 'mainingredient' => { 515 => 'mainIngredient' }, 'majorversion' => { 485 => 'MajorVersion' }, - 'make' => { 98 => 0x0, 115 => 0x1, 119 => 0x10f, 156 => 'Make', 325 => 'Make', 340 => 0x10f, 389 => 'make', 395 => ['@mak',"\xa9mak"], 510 => 'make', 517 => 'Make' }, + 'make' => { 98 => 0x0, 115 => 0x1, 119 => 0x10f, 156 => 'Make', 325 => 'Make', 340 => 0x10f, 389 => 'make', 395 => ['@mak',"\xa9mak"], 512 => 'make', 519 => 'Make' }, 'makernote' => { 500 => 'MakerNote' }, 'makernoteapple' => { 117 => 'MakN', 119 => 0x927c }, 'makernotecanon' => { 117 => 'MakN', 119 => 0x927c }, @@ -4212,63 +4222,63 @@ my %tagLookup = ( 'makernoteunknowntext' => { 117 => 'MakN', 119 => 0x927c }, 'makernoteversion' => { 1 => 0x1, 186 => 0x0, 233 => 0x1, 317 => 0x0, 335 => 0x8000, 406 => 0x0, 409 => 0x1, 412 => [0x1d,0x1f], 425 => 0x2000 }, 'makerurl' => { 395 => "\xa9mal" }, - 'managedfrom' => { 522 => 'ManagedFrom' }, - 'managedfromalternatepaths' => { 522 => [\'ManagedFrom','ManagedFromAlternatePaths'] }, - 'managedfromdocumentid' => { 522 => [\'ManagedFrom','ManagedFromDocumentID'] }, - 'managedfromfilepath' => { 522 => [\'ManagedFrom','ManagedFromFilePath'] }, - 'managedfromfrompart' => { 522 => [\'ManagedFrom','ManagedFromFromPart'] }, - 'managedfrominstanceid' => { 522 => [\'ManagedFrom','ManagedFromInstanceID'] }, - 'managedfromlastmodifydate' => { 522 => [\'ManagedFrom','ManagedFromLastModifyDate'] }, - 'managedfromlasturl' => { 522 => [\'ManagedFrom','ManagedFromLastURL'] }, - 'managedfromlinkcategory' => { 522 => [\'ManagedFrom','ManagedFromLinkCategory'] }, - 'managedfromlinkform' => { 522 => [\'ManagedFrom','ManagedFromLinkForm'] }, - 'managedfrommanager' => { 522 => [\'ManagedFrom','ManagedFromManager'] }, - 'managedfrommanagervariant' => { 522 => [\'ManagedFrom','ManagedFromManagerVariant'] }, - 'managedfrommanageto' => { 522 => [\'ManagedFrom','ManagedFromManageTo'] }, - 'managedfrommanageui' => { 522 => [\'ManagedFrom','ManagedFromManageUI'] }, - 'managedfrommaskmarkers' => { 522 => [\'ManagedFrom','ManagedFromMaskMarkers'] }, - 'managedfromoriginaldocumentid' => { 522 => [\'ManagedFrom','ManagedFromOriginalDocumentID'] }, - 'managedfrompartmapping' => { 522 => [\'ManagedFrom','ManagedFromPartMapping'] }, - 'managedfromplacedresolutionunit' => { 522 => [\'ManagedFrom','ManagedFromPlacedResolutionUnit'] }, - 'managedfromplacedxresolution' => { 522 => [\'ManagedFrom','ManagedFromPlacedXResolution'] }, - 'managedfromplacedyresolution' => { 522 => [\'ManagedFrom','ManagedFromPlacedYResolution'] }, - 'managedfromrenditionclass' => { 522 => [\'ManagedFrom','ManagedFromRenditionClass'] }, - 'managedfromrenditionparams' => { 522 => [\'ManagedFrom','ManagedFromRenditionParams'] }, - 'managedfromtopart' => { 522 => [\'ManagedFrom','ManagedFromToPart'] }, - 'managedfromversionid' => { 522 => [\'ManagedFrom','ManagedFromVersionID'] }, - 'manager' => { 522 => 'Manager' }, - 'managervariant' => { 522 => 'ManagerVariant' }, - 'manageto' => { 522 => 'ManageTo' }, - 'manageui' => { 522 => 'ManageUI' }, - 'manifest' => { 522 => 'Manifest' }, - 'manifestlinkform' => { 522 => [\'Manifest','ManifestLinkForm'] }, - 'manifestplacedresolutionunit' => { 522 => [\'Manifest','ManifestPlacedResolutionUnit'] }, - 'manifestplacedxresolution' => { 522 => [\'Manifest','ManifestPlacedXResolution'] }, - 'manifestplacedyresolution' => { 522 => [\'Manifest','ManifestPlacedYResolution'] }, - 'manifestreference' => { 522 => [\'Manifest','ManifestReference'] }, - 'manifestreferencealternatepaths' => { 522 => [\'Manifest','ManifestReferenceAlternatePaths'] }, - 'manifestreferencedocumentid' => { 522 => [\'Manifest','ManifestReferenceDocumentID'] }, - 'manifestreferencefilepath' => { 522 => [\'Manifest','ManifestReferenceFilePath'] }, - 'manifestreferencefrompart' => { 522 => [\'Manifest','ManifestReferenceFromPart'] }, - 'manifestreferenceinstanceid' => { 522 => [\'Manifest','ManifestReferenceInstanceID'] }, - 'manifestreferencelastmodifydate' => { 522 => [\'Manifest','ManifestReferenceLastModifyDate'] }, - 'manifestreferencelasturl' => { 522 => [\'Manifest','ManifestReferenceLastURL'] }, - 'manifestreferencelinkcategory' => { 522 => [\'Manifest','ManifestReferenceLinkCategory'] }, - 'manifestreferencelinkform' => { 522 => [\'Manifest','ManifestReferenceLinkForm'] }, - 'manifestreferencemanager' => { 522 => [\'Manifest','ManifestReferenceManager'] }, - 'manifestreferencemanagervariant' => { 522 => [\'Manifest','ManifestReferenceManagerVariant'] }, - 'manifestreferencemanageto' => { 522 => [\'Manifest','ManifestReferenceManageTo'] }, - 'manifestreferencemanageui' => { 522 => [\'Manifest','ManifestReferenceManageUI'] }, - 'manifestreferencemaskmarkers' => { 522 => [\'Manifest','ManifestReferenceMaskMarkers'] }, - 'manifestreferenceoriginaldocumentid' => { 522 => [\'Manifest','ManifestReferenceOriginalDocumentID'] }, - 'manifestreferencepartmapping' => { 522 => [\'Manifest','ManifestReferencePartMapping'] }, - 'manifestreferenceplacedresolutionunit' => { 522 => [\'Manifest','ManifestReferencePlacedResolutionUnit'] }, - 'manifestreferenceplacedxresolution' => { 522 => [\'Manifest','ManifestReferencePlacedXResolution'] }, - 'manifestreferenceplacedyresolution' => { 522 => [\'Manifest','ManifestReferencePlacedYResolution'] }, - 'manifestreferencerenditionclass' => { 522 => [\'Manifest','ManifestReferenceRenditionClass'] }, - 'manifestreferencerenditionparams' => { 522 => [\'Manifest','ManifestReferenceRenditionParams'] }, - 'manifestreferencetopart' => { 522 => [\'Manifest','ManifestReferenceToPart'] }, - 'manifestreferenceversionid' => { 522 => [\'Manifest','ManifestReferenceVersionID'] }, + 'managedfrom' => { 524 => 'ManagedFrom' }, + 'managedfromalternatepaths' => { 524 => [\'ManagedFrom','ManagedFromAlternatePaths'] }, + 'managedfromdocumentid' => { 524 => [\'ManagedFrom','ManagedFromDocumentID'] }, + 'managedfromfilepath' => { 524 => [\'ManagedFrom','ManagedFromFilePath'] }, + 'managedfromfrompart' => { 524 => [\'ManagedFrom','ManagedFromFromPart'] }, + 'managedfrominstanceid' => { 524 => [\'ManagedFrom','ManagedFromInstanceID'] }, + 'managedfromlastmodifydate' => { 524 => [\'ManagedFrom','ManagedFromLastModifyDate'] }, + 'managedfromlasturl' => { 524 => [\'ManagedFrom','ManagedFromLastURL'] }, + 'managedfromlinkcategory' => { 524 => [\'ManagedFrom','ManagedFromLinkCategory'] }, + 'managedfromlinkform' => { 524 => [\'ManagedFrom','ManagedFromLinkForm'] }, + 'managedfrommanager' => { 524 => [\'ManagedFrom','ManagedFromManager'] }, + 'managedfrommanagervariant' => { 524 => [\'ManagedFrom','ManagedFromManagerVariant'] }, + 'managedfrommanageto' => { 524 => [\'ManagedFrom','ManagedFromManageTo'] }, + 'managedfrommanageui' => { 524 => [\'ManagedFrom','ManagedFromManageUI'] }, + 'managedfrommaskmarkers' => { 524 => [\'ManagedFrom','ManagedFromMaskMarkers'] }, + 'managedfromoriginaldocumentid' => { 524 => [\'ManagedFrom','ManagedFromOriginalDocumentID'] }, + 'managedfrompartmapping' => { 524 => [\'ManagedFrom','ManagedFromPartMapping'] }, + 'managedfromplacedresolutionunit' => { 524 => [\'ManagedFrom','ManagedFromPlacedResolutionUnit'] }, + 'managedfromplacedxresolution' => { 524 => [\'ManagedFrom','ManagedFromPlacedXResolution'] }, + 'managedfromplacedyresolution' => { 524 => [\'ManagedFrom','ManagedFromPlacedYResolution'] }, + 'managedfromrenditionclass' => { 524 => [\'ManagedFrom','ManagedFromRenditionClass'] }, + 'managedfromrenditionparams' => { 524 => [\'ManagedFrom','ManagedFromRenditionParams'] }, + 'managedfromtopart' => { 524 => [\'ManagedFrom','ManagedFromToPart'] }, + 'managedfromversionid' => { 524 => [\'ManagedFrom','ManagedFromVersionID'] }, + 'manager' => { 524 => 'Manager' }, + 'managervariant' => { 524 => 'ManagerVariant' }, + 'manageto' => { 524 => 'ManageTo' }, + 'manageui' => { 524 => 'ManageUI' }, + 'manifest' => { 524 => 'Manifest' }, + 'manifestlinkform' => { 524 => [\'Manifest','ManifestLinkForm'] }, + 'manifestplacedresolutionunit' => { 524 => [\'Manifest','ManifestPlacedResolutionUnit'] }, + 'manifestplacedxresolution' => { 524 => [\'Manifest','ManifestPlacedXResolution'] }, + 'manifestplacedyresolution' => { 524 => [\'Manifest','ManifestPlacedYResolution'] }, + 'manifestreference' => { 524 => [\'Manifest','ManifestReference'] }, + 'manifestreferencealternatepaths' => { 524 => [\'Manifest','ManifestReferenceAlternatePaths'] }, + 'manifestreferencedocumentid' => { 524 => [\'Manifest','ManifestReferenceDocumentID'] }, + 'manifestreferencefilepath' => { 524 => [\'Manifest','ManifestReferenceFilePath'] }, + 'manifestreferencefrompart' => { 524 => [\'Manifest','ManifestReferenceFromPart'] }, + 'manifestreferenceinstanceid' => { 524 => [\'Manifest','ManifestReferenceInstanceID'] }, + 'manifestreferencelastmodifydate' => { 524 => [\'Manifest','ManifestReferenceLastModifyDate'] }, + 'manifestreferencelasturl' => { 524 => [\'Manifest','ManifestReferenceLastURL'] }, + 'manifestreferencelinkcategory' => { 524 => [\'Manifest','ManifestReferenceLinkCategory'] }, + 'manifestreferencelinkform' => { 524 => [\'Manifest','ManifestReferenceLinkForm'] }, + 'manifestreferencemanager' => { 524 => [\'Manifest','ManifestReferenceManager'] }, + 'manifestreferencemanagervariant' => { 524 => [\'Manifest','ManifestReferenceManagerVariant'] }, + 'manifestreferencemanageto' => { 524 => [\'Manifest','ManifestReferenceManageTo'] }, + 'manifestreferencemanageui' => { 524 => [\'Manifest','ManifestReferenceManageUI'] }, + 'manifestreferencemaskmarkers' => { 524 => [\'Manifest','ManifestReferenceMaskMarkers'] }, + 'manifestreferenceoriginaldocumentid' => { 524 => [\'Manifest','ManifestReferenceOriginalDocumentID'] }, + 'manifestreferencepartmapping' => { 524 => [\'Manifest','ManifestReferencePartMapping'] }, + 'manifestreferenceplacedresolutionunit' => { 524 => [\'Manifest','ManifestReferencePlacedResolutionUnit'] }, + 'manifestreferenceplacedxresolution' => { 524 => [\'Manifest','ManifestReferencePlacedXResolution'] }, + 'manifestreferenceplacedyresolution' => { 524 => [\'Manifest','ManifestReferencePlacedYResolution'] }, + 'manifestreferencerenditionclass' => { 524 => [\'Manifest','ManifestReferenceRenditionClass'] }, + 'manifestreferencerenditionparams' => { 524 => [\'Manifest','ManifestReferenceRenditionParams'] }, + 'manifestreferencetopart' => { 524 => [\'Manifest','ManifestReferenceToPart'] }, + 'manifestreferenceversionid' => { 524 => [\'Manifest','ManifestReferenceVersionID'] }, 'manometerpressure' => { 312 => 0x900, 335 => 0x86 }, 'manometerreading' => { 312 => 0x901 }, 'manualafpointselectpattern' => { 84 => 0x513 }, @@ -4283,27 +4293,27 @@ my %tagLookup = ( 'manufacturedate' => { 191 => 0x6705, 350 => 0x1 }, 'manufacturedate1' => { 404 => 0x4 }, 'manufacturedate2' => { 404 => 0x5 }, - 'manufacturer' => { 479 => 'Manufacturer', 510 => 'manufacturer' }, + 'manufacturer' => { 479 => 'Manufacturer', 512 => 'manufacturer' }, 'mariahchromablursize' => { 138 => 0xf0d }, 'mariahmaphithreshold' => { 138 => 0xf0c }, 'mariahmaplothreshold' => { 138 => 0xf0b }, 'mariahsigmathreshold' => { 138 => 0xf0e }, 'mariahtexturethreshold' => { 138 => 0xf0a }, - 'marked' => { 508 => 'Marked', 525 => 'Marked' }, - 'markers' => { 521 => 'markers' }, - 'markerscomment' => { 521 => [\'markers','markersComment'] }, - 'markerscuepointparams' => { 521 => [\'markers','markersCuePointParams'] }, - 'markerscuepointparamskey' => { 521 => [\'markers','markersCuePointParamsKey'] }, - 'markerscuepointparamsvalue' => { 521 => [\'markers','markersCuePointParamsValue'] }, - 'markerscuepointtype' => { 521 => [\'markers','markersCuePointType'] }, - 'markersduration' => { 521 => [\'markers','markersDuration'] }, - 'markerslocation' => { 521 => [\'markers','markersLocation'] }, - 'markersname' => { 521 => [\'markers','markersName'] }, - 'markersprobability' => { 521 => [\'markers','markersProbability'] }, - 'markersspeaker' => { 521 => [\'markers','markersSpeaker'] }, - 'markersstarttime' => { 521 => [\'markers','markersStartTime'] }, - 'markerstarget' => { 521 => [\'markers','markersTarget'] }, - 'markerstype' => { 521 => [\'markers','markersType'] }, + 'marked' => { 510 => 'Marked', 527 => 'Marked' }, + 'markers' => { 523 => 'markers' }, + 'markerscomment' => { 523 => [\'markers','markersComment'] }, + 'markerscuepointparams' => { 523 => [\'markers','markersCuePointParams'] }, + 'markerscuepointparamskey' => { 523 => [\'markers','markersCuePointParamsKey'] }, + 'markerscuepointparamsvalue' => { 523 => [\'markers','markersCuePointParamsValue'] }, + 'markerscuepointtype' => { 523 => [\'markers','markersCuePointType'] }, + 'markersduration' => { 523 => [\'markers','markersDuration'] }, + 'markerslocation' => { 523 => [\'markers','markersLocation'] }, + 'markersname' => { 523 => [\'markers','markersName'] }, + 'markersprobability' => { 523 => [\'markers','markersProbability'] }, + 'markersspeaker' => { 523 => [\'markers','markersSpeaker'] }, + 'markersstarttime' => { 523 => [\'markers','markersStartTime'] }, + 'markerstarget' => { 523 => [\'markers','markersTarget'] }, + 'markerstype' => { 523 => [\'markers','markersType'] }, 'maskedareas' => { 119 => 0xc68e }, 'maskgroupbasedcorractive' => { 494 => [\'MaskGroupBasedCorrections','MaskGroupBasedCorrectionsCorrectionActive'], 496 => [\'MaskGroupBasedCorrections','MaskGroupBasedCorrectionsCorrectionActive'] }, 'maskgroupbasedcorramount' => { 494 => [\'MaskGroupBasedCorrections','MaskGroupBasedCorrectionsCorrectionAmount'], 496 => [\'MaskGroupBasedCorrections','MaskGroupBasedCorrectionsCorrectionAmount'] }, @@ -4462,19 +4472,19 @@ my %tagLookup = ( 'maxapertureatmaxfocal' => { 127 => 0x1407, 163 => 'MaxApertureAtMaxFocal', 225 => 0xb, 226 => 0x10, 227 => 0x11, 231 => 0x12, 313 => 0x206 }, 'maxapertureatminfocal' => { 127 => 0x1406, 225 => 0xa, 226 => 0xf, 227 => 0x10, 231 => 0x11, 313 => 0x205 }, 'maxaperturevalue' => { 119 => 0x9205, 379 => 0x414, 500 => 'MaxApertureValue' }, - 'maxavailheight' => { 507 => 'MaxAvailHeight' }, - 'maxavailwidth' => { 507 => 'MaxAvailWidth' }, + 'maxavailheight' => { 508 => 'MaxAvailHeight' }, + 'maxavailwidth' => { 508 => 'MaxAvailWidth' }, 'maxcontinuousrelease' => { 294 => 0xb, 295 => 0xc, 297 => '12.1', 298 => '12.1', 303 => 0xc, 304 => 0xb, 307 => '12.1', 308 => '12.1', 310 => 0x3d }, 'maxfaces' => { 316 => 0x1202 }, 'maxfocallength' => { 7 => 0xe6, 8 => 0x10, 9 => 0x1ab, 10 => 0x13, 11 => 0x115, 12 => 0x13, 13 => 0x153, 14 => 0xda, 16 => 0xfa, 17 => 0xee, 18 => 0x103, 19 => 0x95, 20 => 0xea, 21 => 0x157, 22 => 0xee, 23 => 0xec, 24 => 0x12b, 25 => 0x165, 26 => 0x16a, 27 => 0x188, 28 => 0x116, 29 => 0x18d, 34 => 0x17, 127 => 0x1405, 163 => 'MaxFocalLength', 225 => 0x9, 226 => 0xe, 227 => 0xf, 231 => 0x10, 313 => 0x208, 448 => 0x127c, 449 => 0x1138, 450 => 0x330, 451 => 0x330, 452 => 0x30e }, 'maximumdensityrange' => { 133 => 0x8c }, - 'maxpagesize' => { 526 => 'MaxPageSize' }, - 'maxpagesizeh' => { 526 => [\'MaxPageSize','MaxPageSizeH'] }, - 'maxpagesizeunit' => { 526 => [\'MaxPageSize','MaxPageSizeUnit'] }, - 'maxpagesizew' => { 526 => [\'MaxPageSize','MaxPageSizeW'] }, + 'maxpagesize' => { 528 => 'MaxPageSize' }, + 'maxpagesizeh' => { 528 => [\'MaxPageSize','MaxPageSizeH'] }, + 'maxpagesizeunit' => { 528 => [\'MaxPageSize','MaxPageSizeUnit'] }, + 'maxpagesizew' => { 528 => [\'MaxPageSize','MaxPageSizeW'] }, 'maxpixelvaluethreshold' => { 138 => 0xc7d }, 'maxsamplevalue' => { 119 => 0x119 }, - 'maxstorage' => { 516 => 'maxstorage' }, + 'maxstorage' => { 518 => 'maxstorage' }, 'mb-d10batteries' => { 294 => '12.6' }, 'mb-d10batterytype' => { 303 => '13.3' }, 'mb-d11batterytype' => { 304 => '2.3' }, @@ -4487,7 +4497,7 @@ my %tagLookup = ( 'mditemfscreationdate' => { 173 => 'MDItemFSCreationDate' }, 'mditemfslabel' => { 173 => 'MDItemFSLabel' }, 'mditemusertags' => { 173 => 'MDItemUserTags' }, - 'meal' => { 513 => 'meal' }, + 'meal' => { 515 => 'meal' }, 'measuredev' => { 28 => 0x9, 77 => 0x3, 97 => 0x1814, 156 => 'MeasuredEV' }, 'measuredev2' => { 13 => 0x8, 28 => 0x8, 77 => 0x17 }, 'measuredev3' => { 13 => 0x9 }, @@ -4521,15 +4531,16 @@ my %tagLookup = ( 'menubuttondisplayposition' => { 82 => 0xb, 85 => 0xa, 86 => 0xb, 89 => 0xb }, 'menubuttonreturn' => { 90 => 0xb }, 'menumonitorofftime' => { 294 => '26.1', 295 => '22.1', 297 => '22.1', 298 => '22.1', 302 => '21.1', 303 => '8.2', 304 => '21.1', 307 => '22.1', 308 => '22.1', 309 => '22.1', 310 => 0x35 }, - 'metadataauthority' => { 507 => 'metadataAuthority' }, - 'metadataauthorityidentifier' => { 507 => [\'metadataAuthority','metadataAuthorityIdentifier'] }, - 'metadataauthorityname' => { 507 => [\'metadataAuthority','metadataAuthorityName'] }, - 'metadatadate' => { 519 => 'MetadataDate' }, - 'metadatalastedited' => { 507 => 'metadataLastEdited' }, - 'metadatalasteditor' => { 507 => 'metadataLastEditor' }, - 'metadatalasteditoridentifier' => { 507 => [\'metadataLastEditor','metadataLastEditorIdentifier'] }, - 'metadatalasteditorname' => { 507 => [\'metadataLastEditor','metadataLastEditorName'] }, - 'metadatamoddate' => { 521 => 'metadataModDate' }, + 'metadataauthority' => { 508 => 'metadataAuthority' }, + 'metadataauthorityidentifier' => { 508 => [\'metadataAuthority','metadataAuthorityIdentifier'] }, + 'metadataauthorityname' => { 508 => [\'metadataAuthority','metadataAuthorityName'] }, + 'metadatadate' => { 521 => 'MetadataDate' }, + 'metadataeditingsoftware' => { 119 => 0xa43c }, + 'metadatalastedited' => { 508 => 'metadataLastEdited' }, + 'metadatalasteditor' => { 508 => 'metadataLastEditor' }, + 'metadatalasteditoridentifier' => { 508 => [\'metadataLastEditor','metadataLastEditorIdentifier'] }, + 'metadatalasteditorname' => { 508 => [\'metadataLastEditor','metadataLastEditorName'] }, + 'metadatamoddate' => { 523 => 'metadataModDate' }, 'metaversion' => { 443 => 0x34 }, 'meterinfo1row1' => { 436 => 0x0, 437 => 0x0 }, 'meterinfo1row2' => { 436 => 0x6c, 437 => 0x5a }, @@ -4583,10 +4594,10 @@ my %tagLookup = ( 'mirrorlockup' => { 82 => 0xc, 83 => 0xc, 84 => 0x60f, 85 => 0xb, 86 => 0xc, 87 => 0x6, 88 => 0x6, 89 => 0xc, 90 => 0x3 }, 'mobilecountrycode' => { 493 => 'mcc' }, 'mobilenetworkcode' => { 493 => 'mnc' }, - 'moddate' => { 325 => 'modify-date', 508 => 'ModDate' }, + 'moddate' => { 325 => 'modify-date', 510 => 'ModDate' }, 'modedialposition' => { 428 => 0x14 }, - 'model' => { 98 => 0x6, 119 => 0x110, 156 => 'Model', 325 => 'Model', 340 => 0x110, 370 => 0x23f, 389 => 'model', 395 => ['@mod','CNMN','cmnm',"\xa9mdl","\xa9mod"], 412 => 0x84, 479 => 'Model', 510 => 'model', 517 => 'Model' }, - 'modelage' => { 507 => 'ModelAge' }, + 'model' => { 98 => 0x6, 119 => 0x110, 156 => 'Model', 325 => 'Model', 340 => 0x110, 370 => 0x23f, 389 => 'model', 395 => ['@mod','CNMN','cmnm',"\xa9mdl","\xa9mod"], 412 => 0x84, 479 => 'Model', 512 => 'model', 519 => 'Model' }, + 'modelage' => { 508 => 'ModelAge' }, 'modelid' => { 311 => 0x0 }, 'modelingflash' => { 294 => '21.4', 295 => '31.1', 297 => '31.1', 298 => '31.1', 303 => '26.4', 304 => '30.2', 305 => '7.4', 306 => '30.1', 307 => '31.1', 308 => '31.1', 309 => '31.3', 310 => 0x5d }, 'modelreleaseid' => { 322 => 'ModelReleaseID' }, @@ -4594,8 +4605,8 @@ my %tagLookup = ( 'modelreleaseyear' => { 457 => 0x52, 458 => 0x46, 459 => 0x53 }, 'modeltiepoint' => { 119 => 0x8482 }, 'modeltransform' => { 119 => 0x85d8 }, - 'modelyear' => { 510 => 'modelYear' }, - 'modificationdate' => { 511 => 'modificationDate' }, + 'modelyear' => { 512 => 'modelYear' }, + 'modificationdate' => { 513 => 'modificationDate' }, 'modifiedcolortemp' => { 66 => 0x9 }, 'modifieddigitalgain' => { 66 => 0xb }, 'modifiedparamflag' => { 58 => 0x1 }, @@ -4609,7 +4620,7 @@ my %tagLookup = ( 'modifiedwhitebalance' => { 66 => 0x8 }, 'modifiedwhitebalanceblue' => { 66 => 0x7 }, 'modifiedwhitebalancered' => { 66 => 0x6 }, - 'modifydate' => { 119 => 0x132, 157 => 'ModifyDate', 321 => 'ModDate', 323 => 'tIME', 386 => 'ModDate', 392 => 0x2, 519 => 'ModifyDate' }, + 'modifydate' => { 119 => 0x132, 157 => 'ModifyDate', 321 => 'ModDate', 323 => 'tIME', 386 => 'ModDate', 392 => 0x2, 521 => 'ModifyDate' }, 'moirefilter' => { 119 => 0xfe58, 494 => 'MoireFilter', 496 => 'MoireFilter' }, 'monitorbrightness' => { 238 => 0x59a, 239 => 0x5ca }, 'monitordisplayoff' => { 184 => 0x4c }, @@ -4722,8 +4733,8 @@ my %tagLookup = ( 'mycolormode' => { 69 => 0x2 }, 'name' => { 395 => 'name', 494 => 'Name', 496 => 'Name' }, 'narrator' => { 387 => "\xa9nrt" }, - 'nationalcatalognumber' => { 511 => 'nationalCatalogNumber' }, - 'nativedigest' => { 500 => 'NativeDigest', 517 => 'NativeDigest' }, + 'nationalcatalognumber' => { 513 => 'nationalCatalogNumber' }, + 'nativedigest' => { 500 => 'NativeDigest', 519 => 'NativeDigest' }, 'ndfilter' => { 77 => 0x1c, 312 => 0x204, 402 => 0x1019 }, 'near' => { 479 => 'Near' }, 'nefbitdepth' => { 233 => 0xe22 }, @@ -4751,7 +4762,7 @@ my %tagLookup = ( 'newlensdata' => { 231 => 0x2f }, 'newrawimagedigest' => { 119 => 0xc7a7 }, 'newsphotoversion' => { 133 => 0x0 }, - 'nickname' => { 519 => 'Nickname' }, + 'nickname' => { 521 => 'Nickname' }, 'nikoncapturedata' => { 233 => 0xe01 }, 'nikoncaptureeditversions' => { 233 => 0xe13 }, 'nikoncaptureoffsets' => { 233 => 0xe0e }, @@ -4787,27 +4798,27 @@ my %tagLookup = ( 'normallinetime' => { 138 => 0x186a }, 'normalwhitelevel' => { 41 => 0x32a, 42 => 0x280, 45 => [0x2b8,0x2cf,0x2d3], 46 => 0x569, 47 => 0x1e3, 48 => [0x1fc,0x2dc], 49 => [0x230,0x30e], 50 => 0x31c }, 'notes' => { 471 => 'Notes', 489 => 'notes' }, - 'npages' => { 526 => 'NPages' }, + 'npages' => { 528 => 'NPages' }, 'nullrecord' => { 97 => 0x0 }, 'numafpoints' => { 347 => 0x2 }, - 'number' => { 511 => 'number' }, - 'numberofbeats' => { 521 => 'numberOfBeats' }, + 'number' => { 513 => 'number' }, + 'numberofbeats' => { 523 => 'numberOfBeats' }, 'numberoffocuspoints' => { 297 => '1.3', 298 => '1.3', 301 => '0.2', 302 => '0.3', 304 => '0.3' }, 'numfaceelements' => { 127 => 0x4200 }, 'numfacepositions' => { 327 => 0x0 }, 'numindexentries' => { 133 => 0x54 }, 'numwbentries' => { 341 => 0x0, 342 => 0x0 }, - 'object' => { 511 => 'object' }, + 'object' => { 513 => 'object' }, 'objectattributereference' => { 131 => 0x4 }, 'objectcycle' => { 131 => 0x4b, 489 => 'ObjectCycle' }, - 'objectdescription' => { 510 => 'objectDescription' }, + 'objectdescription' => { 512 => 'objectDescription' }, 'objectdistance' => { 112 => 0x6, 113 => 0x2022 }, 'objectname' => { 131 => 0x5 }, 'objectpreviewdata' => { 131 => 0xca }, 'objectpreviewfileformat' => { 131 => 0xc8 }, 'objectpreviewfileversion' => { 131 => 0xc9 }, - 'objectsubtype' => { 510 => 'objectSubtype' }, - 'objecttype' => { 510 => 'objectType' }, + 'objectsubtype' => { 512 => 'objectSubtype' }, + 'objecttype' => { 512 => 'objectType' }, 'objecttypereference' => { 131 => 0x3 }, 'occurrence' => { 118 => 'Occurrence' }, 'occurrenceassociatedmedia' => { 118 => [\'Occurrence','OccurrenceAssociatedMedia'] }, @@ -4843,11 +4854,13 @@ my %tagLookup = ( 'oecfnames' => { 500 => [\'OECF','OECFNames'] }, 'oecfrows' => { 500 => [\'OECF','OECFRows'] }, 'oecfvalues' => { 500 => [\'OECF','OECFValues'] }, - 'offsaledate' => { 511 => 'offSaleDate' }, - 'offsaledatea-platform' => { 511 => [\'offSaleDate','offSaleDateA-platform'] }, - 'offsaledatedate' => { 511 => [\'offSaleDate','offSaleDateDate'] }, + 'offsaledate' => { 513 => 'offSaleDate' }, + 'offsaledatea-platform' => { 513 => [\'offSaleDate','offSaleDateA-platform'] }, + 'offsaledatedate' => { 513 => [\'offSaleDate','offSaleDateDate'] }, 'offsetdacvalue' => { 138 => 0x190a }, + 'offsethdr' => { 505 => 'OffsetHDR' }, 'offsetschema' => { 119 => 0xea1d }, + 'offsetsdr' => { 505 => 'OffsetSDR' }, 'offsettime' => { 119 => 0x9010 }, 'offsettimedigitized' => { 119 => 0x9012 }, 'offsettimeoriginal' => { 119 => 0x9011 }, @@ -4864,12 +4877,12 @@ my %tagLookup = ( 'omensurfaceindex' => { 138 => 0xa64 }, 'oneshotafrelease' => { 2 => 0x9 }, 'onetouchwb' => { 317 => 0x302 }, - 'onsaledate' => { 511 => 'onSaleDate' }, - 'onsaledatea-platform' => { 511 => [\'onSaleDate','onSaleDateA-platform'] }, - 'onsaledatedate' => { 511 => [\'onSaleDate','onSaleDateDate'] }, - 'onsaleday' => { 511 => 'onSaleDay' }, - 'onsaledaya-platform' => { 511 => [\'onSaleDay','onSaleDayA-platform'] }, - 'onsaledayday' => { 511 => [\'onSaleDay','onSaleDayDay'] }, + 'onsaledate' => { 513 => 'onSaleDate' }, + 'onsaledatea-platform' => { 513 => [\'onSaleDate','onSaleDateA-platform'] }, + 'onsaledatedate' => { 513 => [\'onSaleDate','onSaleDateDate'] }, + 'onsaleday' => { 513 => 'onSaleDay' }, + 'onsaledaya-platform' => { 513 => [\'onSaleDay','onSaleDayA-platform'] }, + 'onsaledayday' => { 513 => [\'onSaleDay','onSaleDayDay'] }, 'opcodelist1' => { 119 => 0xc740 }, 'opcodelist2' => { 119 => 0xc741 }, 'opcodelist3' => { 119 => 0xc74e }, @@ -4877,12 +4890,12 @@ my %tagLookup = ( 'opticalzoomcode' => { 77 => 0xa }, 'opticalzoommode' => { 335 => 0x34 }, 'opticalzoomon' => { 411 => 0x219 }, - 'optionenddate' => { 514 => 'optionEndDate' }, + 'optionenddate' => { 516 => 'optionEndDate' }, 'opto-electricconvfactor' => { 500 => 'OECF' }, 'orangehsl' => { 103 => 0x20911 }, 'ordernumber' => { 127 => 0x8002 }, - 'organisationinimagecode' => { 507 => 'OrganisationInImageCode' }, - 'organisationinimagename' => { 507 => 'OrganisationInImageName' }, + 'organisationinimagecode' => { 508 => 'OrganisationInImageCode' }, + 'organisationinimagename' => { 508 => 'OrganisationInImageName' }, 'organism' => { 118 => 'Organism' }, 'organismassociatedoccurrences' => { 118 => [\'Organism','OrganismAssociatedOccurrences'] }, 'organismassociatedorganisms' => { 118 => [\'Organism','OrganismAssociatedOrganisms'] }, @@ -4891,8 +4904,8 @@ my %tagLookup = ( 'organismpreviousidentifications' => { 118 => [\'Organism','OrganismPreviousIdentifications'] }, 'organismremarks' => { 118 => [\'Organism','OrganismOrganismRemarks'] }, 'organismscope' => { 118 => [\'Organism','OrganismOrganismScope'] }, - 'organization' => { 511 => 'organization' }, - 'orientation' => { 119 => 0x112, 340 => 0x112, 510 => 'orientation', 517 => 'Orientation' }, + 'organization' => { 513 => 'organization' }, + 'orientation' => { 119 => 0x112, 340 => 0x112, 512 => 'orientation', 519 => 'Orientation' }, 'orientation2' => { 440 => [0x28,0x2e] }, 'orientationlinkedaf' => { 2 => 0xe }, 'orientationlinkedafpoint' => { 84 => 0x516 }, @@ -4905,8 +4918,10 @@ my %tagLookup = ( 'originaldefaultcropsize' => { 119 => 0xc793 }, 'originaldefaultfinalsize' => { 119 => 0xc791 }, 'originaldirectory' => { 332 => 0x408 }, - 'originaldocumentid' => { 522 => 'OriginalDocumentID' }, + 'originaldocumentid' => { 524 => 'OriginalDocumentID' }, 'originalfilename' => { 97 => 0x816, 138 => 0x3e9, 150 => 0x20, 332 => 0x407, 484 => 'OriginalFilename' }, + 'originalimagehash' => { 474 => 'OriginalImageHash' }, + 'originalimagehashtype' => { 474 => 'OriginalImageHashType' }, 'originalimageheight' => { 79 => 0xc, 123 => 0x1 }, 'originalimagemd5' => { 474 => 'OriginalImageMD5' }, 'originalimagesize' => { 162 => 'OriginalImageSize' }, @@ -4917,7 +4932,7 @@ my %tagLookup = ( 'originalrawfilename' => { 119 => 0xc68b }, 'originaltransmissionreference' => { 131 => 0x67 }, 'originatingprogram' => { 131 => 0x41, 489 => 'OriginatingProgram' }, - 'originplatform' => { 511 => 'originPlatform' }, + 'originplatform' => { 513 => 'originPlatform' }, 'os' => { 498 => 'os' }, 'otherconditions' => { 322 => 'OtherConditions' }, 'otherconstraints' => { 322 => 'OtherConstraints' }, @@ -4928,9 +4943,9 @@ my %tagLookup = ( 'otherlicensedocuments' => { 322 => 'OtherLicenseDocuments' }, 'otherlicenseinfo' => { 322 => 'OtherLicenseInfo' }, 'otherlicenserequirements' => { 322 => 'OtherLicenseRequirements' }, - 'outcue' => { 521 => 'outCue' }, - 'outcuescale' => { 521 => [\'outCue','outCueScale'] }, - 'outcuevalue' => { 521 => [\'outCue','outCueValue'] }, + 'outcue' => { 523 => 'outCue' }, + 'outcuescale' => { 523 => [\'outCue','outCueScale'] }, + 'outcuevalue' => { 523 => [\'outCue','outCueValue'] }, 'outputimageheight' => { 199 => 0x3 }, 'outputimagewidth' => { 199 => 0x2 }, 'outputlut' => { 335 => 0xa7 }, @@ -4939,21 +4954,21 @@ my %tagLookup = ( 'overclockcols' => { 138 => 0x189c }, 'overclockrows' => { 138 => 0x18c4 }, 'overridelookvignette' => { 494 => 'OverrideLookVignette', 496 => 'OverrideLookVignette' }, - 'owner' => { 525 => 'Owner' }, + 'owner' => { 527 => 'Owner' }, 'ownerid' => { 131 => 0xbc }, 'ownername' => { 15 => 0x10f, 64 => 0x9, 97 => 0x810, 119 => [0xa430,0xfde8], 156 => 'OwnerName', 491 => 'OwnerName', 501 => 'CameraOwnerName' }, 'padding' => { 119 => 0xea1c }, - 'pagecount' => { 511 => 'pageCount' }, - 'pageimage' => { 519 => [\'PageInfo','PageInfoImage'] }, - 'pageimageformat' => { 519 => [\'PageInfo','PageInfoFormat'] }, - 'pageimageheight' => { 519 => [\'PageInfo','PageInfoHeight'] }, - 'pageimagepagenumber' => { 519 => [\'PageInfo','PageInfoPageNumber'] }, - 'pageimagewidth' => { 519 => [\'PageInfo','PageInfoWidth'] }, - 'pageinfo' => { 519 => 'PageInfo' }, + 'pagecount' => { 513 => 'pageCount' }, + 'pageimage' => { 521 => [\'PageInfo','PageInfoImage'] }, + 'pageimageformat' => { 521 => [\'PageInfo','PageInfoFormat'] }, + 'pageimageheight' => { 521 => [\'PageInfo','PageInfoHeight'] }, + 'pageimagepagenumber' => { 521 => [\'PageInfo','PageInfoPageNumber'] }, + 'pageimagewidth' => { 521 => [\'PageInfo','PageInfoWidth'] }, + 'pageinfo' => { 521 => 'PageInfo' }, 'pagename' => { 119 => 0x11d }, 'pagenumber' => { 119 => 0x129 }, - 'pageprogressiondirection' => { 511 => 'pageProgressionDirection' }, - 'pagerange' => { 511 => 'pageRange' }, + 'pageprogressiondirection' => { 513 => 'pageProgressionDirection' }, + 'pagerange' => { 513 => 'pageRange' }, 'paintbasedcorrectionmasks' => { 494 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasks'], 496 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasks'] }, 'paintbasedcorrections' => { 494 => 'PaintBasedCorrections', 496 => 'PaintBasedCorrections' }, 'paintcorrectionactive' => { 494 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionActive'], 496 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionActive'] }, @@ -5126,8 +5141,8 @@ my %tagLookup = ( 'panoramicstitchtheta0' => { 176 => 'PanoramicStitchTheta0', 177 => 0x3 }, 'panoramicstitchtheta1' => { 176 => 'PanoramicStitchTheta1', 177 => 0x4 }, 'panoramicstitchversion' => { 177 => 0x0 }, - 'pantry' => { 522 => 'Pantry' }, - 'pantryinstanceid' => { 522 => [\'Pantry','PantryInstanceID'] }, + 'pantry' => { 524 => 'Pantry' }, + 'pantryinstanceid' => { 524 => [\'Pantry','PantryInstanceID'] }, 'parallax' => { 127 => 0xb211, 311 => 0x28 }, 'parametricdarks' => { 494 => 'ParametricDarks', 496 => 'ParametricDarks' }, 'parametrichighlights' => { 494 => 'ParametricHighlights', 496 => 'ParametricHighlights' }, @@ -5137,23 +5152,23 @@ my %tagLookup = ( 'parametricshadows' => { 494 => 'ParametricShadows', 496 => 'ParametricShadows' }, 'parametricshadowsplit' => { 494 => 'ParametricShadowSplit', 496 => 'ParametricShadowSplit' }, 'parentalrating' => { 179 => 'WM/ParentalRating' }, - 'parentid' => { 507 => 'parentId' }, + 'parentid' => { 508 => 'parentId' }, 'parentmediaeventid' => { 484 => 'ParentMediaEventID' }, 'parentmeid' => { 484 => 'ParentMEID' }, 'parentproductid' => { 387 => '@ppi' }, - 'parentreference1' => { 505 => [\'TagStructure','TagStructureParentReference'] }, - 'parentreference2' => { 505 => [\'TagStructure','TagStructureSubLabelsParentReference'] }, - 'parentreference3' => { 505 => [\'TagStructure','TagStructureSubLabelsSubLabelsParentReference'] }, - 'parentreference4' => { 505 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsParentReference'] }, - 'parentreference5' => { 505 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsParentReference'] }, - 'parentreference6' => { 505 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsParentReference'] }, + 'parentreference1' => { 506 => [\'TagStructure','TagStructureParentReference'] }, + 'parentreference2' => { 506 => [\'TagStructure','TagStructureSubLabelsParentReference'] }, + 'parentreference3' => { 506 => [\'TagStructure','TagStructureSubLabelsSubLabelsParentReference'] }, + 'parentreference4' => { 506 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsParentReference'] }, + 'parentreference5' => { 506 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsParentReference'] }, + 'parentreference6' => { 506 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsParentReference'] }, 'parentshorttitle' => { 387 => '@PST' }, 'parenttitle' => { 387 => '@pti' }, 'partialactivecols1' => { 138 => 0x17e8 }, 'partialactivecols2' => { 138 => 0x17f2 }, 'partialactiverows1' => { 138 => 0x17fc }, 'partialactiverows2' => { 138 => 0x1806 }, - 'partofcompilation' => { 521 => 'partOfCompilation' }, + 'partofcompilation' => { 523 => 'partOfCompilation' }, 'patientbirthdate' => { 472 => 'PatientDOB' }, 'patientid' => { 472 => 'PatientID' }, 'patientname' => { 472 => 'PatientName' }, @@ -5169,7 +5184,7 @@ my %tagLookup = ( 'patternimagerwidth' => { 138 => 0x960 }, 'patternx' => { 138 => 0x966 }, 'patterny' => { 138 => 0x967 }, - 'pdfversion' => { 508 => 'PDFVersion' }, + 'pdfversion' => { 510 => 'PDFVersion' }, 'pentaximagesize' => { 370 => 0x9 }, 'pentaxmodelid' => { 350 => 0x0, 370 => 0x5 }, 'pentaxmodeltype' => { 370 => 0x1 }, @@ -5190,23 +5205,23 @@ my %tagLookup = ( 'peripherallighting' => { 79 => 0x2, 127 => 0x3804 }, 'peripherallightingsetting' => { 80 => 0x5 }, 'peripherallightingvalue' => { 79 => 0x6 }, - 'permissions' => { 514 => 'permissions' }, + 'permissions' => { 516 => 'permissions' }, 'permits' => { 492 => 'permits' }, - 'person' => { 511 => 'person' }, + 'person' => { 513 => 'person' }, 'personality' => { 484 => 'Personality' }, - 'personheard' => { 507 => 'PersonHeard' }, - 'personheardidentifier' => { 507 => [\'PersonHeard','PersonHeardIdentifier'] }, - 'personheardname' => { 507 => [\'PersonHeard','PersonHeardName'] }, - 'personinimage' => { 507 => 'PersonInImage' }, - 'personinimagecharacteristic' => { 507 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonCharacteristic'] }, - 'personinimagecvtermcvid' => { 507 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonCharacteristicCvId'] }, - 'personinimagecvtermid' => { 507 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonCharacteristicCvTermId'] }, - 'personinimagecvtermname' => { 507 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonCharacteristicCvTermName'] }, - 'personinimagecvtermrefinedabout' => { 507 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonCharacteristicCvTermRefinedAbout'] }, - 'personinimagedescription' => { 507 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonDescription'] }, - 'personinimageid' => { 507 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonId'] }, - 'personinimagename' => { 507 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonName'] }, - 'personinimagewdetails' => { 507 => 'PersonInImageWDetails' }, + 'personheard' => { 508 => 'PersonHeard' }, + 'personheardidentifier' => { 508 => [\'PersonHeard','PersonHeardIdentifier'] }, + 'personheardname' => { 508 => [\'PersonHeard','PersonHeardName'] }, + 'personinimage' => { 508 => 'PersonInImage' }, + 'personinimagecharacteristic' => { 508 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonCharacteristic'] }, + 'personinimagecvtermcvid' => { 508 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonCharacteristicCvId'] }, + 'personinimagecvtermid' => { 508 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonCharacteristicCvTermId'] }, + 'personinimagecvtermname' => { 508 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonCharacteristicCvTermName'] }, + 'personinimagecvtermrefinedabout' => { 508 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonCharacteristicCvTermRefinedAbout'] }, + 'personinimagedescription' => { 508 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonDescription'] }, + 'personinimageid' => { 508 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonId'] }, + 'personinimagename' => { 508 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonName'] }, + 'personinimagewdetails' => { 508 => 'PersonInImageWDetails' }, 'perspectiveaspect' => { 494 => 'PerspectiveAspect', 496 => 'PerspectiveAspect' }, 'perspectivehorizontal' => { 494 => 'PerspectiveHorizontal', 496 => 'PerspectiveHorizontal' }, 'perspectiverotate' => { 494 => 'PerspectiveRotate', 496 => 'PerspectiveRotate' }, @@ -5277,9 +5292,10 @@ my %tagLookup = ( 'photoeffectsgreen' => { 289 => 0x6 }, 'photoeffectsred' => { 289 => 0x4 }, 'photoeffectstype' => { 289 => 0x0 }, + 'photographer' => { 119 => 0xa437 }, 'photographicsensitivity' => { 501 => 'PhotographicSensitivity' }, 'photoinfoplayback' => { 294 => '17.6', 303 => '33.6' }, - 'photometricinterpretation' => { 119 => 0x106, 517 => 'PhotometricInterpretation' }, + 'photometricinterpretation' => { 119 => 0x106, 519 => 'PhotometricInterpretation' }, 'photoshootingmenubank' => { 238 => 0x112, 239 => 0x122, 240 => 0x24, 258 => 0x0 }, 'photoshootingmenubankimagearea' => { 236 => 0x6dd, 238 => 0x134, 239 => 0x148, 258 => '7.1' }, 'photoshopbgrthumbnail' => { 384 => 0x409 }, @@ -5335,7 +5351,7 @@ my %tagLookup = ( 'pixelsperunitx' => { 324 => 0x0 }, 'pixelsperunity' => { 324 => 0x4 }, 'pixelunits' => { 324 => 0x8 }, - 'planarconfiguration' => { 119 => 0x11c, 517 => 'PlanarConfiguration' }, + 'planarconfiguration' => { 119 => 0x11c, 519 => 'PlanarConfiguration' }, 'plane' => { 473 => [\'Planes','PlanesPlane'] }, 'planeboundary' => { 473 => [\'Planes','PlanesPlaneBoundary'] }, 'planeboundaryvertexcount' => { 473 => [\'Planes','PlanesPlaneBoundaryVertexCount'] }, @@ -5351,12 +5367,12 @@ my %tagLookup = ( 'planeposerotationz' => { 473 => [\'Planes','PlanesPlanePoseRotationZ'] }, 'planeposetimestamp' => { 473 => [\'Planes','PlanesPlanePoseTimestamp'] }, 'planes' => { 473 => 'Planes' }, - 'planningref' => { 507 => 'PlanningRef' }, - 'planningrefidentifier' => { 507 => [\'PlanningRef','PlanningRefIdentifier'] }, - 'planningrefname' => { 507 => [\'PlanningRef','PlanningRefName'] }, - 'planningrefrole' => { 507 => [\'PlanningRef','PlanningRefRole'] }, - 'platenames' => { 526 => 'PlateNames' }, - 'platform' => { 511 => 'platform' }, + 'planningref' => { 508 => 'PlanningRef' }, + 'planningrefidentifier' => { 508 => [\'PlanningRef','PlanningRefIdentifier'] }, + 'planningrefname' => { 508 => [\'PlanningRef','PlanningRefName'] }, + 'planningrefrole' => { 508 => [\'PlanningRef','PlanningRefRole'] }, + 'platenames' => { 528 => 'PlateNames' }, + 'platform' => { 513 => 'platform' }, 'playallframes' => { 395 => 'AllF' }, 'playbackflickdown' => { 310 => 0x159 }, 'playbackflickup' => { 310 => 0x155 }, @@ -5406,7 +5422,7 @@ my %tagLookup = ( 'poserotationy' => { 473 => [\'Pose','PoseRotationY'] }, 'poserotationz' => { 473 => [\'Pose','PoseRotationZ'] }, 'posetimestamp' => { 473 => [\'Pose','PoseTimestamp'] }, - 'positiondescriptor' => { 510 => 'positionDescriptor' }, + 'positiondescriptor' => { 512 => 'positionDescriptor' }, 'postalcode' => { 161 => 'PostalCode' }, 'postcropvignetteamount' => { 494 => 'PostCropVignetteAmount', 496 => 'PostCropVignetteAmount' }, 'postcropvignettefeather' => { 494 => 'PostCropVignetteFeather', 496 => 'PostCropVignetteFeather' }, @@ -5433,7 +5449,7 @@ my %tagLookup = ( 'prefs' => { 131 => 0xdd, 382 => 'Prefs' }, 'prereadfastresetcount' => { 138 => 0x187e }, 'prereleaseburstlength' => { 239 => 0x712 }, - 'preservedfilename' => { 522 => 'PreservedFileName' }, + 'preservedfilename' => { 524 => 'PreservedFileName' }, 'preservedspecimen' => { 118 => 'PreservedSpecimen' }, 'preservedspecimenmaterialsampleid' => { 118 => [\'PreservedSpecimen','PreservedSpecimenMaterialSampleID'] }, 'presettype' => { 494 => 'PresetType', 496 => 'PresetType' }, @@ -5465,7 +5481,7 @@ my %tagLookup = ( 'previewsettingsdigest' => { 119 => 0xc719 }, 'previewsettingsname' => { 119 => 0xc718 }, 'primaryafpoint' => { 193 => [0x38,0x44,0x7,0x8] }, - 'primarychromaticities' => { 119 => 0x13f, 517 => 'PrimaryChromaticities' }, + 'primarychromaticities' => { 119 => 0x13f, 519 => 'PrimaryChromaticities' }, 'primaryftp' => { 484 => 'PrimaryFTP' }, 'primaryslot' => { 240 => 0x25, 258 => 0x2 }, 'printim' => { 119 => 0xc4a5 }, @@ -5478,20 +5494,20 @@ my %tagLookup = ( 'processborderrowstop' => { 138 => 0xc63 }, 'processingsoftware' => { 119 => 0xb }, 'processversion' => { 494 => 'ProcessVersion', 496 => 'ProcessVersion' }, - 'producer' => { 179 => 'WM/Producer', 321 => 'Producer', 387 => "\xa9prd", 389 => 'producer', 395 => "\xa9prd", 508 => 'Producer' }, + 'producer' => { 179 => 'WM/Producer', 321 => 'Producer', 387 => "\xa9prd", 389 => 'producer', 395 => "\xa9prd", 510 => 'Producer' }, 'producerkeywords' => { 395 => "\xa9pdk" }, - 'productcode' => { 511 => 'productCode' }, - 'productid' => { 132 => 0x32, 387 => 'prID', 510 => 'productID' }, - 'productidtype' => { 510 => 'productIDType' }, - 'productinimage' => { 507 => 'ProductInImage' }, - 'productinimagedescription' => { 507 => [\'ProductInImage','ProductInImageProductDescription'] }, - 'productinimagegtin' => { 507 => [\'ProductInImage','ProductInImageProductGTIN'] }, - 'productinimagename' => { 507 => [\'ProductInImage','ProductInImageProductName'] }, - 'productinimageproductid' => { 507 => [\'ProductInImage','ProductInImageProductId'] }, + 'productcode' => { 513 => 'productCode' }, + 'productid' => { 132 => 0x32, 387 => 'prID', 512 => 'productID' }, + 'productidtype' => { 512 => 'productIDType' }, + 'productinimage' => { 508 => 'ProductInImage' }, + 'productinimagedescription' => { 508 => [\'ProductInImage','ProductInImageProductDescription'] }, + 'productinimagegtin' => { 508 => [\'ProductInImage','ProductInImageProductGTIN'] }, + 'productinimagename' => { 508 => [\'ProductInImage','ProductInImageProductName'] }, + 'productinimageproductid' => { 508 => [\'ProductInImage','ProductInImageProductId'] }, 'productioncode' => { 350 => 0x2 }, 'productorserviceconstraints' => { 322 => 'ProductOrServiceConstraints' }, 'productversion' => { 387 => 'VERS' }, - 'profession' => { 511 => 'profession' }, + 'profession' => { 513 => 'profession' }, 'profile' => { 473 => [\'Profiles','ProfilesProfile'] }, 'profilecalibrationsig' => { 119 => 0xc6f4 }, 'profilecameraindices' => { 473 => [\'Profiles','ProfilesProfileCameraIndices'] }, @@ -5517,29 +5533,29 @@ my %tagLookup = ( 'programversion' => { 131 => 0x46 }, 'prohibits' => { 492 => 'prohibits' }, 'projectiontype' => { 482 => 'ProjectionType', 483 => 'ProjectionType' }, - 'projectname' => { 521 => 'projectName' }, - 'projectref' => { 521 => 'projectRef' }, - 'projectrefpath' => { 521 => [\'projectRef','projectRefPath'] }, - 'projectreftype' => { 521 => [\'projectRef','projectRefType'] }, + 'projectname' => { 523 => 'projectName' }, + 'projectref' => { 523 => 'projectRef' }, + 'projectrefpath' => { 523 => [\'projectRef','projectRefPath'] }, + 'projectreftype' => { 523 => [\'projectRef','projectRefType'] }, 'promotionurl' => { 179 => 'WM/PromotionURL' }, 'propertyreleaseid' => { 322 => 'PropertyReleaseID' }, 'propertyreleasestatus' => { 322 => 'PropertyReleaseStatus' }, 'provider' => { 179 => 'WM/Provider' }, 'province-state' => { 131 => 0x5f }, - 'publicationdate' => { 511 => 'publicationDate' }, - 'publicationdatea-platform' => { 511 => [\'publicationDate','publicationDateA-platform'] }, - 'publicationdatedate' => { 511 => [\'publicationDate','publicationDateDate'] }, - 'publicationdisplaydate' => { 511 => 'publicationDisplayDate' }, - 'publicationdisplaydatea-platform' => { 511 => [\'publicationDisplayDate','publicationDisplayDateA-platform'] }, - 'publicationdisplaydatedate' => { 511 => [\'publicationDisplayDate','publicationDisplayDateDate'] }, - 'publicationevent' => { 507 => 'PublicationEvent' }, - 'publicationeventdate' => { 507 => [\'PublicationEvent','PublicationEventDate'] }, - 'publicationeventidentifier' => { 507 => [\'PublicationEvent','PublicationEventIdentifier'] }, - 'publicationeventname' => { 507 => [\'PublicationEvent','PublicationEventName'] }, - 'publicationname' => { 511 => 'publicationName' }, + 'publicationdate' => { 513 => 'publicationDate' }, + 'publicationdatea-platform' => { 513 => [\'publicationDate','publicationDateA-platform'] }, + 'publicationdatedate' => { 513 => [\'publicationDate','publicationDateDate'] }, + 'publicationdisplaydate' => { 513 => 'publicationDisplayDate' }, + 'publicationdisplaydatea-platform' => { 513 => [\'publicationDisplayDate','publicationDisplayDateA-platform'] }, + 'publicationdisplaydatedate' => { 513 => [\'publicationDisplayDate','publicationDisplayDateDate'] }, + 'publicationevent' => { 508 => 'PublicationEvent' }, + 'publicationeventdate' => { 508 => [\'PublicationEvent','PublicationEventDate'] }, + 'publicationeventidentifier' => { 508 => [\'PublicationEvent','PublicationEventIdentifier'] }, + 'publicationeventname' => { 508 => [\'PublicationEvent','PublicationEventName'] }, + 'publicationname' => { 513 => 'publicationName' }, 'publisher' => { 179 => 'WM/Publisher', 387 => "\xa9pub", 389 => 'publisher', 497 => 'publisher' }, - 'publishingfrequency' => { 511 => 'publishingFrequency' }, - 'pulldown' => { 521 => 'pullDown' }, + 'publishingfrequency' => { 513 => 'publishingFrequency' }, + 'pulldown' => { 523 => 'pullDown' }, 'purchasedate' => { 387 => 'purd' }, 'purplehsl' => { 103 => 0x20916 }, 'pxshiftperiphedgenr' => { 470 => 0x9013 }, @@ -5566,26 +5582,26 @@ my %tagLookup = ( 'rangemaskmapinforgbmax' => { 494 => [\'RangeMaskMapInfo','RangeMaskMapInfoRangeMaskMapInfoRGBMax'], 496 => [\'RangeMaskMapInfo','RangeMaskMapInfoRangeMaskMapInfoRGBMax'] }, 'rangemaskmapinforgbmin' => { 494 => [\'RangeMaskMapInfo','RangeMaskMapInfoRangeMaskMapInfoRGBMin'], 496 => [\'RangeMaskMapInfo','RangeMaskMapInfoRangeMaskMapInfoRGBMin'] }, 'rasterizedcaption' => { 131 => 0x7d }, - 'rating' => { 119 => 0x4746, 127 => 0x1431, 381 => 0xdf, 387 => 'rtng', 395 => 'rtng', 435 => 0x2002, 489 => 'rating', 498 => 'rating', 507 => 'Rating', 511 => 'rating', 519 => 'Rating' }, - 'ratingpercent' => { 119 => 0x4749, 178 => 'Rating', 387 => 'rate', 519 => 'RatingPercent' }, - 'ratingregion' => { 507 => [\'Rating','RatingRatingRegion'] }, - 'ratingregioncity' => { 507 => [\'Rating','RatingRatingRegionCity'] }, - 'ratingregioncountrycode' => { 507 => [\'Rating','RatingRatingRegionCountryCode'] }, - 'ratingregioncountryname' => { 507 => [\'Rating','RatingRatingRegionCountryName'] }, - 'ratingregiongpsaltitude' => { 507 => [\'Rating','RatingRatingRegionGPSAltitude'] }, - 'ratingregiongpslatitude' => { 507 => [\'Rating','RatingRatingRegionGPSLatitude'] }, - 'ratingregiongpslongitude' => { 507 => [\'Rating','RatingRatingRegionGPSLongitude'] }, - 'ratingregionidentifier' => { 507 => [\'Rating','RatingRatingRegionIdentifier'] }, - 'ratingregionlocationid' => { 507 => [\'Rating','RatingRatingRegionLocationId'] }, - 'ratingregionlocationname' => { 507 => [\'Rating','RatingRatingRegionLocationName'] }, - 'ratingregionprovincestate' => { 507 => [\'Rating','RatingRatingRegionProvinceState'] }, - 'ratingregionsublocation' => { 507 => [\'Rating','RatingRatingRegionSublocation'] }, - 'ratingregionworldregion' => { 507 => [\'Rating','RatingRatingRegionWorldRegion'] }, - 'ratingscalemaxvalue' => { 507 => [\'Rating','RatingRatingScaleMaxValue'] }, - 'ratingscaleminvalue' => { 507 => [\'Rating','RatingRatingScaleMinValue'] }, - 'ratingsourcelink' => { 507 => [\'Rating','RatingRatingSourceLink'] }, - 'ratingvalue' => { 507 => [\'Rating','RatingRatingValue'] }, - 'ratingvaluelogolink' => { 507 => [\'Rating','RatingRatingValueLogoLink'] }, + 'rating' => { 119 => 0x4746, 127 => 0x1431, 381 => 0xdf, 387 => 'rtng', 395 => 'rtng', 435 => 0x2002, 489 => 'rating', 498 => 'rating', 508 => 'Rating', 513 => 'rating', 521 => 'Rating' }, + 'ratingpercent' => { 119 => 0x4749, 178 => 'Rating', 387 => 'rate', 521 => 'RatingPercent' }, + 'ratingregion' => { 508 => [\'Rating','RatingRatingRegion'] }, + 'ratingregioncity' => { 508 => [\'Rating','RatingRatingRegionCity'] }, + 'ratingregioncountrycode' => { 508 => [\'Rating','RatingRatingRegionCountryCode'] }, + 'ratingregioncountryname' => { 508 => [\'Rating','RatingRatingRegionCountryName'] }, + 'ratingregiongpsaltitude' => { 508 => [\'Rating','RatingRatingRegionGPSAltitude'] }, + 'ratingregiongpslatitude' => { 508 => [\'Rating','RatingRatingRegionGPSLatitude'] }, + 'ratingregiongpslongitude' => { 508 => [\'Rating','RatingRatingRegionGPSLongitude'] }, + 'ratingregionidentifier' => { 508 => [\'Rating','RatingRatingRegionIdentifier'] }, + 'ratingregionlocationid' => { 508 => [\'Rating','RatingRatingRegionLocationId'] }, + 'ratingregionlocationname' => { 508 => [\'Rating','RatingRatingRegionLocationName'] }, + 'ratingregionprovincestate' => { 508 => [\'Rating','RatingRatingRegionProvinceState'] }, + 'ratingregionsublocation' => { 508 => [\'Rating','RatingRatingRegionSublocation'] }, + 'ratingregionworldregion' => { 508 => [\'Rating','RatingRatingRegionWorldRegion'] }, + 'ratingscalemaxvalue' => { 508 => [\'Rating','RatingRatingScaleMaxValue'] }, + 'ratingscaleminvalue' => { 508 => [\'Rating','RatingRatingScaleMinValue'] }, + 'ratingsourcelink' => { 508 => [\'Rating','RatingRatingSourceLink'] }, + 'ratingvalue' => { 508 => [\'Rating','RatingRatingValue'] }, + 'ratingvaluelogolink' => { 508 => [\'Rating','RatingRatingValueLogoLink'] }, 'rawandjpgrecording' => { 82 => 0x8, 186 => 0x109, 351 => 0xd }, 'rawbrightnessadj' => { 103 => 0x20001, 108 => 0x38 }, 'rawburstimagecount' => { 75 => 0x2 }, @@ -5607,6 +5623,7 @@ my %tagLookup = ( 'rawdevcolorspace' => { 318 => 0x108, 319 => 0x109 }, 'rawdevcontrastvalue' => { 318 => 0x106, 319 => 0x105 }, 'rawdeveditstatus' => { 318 => 0x10b }, + 'rawdevelopingsoftware' => { 119 => 0xa43a }, 'rawdevelopmentprocess' => { 370 => 0x62 }, 'rawdevengine' => { 318 => 0x109, 319 => 0x10b }, 'rawdevexposurebiasvalue' => { 318 => 0x100, 319 => 0x100 }, @@ -5647,17 +5664,17 @@ my %tagLookup = ( 'readouttypeactual' => { 138 => 0x1903 }, 'readouttyperequested' => { 138 => 0x1902 }, 'reardisplay' => { 294 => '12.3', 295 => '6.2' }, - 'recdevice' => { 507 => 'RecDevice' }, - 'recdeviceattlensdescription' => { 507 => [\'RecDevice','RecDeviceAttLensDescription'] }, - 'recdevicemanufacturer' => { 507 => [\'RecDevice','RecDeviceManufacturer'] }, - 'recdevicemodelname' => { 507 => [\'RecDevice','RecDeviceModelName'] }, - 'recdeviceownersdeviceid' => { 507 => [\'RecDevice','RecDeviceOwnersDeviceId'] }, - 'recdeviceserialnumber' => { 507 => [\'RecDevice','RecDeviceSerialNumber'] }, - 'recipeendingpage' => { 513 => 'recipeEndingPage' }, - 'recipepagerange' => { 513 => 'recipePageRange' }, - 'recipesource' => { 513 => 'recipeSource' }, - 'recipestartingpage' => { 513 => 'recipeStartingPage' }, - 'recipetitle' => { 513 => 'recipeTitle' }, + 'recdevice' => { 508 => 'RecDevice' }, + 'recdeviceattlensdescription' => { 508 => [\'RecDevice','RecDeviceAttLensDescription'] }, + 'recdevicemanufacturer' => { 508 => [\'RecDevice','RecDeviceManufacturer'] }, + 'recdevicemodelname' => { 508 => [\'RecDevice','RecDeviceModelName'] }, + 'recdeviceownersdeviceid' => { 508 => [\'RecDevice','RecDeviceOwnersDeviceId'] }, + 'recdeviceserialnumber' => { 508 => [\'RecDevice','RecDeviceSerialNumber'] }, + 'recipeendingpage' => { 515 => 'recipeEndingPage' }, + 'recipepagerange' => { 515 => 'recipePageRange' }, + 'recipesource' => { 515 => 'recipeSource' }, + 'recipestartingpage' => { 515 => 'recipeStartingPage' }, + 'recipetitle' => { 515 => 'recipeTitle' }, 'recognizedface1age' => { 328 => 0x20 }, 'recognizedface1name' => { 328 => 0x4 }, 'recognizedface1position' => { 328 => 0x18 }, @@ -5705,13 +5722,13 @@ my %tagLookup = ( 'reductionmatrix2' => { 119 => 0xc626 }, 'reductionmatrix3' => { 119 => 0xcd3a }, 'reelname' => { 119 => 0xc789, 395 => 'reel' }, - 'reference1' => { 505 => [\'TagStructure','TagStructureReference'] }, - 'reference2' => { 505 => [\'TagStructure','TagStructureSubLabelsReference'] }, - 'reference3' => { 505 => [\'TagStructure','TagStructureSubLabelsSubLabelsReference'] }, - 'reference4' => { 505 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsReference'] }, - 'reference5' => { 505 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsReference'] }, - 'reference6' => { 505 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsReference'] }, - 'referenceblackwhite' => { 119 => 0x214, 517 => 'ReferenceBlackWhite' }, + 'reference1' => { 506 => [\'TagStructure','TagStructureReference'] }, + 'reference2' => { 506 => [\'TagStructure','TagStructureSubLabelsReference'] }, + 'reference3' => { 506 => [\'TagStructure','TagStructureSubLabelsSubLabelsReference'] }, + 'reference4' => { 506 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsReference'] }, + 'reference5' => { 506 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsReference'] }, + 'reference6' => { 506 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsReference'] }, + 'referenceblackwhite' => { 119 => 0x214, 519 => 'ReferenceBlackWhite' }, 'referencedate' => { 131 => 0x2f }, 'referencenumber' => { 131 => 0x32 }, 'references' => { 157 => 'References' }, @@ -5746,10 +5763,10 @@ my %tagLookup = ( 'regionrotation' => { 172 => [\'Regions','RegionsRegionListRotation'] }, 'regionseealso' => { 172 => [\'Regions','RegionsRegionListSeeAlso'] }, 'regiontype' => { 172 => [\'Regions','RegionsRegionListType'] }, - 'registryentryrole' => { 507 => [\'RegistryId','RegistryIdRegEntryRole'] }, - 'registryid' => { 507 => 'RegistryId' }, - 'registryitemid' => { 507 => [\'RegistryId','RegistryIdRegItemId'] }, - 'registryorganisationid' => { 507 => [\'RegistryId','RegistryIdRegOrgId'] }, + 'registryentryrole' => { 508 => [\'RegistryId','RegistryIdRegEntryRole'] }, + 'registryid' => { 508 => 'RegistryId' }, + 'registryitemid' => { 508 => [\'RegistryId','RegistryIdRegItemId'] }, + 'registryorganisationid' => { 508 => [\'RegistryId','RegistryIdRegOrgId'] }, 'relatedaudiofile' => { 155 => 'data' }, 'relatedaudiofilename' => { 155 => '1Name' }, 'relatedaudiofiletype' => { 155 => '0Type' }, @@ -5768,45 +5785,45 @@ my %tagLookup = ( 'relationshipofresourceid' => { 118 => [\'ResourceRelationship','ResourceRelationshipRelationshipOfResourceID'] }, 'relationshipremarks' => { 118 => [\'ResourceRelationship','ResourceRelationshipRelationshipRemarks'] }, 'relativealtitude' => { 116 => 'RelativeAltitude' }, - 'relativepeakaudiofilepath' => { 521 => 'relativePeakAudioFilePath' }, - 'relativetimestamp' => { 521 => 'relativeTimestamp' }, - 'relativetimestampscale' => { 521 => [\'relativeTimestamp','relativeTimestampScale'] }, - 'relativetimestampvalue' => { 521 => [\'relativeTimestamp','relativeTimestampValue'] }, + 'relativepeakaudiofilepath' => { 523 => 'relativePeakAudioFilePath' }, + 'relativetimestamp' => { 523 => 'relativeTimestamp' }, + 'relativetimestampscale' => { 523 => [\'relativeTimestamp','relativeTimestampScale'] }, + 'relativetimestampvalue' => { 523 => [\'relativeTimestamp','relativeTimestampValue'] }, 'releasebuttontousedial' => { 294 => '17.8', 295 => '18.5', 297 => '18.4', 298 => '18.4', 303 => '33.8', 304 => '17.6', 307 => '18.5', 308 => '18.4' }, - 'releasedate' => { 131 => 0x1e, 387 => 'rldt', 489 => 'ReleaseDate', 521 => 'releaseDate' }, + 'releasedate' => { 131 => 0x1e, 387 => 'rldt', 489 => 'ReleaseDate', 523 => 'releaseDate' }, 'releasemode' => { 113 => 0x3001, 237 => 0x5c, 268 => 0x184d, 435 => 0xb049 }, 'releasemode2' => { 444 => 0x112c, 445 => [0x112c,0x8], 446 => [0x1108,0x8], 447 => [0x1184,0x8], 448 => [0x1160,0x8], 449 => [0x4,0x1018], 450 => [0x4,0x210], 451 => [0x4,0x210], 452 => [0x4,0x208], 454 => [0x67,0x3f], 455 => [0x6b,0x6d,0x73,0x4b], 456 => [0x6b,0x4b], 457 => 0x10, 458 => 0x10, 459 => 0x9, 466 => 0x34 }, 'releasemode3' => { 444 => 0x1128, 445 => 0x1128, 446 => 0x1104, 447 => 0x1180, 448 => 0x115c, 449 => 0x1014, 450 => 0x20c, 451 => 0x20c, 452 => 0x204 }, - 'releaseready' => { 507 => 'ReleaseReady' }, + 'releaseready' => { 508 => 'ReleaseReady' }, 'releasesetting' => { 97 => 0x1016 }, 'releasetime' => { 131 => 0x23, 489 => 'ReleaseTime' }, 'remoteonduration' => { 296 => '3.4', 299 => '17.2', 300 => '18.2', 301 => '18.2', 302 => '18.2', 304 => '18.2', 305 => '4.3', 309 => '19.2' }, - 'renditionclass' => { 522 => 'RenditionClass' }, - 'renditionof' => { 522 => 'RenditionOf' }, - 'renditionofalternatepaths' => { 522 => [\'RenditionOf','RenditionOfAlternatePaths'] }, - 'renditionofdocumentid' => { 522 => [\'RenditionOf','RenditionOfDocumentID'] }, - 'renditionoffilepath' => { 522 => [\'RenditionOf','RenditionOfFilePath'] }, - 'renditionoffrompart' => { 522 => [\'RenditionOf','RenditionOfFromPart'] }, - 'renditionofinstanceid' => { 522 => [\'RenditionOf','RenditionOfInstanceID'] }, - 'renditionoflastmodifydate' => { 522 => [\'RenditionOf','RenditionOfLastModifyDate'] }, - 'renditionoflasturl' => { 522 => [\'RenditionOf','RenditionOfLastURL'] }, - 'renditionoflinkcategory' => { 522 => [\'RenditionOf','RenditionOfLinkCategory'] }, - 'renditionoflinkform' => { 522 => [\'RenditionOf','RenditionOfLinkForm'] }, - 'renditionofmanager' => { 522 => [\'RenditionOf','RenditionOfManager'] }, - 'renditionofmanagervariant' => { 522 => [\'RenditionOf','RenditionOfManagerVariant'] }, - 'renditionofmanageto' => { 522 => [\'RenditionOf','RenditionOfManageTo'] }, - 'renditionofmanageui' => { 522 => [\'RenditionOf','RenditionOfManageUI'] }, - 'renditionofmaskmarkers' => { 522 => [\'RenditionOf','RenditionOfMaskMarkers'] }, - 'renditionoforiginaldocumentid' => { 522 => [\'RenditionOf','RenditionOfOriginalDocumentID'] }, - 'renditionofpartmapping' => { 522 => [\'RenditionOf','RenditionOfPartMapping'] }, - 'renditionofplacedresolutionunit' => { 522 => [\'RenditionOf','RenditionOfPlacedResolutionUnit'] }, - 'renditionofplacedxresolution' => { 522 => [\'RenditionOf','RenditionOfPlacedXResolution'] }, - 'renditionofplacedyresolution' => { 522 => [\'RenditionOf','RenditionOfPlacedYResolution'] }, - 'renditionofrenditionclass' => { 522 => [\'RenditionOf','RenditionOfRenditionClass'] }, - 'renditionofrenditionparams' => { 522 => [\'RenditionOf','RenditionOfRenditionParams'] }, - 'renditionoftopart' => { 522 => [\'RenditionOf','RenditionOfToPart'] }, - 'renditionofversionid' => { 522 => [\'RenditionOf','RenditionOfVersionID'] }, - 'renditionparams' => { 522 => 'RenditionParams' }, + 'renditionclass' => { 524 => 'RenditionClass' }, + 'renditionof' => { 524 => 'RenditionOf' }, + 'renditionofalternatepaths' => { 524 => [\'RenditionOf','RenditionOfAlternatePaths'] }, + 'renditionofdocumentid' => { 524 => [\'RenditionOf','RenditionOfDocumentID'] }, + 'renditionoffilepath' => { 524 => [\'RenditionOf','RenditionOfFilePath'] }, + 'renditionoffrompart' => { 524 => [\'RenditionOf','RenditionOfFromPart'] }, + 'renditionofinstanceid' => { 524 => [\'RenditionOf','RenditionOfInstanceID'] }, + 'renditionoflastmodifydate' => { 524 => [\'RenditionOf','RenditionOfLastModifyDate'] }, + 'renditionoflasturl' => { 524 => [\'RenditionOf','RenditionOfLastURL'] }, + 'renditionoflinkcategory' => { 524 => [\'RenditionOf','RenditionOfLinkCategory'] }, + 'renditionoflinkform' => { 524 => [\'RenditionOf','RenditionOfLinkForm'] }, + 'renditionofmanager' => { 524 => [\'RenditionOf','RenditionOfManager'] }, + 'renditionofmanagervariant' => { 524 => [\'RenditionOf','RenditionOfManagerVariant'] }, + 'renditionofmanageto' => { 524 => [\'RenditionOf','RenditionOfManageTo'] }, + 'renditionofmanageui' => { 524 => [\'RenditionOf','RenditionOfManageUI'] }, + 'renditionofmaskmarkers' => { 524 => [\'RenditionOf','RenditionOfMaskMarkers'] }, + 'renditionoforiginaldocumentid' => { 524 => [\'RenditionOf','RenditionOfOriginalDocumentID'] }, + 'renditionofpartmapping' => { 524 => [\'RenditionOf','RenditionOfPartMapping'] }, + 'renditionofplacedresolutionunit' => { 524 => [\'RenditionOf','RenditionOfPlacedResolutionUnit'] }, + 'renditionofplacedxresolution' => { 524 => [\'RenditionOf','RenditionOfPlacedXResolution'] }, + 'renditionofplacedyresolution' => { 524 => [\'RenditionOf','RenditionOfPlacedYResolution'] }, + 'renditionofrenditionclass' => { 524 => [\'RenditionOf','RenditionOfRenditionClass'] }, + 'renditionofrenditionparams' => { 524 => [\'RenditionOf','RenditionOfRenditionParams'] }, + 'renditionoftopart' => { 524 => [\'RenditionOf','RenditionOfToPart'] }, + 'renditionofversionid' => { 524 => [\'RenditionOf','RenditionOfVersionID'] }, + 'renditionparams' => { 524 => 'RenditionParams' }, 'repeatingflashcount' => { 211 => 0xd, 212 => 0xe, 213 => 0xe, 214 => 0xe, 215 => 0xe, 216 => 0xe, 303 => '17.2', 304 => '24.2', 305 => '9.2', 306 => '24.2', 309 => '25.2' }, 'repeatingflashcountbuilt-in' => { 275 => 0x4db }, 'repeatingflashcountexternal' => { 275 => 0x4c3 }, @@ -5817,8 +5834,8 @@ my %tagLookup = ( 'repeatingflashrateexternal' => { 275 => 0x4c2 }, 'requirements' => { 395 => "\xa9req" }, 'requires' => { 492 => 'requires' }, - 'resampleparams' => { 521 => 'resampleParams' }, - 'resampleparamsquality' => { 521 => [\'resampleParams','resampleParamsQuality'] }, + 'resampleparams' => { 523 => 'resampleParams' }, + 'resampleparamsquality' => { 523 => [\'resampleParams','resampleParamsQuality'] }, 'resamplingkerneldenominators050' => { 138 => 0xe50 }, 'resamplingkerneldenominators067' => { 138 => 0xe4f }, 'resamplingkerneldenominators100' => { 138 => 0xe51 }, @@ -5826,12 +5843,12 @@ my %tagLookup = ( 'resetblacksegrows' => { 138 => 0x181a }, 'resolution' => { 162 => 'Resolution' }, 'resolutionmode' => { 412 => [0x87,0x4] }, - 'resolutionunit' => { 119 => 0x128, 134 => 0x2, 517 => 'ResolutionUnit' }, + 'resolutionunit' => { 119 => 0x128, 134 => 0x2, 519 => 'ResolutionUnit' }, 'resourceid' => { 118 => [\'ResourceRelationship','ResourceRelationshipResourceID'] }, 'resourcerelationship' => { 118 => 'ResourceRelationship' }, 'resourcerelationshipid' => { 118 => [\'ResourceRelationship','ResourceRelationshipResourceRelationshipID'] }, 'restrictdrivemodes' => { 84 => 0x612 }, - 'restrictions' => { 514 => 'restrictions' }, + 'restrictions' => { 516 => 'restrictions' }, 'retouchareafeather' => { 494 => [\'RetouchAreas','RetouchAreasFeather'], 496 => [\'RetouchAreas','RetouchAreasFeather'] }, 'retouchareamaskalpha' => { 494 => [\'RetouchAreas','RetouchAreasMasksAlpha'], 496 => [\'RetouchAreas','RetouchAreasMasksAlpha'] }, 'retouchareamaskangle' => { 494 => [\'RetouchAreas','RetouchAreasMasksAngle'], 496 => [\'RetouchAreas','RetouchAreasMasksAngle'] }, @@ -5943,8 +5960,8 @@ my %tagLookup = ( 'retouchnefprocessing' => { 252 => 0x5 }, 'retractlensonpoweroff' => { 84 => 0x814 }, 'reuse' => { 322 => 'Reuse' }, - 'reuseallowed' => { 524 => 'ReuseAllowed' }, - 'reuseprohibited' => { 514 => 'reuseProhibited' }, + 'reuseallowed' => { 526 => 'ReuseAllowed' }, + 'reuseprohibited' => { 516 => 'reuseProhibited' }, 'reverseexposurecompdial' => { 301 => '5.2' }, 'reversefocusring' => { 310 => 0x163 }, 'reverseindicators' => { 294 => '12.1', 295 => '6.1', 297 => '6.1', 298 => '6.1', 299 => '4.3', 300 => '5.2', 301 => '5.4', 303 => '33.5', 304 => '5.1', 307 => '6.1', 308 => '6.1', 309 => '6.2', 310 => 0xc1 }, @@ -5962,8 +5979,8 @@ my %tagLookup = ( 'rightalbedo' => { 485 => 'RightAlbedo' }, 'rightascension' => { 165 => 'RightAscension' }, 'rights' => { 497 => 'rights' }, - 'rightsagent' => { 514 => 'rightsAgent' }, - 'rightsowner' => { 514 => 'rightsOwner' }, + 'rightsagent' => { 516 => 'rightsAgent' }, + 'rightsowner' => { 516 => 'rightsOwner' }, 'roll' => { 115 => 0x8, 395 => ['roll',"\xa9frl"] }, 'rollangle' => { 127 => 0x144d, 244 => 0x0, 312 => 0x903, 335 => 0x90, 369 => 0x1, 407 => 0x2 }, 'romoperationmode' => { 97 => 0x80d }, @@ -5983,9 +6000,9 @@ my %tagLookup = ( 'safetyshiftinavortv' => { 82 => 0x10, 83 => 0x10, 85 => 0xf, 86 => 0x10, 89 => 0x10 }, 'sameexposurefornewaperture' => { 84 => 0x112 }, 'samplebits' => { 155 => 'SampleBits' }, - 'samplepagerange' => { 511 => 'samplePageRange' }, + 'samplepagerange' => { 513 => 'samplePageRange' }, 'samplerate' => { 155 => 'SampleRate' }, - 'samplesperpixel' => { 119 => 0x115, 340 => 0x8, 517 => 'SamplesPerPixel' }, + 'samplesperpixel' => { 119 => 0x115, 340 => 0x8, 519 => 'SamplesPerPixel' }, 'samplestructure' => { 133 => 0x5a }, 'samsungmodelid' => { 409 => 0x3 }, 'sanyoquality' => { 411 => 0x201 }, @@ -6011,7 +6028,7 @@ my %tagLookup = ( 'saturationuserdef1' => { 19 => 0x100, 70 => 0x98, 71 => 0xb0 }, 'saturationuserdef2' => { 19 => 0x101, 70 => 0xb0, 71 => 0xc8 }, 'saturationuserdef3' => { 19 => 0x102, 70 => 0xc8, 71 => 0xe0 }, - 'saveid' => { 522 => 'SaveID' }, + 'saveid' => { 524 => 'SaveID' }, 'sbaanalysiscomplete' => { 138 => 0xc35 }, 'sbablack' => { 138 => 0xc25 }, 'sbagmoffset' => { 138 => 0xc4a }, @@ -6023,10 +6040,10 @@ my %tagLookup = ( 'sbalowgray' => { 138 => 0xc47 }, 'sbaneutralbal' => { 138 => 0xc32 }, 'sbawhite' => { 138 => 0xc27 }, - 'scaletype' => { 521 => 'scaleType' }, + 'scaletype' => { 523 => 'scaleType' }, 'scanimageenhancer' => { 254 => 0x60 }, 'scanningdirection' => { 133 => 0x64 }, - 'scene' => { 395 => 'scen', 506 => 'Scene', 521 => 'scene' }, + 'scene' => { 395 => 'scen', 507 => 'Scene', 523 => 'scene' }, 'scenearea' => { 315 => 0x211, 317 => 0x1031 }, 'sceneassist' => { 233 => 0x9c }, 'scenecapturetype' => { 119 => 0xa406, 500 => 'SceneCaptureType' }, @@ -6047,13 +6064,13 @@ my %tagLookup = ( 'sdrhighlights' => { 494 => 'SDRHighlights', 496 => 'SDRHighlights' }, 'sdrshadows' => { 494 => 'SDRShadows', 496 => 'SDRShadows' }, 'sdrwhites' => { 494 => 'SDRWhites', 496 => 'SDRWhites' }, - 'season' => { 507 => 'Season', 510 => 'season' }, - 'seasonidentifier' => { 507 => [\'Season','SeasonIdentifier'] }, - 'seasonname' => { 507 => [\'Season','SeasonName'] }, - 'seasonnumber' => { 507 => [\'Season','SeasonNumber'] }, + 'season' => { 508 => 'Season', 512 => 'season' }, + 'seasonidentifier' => { 508 => [\'Season','SeasonIdentifier'] }, + 'seasonname' => { 508 => [\'Season','SeasonName'] }, + 'seasonnumber' => { 508 => [\'Season','SeasonNumber'] }, 'secondaryftp' => { 484 => 'SecondaryFTP' }, 'secondaryslotfunction' => { 238 => 0x22c, 239 => 0x240, 257 => 0x13c, 268 => 0x1d0 }, - 'section' => { 511 => 'section' }, + 'section' => { 513 => 'section' }, 'securityclassification' => { 119 => 0x9212 }, 'selectableafpoint' => { 84 => 0x509 }, 'selectafareaselectionmode' => { 2 => 0xc }, @@ -6066,7 +6083,7 @@ my %tagLookup = ( 'selftimershotcount' => { 295 => '20.2', 297 => '20.3', 298 => '20.3', 299 => '18.2', 300 => '19.2', 301 => '19.2', 302 => '19.3', 304 => '19.3', 307 => '20.3', 308 => '20.3', 309 => '20.2', 310 => 0x2d }, 'selftimershotinterval' => { 295 => '20.3', 297 => '20.2', 298 => '20.2', 302 => '19.2', 307 => '20.2', 308 => '20.2', 310 => 0x31 }, 'selftimertime' => { 97 => 0x1806, 184 => 0x1f, 294 => '18.1', 295 => '20.1', 296 => '3.3', 297 => '20.1', 298 => '20.1', 299 => '18.1', 300 => '19.1', 301 => '19.1', 302 => '19.1', 303 => '7.2', 304 => '19.1', 305 => '3.3', 307 => '20.1', 308 => '20.1', 309 => '20.1', 310 => 0x2b }, - 'sellingagency' => { 511 => 'sellingAgency' }, + 'sellingagency' => { 513 => 'sellingAgency' }, 'semanticstyle' => { 1 => 0x40 }, 'semanticstylepreset' => { 1 => 0x42 }, 'semanticstylerenderingver' => { 1 => 0x41 }, @@ -6104,29 +6121,29 @@ my %tagLookup = ( 'sequencefilenumber' => { 445 => 0x4, 446 => 0x4, 447 => 0x4, 448 => 0x4, 457 => 0xc, 458 => 0xc, 459 => 0x1a }, 'sequenceimagenumber' => { 445 => 0x0, 446 => 0x0, 447 => 0x0, 448 => 0x0, 457 => 0x8, 458 => 0x8, 459 => 0x12, 466 => 0x24 }, 'sequencelength' => { 457 => 0x22, 458 => 0x1e, 459 => [0x16,0x1e] }, - 'sequencename' => { 510 => 'sequenceName' }, - 'sequencenumber' => { 77 => 0x9, 113 => 0x301c, 127 => 0x1101, 140 => 0x1d, 275 => 0x51c, 335 => 0x2b, 424 => [0x10c,0x30c], 435 => 0xb04a, 510 => 'sequenceNumber' }, + 'sequencename' => { 512 => 'sequenceName' }, + 'sequencenumber' => { 77 => 0x9, 113 => 0x301c, 127 => 0x1101, 140 => 0x1d, 275 => 0x51c, 335 => 0x2b, 424 => [0x10c,0x30c], 435 => 0xb04a, 512 => 'sequenceNumber' }, 'sequenceshotinterval' => { 411 => 0x224 }, - 'sequencetotalnumber' => { 510 => 'sequenceTotalNumber' }, + 'sequencetotalnumber' => { 512 => 'sequenceTotalNumber' }, 'sequentialshot' => { 411 => 0x20e }, 'serialnumber' => { 64 => 0xc, 97 => 0x180b, 119 => [0xa431,0xfde9], 137 => 0xfa04, 139 => 0xfa00, 141 => 0xc354, 142 => 0xfa19, 153 => 0x0, 156 => 'SerialNumber', 191 => 0x5501, 233 => [0xa0,0x1d], 313 => 0x101, 317 => [0x404,0x101a], 330 => 0x303, 332 => 0x305, 337 => 0x3103, 370 => 0x229, 379 => 0x102, 380 => 0x407, 395 => ['SNum','slno'], 396 => 0x15, 397 => 0x4b, 398 => 0x7e, 402 => 0x5, 409 => 0xa002, 412 => 0x2, 435 => 0x2031, 491 => 'SerialNumber', 501 => 'BodySerialNumber' }, 'serialnumberformat' => { 64 => 0x15, 97 => 0x183b }, 'serialnumberhash' => { 395 => 'CAME' }, - 'series' => { 507 => 'Series' }, + 'series' => { 508 => 'Series' }, 'seriesdatetime' => { 472 => 'SeriesDateTime' }, 'seriesdescription' => { 472 => 'SeriesDescription' }, - 'seriesidentifier' => { 507 => [\'Series','SeriesIdentifier'] }, + 'seriesidentifier' => { 508 => [\'Series','SeriesIdentifier'] }, 'seriesmodality' => { 472 => 'SeriesModality' }, - 'seriesname' => { 507 => [\'Series','SeriesName'] }, - 'seriesnumber' => { 472 => 'SeriesNumber', 511 => 'seriesNumber' }, - 'seriestitle' => { 511 => 'seriesTitle' }, + 'seriesname' => { 508 => [\'Series','SeriesName'] }, + 'seriesnumber' => { 472 => 'SeriesNumber', 513 => 'seriesNumber' }, + 'seriestitle' => { 513 => 'seriesTitle' }, 'serviceidentifier' => { 132 => 0x1e }, - 'servingsize' => { 513 => 'servingSize' }, + 'servingsize' => { 515 => 'servingSize' }, 'setbuttoncrosskeysfunc' => { 87 => 0x0, 88 => 0x0 }, 'setbuttonwhenshooting' => { 82 => 0x1, 84 => 0x704, 90 => 0xc }, 'setclockfromlocationdata' => { 238 => 0x61d, 239 => 0x64d }, 'setfunctionwhenshooting' => { 85 => 0x0, 86 => 0x1, 89 => 0x1 }, - 'setting' => { 510 => 'setting' }, + 'setting' => { 512 => 'setting' }, 'shadingcompensation' => { 312 => 0x50c, 335 => 0x8a }, 'shadingcompensation2' => { 316 => 0x1012 }, 'shadow' => { 412 => 0xe }, @@ -6169,7 +6186,7 @@ my %tagLookup = ( 'sharpnessuserdef2' => { 19 => 0xf8, 70 => 0xac, 71 => 0xc4 }, 'sharpnessuserdef3' => { 19 => 0xf9, 70 => 0xc4, 71 => 0xdc }, 'shiftcols' => { 138 => 0xc70 }, - 'shootid' => { 510 => 'shootID' }, + 'shootid' => { 512 => 'shootID' }, 'shootingdistance' => { 103 => 0x20701 }, 'shootinginfodisplay' => { 294 => '13.2', 295 => '5.1', 303 => '10.2', 304 => '4.1', 307 => '5.1', 309 => '5.3' }, 'shootinginfomonitorofftime' => { 294 => '26.2', 295 => '22.2', 297 => '22.2', 298 => '22.2', 302 => '21.2', 303 => '9.1', 304 => '21.2', 307 => '22.2', 308 => '22.2', 309 => '22.2', 310 => 0x37 }, @@ -6181,20 +6198,20 @@ my %tagLookup = ( 'shortownername' => { 19 => 0xac }, 'shortreleasetimelag' => { 84 => 0x80d }, 'shorttitle' => { 387 => '@sti' }, - 'shotdate' => { 521 => 'shotDate' }, - 'shotday' => { 521 => 'shotDay' }, - 'shotlocation' => { 521 => 'shotLocation' }, + 'shotdate' => { 523 => 'shotDate' }, + 'shotday' => { 523 => 'shotDay' }, + 'shotlocation' => { 523 => 'shotLocation' }, 'shotlogdata' => { 477 => 'shot_log_data' }, - 'shotname' => { 395 => 'shot', 521 => 'shotName' }, - 'shotnumber' => { 521 => 'shotNumber' }, + 'shotname' => { 395 => 'shot', 523 => 'shotName' }, + 'shotnumber' => { 523 => 'shotNumber' }, 'shotnumbersincepowerup' => { 439 => 0x44e, 457 => 0x1a, 458 => 0x16, 459 => 0xa }, 'shotnumbersincepowerup2' => { 424 => 0x200 }, - 'shotsize' => { 521 => 'shotSize' }, + 'shotsize' => { 523 => 'shotSize' }, 'shotsperinterval' => { 222 => 0x180, 237 => 0xb4, 238 => 0xc0, 239 => 0xd0 }, 'showmovement' => { 387 => 'shwm' }, - 'shownevent' => { 507 => 'EventExt' }, - 'showneventidentifier' => { 507 => [\'EventExt','EventExtIdentifier'] }, - 'showneventname' => { 507 => [\'EventExt','EventExtName'] }, + 'shownevent' => { 508 => 'EventExt' }, + 'showneventidentifier' => { 508 => [\'EventExt','EventExtIdentifier'] }, + 'showneventname' => { 508 => [\'EventExt','EventExtName'] }, 'shutter' => { 454 => 0x20, 455 => 0x26, 456 => 0x26 }, 'shutter-aelock' => { 82 => 0x4, 84 => 0x701, 85 => 0x3, 86 => 0x4, 87 => 0x3, 88 => 0x3, 89 => 0x4, 90 => 0x2 }, 'shutteraelbutton' => { 83 => 0x4 }, @@ -6213,8 +6230,8 @@ my %tagLookup = ( 'shutterspeedrange' => { 84 => 0x10c }, 'shutterspeedsetting' => { 184 => 0x6, 422 => 0x2f, 423 => 0x28, 424 => 0x0 }, 'shutterspeedvalue' => { 93 => 0x1, 119 => 0x9201, 317 => 0x1000, 379 => 0x400, 500 => 'ShutterSpeedValue' }, - 'shuttertype' => { 127 => 0x1050, 335 => 0x9f, 370 => 0x87 }, - 'sidecarforextension' => { 509 => 'SidecarForExtension' }, + 'shuttertype' => { 127 => 0x1050, 335 => 0x9f, 370 => 0x87, 459 => [0x133,0x139,0x13f] }, + 'sidecarforextension' => { 511 => 'SidecarForExtension' }, 'sigmaimpulseparameters' => { 138 => 0xe0d }, 'sigmascalingfactorcamera' => { 138 => 0xe0c }, 'sigmascalingfactorlowres' => { 138 => 0xe0b }, @@ -6224,13 +6241,13 @@ my %tagLookup = ( 'silentphotography' => { 233 => 0xbf }, 'similarityindex' => { 131 => 0xe4 }, 'singleframebracketing' => { 184 => 0x21 }, - 'skilllevel' => { 513 => 'skillLevel' }, + 'skilllevel' => { 515 => 'skillLevel' }, 'skintonecorrection' => { 370 => 0x95 }, 'skiplinetime' => { 138 => 0x184e }, 'slaveflashmeteringsegments' => { 370 => 0x20b }, - 'slideshowname' => { 510 => 'slideshowName' }, - 'slideshownumber' => { 510 => 'slideshowNumber' }, - 'slideshowtotalnumber' => { 510 => 'slideshowTotalNumber' }, + 'slideshowname' => { 512 => 'slideshowName' }, + 'slideshownumber' => { 512 => 'slideshowNumber' }, + 'slideshowtotalnumber' => { 512 => 'slideshowTotalNumber' }, 'slowshutter' => { 77 => 0x8 }, 'slowsync' => { 127 => 0x1030 }, 'smartalbumcolor' => { 409 => 0x20 }, @@ -6238,20 +6255,20 @@ my %tagLookup = ( 'smileshutter' => { 424 => 0x31 }, 'smileshuttermode' => { 424 => 0x27 }, 'smoothness' => { 119 => 0xfe57, 494 => 'Smoothness', 496 => 'Smoothness' }, - 'snapshot' => { 507 => 'SnapshotLink' }, - 'snapshotformat' => { 507 => [\'SnapshotLink','SnapshotLinkFormat'] }, - 'snapshotheightpixels' => { 507 => [\'SnapshotLink','SnapshotLinkHeightPixels'] }, - 'snapshotimagerole' => { 507 => [\'SnapshotLink','SnapshotLinkImageRole'] }, - 'snapshotlink' => { 507 => [\'SnapshotLink','SnapshotLinkLink'] }, - 'snapshotlinkqualifier' => { 507 => [\'SnapshotLink','SnapshotLinkLinkQualifier'] }, + 'snapshot' => { 508 => 'SnapshotLink' }, + 'snapshotformat' => { 508 => [\'SnapshotLink','SnapshotLinkFormat'] }, + 'snapshotheightpixels' => { 508 => [\'SnapshotLink','SnapshotLinkHeightPixels'] }, + 'snapshotimagerole' => { 508 => [\'SnapshotLink','SnapshotLinkImageRole'] }, + 'snapshotlink' => { 508 => [\'SnapshotLink','SnapshotLinkLink'] }, + 'snapshotlinkqualifier' => { 508 => [\'SnapshotLink','SnapshotLinkLinkQualifier'] }, 'snapshots' => { 489 => 'Snapshots' }, - 'snapshotusedvideoframe' => { 507 => [\'SnapshotLink','SnapshotLinkUsedVideoFrame'] }, - 'snapshotusedvideoframetimeformat' => { 507 => [\'SnapshotLink','SnapshotLinkUsedVideoFrameTimeFormat'] }, - 'snapshotusedvideoframetimevalue' => { 507 => [\'SnapshotLink','SnapshotLinkUsedVideoFrameTimeValue'] }, - 'snapshotusedvideoframevalue' => { 507 => [\'SnapshotLink','SnapshotLinkUsedVideoFrameValue'] }, - 'snapshotwidthpixels' => { 507 => [\'SnapshotLink','SnapshotLinkWidthPixels'] }, + 'snapshotusedvideoframe' => { 508 => [\'SnapshotLink','SnapshotLinkUsedVideoFrame'] }, + 'snapshotusedvideoframetimeformat' => { 508 => [\'SnapshotLink','SnapshotLinkUsedVideoFrameTimeFormat'] }, + 'snapshotusedvideoframetimevalue' => { 508 => [\'SnapshotLink','SnapshotLinkUsedVideoFrameTimeValue'] }, + 'snapshotusedvideoframevalue' => { 508 => [\'SnapshotLink','SnapshotLinkUsedVideoFrameValue'] }, + 'snapshotwidthpixels' => { 508 => [\'SnapshotLink','SnapshotLinkWidthPixels'] }, 'softskineffect' => { 435 => 0x200f }, - 'software' => { 119 => 0x131, 157 => 'Software', 325 => 'Software', 379 => 0x203, 389 => 'software', 412 => 0x18, 479 => 'Software', 517 => 'Software' }, + 'software' => { 119 => 0x131, 157 => 'Software', 325 => 'Software', 379 => 0x203, 389 => 'software', 412 => 0x18, 479 => 'Software', 519 => 'Software' }, 'softwareversion' => { 395 => ['@swr',"\xa9swr"], 411 => 0x207 }, 'soloist' => { 387 => "\xa9sol" }, 'songwriter' => { 395 => "\xa9swf" }, @@ -6283,7 +6300,7 @@ my %tagLookup = ( 'sortname' => { 387 => 'sonm', 494 => 'SortName', 496 => 'SortName' }, 'sortshow' => { 387 => 'sosn' }, 'soundengineer' => { 387 => "\xa9sne" }, - 'source' => { 131 => 0x73, 325 => 'Source', 497 => 'source', 498 => 'source', 509 => 'Source' }, + 'source' => { 131 => 0x73, 325 => 'Source', 497 => 'source', 498 => 'source', 511 => 'Source' }, 'sourcecount' => { 483 => 'SourceCount' }, 'sourcecredits' => { 395 => "\xa9src" }, 'sourcedirectoryindex' => { 357 => 0x0 }, @@ -6295,13 +6312,13 @@ my %tagLookup = ( 'spatialfrequencyresponsenames' => { 500 => [\'SpatialFrequencyResponse','SpatialFrequencyResponseNames'] }, 'spatialfrequencyresponserows' => { 500 => [\'SpatialFrequencyResponse','SpatialFrequencyResponseRows'] }, 'spatialfrequencyresponsevalues' => { 500 => [\'SpatialFrequencyResponse','SpatialFrequencyResponseValues'] }, - 'speakerplacement' => { 521 => 'speakerPlacement' }, + 'speakerplacement' => { 523 => 'speakerPlacement' }, 'specialeffectlevel' => { 113 => 0x3030 }, 'specialeffectmode' => { 113 => 0x2076 }, 'specialeffectsetting' => { 113 => 0x3031 }, 'specialinstructions' => { 131 => 0x28 }, 'specialmode' => { 317 => 0x200, 411 => 0x200 }, - 'specialoccasion' => { 513 => 'specialOccasion' }, + 'specialoccasion' => { 515 => 'specialOccasion' }, 'specialtypeid' => { 477 => 'SpecialTypeID' }, 'spectralsensitivity' => { 119 => 0x8824, 500 => 'SpectralSensitivity' }, 'specularwhitelevel' => { 41 => 0x32b, 42 => 0x281, 45 => [0x2b9,0x2d0,0x2d4], 46 => 0x56a, 47 => 0x1e4, 48 => [0x1fd,0x2dd], 49 => [0x231,0x30f], 50 => 0x31d }, @@ -6316,7 +6333,7 @@ my %tagLookup = ( 'splittoninghighlightsaturation' => { 494 => 'SplitToningHighlightSaturation', 496 => 'SplitToningHighlightSaturation' }, 'splittoningshadowhue' => { 494 => 'SplitToningShadowHue', 496 => 'SplitToningShadowHue' }, 'splittoningshadowsaturation' => { 494 => 'SplitToningShadowSaturation', 496 => 'SplitToningShadowSaturation' }, - 'sport' => { 511 => 'sport' }, + 'sport' => { 513 => 'sport' }, 'spotfocuspointx' => { 181 => 0x2d }, 'spotfocuspointy' => { 181 => 0x2e }, 'spotmeteringmode' => { 34 => 0x27 }, @@ -6355,15 +6372,15 @@ my %tagLookup = ( 'standardwhitetungsten' => { 138 => 0x835 }, 'standbytimer' => { 295 => '19.1', 297 => '19.1', 298 => '19.1', 301 => '18.1', 302 => '18.1', 307 => '19.1', 308 => '19.1' }, 'starlightview' => { 310 => 0x249 }, - 'startingpage' => { 511 => 'startingPage' }, + 'startingpage' => { 513 => 'startingPage' }, 'startmovieshooting' => { 84 => 0x70d }, - 'starttimecode' => { 395 => "\xa9TIM", 521 => 'startTimecode' }, - 'starttimecodetimeformat' => { 521 => [\'startTimecode','startTimecodeTimeFormat'] }, - 'starttimecodetimevalue' => { 521 => [\'startTimecode','startTimecodeTimeValue'] }, - 'starttimecodevalue' => { 521 => [\'startTimecode','startTimecodeValue'] }, - 'starttimesamplesize' => { 395 => "\xa9TSZ", 521 => 'startTimeSampleSize' }, - 'starttimescale' => { 395 => "\xa9TSC", 521 => 'startTimeScale' }, - 'state' => { 161 => 'State', 335 => 0x6b, 509 => 'State' }, + 'starttimecode' => { 395 => "\xa9TIM", 523 => 'startTimecode' }, + 'starttimecodetimeformat' => { 523 => [\'startTimecode','startTimecodeTimeFormat'] }, + 'starttimecodetimevalue' => { 523 => [\'startTimecode','startTimecodeTimeValue'] }, + 'starttimecodevalue' => { 523 => [\'startTimecode','startTimecodeValue'] }, + 'starttimesamplesize' => { 395 => "\xa9TSZ", 523 => 'startTimeSampleSize' }, + 'starttimescale' => { 395 => "\xa9TSC", 523 => 'startTimeScale' }, + 'state' => { 161 => 'State', 335 => 0x6b, 511 => 'State' }, 'status' => { 475 => 'Status', 487 => 'Status' }, 'stereomode' => { 483 => 'StereoMode' }, 'stitched' => { 483 => 'Stitched' }, @@ -6372,16 +6389,16 @@ my %tagLookup = ( 'storagemethod' => { 188 => 0x12 }, 'storebyorientation' => { 295 => '46.3', 297 => '47.3', 298 => '47.3', 307 => '47.3', 308 => '47.3', 310 => 0xd }, 'storedescription' => { 387 => 'sdes' }, - 'storylineidentifier' => { 507 => 'StorylineIdentifier' }, + 'storylineidentifier' => { 508 => 'StorylineIdentifier' }, 'straightenangle' => { 287 => 0x2fc08431 }, - 'streamready' => { 507 => 'StreamReady' }, + 'streamready' => { 508 => 'StreamReady' }, 'streamtype' => { 176 => 'StreamType' }, - 'stretchmode' => { 521 => 'stretchMode' }, + 'stretchmode' => { 523 => 'stretchMode' }, 'studydatetime' => { 472 => 'StudyDateTime' }, 'studydescription' => { 472 => 'StudyDescription' }, 'studyid' => { 472 => 'StudyID' }, 'studyphysician' => { 472 => 'StudyPhysician' }, - 'styleperiod' => { 507 => 'StylePeriod' }, + 'styleperiod' => { 508 => 'StylePeriod' }, 'sub-location' => { 131 => 0x5c }, 'subcommanddialplaybackmode' => { 310 => 0x1cf }, 'subfiledata' => { 164 => 'data' }, @@ -6390,9 +6407,9 @@ my %tagLookup = ( 'subfilename' => { 164 => '1Name' }, 'subfileresource' => { 164 => 'rsrc' }, 'subfiletype' => { 119 => 0xfe, 164 => '0Type' }, - 'subject' => { 321 => 'Subject', 386 => 'Subject', 497 => 'subject', 508 => 'Subject', 522 => 'subject' }, + 'subject' => { 321 => 'Subject', 386 => 'Subject', 497 => 'subject', 510 => 'Subject', 524 => 'subject' }, 'subjectarea' => { 119 => 0x9214, 500 => 'SubjectArea' }, - 'subjectcode' => { 506 => 'SubjectCode' }, + 'subjectcode' => { 507 => 'SubjectCode' }, 'subjectdetection' => { 238 => 0x23e, 239 => 0x252 }, 'subjectdistance' => { 119 => 0x9206, 140 => 0x3e, 500 => 'SubjectDistance' }, 'subjectdistancerange' => { 119 => 0xa40c, 500 => 'SubjectDistanceRange' }, @@ -6400,40 +6417,40 @@ my %tagLookup = ( 'subjectmotion' => { 297 => '78.2', 298 => '78.2', 308 => '78.2', 310 => 0x103 }, 'subjectprogram' => { 181 => 0x22 }, 'subjectreference' => { 131 => 0xc }, - 'sublabels1' => { 505 => [\'TagStructure','TagStructureSubLabels'] }, - 'sublabels2' => { 505 => [\'TagStructure','TagStructureSubLabelsSubLabels'] }, - 'sublabels3' => { 505 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabels'] }, - 'sublabels4' => { 505 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabels'] }, - 'sublabels5' => { 505 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabels'] }, + 'sublabels1' => { 506 => [\'TagStructure','TagStructureSubLabels'] }, + 'sublabels2' => { 506 => [\'TagStructure','TagStructureSubLabelsSubLabels'] }, + 'sublabels3' => { 506 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabels'] }, + 'sublabels4' => { 506 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabels'] }, + 'sublabels5' => { 506 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabels'] }, 'subseccreatedate' => { 114 => 'Exif-SubSecCreateDate' }, 'subsecdatetimeoriginal' => { 114 => 'Exif-SubSecDateTimeOriginal' }, 'subsecmodifydate' => { 114 => 'Exif-SubSecModifyDate' }, 'subsectime' => { 119 => 0x9290 }, 'subsectimedigitized' => { 119 => 0x9292 }, 'subsectimeoriginal' => { 119 => 0x9291 }, - 'subsection1' => { 511 => 'subsection1' }, - 'subsection2' => { 511 => 'subsection2' }, - 'subsection3' => { 511 => 'subsection3' }, - 'subsection4' => { 511 => 'subsection4' }, + 'subsection1' => { 513 => 'subsection1' }, + 'subsection2' => { 513 => 'subsection2' }, + 'subsection3' => { 513 => 'subsection3' }, + 'subsection4' => { 513 => 'subsection4' }, 'subselector' => { 295 => '49.1', 297 => '71.1', 298 => '71.1', 308 => '71.1', 310 => 0x8f }, 'subselectorassignment' => { 295 => '48.1' }, 'subselectorcenter' => { 297 => '72.1', 298 => '72.1', 308 => '72.1' }, 'subselectorplusdials' => { 295 => '49.2', 297 => '73.1', 298 => '73.1', 308 => '73.1' }, - 'subtitle' => { 179 => 'WM/SubTitle', 387 => "\xa9st3", 395 => "\xa9snm", 511 => 'subtitle' }, + 'subtitle' => { 179 => 'WM/SubTitle', 387 => "\xa9st3", 395 => "\xa9snm", 513 => 'subtitle' }, 'subtitlekeywords' => { 395 => "\xa9snk" }, - 'subversionfilename' => { 505 => [\'SubVersions','SubVersionsFileName'] }, - 'subversionreference' => { 505 => [\'SubVersions','SubVersionsVersRef'] }, - 'subversions' => { 505 => 'SubVersions' }, + 'subversionfilename' => { 506 => [\'SubVersions','SubVersionsFileName'] }, + 'subversionreference' => { 506 => [\'SubVersions','SubVersionsVersRef'] }, + 'subversions' => { 506 => 'SubVersions' }, 'superimposeddisplay' => { 82 => 0xa, 84 => 0x510, 85 => 0x9, 86 => 0xa, 89 => 0xa, 90 => 0xe }, 'supermacro' => { 64 => 0x1a }, - 'supplementalcategories' => { 131 => 0x14, 509 => 'SupplementalCategories' }, + 'supplementalcategories' => { 131 => 0x14, 511 => 'SupplementalCategories' }, 'supplementaltype' => { 133 => 0x37 }, - 'supplementdisplayid' => { 511 => 'supplementDisplayID' }, - 'supplementstartingpage' => { 511 => 'supplementStartingPage' }, - 'supplementtitle' => { 511 => 'supplementTitle' }, - 'supplychainsource' => { 507 => 'SupplyChainSource' }, - 'supplychainsourceidentifier' => { 507 => [\'SupplyChainSource','SupplyChainSourceIdentifier'] }, - 'supplychainsourcename' => { 507 => [\'SupplyChainSource','SupplyChainSourceName'] }, + 'supplementdisplayid' => { 513 => 'supplementDisplayID' }, + 'supplementstartingpage' => { 513 => 'supplementStartingPage' }, + 'supplementtitle' => { 513 => 'supplementTitle' }, + 'supplychainsource' => { 508 => 'SupplyChainSource' }, + 'supplychainsourceidentifier' => { 508 => [\'SupplyChainSource','SupplyChainSourceIdentifier'] }, + 'supplychainsourcename' => { 508 => [\'SupplyChainSource','SupplyChainSourceName'] }, 'supportsamount' => { 494 => 'SupportsAmount', 496 => 'SupportsAmount' }, 'supportscolor' => { 494 => 'SupportsColor', 496 => 'SupportsColor' }, 'supportshighdynamicrange' => { 494 => 'SupportsHighDynamicRange', 496 => 'SupportsHighDynamicRange' }, @@ -6442,25 +6459,25 @@ my %tagLookup = ( 'supportsoutputreferred' => { 494 => 'SupportsOutputReferred', 496 => 'SupportsOutputReferred' }, 'supportsscenereferred' => { 494 => 'SupportsSceneReferred', 496 => 'SupportsSceneReferred' }, 'svisosetting' => { 351 => 0x14 }, - 'swatchcoloranta' => { 526 => [\'SwatchGroups','SwatchGroupsColorantsA'] }, - 'swatchcolorantb' => { 526 => [\'SwatchGroups','SwatchGroupsColorantsB'] }, - 'swatchcolorantblack' => { 526 => [\'SwatchGroups','SwatchGroupsColorantsBlack'] }, - 'swatchcolorantblue' => { 526 => [\'SwatchGroups','SwatchGroupsColorantsBlue'] }, - 'swatchcolorantcyan' => { 526 => [\'SwatchGroups','SwatchGroupsColorantsCyan'] }, - 'swatchcolorantgray' => { 526 => [\'SwatchGroups','SwatchGroupsColorantsGray'] }, - 'swatchcolorantgreen' => { 526 => [\'SwatchGroups','SwatchGroupsColorantsGreen'] }, - 'swatchcolorantl' => { 526 => [\'SwatchGroups','SwatchGroupsColorantsL'] }, - 'swatchcolorantmagenta' => { 526 => [\'SwatchGroups','SwatchGroupsColorantsMagenta'] }, - 'swatchcolorantmode' => { 526 => [\'SwatchGroups','SwatchGroupsColorantsMode'] }, - 'swatchcolorantred' => { 526 => [\'SwatchGroups','SwatchGroupsColorantsRed'] }, - 'swatchcolorantswatchname' => { 526 => [\'SwatchGroups','SwatchGroupsColorantsSwatchName'] }, - 'swatchcoloranttint' => { 526 => [\'SwatchGroups','SwatchGroupsColorantsTint'] }, - 'swatchcoloranttype' => { 526 => [\'SwatchGroups','SwatchGroupsColorantsType'] }, - 'swatchcolorantyellow' => { 526 => [\'SwatchGroups','SwatchGroupsColorantsYellow'] }, - 'swatchgroupname' => { 526 => [\'SwatchGroups','SwatchGroupsGroupName'] }, - 'swatchgroups' => { 526 => 'SwatchGroups' }, - 'swatchgroupscolorants' => { 526 => [\'SwatchGroups','SwatchGroupsColorants'] }, - 'swatchgrouptype' => { 526 => [\'SwatchGroups','SwatchGroupsGroupType'] }, + 'swatchcoloranta' => { 528 => [\'SwatchGroups','SwatchGroupsColorantsA'] }, + 'swatchcolorantb' => { 528 => [\'SwatchGroups','SwatchGroupsColorantsB'] }, + 'swatchcolorantblack' => { 528 => [\'SwatchGroups','SwatchGroupsColorantsBlack'] }, + 'swatchcolorantblue' => { 528 => [\'SwatchGroups','SwatchGroupsColorantsBlue'] }, + 'swatchcolorantcyan' => { 528 => [\'SwatchGroups','SwatchGroupsColorantsCyan'] }, + 'swatchcolorantgray' => { 528 => [\'SwatchGroups','SwatchGroupsColorantsGray'] }, + 'swatchcolorantgreen' => { 528 => [\'SwatchGroups','SwatchGroupsColorantsGreen'] }, + 'swatchcolorantl' => { 528 => [\'SwatchGroups','SwatchGroupsColorantsL'] }, + 'swatchcolorantmagenta' => { 528 => [\'SwatchGroups','SwatchGroupsColorantsMagenta'] }, + 'swatchcolorantmode' => { 528 => [\'SwatchGroups','SwatchGroupsColorantsMode'] }, + 'swatchcolorantred' => { 528 => [\'SwatchGroups','SwatchGroupsColorantsRed'] }, + 'swatchcolorantswatchname' => { 528 => [\'SwatchGroups','SwatchGroupsColorantsSwatchName'] }, + 'swatchcoloranttint' => { 528 => [\'SwatchGroups','SwatchGroupsColorantsTint'] }, + 'swatchcoloranttype' => { 528 => [\'SwatchGroups','SwatchGroupsColorantsType'] }, + 'swatchcolorantyellow' => { 528 => [\'SwatchGroups','SwatchGroupsColorantsYellow'] }, + 'swatchgroupname' => { 528 => [\'SwatchGroups','SwatchGroupsGroupName'] }, + 'swatchgroups' => { 528 => 'SwatchGroups' }, + 'swatchgroupscolorants' => { 528 => [\'SwatchGroups','SwatchGroupsColorants'] }, + 'swatchgrouptype' => { 528 => [\'SwatchGroups','SwatchGroupsGroupType'] }, 'sweeppanoramadirection' => { 335 => 0x93, 424 => 0x33 }, 'sweeppanoramafieldofview' => { 335 => 0x94 }, 'sweeppanoramasize' => { 424 => 0x32 }, @@ -6470,9 +6487,9 @@ my %tagLookup = ( 'system' => { 379 => 0x204 }, 'tagged' => { 381 => 0xdd, 382 => 'Tagged', 489 => 'tagged' }, 'tagslist' => { 499 => 'TagsList' }, - 'tagstructure' => { 505 => 'TagStructure' }, - 'takenumber' => { 521 => 'takeNumber' }, - 'tapename' => { 521 => 'tapeName' }, + 'tagstructure' => { 506 => 'TagStructure' }, + 'takenumber' => { 523 => 'takeNumber' }, + 'tapename' => { 523 => 'tapeName' }, 'targetaperture' => { 77 => 0x4 }, 'targetcompressionratio' => { 95 => 0x1 }, 'targetdistancesetting' => { 97 => 0x1807 }, @@ -6530,29 +6547,29 @@ my %tagLookup = ( 'tda4edgepolarity' => { 138 => 0x198f }, 'tda4gain' => { 138 => 0x198e }, 'tda4offset' => { 138 => 0x198c }, - 'teaser' => { 511 => 'teaser' }, + 'teaser' => { 513 => 'teaser' }, 'teleconverter' => { 186 => 0x105, 435 => 0x105 }, 'tempampgainx100' => { 138 => 0x1914 }, - 'tempo' => { 521 => 'tempo' }, - 'temporalcoverage' => { 507 => 'TemporalCoverage' }, - 'temporalcoveragefrom' => { 507 => [\'TemporalCoverage','TemporalCoverageTempCoverageFrom'] }, - 'temporalcoverageto' => { 507 => [\'TemporalCoverage','TemporalCoverageTempCoverageTo'] }, + 'tempo' => { 523 => 'tempo' }, + 'temporalcoverage' => { 508 => 'TemporalCoverage' }, + 'temporalcoveragefrom' => { 508 => [\'TemporalCoverage','TemporalCoverageTempCoverageFrom'] }, + 'temporalcoverageto' => { 508 => [\'TemporalCoverage','TemporalCoverageTempCoverageTo'] }, 'termsandconditionstext' => { 322 => 'TermsAndConditionsText' }, 'termsandconditionsurl' => { 322 => 'TermsAndConditionsURL' }, 'testname' => { 120 => 'TestName' }, 'textencoding' => { 232 => 0x4 }, - 'textlayername' => { 509 => [\'TextLayers','TextLayersLayerName'] }, - 'textlayers' => { 509 => 'TextLayers' }, - 'textlayertext' => { 509 => [\'TextLayers','TextLayersLayerText'] }, + 'textlayername' => { 511 => [\'TextLayers','TextLayersLayerName'] }, + 'textlayers' => { 511 => 'TextLayers' }, + 'textlayertext' => { 511 => [\'TextLayers','TextLayersLayerText'] }, 'textstamp' => { 335 => [0x8008,0x8009,0x3b,0x3e] }, 'texture' => { 494 => 'Texture', 496 => 'Texture' }, 'three-dtrackingfacedetection' => { 297 => '1.4', 298 => '1.4', 308 => '1.4' }, 'three-dtrackingwatcharea' => { 297 => '78.1', 298 => '78.1', 308 => '78.1' }, 'thresholding' => { 119 => 0x107 }, 'thumbnailfilename' => { 97 => 0x817 }, - 'thumbnailformat' => { 519 => [\'Thumbnails','ThumbnailsFormat'] }, - 'thumbnailheight' => { 142 => 0xfa55, 519 => [\'Thumbnails','ThumbnailsHeight'] }, - 'thumbnailimage' => { 6 => 'CNDA', 97 => 0x2008, 114 => 'Exif-ThumbnailImage', 122 => 0x3, 167 => 'data', 317 => 0x100, 395 => 'thmb', 519 => [\'Thumbnails','ThumbnailsImage'] }, + 'thumbnailformat' => { 521 => [\'Thumbnails','ThumbnailsFormat'] }, + 'thumbnailheight' => { 142 => 0xfa55, 521 => [\'Thumbnails','ThumbnailsHeight'] }, + 'thumbnailimage' => { 6 => 'CNDA', 97 => 0x2008, 114 => 'Exif-ThumbnailImage', 122 => 0x3, 167 => 'data', 317 => 0x100, 395 => 'thmb', 521 => [\'Thumbnails','ThumbnailsImage'] }, 'thumbnailimagename' => { 167 => '1Name' }, 'thumbnailimagesize' => { 167 => 'ImageSize' }, 'thumbnailimagetype' => { 167 => '0Type' }, @@ -6560,9 +6577,9 @@ my %tagLookup = ( 'thumbnaillength' => { 119 => 0x202 }, 'thumbnailoffset' => { 119 => 0x201 }, 'thumbnailpng' => { 395 => 'thmb' }, - 'thumbnails' => { 519 => 'Thumbnails' }, - 'thumbnailwidth' => { 142 => 0xfa54, 519 => [\'Thumbnails','ThumbnailsWidth'] }, - 'ticker' => { 511 => 'ticker' }, + 'thumbnails' => { 521 => 'Thumbnails' }, + 'thumbnailwidth' => { 142 => 0xfa54, 521 => [\'Thumbnails','ThumbnailsWidth'] }, + 'ticker' => { 513 => 'ticker' }, 'tiffhandling' => { 494 => 'TIFFHandling', 496 => 'TIFFHandling' }, 'tiffmeteringimage' => { 187 => 0x104c, 433 => 0x1110 }, 'tilelength' => { 119 => 0x143 }, @@ -6571,19 +6588,19 @@ my %tagLookup = ( 'timecodes' => { 119 => 0xc763 }, 'timecreated' => { 131 => 0x3c, 140 => 0x14, 149 => 0x10, 382 => 'TimeCreated' }, 'timelapseshotnumber' => { 338 => 0x10 }, - 'timeperiod' => { 511 => 'timePeriod' }, + 'timeperiod' => { 513 => 'timePeriod' }, 'timerfunctionbutton' => { 296 => '5.2', 299 => '12.1', 300 => '13.1' }, 'timerlength' => { 84 => 0x80c }, 'timerrecording' => { 335 => 0x96 }, - 'timescaleparams' => { 521 => 'timeScaleParams' }, - 'timescaleparamsframeoverlappingpercentage' => { 521 => [\'timeScaleParams','timeScaleParamsFrameOverlappingPercentage'] }, - 'timescaleparamsframesize' => { 521 => [\'timeScaleParams','timeScaleParamsFrameSize'] }, - 'timescaleparamsquality' => { 521 => [\'timeScaleParams','timeScaleParamsQuality'] }, + 'timescaleparams' => { 523 => 'timeScaleParams' }, + 'timescaleparamsframeoverlappingpercentage' => { 523 => [\'timeScaleParams','timeScaleParamsFrameOverlappingPercentage'] }, + 'timescaleparamsframesize' => { 523 => [\'timeScaleParams','timeScaleParamsFrameSize'] }, + 'timescaleparamsquality' => { 523 => [\'timeScaleParams','timeScaleParamsQuality'] }, 'timesent' => { 132 => 0x50 }, 'timeshot' => { 484 => 'TimeShot' }, - 'timesignature' => { 521 => 'timeSignature' }, + 'timesignature' => { 523 => 'timeSignature' }, 'timesincepoweron' => { 335 => 0x29 }, - 'timestamp' => { 11 => 0x45e, 19 => 0x11c, 311 => 0x8, 325 => 'TimeStamp', 335 => 0xaf, 483 => 'Timestamp', 490 => 'Timestamp', 505 => 'TimeStamp' }, + 'timestamp' => { 11 => 0x45e, 19 => 0x11c, 311 => 0x8, 325 => 'TimeStamp', 335 => 0xaf, 483 => 'Timestamp', 490 => 'Timestamp', 506 => 'TimeStamp' }, 'timestamp1' => { 11 => 0x45a }, 'timezone' => { 78 => 0x1, 238 => 0x594, 239 => 0x5c4, 279 => 0x0, 405 => 0xa }, 'timezonecity' => { 78 => 0x2 }, @@ -6591,7 +6608,7 @@ my %tagLookup = ( 'timezoneinfo' => { 100 => 0x2 }, 'timezoneoffset' => { 119 => 0x882a }, 'tint' => { 389 => 'player.movie.visual.tint', 494 => 'Tint', 496 => 'Tint' }, - 'title' => { 157 => 'Title', 321 => 'Title', 325 => 'Title', 335 => 0x65, 386 => 'Title', 387 => ['titl',"\xa9nam"], 389 => 'title', 395 => ['titl',"\xa9nam"], 497 => 'title', 508 => 'Title', 519 => 'Title' }, + 'title' => { 119 => 0xa436, 157 => 'Title', 321 => 'Title', 325 => 'Title', 335 => 0x65, 386 => 'Title', 387 => ['titl',"\xa9nam"], 389 => 'title', 395 => ['titl',"\xa9nam"], 497 => 'title', 510 => 'Title', 521 => 'Title' }, 'togglestyleamount' => { 494 => 'ToggleStyleAmount', 496 => 'ToggleStyleAmount' }, 'togglestyledigest' => { 494 => 'ToggleStyleDigest', 496 => 'ToggleStyleDigest' }, 'tonecomp' => { 233 => 0x81 }, @@ -6651,38 +6668,39 @@ my %tagLookup = ( 'track' => { 387 => "\xa9trk", 395 => "\xa9trk" }, 'trackcreatedate' => { 394 => 0x1 }, 'trackmodifydate' => { 394 => 0x2 }, - 'tracknumber' => { 387 => 'trkn', 521 => 'trackNumber' }, - 'tracks' => { 521 => 'Tracks' }, - 'tracksframerate' => { 521 => [\'Tracks','TracksFrameRate'] }, - 'tracksmarkers' => { 521 => [\'Tracks','TracksMarkers'] }, - 'tracksmarkerscomment' => { 521 => [\'Tracks','TracksMarkersComment'] }, - 'tracksmarkerscuepointparams' => { 521 => [\'Tracks','TracksMarkersCuePointParams'] }, - 'tracksmarkerscuepointparamskey' => { 521 => [\'Tracks','TracksMarkersCuePointParamsKey'] }, - 'tracksmarkerscuepointparamsvalue' => { 521 => [\'Tracks','TracksMarkersCuePointParamsValue'] }, - 'tracksmarkerscuepointtype' => { 521 => [\'Tracks','TracksMarkersCuePointType'] }, - 'tracksmarkersduration' => { 521 => [\'Tracks','TracksMarkersDuration'] }, - 'tracksmarkerslocation' => { 521 => [\'Tracks','TracksMarkersLocation'] }, - 'tracksmarkersname' => { 521 => [\'Tracks','TracksMarkersName'] }, - 'tracksmarkersprobability' => { 521 => [\'Tracks','TracksMarkersProbability'] }, - 'tracksmarkersspeaker' => { 521 => [\'Tracks','TracksMarkersSpeaker'] }, - 'tracksmarkersstarttime' => { 521 => [\'Tracks','TracksMarkersStartTime'] }, - 'tracksmarkerstarget' => { 521 => [\'Tracks','TracksMarkersTarget'] }, - 'tracksmarkerstype' => { 521 => [\'Tracks','TracksMarkersType'] }, - 'trackstrackname' => { 521 => [\'Tracks','TracksTrackName'] }, - 'trackstracktype' => { 521 => [\'Tracks','TracksTrackType'] }, + 'tracknumber' => { 387 => 'trkn', 523 => 'trackNumber' }, + 'tracks' => { 523 => 'Tracks' }, + 'tracksframerate' => { 523 => [\'Tracks','TracksFrameRate'] }, + 'tracksmarkers' => { 523 => [\'Tracks','TracksMarkers'] }, + 'tracksmarkerscomment' => { 523 => [\'Tracks','TracksMarkersComment'] }, + 'tracksmarkerscuepointparams' => { 523 => [\'Tracks','TracksMarkersCuePointParams'] }, + 'tracksmarkerscuepointparamskey' => { 523 => [\'Tracks','TracksMarkersCuePointParamsKey'] }, + 'tracksmarkerscuepointparamsvalue' => { 523 => [\'Tracks','TracksMarkersCuePointParamsValue'] }, + 'tracksmarkerscuepointtype' => { 523 => [\'Tracks','TracksMarkersCuePointType'] }, + 'tracksmarkersduration' => { 523 => [\'Tracks','TracksMarkersDuration'] }, + 'tracksmarkerslocation' => { 523 => [\'Tracks','TracksMarkersLocation'] }, + 'tracksmarkersname' => { 523 => [\'Tracks','TracksMarkersName'] }, + 'tracksmarkersprobability' => { 523 => [\'Tracks','TracksMarkersProbability'] }, + 'tracksmarkersspeaker' => { 523 => [\'Tracks','TracksMarkersSpeaker'] }, + 'tracksmarkersstarttime' => { 523 => [\'Tracks','TracksMarkersStartTime'] }, + 'tracksmarkerstarget' => { 523 => [\'Tracks','TracksMarkersTarget'] }, + 'tracksmarkerstype' => { 523 => [\'Tracks','TracksMarkersType'] }, + 'trackstrackname' => { 523 => [\'Tracks','TracksTrackName'] }, + 'trackstracktype' => { 523 => [\'Tracks','TracksTrackType'] }, 'tracktype' => { 395 => 'kgtt' }, 'trailer' => { 120 => 'Trailer' }, 'trailersignature' => { 164 => 'zmie' }, - 'transcript' => { 507 => 'Transcript' }, - 'transcriptlink' => { 507 => 'TranscriptLink' }, - 'transcriptlinklink' => { 507 => [\'TranscriptLink','TranscriptLinkLink'] }, - 'transcriptlinklinkqualifier' => { 507 => [\'TranscriptLink','TranscriptLinkLinkQualifier'] }, - 'transferfunction' => { 119 => 0x12d, 517 => 'TransferFunction' }, + 'transcript' => { 508 => 'Transcript' }, + 'transcriptlink' => { 508 => 'TranscriptLink' }, + 'transcriptlinklink' => { 508 => [\'TranscriptLink','TranscriptLinkLink'] }, + 'transcriptlinklinkqualifier' => { 508 => [\'TranscriptLink','TranscriptLinkLinkQualifier'] }, + 'transferfunction' => { 119 => 0x12d, 519 => 'TransferFunction' }, 'transfertimenormal' => { 138 => 0x1888 }, 'transfertimetest' => { 138 => 0x1889 }, 'transform' => { 335 => [0x8012,0x59] }, - 'transmissionreference' => { 509 => 'TransmissionReference' }, - 'trapped' => { 321 => 'Trapped', 508 => 'Trapped' }, + 'transformation' => { 509 => 'Transformation' }, + 'transmissionreference' => { 511 => 'TransmissionReference' }, + 'trapped' => { 321 => 'Trapped', 510 => 'Trapped' }, 'trashbuttonfunction' => { 84 => 0x710 }, 'travelday' => { 335 => 0x36 }, 'treble' => { 389 => 'player.movie.audio.treble' }, @@ -6699,7 +6717,7 @@ my %tagLookup = ( 'tvnetworkname' => { 387 => 'tvnn' }, 'tvseason' => { 387 => 'tvsn' }, 'tvshow' => { 387 => 'tvsh' }, - 'type' => { 478 => 'Type', 497 => 'type', 516 => 'type' }, + 'type' => { 478 => 'Type', 497 => 'type', 518 => 'type' }, 'typestatus' => { 118 => [\'Identification','IdentificationTypeStatus'] }, 'uniquecameramodel' => { 119 => 0xc614 }, 'uniquedocumentid' => { 131 => 0xbb }, @@ -6776,15 +6794,15 @@ my %tagLookup = ( 'uprighttransform_5' => { 494 => 'UprightTransform_5', 496 => 'UprightTransform_5' }, 'uprighttransformcount' => { 494 => 'UprightTransformCount', 496 => 'UprightTransformCount' }, 'uprightversion' => { 494 => 'UprightVersion', 496 => 'UprightVersion' }, - 'urgency' => { 131 => 0xa, 509 => 'Urgency' }, - 'url' => { 157 => 'URL', 325 => 'URL', 384 => 0x40b, 511 => 'url' }, + 'urgency' => { 131 => 0xa, 511 => 'Urgency' }, + 'url' => { 157 => 'URL', 325 => 'URL', 384 => 0x40b, 513 => 'url' }, 'url_list' => { 384 => 0x41e }, - 'urla-platform' => { 511 => [\'url','urlA-platform'] }, - 'urlurl' => { 511 => [\'url','urlUrl'] }, + 'urla-platform' => { 513 => [\'url','urlA-platform'] }, + 'urlurl' => { 513 => [\'url','urlUrl'] }, 'usablemeteringmodes' => { 84 => 0x10a }, 'usableshootingmodes' => { 84 => 0x109 }, - 'usage' => { 512 => 'usage' }, - 'usageterms' => { 525 => 'UsageTerms' }, + 'usage' => { 514 => 'usage' }, + 'usageterms' => { 527 => 'UsageTerms' }, 'usbpowerdelivery' => { 238 => 0x664, 239 => 0x694 }, 'usedialwithouthold' => { 310 => 0xbf }, 'useguidelines' => { 492 => 'useGuidelines' }, @@ -6799,7 +6817,7 @@ my %tagLookup = ( 'userprofile' => { 330 => 0x302, 334 => 0x34c, 337 => 0x3038 }, 'userrating' => { 389 => 'rating.user', 395 => 'urat' }, 'usmlenselectronicmf' => { 2 => 0x7, 83 => 0x7, 84 => 0x501 }, - 'uspsnumber' => { 511 => 'uspsNumber' }, + 'uspsnumber' => { 513 => 'uspsNumber' }, 'utmeasting' => { 168 => 'Easting' }, 'utmmapdatum' => { 168 => 'Datum' }, 'utmnorthing' => { 168 => 'Northing' }, @@ -6819,23 +6837,23 @@ my %tagLookup = ( 'vendorinfomodel' => { 473 => [\'VendorInfo','VendorInfoModel'] }, 'vendorinfonotes' => { 473 => [\'VendorInfo','VendorInfoNotes'] }, 'verbatimidentification' => { 118 => [\'Identification','IdentificationVerbatimIdentification'] }, - 'version' => { 127 => 0x0, 386 => 'Version', 389 => 'version', 494 => 'Version', 496 => 'Version' }, + 'version' => { 127 => 0x0, 386 => 'Version', 389 => 'version', 494 => 'Version', 496 => 'Version', 505 => 'Version' }, 'versioncreatedate' => { 470 => 0xd100 }, - 'versionid' => { 522 => 'VersionID' }, - 'versionidentifier' => { 511 => 'versionIdentifier' }, + 'versionid' => { 524 => 'VersionID' }, + 'versionidentifier' => { 513 => 'versionIdentifier' }, 'versionmodifydate' => { 470 => 0xd101 }, - 'versions' => { 522 => 'Versions' }, - 'versionscomments' => { 522 => [\'Versions','VersionsComments'] }, - 'versionsevent' => { 522 => [\'Versions','VersionsEvent'] }, - 'versionseventaction' => { 522 => [\'Versions','VersionsEventAction'] }, - 'versionseventchanged' => { 522 => [\'Versions','VersionsEventChanged'] }, - 'versionseventinstanceid' => { 522 => [\'Versions','VersionsEventInstanceID'] }, - 'versionseventparameters' => { 522 => [\'Versions','VersionsEventParameters'] }, - 'versionseventsoftwareagent' => { 522 => [\'Versions','VersionsEventSoftwareAgent'] }, - 'versionseventwhen' => { 522 => [\'Versions','VersionsEventWhen'] }, - 'versionsmodifier' => { 522 => [\'Versions','VersionsModifier'] }, - 'versionsmodifydate' => { 522 => [\'Versions','VersionsModifyDate'] }, - 'versionsversion' => { 522 => [\'Versions','VersionsVersion'] }, + 'versions' => { 524 => 'Versions' }, + 'versionscomments' => { 524 => [\'Versions','VersionsComments'] }, + 'versionsevent' => { 524 => [\'Versions','VersionsEvent'] }, + 'versionseventaction' => { 524 => [\'Versions','VersionsEventAction'] }, + 'versionseventchanged' => { 524 => [\'Versions','VersionsEventChanged'] }, + 'versionseventinstanceid' => { 524 => [\'Versions','VersionsEventInstanceID'] }, + 'versionseventparameters' => { 524 => [\'Versions','VersionsEventParameters'] }, + 'versionseventsoftwareagent' => { 524 => [\'Versions','VersionsEventSoftwareAgent'] }, + 'versionseventwhen' => { 524 => [\'Versions','VersionsEventWhen'] }, + 'versionsmodifier' => { 524 => [\'Versions','VersionsModifier'] }, + 'versionsmodifydate' => { 524 => [\'Versions','VersionsModifyDate'] }, + 'versionsversion' => { 524 => [\'Versions','VersionsVersion'] }, 'verticalafonbutton' => { 294 => '3.2', 295 => '47.2', 297 => '79.1', 310 => 0x11d }, 'verticalclockoverlaps' => { 138 => 0x412 }, 'verticalfuncbutton' => { 295 => '42.2', 297 => '67.1', 310 => 0x115 }, @@ -6849,50 +6867,50 @@ my %tagLookup = ( 'vfdisplayillumination' => { 2 => 0x11, 84 => [0x510,0x51d] }, 'vibrance' => { 488 => 'Vibrance', 494 => 'Vibrance', 496 => 'Vibrance' }, 'vibrationreduction' => { 259 => [0x75,0x82,0x1ae], 267 => '586.1', 274 => '590.2', 278 => 0x4 }, - 'videoalphamode' => { 521 => 'videoAlphaMode' }, - 'videoalphapremultiplecolor' => { 521 => 'videoAlphaPremultipleColor' }, - 'videoalphapremultiplecolora' => { 521 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorA'] }, - 'videoalphapremultiplecolorb' => { 521 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorB'] }, - 'videoalphapremultiplecolorblack' => { 521 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorBlack'] }, - 'videoalphapremultiplecolorblue' => { 521 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorBlue'] }, - 'videoalphapremultiplecolorcyan' => { 521 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorCyan'] }, - 'videoalphapremultiplecolorgray' => { 521 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorGray'] }, - 'videoalphapremultiplecolorgreen' => { 521 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorGreen'] }, - 'videoalphapremultiplecolorl' => { 521 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorL'] }, - 'videoalphapremultiplecolormagenta' => { 521 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorMagenta'] }, - 'videoalphapremultiplecolormode' => { 521 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorMode'] }, - 'videoalphapremultiplecolorred' => { 521 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorRed'] }, - 'videoalphapremultiplecolorswatchname' => { 521 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorSwatchName'] }, - 'videoalphapremultiplecolortint' => { 521 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorTint'] }, - 'videoalphapremultiplecolortype' => { 521 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorType'] }, - 'videoalphapremultiplecoloryellow' => { 521 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorYellow'] }, - 'videoalphaunityistransparent' => { 521 => 'videoAlphaUnityIsTransparent' }, - 'videobitrate' => { 507 => 'videoBitRate' }, - 'videobitratemode' => { 507 => 'videoBitRateMode' }, + 'videoalphamode' => { 523 => 'videoAlphaMode' }, + 'videoalphapremultiplecolor' => { 523 => 'videoAlphaPremultipleColor' }, + 'videoalphapremultiplecolora' => { 523 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorA'] }, + 'videoalphapremultiplecolorb' => { 523 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorB'] }, + 'videoalphapremultiplecolorblack' => { 523 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorBlack'] }, + 'videoalphapremultiplecolorblue' => { 523 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorBlue'] }, + 'videoalphapremultiplecolorcyan' => { 523 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorCyan'] }, + 'videoalphapremultiplecolorgray' => { 523 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorGray'] }, + 'videoalphapremultiplecolorgreen' => { 523 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorGreen'] }, + 'videoalphapremultiplecolorl' => { 523 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorL'] }, + 'videoalphapremultiplecolormagenta' => { 523 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorMagenta'] }, + 'videoalphapremultiplecolormode' => { 523 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorMode'] }, + 'videoalphapremultiplecolorred' => { 523 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorRed'] }, + 'videoalphapremultiplecolorswatchname' => { 523 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorSwatchName'] }, + 'videoalphapremultiplecolortint' => { 523 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorTint'] }, + 'videoalphapremultiplecolortype' => { 523 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorType'] }, + 'videoalphapremultiplecoloryellow' => { 523 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorYellow'] }, + 'videoalphaunityistransparent' => { 523 => 'videoAlphaUnityIsTransparent' }, + 'videobitrate' => { 508 => 'videoBitRate' }, + 'videobitratemode' => { 508 => 'videoBitRateMode' }, 'videoburstmode' => { 335 => 0xbb }, 'videoburstresolution' => { 335 => 0xb3 }, 'videocodec' => { 67 => 0x74 }, - 'videocolorspace' => { 521 => 'videoColorSpace' }, + 'videocolorspace' => { 523 => 'videoColorSpace' }, 'videocompression' => { 127 => 0x3806 }, - 'videocompressor' => { 521 => 'videoCompressor' }, - 'videodisplayaspectratio' => { 507 => 'videoDisplayAspectRatio' }, - 'videoencodingprofile' => { 507 => 'videoEncodingProfile' }, - 'videofieldorder' => { 521 => 'videoFieldOrder' }, - 'videoframerate' => { 335 => 0x27, 521 => 'videoFrameRate' }, - 'videoframesize' => { 521 => 'videoFrameSize' }, - 'videoframesizeh' => { 521 => [\'videoFrameSize','videoFrameSizeH'] }, - 'videoframesizeunit' => { 521 => [\'videoFrameSize','videoFrameSizeUnit'] }, - 'videoframesizew' => { 521 => [\'videoFrameSize','videoFrameSizeW'] }, - 'videomoddate' => { 521 => 'videoModDate' }, - 'videopixelaspectratio' => { 521 => 'videoPixelAspectRatio' }, - 'videopixeldepth' => { 521 => 'videoPixelDepth' }, + 'videocompressor' => { 523 => 'videoCompressor' }, + 'videodisplayaspectratio' => { 508 => 'videoDisplayAspectRatio' }, + 'videoencodingprofile' => { 508 => 'videoEncodingProfile' }, + 'videofieldorder' => { 523 => 'videoFieldOrder' }, + 'videoframerate' => { 335 => 0x27, 523 => 'videoFrameRate' }, + 'videoframesize' => { 523 => 'videoFrameSize' }, + 'videoframesizeh' => { 523 => [\'videoFrameSize','videoFrameSizeH'] }, + 'videoframesizeunit' => { 523 => [\'videoFrameSize','videoFrameSizeUnit'] }, + 'videoframesizew' => { 523 => [\'videoFrameSize','videoFrameSizeW'] }, + 'videomoddate' => { 523 => 'videoModDate' }, + 'videopixelaspectratio' => { 523 => 'videoPixelAspectRatio' }, + 'videopixeldepth' => { 523 => 'videoPixelDepth' }, 'videopreburst' => { 335 => 0xc1 }, 'videoquality' => { 113 => 0x4003 }, 'videorecordingmode' => { 127 => 0x3803 }, - 'videoshottype' => { 507 => 'VideoShotType' }, - 'videoshottypeidentifier' => { 507 => [\'VideoShotType','VideoShotTypeIdentifier'] }, - 'videoshottypename' => { 507 => [\'VideoShotType','VideoShotTypeName'] }, - 'videostreamscount' => { 507 => 'videoStreamsCount' }, + 'videoshottype' => { 508 => 'VideoShotType' }, + 'videoshottypeidentifier' => { 508 => [\'VideoShotType','VideoShotTypeIdentifier'] }, + 'videoshottypename' => { 508 => [\'VideoShotType','VideoShotTypeName'] }, + 'videostreamscount' => { 508 => 'videoStreamsCount' }, 'viewfinder' => { 379 => 0x455 }, 'viewfinderdisplay' => { 294 => '12.4', 295 => '6.3' }, 'viewfinderwarning' => { 294 => '13.4', 304 => '3.5', 305 => '6.2', 309 => '4.4' }, @@ -6900,7 +6918,7 @@ my %tagLookup = ( 'viewinfoduringexposure' => { 84 => 0x407 }, 'viewingmode' => { 424 => 0x2f, 440 => 0x18 }, 'viewingmode2' => { 424 => [0x85,0x285] }, - 'viewpoint' => { 510 => 'viewpoint' }, + 'viewpoint' => { 512 => 'viewpoint' }, 'vignetteamount' => { 494 => 'VignetteAmount', 496 => 'VignetteAmount' }, 'vignettecontrol' => { 233 => 0x2a, 287 => 0x76a43205 }, 'vignettecontrolintensity' => { 287 => 0xac6bd5c0 }, @@ -6910,11 +6928,14 @@ my %tagLookup = ( 'vignettingcorrection' => { 119 => 0x7031, 409 => 0xa053, 435 => 0x2011 }, 'vignettingcorrparams' => { 119 => 0x7032, 465 => 0x64a, 466 => [0x34a,0x350,0x35c,0x368] }, 'vignettingsetting' => { 409 => 0xa054 }, + 'virtualfocallength' => { 509 => 'VirtualFocalLength' }, 'virtualhorizonstyle' => { 310 => 0x167 }, - 'visualcolor' => { 507 => 'VisualColour' }, - 'visualtechnique' => { 510 => 'visualTechnique' }, + 'virtualimagexcenter' => { 509 => 'VirtualImageXCenter' }, + 'virtualimageycenter' => { 509 => 'VirtualImageYCenter' }, + 'visualcolor' => { 508 => 'VisualColour' }, + 'visualtechnique' => { 512 => 'visualTechnique' }, 'voicememo' => { 411 => 0x216 }, - 'volume' => { 511 => 'volume' }, + 'volume' => { 513 => 'volume' }, 'vr_0x66' => { 259 => 0x66 }, 'vrdoffset' => { 64 => 0xd0 }, 'vrmode' => { 238 => 0x212, 239 => 0x226, 278 => 0x6 }, @@ -7150,7 +7171,7 @@ my %tagLookup = ( 'wbtype5' => { 341 => 0xd, 342 => 0x11 }, 'wbtype6' => { 341 => 0x10, 342 => 0x15 }, 'wbtype7' => { 341 => 0x13, 342 => 0x19 }, - 'webstatement' => { 525 => 'WebStatement' }, + 'webstatement' => { 527 => 'WebStatement' }, 'weightedflatsubject' => { 486 => 'weightedFlatSubject' }, 'what' => { 494 => 'What', 496 => 'What' }, 'whitebalance' => { 7 => 0x6f, 8 => [0x44,0x4a], 9 => 0xbc, 10 => 0x36, 11 => 0x5e, 12 => 0x36, 13 => 0x78, 14 => 0x6f, 15 => 0x6f, 16 => 0x73, 17 => 0x6f, 18 => 0x78, 19 => 0x54, 20 => 0x6f, 21 => 0xbc, 22 => 0x7b, 24 => 0xbc, 25 => 0xc2, 27 => 0x131, 28 => 0x77, 74 => 0x8, 77 => 0x7, 112 => 0x7, 113 => [0x19,0x2012], 119 => [0xa403,0xfe4e], 127 => 0x1002, 138 => 0x3fc, 139 => 0xfa0d, 140 => 0x40, 151 => 0x1a, 181 => 0x3, 182 => 0xe, 183 => 0x4, 184 => 0xb, 186 => 0x115, 233 => 0x5, 277 => 0x7, 330 => 0x304, 335 => 0x3, 337 => 0x3033, 370 => 0x19, 377 => 0x7, 401 => 0x26, 402 => 0x1003, 412 => [0x88,0x3c,0x7,0x58], 422 => 0xf, 423 => 0xe, 435 => [0x115,0xb054], 494 => 'WhiteBalance', 496 => 'WhiteBalance', 500 => 'WhiteBalance' }, @@ -7175,7 +7196,7 @@ my %tagLookup = ( 'whitebalancetemperature' => { 312 => 0x501 }, 'whiteboard' => { 317 => 0x301 }, 'whitelevel' => { 119 => 0xc61d, 370 => 0x7e, 442 => 0x787f }, - 'whitepoint' => { 119 => 0x13e, 334 => 0x35d, 370 => 0x201, 517 => 'WhitePoint' }, + 'whitepoint' => { 119 => 0x13e, 334 => 0x35d, 370 => 0x201, 519 => 'WhitePoint' }, 'whites2012' => { 494 => 'Whites2012', 496 => 'Whites2012' }, 'whitesadj' => { 470 => 0x9017 }, 'wideadapter' => { 402 => 0x1017 }, @@ -7188,14 +7209,14 @@ my %tagLookup = ( 'windowsatomextension' => { 495 => [\'windowsAtom','windowsAtomExtension'] }, 'windowsatominvocationflags' => { 495 => [\'windowsAtom','windowsAtomInvocationFlags'] }, 'windowsatomuncprojectpath' => { 495 => [\'windowsAtom','windowsAtomUncProjectPath'] }, - 'wordcount' => { 511 => 'wordCount' }, + 'wordcount' => { 513 => 'wordCount' }, 'work' => { 387 => "\xa9wrk" }, 'workcolorspace' => { 103 => 0x10200, 108 => 0x270 }, - 'workflowtag' => { 507 => 'WorkflowTag' }, - 'workflowtagcvid' => { 507 => [\'WorkflowTag','WorkflowTagCvId'] }, - 'workflowtagcvtermid' => { 507 => [\'WorkflowTag','WorkflowTagCvTermId'] }, - 'workflowtagcvtermname' => { 507 => [\'WorkflowTag','WorkflowTagCvTermName'] }, - 'workflowtagcvtermrefinedabout' => { 507 => [\'WorkflowTag','WorkflowTagCvTermRefinedAbout'] }, + 'workflowtag' => { 508 => 'WorkflowTag' }, + 'workflowtagcvid' => { 508 => [\'WorkflowTag','WorkflowTagCvId'] }, + 'workflowtagcvtermid' => { 508 => [\'WorkflowTag','WorkflowTagCvTermId'] }, + 'workflowtagcvtermname' => { 508 => [\'WorkflowTag','WorkflowTagCvTermName'] }, + 'workflowtagcvtermrefinedabout' => { 508 => [\'WorkflowTag','WorkflowTagCvTermRefinedAbout'] }, 'worktodo' => { 502 => 'WorkToDo' }, 'worldtimelocation' => { 335 => 0x3a, 370 => 0x22, 376 => '0.1' }, 'writer' => { 179 => 'WM/Writer' }, @@ -7205,26 +7226,26 @@ my %tagLookup = ( 'xilinxversion' => { 138 => 0x414 }, 'xml' => { 136 => 'xml ' }, 'xmp' => { 106 => 0xffff00f6, 120 => 'XMP' }, - 'xmptoolkit' => { 518 => 'xmptk' }, + 'xmptoolkit' => { 520 => 'xmptk' }, 'xpauthor' => { 119 => 0x9c9d }, 'xpcomment' => { 119 => 0x9c9c }, 'xpkeywords' => { 119 => 0x9c9e }, 'xposition' => { 119 => 0x11e }, 'xpsubject' => { 119 => 0x9c9f }, 'xptitle' => { 119 => 0x9c9b }, - 'xresolution' => { 119 => 0x11a, 134 => 0x3, 385 => 0x0, 517 => 'XResolution' }, + 'xresolution' => { 119 => 0x11a, 134 => 0x3, 385 => 0x0, 519 => 'XResolution' }, 'xyresolution' => { 123 => 0x3 }, 'yaw' => { 115 => 0x7, 395 => ['_yaw',"\xa9fyw"] }, 'yawangle' => { 244 => 0x8, 407 => 0x0 }, - 'ycbcrcoefficients' => { 119 => 0x211, 517 => 'YCbCrCoefficients' }, - 'ycbcrpositioning' => { 119 => 0x213, 517 => 'YCbCrPositioning' }, - 'ycbcrsubsampling' => { 119 => 0x212, 517 => 'YCbCrSubSampling' }, + 'ycbcrcoefficients' => { 119 => 0x211, 519 => 'YCbCrCoefficients' }, + 'ycbcrpositioning' => { 119 => 0x213, 519 => 'YCbCrPositioning' }, + 'ycbcrsubsampling' => { 119 => 0x212, 519 => 'YCbCrSubSampling' }, 'year' => { 387 => 'yrrc', 389 => 'year', 395 => 'yrrc' }, 'yearcreated' => { 140 => 0x10, 149 => 0xc }, 'yellowhsl' => { 103 => 0x20912 }, - 'yield' => { 513 => 'yield' }, + 'yield' => { 515 => 'yield' }, 'yposition' => { 119 => 0x11f }, - 'yresolution' => { 119 => 0x11b, 134 => 0x5, 385 => 0x4, 517 => 'YResolution' }, + 'yresolution' => { 119 => 0x11b, 134 => 0x5, 385 => 0x4, 519 => 'YResolution' }, 'zebrapatterntonerange' => { 310 => 0x211 }, 'zoneidentifier' => { 120 => 'ZoneIdentifier' }, 'zonematching' => { 186 => 0x10a, 189 => [0x3a,0x4a], 435 => 0xb024 }, @@ -7769,6 +7790,9 @@ my %tagExists = ( 'broadcast' => 1, 'broadcastdate' => 1, 'broadcastextension' => 1, + 'brotliexif' => 1, + 'brotlijumb' => 1, + 'brotlixmp' => 1, 'btoa0' => 1, 'btoa1' => 1, 'btoa2' => 1, @@ -8272,6 +8296,7 @@ my %tagExists = ( 'contentencryption' => 1, 'contentgroupdescription' => 1, 'contentlanguage' => 1, + 'contentlightlevel' => 1, 'contentprotected' => 1, 'contentprotectedpercent' => 1, 'contentrating' => 1, @@ -9179,6 +9204,7 @@ my %tagExists = ( 'gaindeadmapimageheight' => 1, 'gaindeadmapimagetype' => 1, 'gaindeadmapimagewidth' => 1, + 'gainmapimage' => 1, 'gammablue' => 1, 'gammagreen' => 1, 'gammainfo' => 1, @@ -9322,6 +9348,7 @@ my %tagExists = ( 'gtcitation' => 1, 'gtmodeltype' => 1, 'gtrastertype' => 1, + 'guano' => 1, 'gyro360fly' => 1, 'gyromode' => 1, 'gyroscope' => 1, @@ -9358,6 +9385,7 @@ my %tagExists = ( 'hdmiexternalrecorder' => 1, 'hdmioutputhdr' => 1, 'hdmioutputrange' => 1, + 'hdrgm' => 1, 'hdrinfo' => 1, 'hdrinfo2' => 1, 'hdrinfoversion' => 1, @@ -9480,7 +9508,7 @@ my %tagExists = ( 'imagecompressiontable' => 1, 'imagecoordinatesystem' => 1, 'imagedatadiscard' => 1, - 'imagedatamd5' => 1, + 'imagedatahash' => 1, 'imagedataoffset' => 1, 'imagedepth' => 1, 'imageelements' => 1, @@ -10053,6 +10081,7 @@ my %tagExists = ( 'matter' => 1, 'maxband' => 1, 'maxbitrate' => 1, + 'maxcontentlightlevel' => 1, 'maxdatarate' => 1, 'maximumbitrate' => 1, 'maximumimageindex' => 1, @@ -10064,6 +10093,7 @@ my %tagExists = ( 'maxpacketsize' => 1, 'maxpagenormal' => 1, 'maxpdusize' => 1, + 'maxpicaveragelightlevel' => 1, 'maxsubfilesize' => 1, 'maxtransmissiontime' => 1, 'maxval' => 1, @@ -10765,6 +10795,7 @@ my %tagExists = ( 'partialactivecolsright' => 1, 'partialactiverowsbottom' => 1, 'partialactiverowstop' => 1, + 'partialjxlcodestream' => 1, 'partialpalette' => 1, 'partialsyncsamples' => 1, 'participants' => 1, @@ -11108,7 +11139,6 @@ my %tagExists = ( 'rafdata' => 1, 'rafversion' => 1, 'rangeimagelocalset' => 1, - 'rarversion' => 1, 'rasterpadding' => 1, 'rate' => 1, 'rated' => 1, @@ -12092,7 +12122,6 @@ my %tagExists = ( 'transfercharacteristics' => 1, 'transferrange' => 1, 'transfersequence' => 1, - 'transformation' => 1, 'transformcreatedate' => 1, 'transformedimagetitle' => 1, 'transformmodifydate' => 1, diff --git a/lib/Image/ExifTool/TagNames.pod b/lib/Image/ExifTool/TagNames.pod index 2507885c..f54be37c 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 26407 tags, with 16869 unique tag names. +They contain a total of 26443 tags, with 16891 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 @@ -798,6 +798,13 @@ for the official EXIF 2.32 specification. 0xa433 LensMake ExifIFD string 0xa434 LensModel ExifIFD string 0xa435 LensSerialNumber ExifIFD string + 0xa436 Title ExifIFD string/ + 0xa437 Photographer ExifIFD string + 0xa438 ImageEditor ExifIFD string + 0xa439 CameraFirmware ExifIFD string + 0xa43a RAWDevelopingSoftware ExifIFD string + 0xa43b ImageEditingSoftware ExifIFD string + 0xa43c MetadataEditingSoftware ExifIFD string 0xa460 CompositeImage ExifIFD int16u 0xa461 CompositeImageCount ExifIFD int16u[2] 0xa462 CompositeImageExposureTimes ExifIFD undef @@ -1306,6 +1313,7 @@ L<http://www.adobe.com/devnet/xmp/> for the official XMP specification. GPano XMP GPano GSpherical XMP GSpherical hdr XMP hdr + hdrgm XMP hdrgm ics XMP ics iptcCore XMP iptcCore iptcExt XMP iptcExt @@ -1319,6 +1327,7 @@ L<http://www.adobe.com/devnet/xmp/> for the official XMP specification. mwg-kw MWG Keywords mwg-rs MWG Regions nine Nikon nine + panorama XMP panorama pdf XMP pdf pdfx XMP pdfx photomech PhotoMechanic XMP @@ -4047,6 +4056,8 @@ These tags belong to the ExifTool XMP-et family 1 group. Tag Name Writable -------- -------- + OriginalImageHash string + OriginalImageHashType string OriginalImageMD5 string =head3 XMP exif Tags @@ -4498,6 +4509,24 @@ These tags belong to the ExifTool XMP-hdr family 1 group. CCVWhiteXY string SceneReferred boolean +=head3 XMP hdrgm Tags + +Tags used in Adobe gain map images. + +These tags belong to the ExifTool XMP-hdrgm family 1 group. + + Tag Name Writable + -------- -------- + BaseRenditionIsHDR boolean + GainMapMax real+ + GainMapMin real+ + Gamma real/+ + HDRCapacityMax real + HDRCapacityMin real + OffsetHDR real+ + OffsetSDR real+ + Version string/ + =head3 XMP ics Tags Tags used by IDimager. Nested TagStructure structures are unrolled to an @@ -5127,6 +5156,19 @@ These tags belong to the ExifTool XMP-mediapro family 1 group. Status string UserFields string+ +=head3 XMP panorama Tags + +Adobe Photoshop Panorama-profile tags. + +These tags belong to the ExifTool XMP-panorama family 1 group. + + Tag Name Writable + -------- -------- + Transformation string + VirtualFocalLength real + VirtualImageXCenter real + VirtualImageYCenter real + =head3 XMP pdf Tags Adobe PDF namespace tags. The official XMP specification defines only @@ -20439,6 +20481,8 @@ WX300, but not for panorama images. 6294 LensType int16u 6296 DistortionCorrParamsPresent int8u 6297 DistortionCorrParamsNumber int8u + 6444 AspectRatio int8u + 6792 AspectRatio int8u =head3 Sony Tag2010f Tags @@ -20469,6 +20513,7 @@ Valid for DSC-RX100M2, DSC-QX10/QX100. 4406 MinFocalLength int16u 4408 MaxFocalLength int16u 4412 SonyISO int16u + 6444 AspectRatio int8u =head3 Sony Tag2010g Tags @@ -20507,6 +20552,7 @@ ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-68/77M2. 6338 LensType int16u 6340 DistortionCorrParamsPresent int8u 6341 DistortionCorrParamsNumber int8u + 6488 AspectRatio int8u =head3 Sony Tag2010h Tags @@ -20546,6 +20592,7 @@ ILCE-6300/6500/7RM2/7SM2, ILCA-99M2. 6386 LensType int16u 6388 DistortionCorrParamsPresent int8u 6389 DistortionCorrParamsNumber int8u + 6444 AspectRatio int8u =head3 Sony Tag2010i Tags @@ -20584,6 +20631,7 @@ RX100M5A/RX100M7/HX99. 6134 LensType int16u 6136 DistortionCorrParamsPresent int8u 6137 DistortionCorrParamsNumber int8u + 6284 AspectRatio int8u =head3 Sony MeterInfo9 Tags @@ -20825,6 +20873,9 @@ WX350/WX500, ILCE-1/7/7C/7R/7S/7M2/7M3/7RM2/7RM3/7RM4/7SM2/7SM3/9/9M2/5000/ 42 Quality2 int8u 71 SonyImageHeight int16u~ 83 ModelReleaseYear int8u~ + 307 ShutterType int8u + 313 ShutterType int8u + 319 ShutterType int8u =head3 Sony Tag9401 Tags @@ -20836,6 +20887,7 @@ WX350/WX500, ILCE-1/7/7C/7R/7S/7M2/7M3/7RM2/7RM3/7RM4/7SM2/7SM3/9/9M2/5000/ 1181 ISOInfo Sony ISOInfo 1185 ISOInfo Sony ISOInfo 1186 ISOInfo Sony ISOInfo + 1210 ISOInfo Sony ISOInfo 1437 ISOInfo Sony ISOInfo 1588 ISOInfo Sony ISOInfo 1590 ISOInfo Sony ISOInfo @@ -24104,7 +24156,10 @@ chunk. The tags below are found in JPEG 2000 images and the JUMBF metadata in JPEG images, but not all of these are extracted. Note that ExifTool currently -writes only EXIF, IPTC and XMP tags in Jpeg2000 images. +writes only EXIF, IPTC and XMP tags in Jpeg2000 images, and EXIF and XMP in +JXL images. ExifTool will read/write Brotli-compressed EXIF and XMP in JXL +images, but the API Compress option must be set to create new EXIF and XMP +in compressed format. Tag ID Tag Name Writable ------ -------- -------- @@ -24114,6 +24169,9 @@ writes only EXIF, IPTC and XMP tags in Jpeg2000 images. 'bfil' BinaryFilter no 'bidb' BinaryData no 'bpcc' BitsPerComponent no + 'brob' BrotliXMP XMP + BrotliEXIF EXIF + BrotliJUMB Jpeg2000 'c2sh' C2PASaltHash no 'cbor' CBORData CBOR 'cdef' ComponentDefinition no @@ -24132,6 +24190,7 @@ writes only EXIF, IPTC and XMP tags in Jpeg2000 images. 'ftbl' FragmentTable no 'ftyp' FileType Jpeg2000 FileType 'gtso' GraphicsTechnologyStandardOutput no + 'hrgm' GainMapImage no 'ihdr' ImageHeader Jpeg2000 ImageHeader 'inst' InstructionSet no 'jP ' JP2Signature no @@ -24145,6 +24204,7 @@ writes only EXIF, IPTC and XMP tags in Jpeg2000 images. 'jumb' JUMBFBox Jpeg2000 'jumd' JUMBFDescr Jpeg2000 JUMD 'jxlc' JXLCodestream no + 'jxlp' PartialJXLCodestream no 'lbl ' Label no 'mdat' MediaData no 'mp7b' MPEG7Binary no @@ -28588,6 +28648,7 @@ and are not currently writable. 'auxC' AuxiliaryImageType no 'av1C' AV1Configuration QuickTime AV1Config 'clap' CleanAperture no + 'clli' ContentLightLevel QuickTime ContentLightLevel 'colr' ICC_Profile ICC_Profile ColorRepresentation QuickTime ColorRep 'hvcC' HEVCConfiguration QuickTime HEVCConfig @@ -28611,6 +28672,13 @@ and are not currently writable. 2.4 ChromaSamplePosition no 3 InitialDelaySamples? no +=head3 QuickTime ContentLightLevel Tags + + Index2 Tag Name Writable + ------ -------- -------- + 0 MaxContentLightLevel no + 1 MaxPicAverageLightLevel no + =head3 QuickTime ColorRep Tags Index1 Tag Name Writable @@ -29607,6 +29675,7 @@ metadata to WEBP images, but can't yet write to other RIFF-based formats. 'fmt ' AudioFormat RIFF AudioFormat 'gps0' GPSTrack QuickTime Stream 'gsen' GSensor QuickTime Stream + 'guan' Guano no 'iXML' IXML XMP XML 'id3 ' ID3 ID3 'inst' Instrument RIFF Instrument @@ -37740,15 +37809,15 @@ These tags are extracted from RAR archive files. =head3 ZIP RAR5 Tags -These tags are extracted from RAR v5 archive files. +These tags are extracted from RAR v5 and 7z archive files. Tag Name Writable -------- -------- ArchivedFileName no CompressedSize no + FileVersion no ModifyDate no OperatingSystem no - RARVersion no UncompressedSize no =head2 RTF Tags @@ -38167,7 +38236,7 @@ FileName. ICC_Profile ICC_Profile yes! ID3Size File no IPTC IPTC yes! - ImageDataMD5 File no + ImageDataHash File no ImageHeight File no ImageWidth File no JPEGDigest File no @@ -38627,6 +38696,7 @@ for more details. IFD0:XPAuthor IFD0:XPKeywords IFD0:XPSubject + ImageDataMD5 ImageDataHash yes LargeTags CanonVRD yes DLOData EXIF diff --git a/lib/Image/ExifTool/Validate.pm b/lib/Image/ExifTool/Validate.pm index d2db087b..c629ae41 100644 --- a/lib/Image/ExifTool/Validate.pm +++ b/lib/Image/ExifTool/Validate.pm @@ -17,7 +17,7 @@ package Image::ExifTool::Validate; use strict; use vars qw($VERSION %exifSpec); -$VERSION = '1.20'; +$VERSION = '1.21'; use Image::ExifTool qw(:Utils); use Image::ExifTool::Exif; @@ -56,6 +56,15 @@ use Image::ExifTool::Exif; 0x212 => 1, 0x9204 => 1, 0xa210 => 1, 0xa500 => 221, 0x213 => 1, 0x9205 => 1, 0xa214 => 1, 0x214 => 1, 0x9206 => 1, 0xa215 => 1, + + # new Exif 3.0 tags + 0xa436 => 300, + 0xa437 => 300, + 0xa438 => 300, + 0xa439 => 300, + 0xa43a => 300, + 0xa43b => 300, + 0xa43c => 300, ); # GPSVersionID numbers when each tag was introduced @@ -147,6 +156,13 @@ my %stdFormat = ( 0xc68d => 'int(16|32)u', 0xc791 => 'int(16|32)u', 0xc68e => 'int(16|32)u', 0xc792 => 'int(16|32)u', 0xc6d2 => '', 0xc793 => '(int16u|int32u|rational64u)', + # Exif 3.0 spec + 0x10e => 'string|utf8', 0xa430 => 'string|utf8', 0xa439 => 'string|utf8', + 0x10f => 'string|utf8', 0xa433 => 'string|utf8', 0xa43a => 'string|utf8', + 0x110 => 'string|utf8', 0xa434 => 'string|utf8', 0xa43b => 'string|utf8', + 0x131 => 'string|utf8', 0xa436 => 'string|utf8', 0xa43c => 'string|utf8', + 0x13b => 'string|utf8', 0xa437 => 'string|utf8', 0xa43a => 'string|utf8', + 0x8298 => 'string|utf8', 0xa438 => 'string|utf8', }, ); diff --git a/lib/Image/ExifTool/WriteExif.pl b/lib/Image/ExifTool/WriteExif.pl index 506a0755..4d3da0e8 100644 --- a/lib/Image/ExifTool/WriteExif.pl +++ b/lib/Image/ExifTool/WriteExif.pl @@ -420,15 +420,15 @@ sub ValidateImageData($$$;$) } #------------------------------------------------------------------------------ -# Add specified image data to ImageDataMD5 hash +# Add specified image data to ImageDataHash hash # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) lookup for [tagInfo,value] based on tagID -sub AddImageDataMD5($$$) +sub AddImageDataHash($$$) { my ($et, $dirInfo, $offsetInfo) = @_; my ($tagID, $offset, $buff); my $verbose = $et->Options('Verbose'); - my $md5 = $$et{ImageDataMD5}; + my $hash = $$et{ImageDataHash}; my $raf = $$dirInfo{RAF}; foreach $tagID (sort keys %$offsetInfo) { @@ -451,12 +451,12 @@ sub AddImageDataMD5($$$) my $size = shift @sizes; next unless $offset =~ /^\d+$/ and $size and $size =~ /^\d+$/ and $size; next unless $raf->Seek($offset, 0); # (offset is absolute) - $total += $et->ImageDataMD5($raf, $size); + $total += $et->ImageDataHash($raf, $size); } if ($verbose) { my $name = "$$dirInfo{DirName}:$$tagInfo{Name}"; $name =~ s/Offsets?|Start$//; - $et->VPrint(0, "$$et{INDENT}(ImageDataMD5: $total bytes of $name data)\n"); + $et->VPrint(0, "$$et{INDENT}(ImageDataHash: $total bytes of $name data)\n"); } } } @@ -780,7 +780,7 @@ Entry: for (;;) { $readFormat = $oldFormat = Get16u($dataPt, $entry+2); $readCount = $oldCount = Get32u($dataPt, $entry+4); undef $oldImageData; - if ($oldFormat < 1 or $oldFormat > 13 and not ($oldFormat == 16 and $$et{Make} eq 'Apple' and $inMakerNotes)) { + if (($oldFormat < 1 or $oldFormat > 13) and $oldFormat != 129 and not ($oldFormat == 16 and $$et{Make} eq 'Apple' and $inMakerNotes)) { my $msg = "Bad format ($oldFormat) for $name entry $index"; # patch to preserve invalid directory entries in SubIFD3 of # various Kodak Z-series cameras (Z812, Z1085IS, Z1275) @@ -1277,7 +1277,9 @@ NoWrite: next if $isNew > 0; $et->Warn("Writing large value for $name",1); } # re-code if necessary - if ($strEnc and $newFormName eq 'string') { + if ($newFormName eq 'utf8') { + $newValue = $et->Encode($newValue, 'UTF8'); + } elsif ($strEnc and $newFormName eq 'string') { $newValue = $et->Encode($newValue, $strEnc); } } else { diff --git a/lib/Image/ExifTool/Writer.pl b/lib/Image/ExifTool/Writer.pl index 1503697c..2ebab79d 100644 --- a/lib/Image/ExifTool/Writer.pl +++ b/lib/Image/ExifTool/Writer.pl @@ -1293,6 +1293,7 @@ sub SetNewValuesFromFile($$;@) HexTagIDs => $$options{HexTagIDs}, IgnoreMinorErrors=>$$options{IgnoreMinorErrors}, IgnoreTags => $$options{IgnoreTags}, + ImageHashType => $$options{ImageHashType}, Lang => $$options{Lang}, LargeFileSupport=> $$options{LargeFileSupport}, List => 1, @@ -6880,14 +6881,14 @@ sub SetFileTime($$;$$$$) } #------------------------------------------------------------------------------ -# Add data to MD5 checksum +# Add data to hash checksum # Inputs: 0) ExifTool ref, 1) RAF ref, 2) data size (or undef to read to end of file), # 3) data name (or undef for no warnings or messages), 4) flag for no verbose message -# Returns: number of bytes read and MD5'd -sub ImageDataMD5($$$;$$) +# Returns: number of bytes read and hashed +sub ImageDataHash($$$;$$) { my ($self, $raf, $size, $type, $noMsg) = @_; - my $md5 = $$self{ImageDataMD5} or return; + my $hash = $$self{ImageDataHash} or return; my ($bytesRead, $n) = (0, 65536); my $buff; for (;;) { @@ -6900,11 +6901,11 @@ sub ImageDataMD5($$$;$$) $self->Warn("Error reading $type data") if $type and defined $size; last; } - $md5->add($buff); + $hash->add($buff); $bytesRead += length $buff; } if ($$self{OPTIONS}{Verbose} and $bytesRead and $type and not $noMsg) { - $self->VPrint(0, "$$self{INDENT}(ImageDataMD5: $bytesRead bytes of $type data)\n"); + $self->VPrint(0, "$$self{INDENT}(ImageDataHash: $bytesRead bytes of $type data)\n"); } return $bytesRead; } diff --git a/lib/Image/ExifTool/XMP.pm b/lib/Image/ExifTool/XMP.pm index 92c85a4e..dfcff1f4 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.59'; +$VERSION = '3.60'; @ISA = qw(Exporter); @EXPORT_OK = qw(EscapeXML UnescapeXML); @@ -144,6 +144,7 @@ my %xmpNS = ( xmpTPg => 'http://ns.adobe.com/xap/1.0/t/pg/', xmpidq => 'http://ns.adobe.com/xmp/Identifier/qual/1.0/', xmpPLUS => 'http://ns.adobe.com/xap/1.0/PLUS/', + panorama => 'http://ns.adobe.com/photoshop/1.0/panorama-profile', dex => 'http://ns.optimasc.com/dex/1.0/', mediapro => 'http://ns.iview-multimedia.com/mediapro/1.0/', expressionmedia => 'http://ns.microsoft.com/expressionmedia/1.0/', @@ -199,6 +200,7 @@ my %xmpNS = ( ast => 'http://ns.nikon.com/asteroid/1.0/', nine => 'http://ns.nikon.com/nine/1.0/', hdr_metadata => 'http://ns.adobe.com/hdr-metadata/1.0/', + hdrgm => 'http://ns.adobe.com/hdr-gain-map/1.0/', ); # build reverse namespace lookup @@ -709,6 +711,10 @@ my %sRangeMask = ( Name => 'xmpPLUS', SubDirectory => { TagTable => 'Image::ExifTool::XMP::xmpPLUS' }, }, + panorama => { + Name => 'panorama', + SubDirectory => { TagTable => 'Image::ExifTool::XMP::panorama' }, + }, plus => { Name => 'plus', SubDirectory => { TagTable => 'Image::ExifTool::PLUS::XMP' }, @@ -909,6 +915,10 @@ my %sRangeMask = ( Name => 'hdr', SubDirectory => { TagTable => 'Image::ExifTool::XMP::hdr' }, }, + hdrgm => { + Name => 'hdrgm', + SubDirectory => { TagTable => 'Image::ExifTool::XMP::hdrgm' }, + }, ); # hack to allow XML containing Dublin Core metadata to be handled like XMP (eg. EPUB - see ZIP.pm) @@ -2566,7 +2576,9 @@ my %sPantryItem = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-et', 2 => 'Image' }, NAMESPACE => 'et', - OriginalImageMD5 => { Notes => 'used to store ExifTool ImageDataMD5 digest' }, + OriginalImageHash => { Notes => 'used to store ExifTool ImageDataHash digest' }, + OriginalImageHashType => { Notes => "ImageHashType API setting, default 'MD5'" }, + OriginalImageMD5 => { Notes => 'deprecated' }, ); # table to add tags in other namespaces diff --git a/lib/Image/ExifTool/XMP2.pl b/lib/Image/ExifTool/XMP2.pl index 983f4e6a..63613899 100644 --- a/lib/Image/ExifTool/XMP2.pl +++ b/lib/Image/ExifTool/XMP2.pl @@ -1388,6 +1388,17 @@ my %sSubVersion = ( ReuseAllowed => { Writable => 'boolean' }, ); +%Image::ExifTool::XMP::panorama = ( + %xmpTableDefaults, + GROUPS => { 1 => 'XMP-panorama', 2 => 'Image' }, + NAMESPACE => 'panorama', + NOTES => 'Adobe Photoshop Panorama-profile tags.', + Transformation => { }, + VirtualFocalLength => { Writable => 'real' }, + VirtualImageXCenter => { Writable => 'real' }, + VirtualImageYCenter => { Writable => 'real' }, +); + # Creative Commons namespace properties (cc) (ref 5) %Image::ExifTool::XMP::cc = ( %xmpTableDefaults, @@ -2094,6 +2105,27 @@ my %sSubVersion = ( scene_referred => { Name => 'SceneReferred', Writable => 'boolean' }, ); +# HDR Gain Map metadata namespace +%Image::ExifTool::XMP::hdrgm = ( + %xmpTableDefaults, + GROUPS => { 1 => 'XMP-hdrgm', 2 => 'Image' }, + NAMESPACE => 'hdrgm', + TABLE_DESC => 'XMP HDR Gain Map Metadata', + NOTES => 'Tags used in Adobe gain map images.', + Version => { Avoid => 1 }, + BaseRenditionIsHDR => { Writable => 'boolean' }, + # this is a pain in the ass: List items below may or may not be lists + # according to the Adobe specification -- I don't know how to handle tags + # with a variable format like this, so just make them lists here for now + OffsetSDR => { Writable => 'real', List => 'Seq' }, + OffsetHDR => { Writable => 'real', List => 'Seq' }, + HDRCapacityMin => { Writable => 'real' }, + HDRCapacityMax => { Writable => 'real' }, + GainMapMin => { Writable => 'real', List => 'Seq' }, + GainMapMax => { Writable => 'real', List => 'Seq' }, + Gamma => { Writable => 'real', List => 'Seq', Avoid => 1 }, +); + # SVG namespace properties (ref 9) %Image::ExifTool::XMP::SVG = ( GROUPS => { 0 => 'SVG', 1 => 'SVG', 2 => 'Image' }, diff --git a/lib/Image/ExifTool/ZIP.pm b/lib/Image/ExifTool/ZIP.pm index d58b8538..2fdef80a 100644 --- a/lib/Image/ExifTool/ZIP.pm +++ b/lib/Image/ExifTool/ZIP.pm @@ -20,7 +20,7 @@ use strict; use vars qw($VERSION $warnString); use Image::ExifTool qw(:DataAccess :Utils); -$VERSION = '1.29'; +$VERSION = '1.30'; sub WarnProc($) { $warnString = $_[0]; } @@ -259,8 +259,8 @@ my %iWorkType = ( %Image::ExifTool::ZIP::RAR5 = ( GROUPS => { 2 => 'Other' }, VARS => { NO_ID => 1 }, - NOTES => 'These tags are extracted from RAR v5 archive files.', - RARVersion => { }, + NOTES => 'These tags are extracted from RAR v5 and 7z archive files.', + FileVersion => { }, CompressedSize => { }, ModifyDate => { Groups => { 2 => 'Time' }, @@ -310,7 +310,7 @@ sub ProcessRAR($$) $et->SetFileType(); SetByteOrder('II'); my $tagTablePtr = GetTagTable('Image::ExifTool::ZIP::RAR5'); - $et->HandleTag($tagTablePtr, 'RARVersion', 4); + $et->HandleTag($tagTablePtr, 'FileVersion', 'RAR v4'); $tagTablePtr = GetTagTable('Image::ExifTool::ZIP::RAR'); for (;;) { @@ -356,7 +356,7 @@ sub ProcessRAR($$) return 0 unless $raf->Read($buff, 1) and $buff eq "\0"; $et->SetFileType(); my $tagTablePtr = GetTagTable('Image::ExifTool::ZIP::RAR5'); - $et->HandleTag($tagTablePtr, 'RARVersion', 5); + $et->HandleTag($tagTablePtr, 'FileVersion', 'RAR v5'); $$et{INDENT} .= '| '; # loop through header blocks |