summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorexiftool <exiftool@users.sourceforge.net>2019-08-29 12:36:51 -0400
committerexiftool <exiftool@users.sourceforge.net>2019-08-29 12:36:51 -0400
commit52774744d6de887a774d7a823b7cbe1366750aa9 (patch)
treea9a6394188b5246ca43aac0c7c5531ea916bc627 /lib
parent1cde0fb7a47bb8577dd02f357a5d2fa1415c3b87 (diff)
Update to 11.65
Diffstat (limited to 'lib')
-rw-r--r--lib/Image/ExifTool.pm2
-rw-r--r--lib/Image/ExifTool.pod36
-rw-r--r--lib/Image/ExifTool/BuildTagLookup.pm6
-rw-r--r--lib/Image/ExifTool/Canon.pm5
-rw-r--r--lib/Image/ExifTool/PNG.pm15
-rw-r--r--lib/Image/ExifTool/Sony.pm95
-rw-r--r--lib/Image/ExifTool/TagNames.pod20
-rw-r--r--lib/Image/ExifTool/XMPStruct.pl17
8 files changed, 114 insertions, 82 deletions
diff --git a/lib/Image/ExifTool.pm b/lib/Image/ExifTool.pm
index 45269505..e59d0c86 100644
--- a/lib/Image/ExifTool.pm
+++ b/lib/Image/ExifTool.pm
@@ -27,7 +27,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
%mimeType $swapBytes $swapWords $currentByteOrder %unpackStd
%jpegMarker %specialTags %fileTypeLookup);
-$VERSION = '11.64';
+$VERSION = '11.65';
$RELEASE = '';
@ISA = qw(Exporter);
%EXPORT_TAGS = (
diff --git a/lib/Image/ExifTool.pod b/lib/Image/ExifTool.pod
index 604f501c..c10cc477 100644
--- a/lib/Image/ExifTool.pod
+++ b/lib/Image/ExifTool.pod
@@ -627,20 +627,23 @@ fork of Mac OS files. Default is undef.
=item FastScan
-Flag to increase speed of extracting information from JPEG images. With
-this option set to 1, ExifTool will not scan to the end of a JPEG image to
-check for an AFCP, CanonVRD, FotoStation, PhotoMechanic, MIE or PreviewImage
-trailer. This also stops the parsing after the first comment in GIF images,
-and at the audio/video data with RIFF-format files (AVI, WAV, etc), so any
-trailing metadata (eg. XMP written by some utilities) may be missed. Also
-disables input buffering for some types of files to reduce memory usage when
-reading from a non-seekable stream. When combined with the ScanForXMP
-option, prevents scanning for XMP in recognized file types. With a value of
-2, ExifTool will also avoid extracting any EXIF MakerNote information. When
-set to 3 or 4, only pseudo system tags and FileType are generated. For 3,
-the file header is read to provide an educated guess at FileType. For 4,
-the file is not read at all and FileType is determined based on the file's
-extension. Default is undef.
+Flag to increase speed when reading files by avoiding extraction of some
+types of metadata. With this option set to 1, ExifTool will not scan to the
+end of a JPEG image to check for an AFCP, CanonVRD, FotoStation,
+PhotoMechanic, MIE or PreviewImage trailer. This also stops the parsing
+after the first comment in GIF images, and at the audio/video data of
+RIFF-format files (AVI, WAV, etc), so any trailing metadata (eg. XMP written
+by some utilities) may be missed. Also disables input buffering for some
+types of files to reduce memory usage when reading from a non-seekable
+stream. When combined with the ScanForXMP option, prevents scanning for XMP
+in recognized file types. With a value of 2, ExifTool will also avoid
+extracting any EXIF MakerNote information, and will stop parsing at the IDAT
+chunk of PNG images. (By the PNG specification, metadata is allowed after
+IDAT, but ExifTool always writes it before because some utilities will
+ignore it otherwise.) When set to 3 or 4, only pseudo system tags and
+FileType are generated. For 3, the file header is read to provide an
+educated guess at FileType. For 4, the file is not read at all and FileType
+is determined based on the file's extension. Default is undef.
=item Filter
@@ -681,8 +684,9 @@ it is within GeoMaxExtSecs, otherwise geotagging fails). Default is 1800.
Maximum extrapolation time in seconds for geotagging. Geotagging fails if
the Geotime value lies outside a GPS track by a number of seconds greater
-than this. Otherwise, the coordinates of the nearest fix are taken.
-Default is 1800.
+than this. Otherwise, for an extrapolation the coordinates of the nearest
+fix are taken (ie. it is assumed that you weren't moving during this
+period). Default is 1800.
=item GeoMaxHDOP
diff --git a/lib/Image/ExifTool/BuildTagLookup.pm b/lib/Image/ExifTool/BuildTagLookup.pm
index e88977f7..53053bc1 100644
--- a/lib/Image/ExifTool/BuildTagLookup.pm
+++ b/lib/Image/ExifTool/BuildTagLookup.pm
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
use Image::ExifTool::Validate;
use Image::ExifTool::MacOS;
-$VERSION = '3.26';
+$VERSION = '3.27';
@ISA = qw(Exporter);
sub NumbersFirst($$);
@@ -171,7 +171,9 @@ is the identifier that is actually stored in the file. B<Index#> refers to
the offset of a value when found at a fixed position within a data block
(B<#> is the multiplier for calculating a byte offset: B<1>, B<2>, B<4> or
B<8>). These offsets may have a decimal part which is used only to
-differentiate tags with values stored at the same position. B<Sequence>
+differentiate tags with values stored at the same position. (Note that
+writable tags within binary data blocks are not individually deletable,
+and the usual alternative is to set them to a value of zero.) B<Sequence>
gives the order of values for a serial data stream.
A B<Tag Name> is the handle by which the information is accessed in
diff --git a/lib/Image/ExifTool/Canon.pm b/lib/Image/ExifTool/Canon.pm
index 5ac3bd4f..87ba1d3c 100644
--- a/lib/Image/ExifTool/Canon.pm
+++ b/lib/Image/ExifTool/Canon.pm
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
sub ProcessExifInfo($$$);
sub SwapWords($);
-$VERSION = '4.23';
+$VERSION = '4.24';
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -810,6 +810,7 @@ $VERSION = '4.23';
0x804 => 'PowerShot G5 X Mark II',
0x805 => 'PowerShot SX70 HS',
0x808 => 'PowerShot G7 X Mark III',
+ 0x811 => 'EOS M6 Mark II', #IB
# (see http://cweb.canon.jp/e-support/faq/answer/digitalcamera/10447-1.html for PowerShot/IXUS/IXY names)
@@ -911,6 +912,7 @@ $VERSION = '4.23';
0x80000432 => 'EOS Rebel T7 / 2000D / 1500D / Kiss X90', #IB
0x80000433 => 'EOS RP',
0x80000436 => 'EOS SL3 / 250D / Kiss X10', #25
+ 0x80000437 => 'EOS 90D', #IB
);
my %canonQuality = (
@@ -7878,6 +7880,7 @@ my %ciMaxFocal = (
16 => '16 (M50)',
17 => '17 (EOS R)', # (and PowerShot SX740HS)
18 => '18 (EOS RP)', # (and PowerShot SX70HS)
+ 19 => '19 (90D/M6mkII)',# (and PowerShot G7XmkIII)
},
},
0x47 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
diff --git a/lib/Image/ExifTool/PNG.pm b/lib/Image/ExifTool/PNG.pm
index 3e0480f3..d716696b 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.52';
+$VERSION = '1.53';
sub ProcessPNG_tEXt($$$);
sub ProcessPNG_iTXt($$$);
@@ -1248,15 +1248,12 @@ sub ProcessPNG($$)
my $datChunk = '';
my $datCount = 0;
my $datBytes = 0;
- my ($n, $sig, $err, $hbuf, $dbuf, $cbuf);
+ my ($n, $sig, $err, $hbuf, $dbuf, $cbuf, $fastScan);
my ($wasHdr, $wasEnd, $wasDat, $doTxt, @txtOffset);
# check to be sure this is a valid PNG/MNG/JNG image
return 0 unless $raf->Read($sig,8) == 8 and $pngLookup{$sig};
- # disable buffering in FastScan mode
- $$raf{NoBuffer} = 1 if $et->Options('FastScan') and not $outfile;
-
if ($outfile) {
delete $$et{TextChunkType};
Write($outfile, $sig) or $err = 1 if $outfile;
@@ -1266,6 +1263,10 @@ sub ProcessPNG($$)
\%Image::ExifTool::PNG::TextualData);
# initialize with same directories, with PNG tags taking priority
$et->InitWriteDirs(\%pngMap,'PNG');
+ } else {
+ $fastScan = $et->Options('FastScan');
+ # disable buffering in FastScan mode
+ $$raf{NoBuffer} = 1 if $fastScan;
}
my ($fileType, $hdrChunk, $endChunk) = @{$pngLookup{$sig}};
$et->SetFileType($fileType); # set the FileType tag
@@ -1347,6 +1348,10 @@ sub ProcessPNG($$)
next;
}
if ($isDatChunk{$chunk}) {
+ if ($fastScan and $fastScan >= 2) {
+ $et->VPrint(0,"End processing at $chunk chunk due to FastScan=$fastScan setting");
+ last;
+ }
$datChunk = $chunk;
$datCount++;
$datBytes += $len;
diff --git a/lib/Image/ExifTool/Sony.pm b/lib/Image/ExifTool/Sony.pm
index 7d75f268..243621a6 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.15';
+$VERSION = '3.16';
sub ProcessSRF($$$);
sub ProcessSR2($$$);
@@ -139,6 +139,8 @@ sub PrintInvLensSpec($;$$);
32850 => 'Sony FE 135mm F1.8 GM', #IB
32851 => 'Sony FE 200-600mm F5.6-6.3 G OSS', #IB
32852 => 'Sony FE 600mm F4 GM OSS', #IB
+ 32853 => 'Sony E 16-55mm F2.8 G', #IB/JR
+ 32854 => 'Sony E 70-350mm F4.5-6.3 G OSS', #IB/JR
32858 => 'Sony FE 35mm F1.8', #JR/IB
# (comment this out so LensID will report the LensModel, which is more useful)
@@ -940,7 +942,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
# unknown offsets or values for DSC-HX60V/HX350/HX400V/QX10/QX30/QX100/RX10/RX100M2/RX100M3/WX220/WX350,
# ILCA-68/77M2, ILCE-5000/5100/6000/7/7M2/7R/7S/QX1, Stellar2, Lusso
# unknown offsets or values for DSC-HX80/HX90V/RX0/RX1RM2/RX10M2/RX10M3/RX100M4/RX100M5/WX500, ILCE-6300/6500/7RM2/7SM2, ILCA-99M2
- # unknown offsets or values for ILCE-6400/7M3/7RM3/7RM4/9, DSC-RX0M2/RX10M4/RX100M6/RX100M5A/HX99
+ # unknown offsets or values for ILCE-6100/6400/6600/7M3/7RM3/7RM4/9, DSC-RX0M2/RX10M4/RX100M6/RX100M5A/RX100M7/HX99
{
Name => 'Tag2010a', # ad
Condition => '$$self{Model} =~ /^NEX-5N$/',
@@ -981,7 +983,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010h' },
},{
Name => 'Tag2010i', # ?
- Condition => '$$self{Model} =~ /^(ILCE-(6400|7M3|7RM3|7RM4|9)|DSC-(RX10M4|RX100M6|RX100M5A|RX100M7|HX99|RX0M2))\b/',
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9)|DSC-(RX10M4|RX100M6|RX100M5A|RX100M7|HX99|RX0M2))\b/',
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010i' },
},{
Name => 'Tag_0x2010',
@@ -1436,8 +1438,9 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
# first 4 bytes: GroupID, read as int32u
# the ID displayed by Sony ImageDataConverter appears to be based on the lower 22 bits:
# 5 bits, 5 bits, 6 bits, 6 bits
- # last 2 bytes: ShotNumber: (1 4) to (4 4) are the 4 source images,
- # (0 4) is combined "PixelShifted" image
+ # last 2 bytes: ShotNumber: (1 4) to (4 4) and (1 16) to (16 16) are the 4 or 16 source images,
+ # (0 4) is the combined image for 4-shot PixelShift mode
+ # (0 16) is the combined image for 16-shot PixelShift mode (ILCE-7RM4)
RawConv => q{
my ($a,$b,$c) = (Get32u(\$val,0), Get8u(\$val,4), Get8u(\$val,5));
sprintf("%.2d%.2d%.2d%.2d %d %d 0x%x",($a>>17)&0x1f,($a>>12)&0x1f,($a>>6)&0x3f,$a&0x3f,$b,$c,$a>>22);
@@ -1453,11 +1456,11 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
OTHER => sub {
my ($val, $inv) = @_;
if ($inv) {
- $val =~ s{Composed}{Shot 0/4}i;
+ $val =~ s{Composed (\d+)-shot}{Shot 0/$1}i;
$val =~ s{^(?:Group)?\s*(\d+)[, ]+(?:Shot\s*)?(\d+)[/ ](\d+)\s*\(?(\w+)\)?}{$1 $2 $3 $4}i or return undef;
} else {
$val =~ s{(\d+) (\d+) (\d+) (\w+)}{Group $1, Shot $2/$3 ($4)} or return undef;
- $val =~ s{Shot\s*0+/0*4\b}{Composed}i;
+ $val =~ s{Shot 0+/0*(\d+)\b}{Composed $1-shot}i;
}
return $val;
},
@@ -1499,14 +1502,14 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
# from mid-2015: ILCE-7RM2/7SM2/6300 and newer models use different offsets
{
Name => 'Tag9050a',
- Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(6300|6400|6500|7M3|7RM2|7RM3|7RM4|7SM2|9)|ILCA-99M2)/',
+ Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(6100|6300|6400|6500|6600|7M3|7RM2|7RM3|7RM4|7SM2|9)|ILCA-99M2)/',
SubDirectory => {
TagTable => 'Image::ExifTool::Sony::Tag9050a',
ByteOrder => 'LittleEndian',
},
},{
Name => 'Tag9050b',
- Condition => '$$self{Model} =~ /^(ILCE-(6300|6400|6500|7M3|7RM2|7RM3|7RM4|7SM2|9)|ILCA-99M2)/',
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6300|6400|6500|6600|7M3|7RM2|7RM3|7RM4|7SM2|9)|ILCA-99M2)/',
SubDirectory => {
TagTable => 'Image::ExifTool::Sony::Tag9050b',
ByteOrder => 'LittleEndian',
@@ -1524,9 +1527,9 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
# 0xd0 (e) H90, W650, W690: tag9400 decoding appears not valid/different
# 0x23 (e) for DSC-RX10/HX60V/HX350/HX400V/WX220/WX350, ILCE-7/7R/5000/6000, ILCA-68/77M2
# 0x24 (e) for ILCA-99M2,ILCE-5100/6300/6500/7M2/7RM2/7S/7SM2/QX1, DSC-HX80/HX90V/QX30/RX0/RX100M3/RX100M4/RX100M5/RX10M2/RX10M3/RX1RM2/WX500
- # 0x26 (e) for ILCE-6400/7M3/7RM3/9, DSC-RX0M2/RX10M4/RX100M5A/RX100M6/HX99
- # 0x28 (e) for ILCE-7RM4
- # first byte decoded: 40, 204, 202, 27, 58, 62, 48, 215 respectively
+ # 0x26 (e) for ILCE-6100/6400/6600/7M3/7RM3/9, DSC-RX0M2/RX10M4/RX100M5A/RX100M6/HX99
+ # 0x28 (e) for ILCE-7RM4, DSC-RX100M7
+ # first byte decoded: 40, 204, 202, 27, 58, 62, 48, 215, 28 respectively
{
Name => 'Tag9400a',
Condition => q{
@@ -1598,9 +1601,10 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
# 80 00 fa 0f 0x0add (x) ILCE-7M3/7RM3 v1.00-v3.01
# 82 00 fc 0f 0x0ad9 (y) DSC-RX100M5A v1.00, DSC-RX100M6 v1.00
# 90 00 fe 0f 0x098f? (z) DSC-HX99 v1.00
- # 92 10 ff 0f 0x0990 (za) ILCE-6400 v1.00
+ # 92 10 ff 0f 0x0990 (za) ILCE-6100/6400/6600 v1.00
# 94 00 ce 0b 0x0879 (zb) ILCE-9 v5.0x, DSC-RX0M2
# 98 00 db 0c 0x088a (zc) ILCE-7RM4 v1.00
+ # 9a 00 e3 0c 0x088a (zc) DSC-RX100M7 v1.00
#
# 0x0004 - (RX100: 0 or 1. subsequent data valid only if 1 - PH)
# 0x0007 => {
@@ -1639,7 +1643,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
# 0x1d 0x01 DSC-RX10M4
# 0x1e 0x01 ILCE-7M3/7RM3, DSC-RX100M5A/RX100M6
# 0x1f 0x01 DSC-HX99
- # 0x20 0x01 ILCE-6400/7RM4, ILCE-9 v5.0x, DSC-RX0M2
+ # 0x20 0x01 ILCE-6100/6400/6600/7RM4, ILCE-9 v5.0x, DSC-RX0M2/RX100M7
# var var SLT-A58/A99V, HV, ILCA-68/77M2/99M2
# only valid when first byte 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x17, 0x19, 0x1a, 0x1c (enciphered 0x8a, 0x70, 0xb6, 0x69, 0x88, 0x20, 0x30, 0xd7, 0xbb, 0x92, 0x28)
# Condition => '$$self{DoubleCipher} ? $$valPt =~ /^[\x7e\x46\x1d\x18\x3a\x95\x24\x26\xd6]\x01/ : $$valPt =~ /^[\x8a\x70\xb6\x69\x88\x20\x30\xd7\xbb\x92\x28]\x01/',
@@ -1663,7 +1667,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
# 13 0 9 2 2 DSC-QX10/QX100/RX100M2
# 15 0 35 2 2 ILCA-68/77M2, ILCE-5000/5100/6000/7/7R/7S/7M2/QX1, DSC-HX60V/HX350/HX400V/QX30/RX10/RX100M3/WX220/WX350
# 16 0 85 2 2 DSC-HX80/HX90V/WX500
- # 17 0 232 1 2 DSC-RX0/RX0M2/RX1RM2/RX10M2/RX10M3/RX10M4/RX100M4/RX100M5/RX100M5A/RX100M6/HX99, ILCE-6300/6400/6500/7M3/7RM2/7RM3/7RM4/7SM2/9, ILCA-99M2
+ # 17 0 232 1 2 DSC-RX0/RX0M2/RX1RM2/RX10M2/RX10M3/RX10M4/RX100M4/RX100M5/RX100M5A/RX100M6/RX100M7/HX99, ILCE-6100/6300/6400/6500/6600/7M3/7RM2/7RM3/7RM4/7SM2/9, ILCA-99M2
# other values for Panorama images and several other models
0x9404 => [{
Name => 'Tag9404a',
@@ -1697,7 +1701,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
# 142 var (0x25 = 37 var enc.) DSC-HX80/HX90V/RX1RM2/RX10M2/RX10M3/RX100M4/WX500, ILCE-6300/7RM2/7SM2
# 144 var (0xe1 = 225 var enc.) DSC-RX100M5
# 145 var (0x76 = 118 var enc.) ILCA-99M2, ILCE-6500, DSC-RX0
- # 163 var (0x8b = 139 var enc.) ILCE-6400/7M3/7RM3/7RM4/9, DSC-RX0M2/RX10M4/RX100M5A/RX100M6/HX99
+ # 163 var (0x8b = 139 var enc.) ILCE-6100/6400/6600/7M3/7RM3/7RM4/9, DSC-RX0M2/RX10M4/RX100M5A/RX100M6/RX100M7/HX99
0x9405 => [{
Name => 'Tag9405a',
# first byte must be 0x1b or 0x40 or 0x7d
@@ -1715,7 +1719,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
0x9406 => [{
Name => 'Tag9406',
# - first byte must be 0x01 or 0x02 (enciphered 0x01 or 0x08),
- # or 0x03 (enc. 0x1b) for ILCE-6300/6400/6500/7M3/7RM2/7RM3/7RM4/7SM2/9, and ILCA-99M2
+ # or 0x03 (enc. 0x1b) for ILCE-6100/6300/6400/6500/6600/7M3/7RM2/7RM3/7RM4/7SM2/9, and ILCA-99M2
# third byte must be 0x02 or 0x03 (enciphered 0x08 or 0x1b) - ref JR
# (applies to most SLT/ILCA and NEX/ILCE models, but no DSC models)
Condition => '$$valPt =~ /^[\x01\x08\x1b].[\x08\x1b]/s',
@@ -1896,6 +1900,8 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
372 => 'DSC-RX0M2', #JR
374 => 'DSC-RX100M7', #IB
375 => 'ILCE-7RM4', #IB
+ 378 => 'ILCE-6600', #IB/JR
+ 379 => 'ILCE-6100', #IB/JR
},
},
0xb020 => { #2
@@ -2193,6 +2199,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
4 => '+4/3', #JR (NC)
5 => '+5/3', #JR (NC)
6 => '+6/3', #JR
+ 9 => '+9/3', #JR
128 => 'n/a', #JR (HX9V)
32767 => 'High',
},
@@ -6794,7 +6801,7 @@ my %isoSetting2010 = (
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
FORMAT => 'int8u',
NOTES => q{
- Valid for ILCE-6400/7M3/7RM3/7RM4/9, DSC-RX0M2/RX10M4/RX100M6/RX100M5A/HX99.
+ Valid for ILCE-6100/6400/6600/7M3/7RM3/7RM4/9, DSC-RX0M2/RX10M4/RX100M6/RX100M5A/RX100M7/HX99.
},
WRITABLE => 1,
FIRST_ENTRY => 0,
@@ -7366,7 +7373,7 @@ my %isoSetting2010 = (
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
FORMAT => 'int8u',
NOTES => q{
- Valid from July 2015 for ILCE-6300/6400/6500/7M3/7RM2/7RM3/7RM4/7SM2/9,
+ Valid from July 2015 for ILCE-6100/6300/6400/6500/6600/7M3/7RM2/7RM3/7RM4/7SM2/9,
ILCA-99M2.
},
WRITABLE => 1,
@@ -7455,7 +7462,7 @@ my %isoSetting2010 = (
# March 2019: ILCE-9 with v5.0x firmware follows ILCE-6400 in many tags ...
0x0050 => {
Name => 'ShutterCount2',
- Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} =~ /^(ILCE-(6400|7RM4))/ or $$self{Software} =~ /^ILCE-9 v5.0/)',
+ Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} =~ /^(ILCE-(6100|6400|6600|7RM4))/ or $$self{Software} =~ /^ILCE-9 v5.0/)',
Format => 'int32u',
RawConv => '$val & 0x00ffffff',
},
@@ -7472,13 +7479,13 @@ my %isoSetting2010 = (
# 0x0058, 0x0061: E-Mount: ShutterCount and dateTime
0x0058 => { # appears not valid when flash is used ... not for ILCA-99M2
Name => 'ShutterCount2',
- Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} !~ /^(ILCA-99M2|ILCE-(6400|7M3|7RM3|7RM4))/) and $$self{Software} !~ /^ILCE-9 v5.0/',
+ Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} !~ /^(ILCA-99M2|ILCE-(6100|6400|6600|7M3|7RM3|7RM4))/) and $$self{Software} !~ /^ILCE-9 v5.0/',
Format => 'int32u',
RawConv => '$val & 0x00ffffff',
},
0x0061 => { # only minutes-seconds, not for ILCA-99M2, ILCE-9
Name => 'SonyTimeMinSec',
- Condition => '$$self{Model} !~ /^(ILCA-99M2|ILCE-(6400|7M3|7RM3|7RM4|9))/',
+ Condition => '$$self{Model} !~ /^(ILCA-99M2|ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9))/',
Format => 'undef[2]',
ValueConv => q{
my @v = unpack('C*', $val);
@@ -7487,7 +7494,7 @@ my %isoSetting2010 = (
},
0x006b => {
Name => 'ReleaseMode2',
- Condition => '$$self{Model} =~ /^(ILCE-(6400|7RM4))/ or $$self{Software} =~ /^ILCE-9 v5.0/',
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7RM4))/ or $$self{Software} =~ /^ILCE-9 v5.0/',
%releaseMode2,
},
0x006d => {
@@ -7497,7 +7504,7 @@ my %isoSetting2010 = (
},
0x0073 => {
Name => 'ReleaseMode2',
- Condition => '$$self{Model} !~ /^(ILCE-(6400|7M3|7RM3|7RM4))/ and $$self{Software} !~ /^ILCE-9 v5.0/',
+ Condition => '$$self{Model} !~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4))/ and $$self{Software} !~ /^ILCE-9 v5.0/',
%releaseMode2,
},
0x0088 => {
@@ -7568,7 +7575,7 @@ my %isoSetting2010 = (
#
0x019f => {
Name => 'ShutterCount3',
- Condition => '$$self{Model} =~ /^(ILCE-(6400|7M3|7RM3|7RM4|9))/',
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9))/',
Format => 'int32u',
RawConv => '$val == 0 ? undef : $val',
},
@@ -7620,7 +7627,7 @@ my %isoSetting2010 = (
},
0x01f0 => {
Name => 'LensSpecFeatures',
- Condition => '$$self{Model} =~ /^(ILCE-(6400|7M3|7RM3|9))/ and $$self{Software} !~ /^ILCE-9 v5.0/',
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|9))/ and $$self{Software} !~ /^ILCE-9 v5.0/',
Priority => 0,
Format => 'undef[2]',
ValueConv => 'join " ", unpack "H2H2", $val',
@@ -7827,15 +7834,15 @@ my %isoSetting2010 = (
WRITABLE => 1,
NOTES => q{
Valid for DSC-HX60V/HX80/HX90V/HX99/HX350/HX400V/QX30/RX0/RX1RM2/RX10/
- RX10M2/RX10M3/RX10M4/RX100M3/RX100M4/RX100M5/RX100M5A/RX100M6/WX220/WX350/
- WX500, ILCE-7/7R/7S/7M2/7M3/7RM2/7RM3/7RM4/7SM2/9/5000/5100/6000/6300/6400/
- 6500/QX1, ILCA-68/77M2/99M2.
+ RX10M2/RX10M3/RX10M4/RX100M3/RX100M4/RX100M5/RX100M5A/RX100M6/RX100M7/
+ WX220/WX350/WX500, ILCE-7/7R/7S/7M2/7M3/7RM2/7RM3/7RM4/7SM2/9/5000/5100/
+ 6000/6100/6300/6400/6500/6600/QX1, ILCA-68/77M2/99M2.
},
FIRST_ENTRY => 0,
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
0x0009 => { %releaseMode2 },
0x000a => [{
- Condition => '$$self{Model} =~ /^(ILCE-(6400|7M3|7RM3|7RM4|9)|DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX99|RX0M2))\b/',
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9)|DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX99|RX0M2))\b/',
Name => 'ShotNumberSincePowerUp',
Format => 'int8u',
},{
@@ -7857,6 +7864,7 @@ my %isoSetting2010 = (
9 => '9 shots', # ILCE-7RM2 9-shot bracketing
10 => '10 shots',
12 => '12 shots', # ILCA-77M2 12-shot MFNR-mode
+ 16 => '16 shots', # ILCE-7RM4 16-shot PixelShift
100 => 'Continuous - iSweep Panorama',
200 => 'Continuous - Sweep Panorama',
},
@@ -8221,9 +8229,9 @@ my %isoSetting2010 = (
DATAMEMBER => [ 0x005e ],
NOTES => q{
Valid for DSC-HX60V/HX80/HX90V/HX99/HX350/HX400V/QX30/RX0/RX10/RX10M2/
- RX10M3/RX10M4/RX100M3/RX100M4/RX100M5/RX100M5A/RX100M6/WX220/WX350, ILCE-7/
- 7M2/7M3/7R/7RM2/7RM3/7RM4/7S/7SM2/9/5000/5100/6000/6300/6500/QX1, ILCA-68/
- 77M2/99M2.
+ RX10M3/RX10M4/RX100M3/RX100M4/RX100M5/RX100M5A/RX100M6/RX100M7/WX220/WX350,
+ ILCE-7/7M2/7M3/7R/7RM2/7RM3/7RM4/7S/7SM2/9/5000/5100/6000/6100/6300/6400/
+ 6500/6600/QX1, ILCA-68/77M2/99M2.
},
0x0004 => {
Name => 'SonyISO',
@@ -8376,7 +8384,7 @@ my %isoSetting2010 = (
},
0x0342 => {
Name => 'LensZoomPosition',
- Condition => '$$self{Model} !~ /^(ILCA-|ILCE-(7RM2|7M3|7RM3|7RM4|7SM2|6300|6400|6500|9)|DSC-(HX80|HX90V|HX99|RX0|RX10M2|RX10M3|RX10M4|RX100M4|RX100M5|RX100M5A|RX100M6|RX100M7|WX500))/',
+ Condition => '$$self{Model} !~ /^(ILCA-|ILCE-(7RM2|7M3|7RM3|7RM4|7SM2|6100|6300|6400|6500|6600|9)|DSC-(HX80|HX90V|HX99|RX0|RX10M2|RX10M3|RX10M4|RX100M4|RX100M5|RX100M5A|RX100M6|RX100M7|WX500))/',
Format => 'int16u',
PrintConv => 'sprintf("%.0f%%",$val/10.24)',
PrintConvInv => '$val=~s/ ?%$//; $val * 10.24',
@@ -8388,7 +8396,7 @@ my %isoSetting2010 = (
},
0x034e => {
Name => 'LensZoomPosition',
- Condition => '$$self{Model} =~ /^(DSC-(RX100M5|RX100M5A|RX100M6|RX100M7|RX10M4|HX99)|ILCE-(6400|7M3|7RM3|7RM4))/',
+ Condition => '$$self{Model} =~ /^(DSC-(RX100M5|RX100M5A|RX100M6|RX100M7|RX10M4|HX99)|ILCE-(6100|6400|6600|7M3|7RM3|7RM4))/',
Format => 'int16u',
PrintConv => 'sprintf("%.0f%%",$val/10.24)',
PrintConvInv => '$val=~s/ ?%$//; $val * 10.24',
@@ -8400,7 +8408,7 @@ my %isoSetting2010 = (
},
0x035c => {
Name => 'VignettingCorrParams',
- Condition => '$$self{Model} =~ /^(ILCA-99M2|ILCE-(6400|6500|7M3|7RM3|7RM4|9))/',
+ Condition => '$$self{Model} =~ /^(ILCA-99M2|ILCE-(6100|6400|6500|6600|7M3|7RM3|7RM4|9))/',
Format => 'int16s[16]',
},
0x035a => {
@@ -8437,7 +8445,7 @@ my %isoSetting2010 = (
},
0x03b8 => {
Name => 'ChromaticAberrationCorrParams',
- Condition => '$$self{Model} =~ /^(ILCE-(6400|7M3|7RM3|7RM4|9))/',
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9))/',
Format => 'int16s[32]',
},
);
@@ -8453,7 +8461,7 @@ my %isoSetting2010 = (
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
# 0x0000: 1 for SLT-A37/A57/A65/A77, NEX-5N/7/F3/VG20
# 2 for SLT-A58/99V, NEX-3N/5R/5T/6/VG30/VG900, ILCA-68/77M2, ILCE-3000/3500/7/7M2/7R/7S/5000/6000
-# 3 for ILCA-99M2, ILCE-6300/6400/6500/7M3/7RM2/7RM3/7RM4/7SM2/9
+# 3 for ILCA-99M2, ILCE-6100/6300/6400/6500/6600/7M3/7RM2/7RM3/7RM4/7SM2/9
# 0x0001+0x0002: Int16u, seen 580 - 770: similar to "BatteryUnknown" ??
# 0x0005: int8u, seen 73 - 117: maybe Fahrenheit? Higher than "AmbientTemperature", but same trend.
0x0005 => {
@@ -8601,7 +8609,7 @@ my %isoSetting2010 = (
# ILCE-6000 v1.20-v3.20
# 1.60: ILCE-6300/6500, ILCE-7RM2 v3.05-v4.00
# 1.70: ILCE-7M3/7RM3, ILCE-9 v1.00-v4.10
- # 1.80: ILCE-6400/7RM4, ILCE-9 v5.0x
+ # 1.80: ILCE-6100/6400/6600/7RM4, ILCE-9 v5.0x
},
0x000d => {
Name => 'LensE-mountVersion',
@@ -8624,9 +8632,10 @@ my %isoSetting2010 = (
# 1.41: SELP18105G Ver.02
# 1.50: SEL28F20, SEL90M28G, Zeiss Batis 18mm/25mm/85mm/135mm, Zeiss Loxia 21mm, Zeiss Loxia 35mm/50mm Ver.02,
# Tokina FiRIN 20mm
- # 1.60: SEL1224G, SEL1635GM, SELP18110G, SEL18135, SEL2470GM, SEL24105G, SEL35F18F, SEL50F14Z, SEL50F18F, SEL50M28,
- # SEL70200GM, SEL70300G, SEL85F14GM, SEL85F18, SEL100F28GM, SEL100400GM, SEL135F18GM, SEL200600G, SEL600F40GM,
- # Sigma 16F14DCDN/30F14DCDN/35F12DGDN/45F28DGDN, Sigma MC-11, Samyang AF 14mm/50mm, Voigtlander 15mm, Viltrox 85mm MF
+ # 1.60: SEL1224G, SEL1635GM, SEL1655G, SELP18110G, SEL18135, SEL2470GM, SEL24105G, SEL35F18F, SEL50F14Z, SEL50F18F,
+ # SEL50M28, SEL70200GM, SEL70300G, SEL70350G, SEL85F14GM, SEL85F18, SEL100F28GM, SEL100400GM, SEL135F18GM,
+ # SEL200600G, SEL600F40GM, Sigma 16F14DCDN/30F14DCDN/35F12DGDN/45F28DGDN, Sigma MC-11, Samyang AF 14mm/50mm,
+ # Voigtlander 15mm, Viltrox 85mm MF
# 1.70: LA-EA3 Ver.02, Samyang AF 24mm/35mm/85mm, Tamron 17-28mm, 28-75mm, Tokina FiRIN 20mm AF Ver.01, Tokina FiRIN 100mm Macro,
# Voigtlander 10mm/12mm/40mm/65mm, Zeiss Loxia 25mm/85mm, Sigma 14-24mm
# 1.80: Voigtlander 21mm
@@ -8671,7 +8680,7 @@ my %isoSetting2010 = (
# 1 1 3 0 for ILCA-68/77M2/99M2
# 0 0 0 0 for NEX and ILCE-3000/3500, also seen for SLT/ILCA with non-AF lens
# 1 0 0 0 for ILCE-5000/5100/6000/7/7M2/7R/7S/QX1
- # 6 0 0 0 for ILCE-6300/6400/6500/7M3/7RM2/7RM3/7RM4/7SM2/9
+ # 6 0 0 0 for ILCE-6100/6300/6400/6500/6600/7M3/7RM2/7RM3/7RM4/7SM2/9
# 0 2 0 0 for NEX/ILCE with LA-EA2/EA4 Phase-AF adapter
# 2 0 0 0 seen for a few NEX-5N images
# 2 2 0 0 seen for a few NEX-5N/7 images with LA-EA2 adapter
diff --git a/lib/Image/ExifTool/TagNames.pod b/lib/Image/ExifTool/TagNames.pod
index 7900a555..b9d8ad05 100644
--- a/lib/Image/ExifTool/TagNames.pod
+++ b/lib/Image/ExifTool/TagNames.pod
@@ -20,7 +20,9 @@ is the identifier that is actually stored in the file. B<Index#> refers to
the offset of a value when found at a fixed position within a data block
(B<#> is the multiplier for calculating a byte offset: B<1>, B<2>, B<4> or
B<8>). These offsets may have a decimal part which is used only to
-differentiate tags with values stored at the same position. B<Sequence>
+differentiate tags with values stored at the same position. (Note that
+writable tags within binary data blocks are not individually deletable,
+and the usual alternative is to set them to a value of zero.) B<Sequence>
gives the order of values for a serial data stream.
A B<Tag Name> is the handle by which the information is accessed in
@@ -17264,7 +17266,7 @@ ILCE-6300/6500/7RM2/7SM2, ILCA-99M2.
=head3 Sony Tag2010i Tags
-Valid for ILCE-6400/7M3/7RM3/7RM4/9, DSC-RX0M2/RX10M4/RX100M6/RX100M5A/HX99.
+Valid for ILCE-6100/6400/6600/7M3/7RM3/7RM4/9, DSC-RX0M2/RX10M4/RX100M6/RX100M5A/RX100M7/HX99.
Index1 Tag Name Writable
------ -------- --------
@@ -17425,7 +17427,7 @@ substitution cipher, but the deciphered values are listed below.
=head3 Sony Tag9050b Tags
-Valid from July 2015 for ILCE-6300/6400/6500/7M3/7RM2/7RM3/7RM4/7SM2/9,
+Valid from July 2015 for ILCE-6100/6300/6400/6500/6600/7M3/7RM2/7RM3/7RM4/7SM2/9,
ILCA-99M2.
Index1 Tag Name Writable
@@ -17498,9 +17500,9 @@ DSC-HX50V, DSC-QX10/QX100.
=head3 Sony Tag9400c Tags
Valid for DSC-HX60V/HX80/HX90V/HX99/HX350/HX400V/QX30/RX0/RX1RM2/RX10/
-RX10M2/RX10M3/RX10M4/RX100M3/RX100M4/RX100M5/RX100M5A/RX100M6/WX220/WX350/
-WX500, ILCE-7/7R/7S/7M2/7M3/7RM2/7RM3/7RM4/7SM2/9/5000/5100/6000/6300/6400/
-6500/QX1, ILCA-68/77M2/99M2.
+RX10M2/RX10M3/RX10M4/RX100M3/RX100M4/RX100M5/RX100M5A/RX100M6/RX100M7/
+WX220/WX350/WX500, ILCE-7/7R/7S/7M2/7M3/7RM2/7RM3/7RM4/7SM2/9/5000/5100/
+6000/6100/6300/6400/6500/6600/QX1, ILCA-68/77M2/99M2.
Index1 Tag Name Writable
------ -------- --------
@@ -17598,9 +17600,9 @@ Valid for SLT, NEX, ILCE-3000/3500 and several DSC models.
=head3 Sony Tag9405b Tags
Valid for DSC-HX60V/HX80/HX90V/HX99/HX350/HX400V/QX30/RX0/RX10/RX10M2/
-RX10M3/RX10M4/RX100M3/RX100M4/RX100M5/RX100M5A/RX100M6/WX220/WX350, ILCE-7/
-7M2/7M3/7R/7RM2/7RM3/7RM4/7S/7SM2/9/5000/5100/6000/6300/6500/QX1, ILCA-68/
-77M2/99M2.
+RX10M3/RX10M4/RX100M3/RX100M4/RX100M5/RX100M5A/RX100M6/RX100M7/WX220/WX350,
+ILCE-7/7M2/7M3/7R/7RM2/7RM3/7RM4/7S/7SM2/9/5000/5100/6000/6100/6300/6400/
+6500/6600/QX1, ILCA-68/77M2/99M2.
Index1 Tag Name Writable
------ -------- --------
diff --git a/lib/Image/ExifTool/XMPStruct.pl b/lib/Image/ExifTool/XMPStruct.pl
index 30983fc2..f64795d4 100644
--- a/lib/Image/ExifTool/XMPStruct.pl
+++ b/lib/Image/ExifTool/XMPStruct.pl
@@ -622,6 +622,7 @@ sub RestoreStruct($;$)
my ($key, %structs, %var, %lists, $si, %listKeys, @siList);
my $ex = $$et{TAG_EXTRA};
my $valueHash = $$et{VALUE};
+ my $fileOrder = $$et{FILE_ORDER};
my $tagExtra = $$et{TAG_EXTRA};
foreach $key (keys %{$$et{TAG_INFO}}) {
$$ex{$key} or next;
@@ -765,7 +766,13 @@ sub RestoreStruct($;$)
# everything else, and this is really what we care about)
my $k = $listKeys{$oldStruct};
if ($k) { # ($k will be undef for an empty structure)
- $k lt $key and $et->DeleteTag($key), next;
+ if ($k lt $key) {
+ # keep lowest file order
+ $$fileOrder{$k} = $$fileOrder{$key} if $$fileOrder{$k} > $$fileOrder{$key};
+ $et->DeleteTag($key);
+ next;
+ }
+ $$fileOrder{$key} = $$fileOrder{$k} if $$fileOrder{$key} > $$fileOrder{$k};
$et->DeleteTag($k); # remove tag with greater copy number
}
}
@@ -776,11 +783,11 @@ sub RestoreStruct($;$)
# save strInfo ref and file order
if ($var{$strInfo}) {
# set file order to just before the first associated flattened tag
- if ($var{$strInfo}[1] > $$et{FILE_ORDER}{$key}) {
- $var{$strInfo}[1] = $$et{FILE_ORDER}{$key} - 0.5;
+ if ($var{$strInfo}[1] > $$fileOrder{$key}) {
+ $var{$strInfo}[1] = $$fileOrder{$key} - 0.5;
}
} else {
- $var{$strInfo} = [ $strInfo, $$et{FILE_ORDER}{$key} - 0.5 ];
+ $var{$strInfo} = [ $strInfo, $$fileOrder{$key} - 0.5 ];
}
# preserve original flattened tags if requested
if ($keepFlat) {
@@ -810,7 +817,7 @@ sub RestoreStruct($;$)
foreach $si (sort { $var{$a}[1] <=> $var{$b}[1] } @siList) {
$key = $et->FoundTag($var{$si}[0], '');
$$valueHash{$key} = $structs{$si};
- $$et{FILE_ORDER}{$key} = $var{$si}[1];
+ $$fileOrder{$key} = $var{$si}[1];
}
}