exiftool_vendored 11.99.0 → 12.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/Changes +201 -2
- data/bin/MANIFEST +8 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +43 -42
- data/bin/exiftool +172 -99
- data/bin/lib/Image/ExifTool.pm +170 -117
- data/bin/lib/Image/ExifTool.pod +132 -97
- data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
- data/bin/lib/Image/ExifTool/APE.pm +2 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +21 -10
- data/bin/lib/Image/ExifTool/Canon.pm +202 -13
- data/bin/lib/Image/ExifTool/CanonCustom.pm +82 -16
- data/bin/lib/Image/ExifTool/DPX.pm +56 -2
- data/bin/lib/Image/ExifTool/DarwinCore.pm +22 -3
- data/bin/lib/Image/ExifTool/EXE.pm +8 -5
- data/bin/lib/Image/ExifTool/Exif.pm +15 -6
- data/bin/lib/Image/ExifTool/Font.pm +9 -2
- data/bin/lib/Image/ExifTool/GIF.pm +6 -1
- data/bin/lib/Image/ExifTool/GeoTiff.pm +2 -0
- data/bin/lib/Image/ExifTool/Geotag.pm +2 -2
- data/bin/lib/Image/ExifTool/GoPro.pm +48 -22
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/ID3.pm +86 -12
- data/bin/lib/Image/ExifTool/IPTC.pm +1 -0
- data/bin/lib/Image/ExifTool/Import.pm +12 -9
- data/bin/lib/Image/ExifTool/JSON.pm +27 -4
- data/bin/lib/Image/ExifTool/Lang/de.pm +3 -1
- data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +1 -1
- data/bin/lib/Image/ExifTool/MPF.pm +2 -2
- data/bin/lib/Image/ExifTool/MacOS.pm +154 -38
- data/bin/lib/Image/ExifTool/Matroska.pm +3 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +7 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +143 -17
- data/bin/lib/Image/ExifTool/Olympus.pm +40 -17
- data/bin/lib/Image/ExifTool/PNG.pm +14 -3
- data/bin/lib/Image/ExifTool/PPM.pm +5 -5
- data/bin/lib/Image/ExifTool/Panasonic.pm +148 -14
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +34 -0
- data/bin/lib/Image/ExifTool/Parrot.pm +2 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +11 -3
- data/bin/lib/Image/ExifTool/Photoshop.pm +2 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +240 -37
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +419 -60
- data/bin/lib/Image/ExifTool/README +25 -21
- data/bin/lib/Image/ExifTool/RSRC.pm +17 -11
- data/bin/lib/Image/ExifTool/Radiance.pm +7 -2
- data/bin/lib/Image/ExifTool/Ricoh.pm +19 -1
- data/bin/lib/Image/ExifTool/Shift.pl +1 -0
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +40 -33
- data/bin/lib/Image/ExifTool/Sony.pm +423 -39
- data/bin/lib/Image/ExifTool/Stim.pm +2 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +5798 -5675
- data/bin/lib/Image/ExifTool/TagNames.pod +575 -100
- data/bin/lib/Image/ExifTool/Validate.pm +4 -4
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -0
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +30 -21
- data/bin/lib/Image/ExifTool/Writer.pl +49 -24
- data/bin/lib/Image/ExifTool/XMP.pm +99 -17
- data/bin/lib/Image/ExifTool/XMP2.pl +1 -0
- data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
- data/bin/lib/Image/ExifTool/ZISRAW.pm +123 -0
- data/bin/perl-Image-ExifTool.spec +42 -41
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +9 -8
|
@@ -387,8 +387,11 @@ numerical, and generated automatically otherwise.
|
|
|
387
387
|
'Flattened' - [reserved] used internally to mark Struct tags
|
|
388
388
|
which have been processed to generate flattened equivalents.
|
|
389
389
|
|
|
390
|
-
'
|
|
391
|
-
|
|
390
|
+
'NotFlat' - [XMP tags only] Flag indicates that this tag ID
|
|
391
|
+
does not represent a flattened tag. Used to avoid a conflict
|
|
392
|
+
if the tag ID would be the same as a generated ID for a
|
|
393
|
+
flattened tag. The result is that the flattened tag will not
|
|
394
|
+
be accessible.
|
|
392
395
|
|
|
393
396
|
'Hidden' - set to hide tag from the TagName documentation.
|
|
394
397
|
Also suppresses verbose output of a BinaryData tag.
|
|
@@ -763,25 +766,26 @@ numerical, and generated automatically otherwise.
|
|
|
763
766
|
conditionally deleted.
|
|
764
767
|
|
|
765
768
|
Writable : Indicates this tag can be written (or not written if Writable
|
|
766
|
-
is set to zero), and for EXIF
|
|
767
|
-
writing. Writable may be set to 1 for MakerNotes
|
|
768
|
-
because the existing format is always used,
|
|
769
|
-
a format is desirable because it is used in
|
|
770
|
-
value. Set to 2 for tag to show "yes" in the
|
|
771
|
-
of the tag name documentation even when there
|
|
772
|
-
defined (eg. if it is written via an Extra
|
|
773
|
-
tables, the Writable flag may be
|
|
774
|
-
flag, in which case Format is used
|
|
775
|
-
value and Writable specifies the
|
|
776
|
-
EXIF IFD. For SubDirectories in
|
|
777
|
-
is only defined if the
|
|
778
|
-
|
|
779
|
-
is set to 0). If
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
for all
|
|
769
|
+
is set to zero), and for EXIF and QuickTime tables gives
|
|
770
|
+
format for writing. Writable may be set to 1 for MakerNotes
|
|
771
|
+
information because the existing format is always used,
|
|
772
|
+
however providing a format is desirable because it is used in
|
|
773
|
+
validating the value. Set to 2 for tag to show "yes" in the
|
|
774
|
+
Writable column of the tag name documentation even when there
|
|
775
|
+
is no WRITE_PROC defined (eg. if it is written via an Extra
|
|
776
|
+
tag). For EXIF and QuickTime tables, the Writable flag may be
|
|
777
|
+
different than the Format flag, in which case Format is used
|
|
778
|
+
for converting the binary value and Writable specifies the
|
|
779
|
+
format code written to the EXIF IFD. For SubDirectories in
|
|
780
|
+
EXIF information, this flag is only defined if the
|
|
781
|
+
SubDirectory is writable as a block, or if the SubDirectory
|
|
782
|
+
can not be edited (in which case Writable is set to 0). If
|
|
783
|
+
non-zero, the SubDirectory is also extracted as a block, so
|
|
784
|
+
the Binary and Protected flags should usually set as well.
|
|
785
|
+
There is currently no way to specify a write format for a
|
|
786
|
+
SubDirectory that is not writable as a block (the default is
|
|
787
|
+
'int32u' for IFD-type SubDirectories, and 'undef' for all
|
|
788
|
+
others).
|
|
785
789
|
|
|
786
790
|
WriteAlso : Used for writable tag to specify other tags to write when this
|
|
787
791
|
tag is written. The value is a hash reference. The hash keys
|
|
@@ -14,19 +14,22 @@ use strict;
|
|
|
14
14
|
use vars qw($VERSION);
|
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
16
|
|
|
17
|
-
$VERSION = '1.
|
|
17
|
+
$VERSION = '1.09';
|
|
18
|
+
|
|
19
|
+
sub ProcessRSRC($$);
|
|
18
20
|
|
|
19
21
|
# Information decoded from Mac OS resources
|
|
20
22
|
%Image::ExifTool::RSRC::Main = (
|
|
21
23
|
GROUPS => { 2 => 'Document' },
|
|
24
|
+
PROCESS_PROC => \&ProcessRSRC,
|
|
22
25
|
NOTES => q{
|
|
23
|
-
Tags extracted from Mac OS resource files
|
|
24
|
-
also be extracted from the resource fork of any file
|
|
25
|
-
adding "/..namedfork/rsrc" to the filename to process the
|
|
26
|
-
alone, or by using the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> (-ee) option to process
|
|
27
|
-
fork as a sub-document of the main file. When writing,
|
|
28
|
-
the Mac OS resource fork by default, but it may deleted
|
|
29
|
-
on the command line.
|
|
26
|
+
Tags extracted from Mac OS resource files, DFONT files and "._" sidecar
|
|
27
|
+
files. These tags may also be extracted from the resource fork of any file
|
|
28
|
+
in OS X, either by adding "/..namedfork/rsrc" to the filename to process the
|
|
29
|
+
resource fork alone, or by using the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> (-ee) option to process
|
|
30
|
+
the resource fork as a sub-document of the main file. When writing,
|
|
31
|
+
ExifTool preserves the Mac OS resource fork by default, but it may deleted
|
|
32
|
+
with C<-rsrc:all=> on the command line.
|
|
30
33
|
},
|
|
31
34
|
'8BIM' => {
|
|
32
35
|
Name => 'PhotoshopInfo',
|
|
@@ -66,6 +69,9 @@ sub ProcessRSRC($$)
|
|
|
66
69
|
my $raf = $$dirInfo{RAF};
|
|
67
70
|
my ($hdr, $map, $buff, $i, $j);
|
|
68
71
|
|
|
72
|
+
# allow access with data reference
|
|
73
|
+
$raf or $raf = new File::RandomAccess($$dirInfo{DataPt});
|
|
74
|
+
|
|
69
75
|
# attempt to validate the format as thoroughly as practical
|
|
70
76
|
return 0 unless $raf->Read($hdr, 30) == 30;
|
|
71
77
|
my ($datOff, $mapOff, $datLen, $mapLen) = unpack('N*', $hdr);
|
|
@@ -81,7 +87,7 @@ sub ProcessRSRC($$)
|
|
|
81
87
|
SetByteOrder('MM');
|
|
82
88
|
my $typeOff = Get16u(\$map, 24);
|
|
83
89
|
my $nameOff = Get16u(\$map, 26);
|
|
84
|
-
my $numTypes = Get16u(\$map, 28);
|
|
90
|
+
my $numTypes = (Get16u(\$map, 28) + 1) & 0xffff;
|
|
85
91
|
|
|
86
92
|
# validate offsets in the resource map
|
|
87
93
|
return 0 if $typeOff < 28 or $nameOff < 30;
|
|
@@ -89,10 +95,10 @@ sub ProcessRSRC($$)
|
|
|
89
95
|
$et->SetFileType('RSRC') unless $$et{IN_RESOURCE};
|
|
90
96
|
my $verbose = $et->Options('Verbose');
|
|
91
97
|
my $tagTablePtr = GetTagTable('Image::ExifTool::RSRC::Main');
|
|
92
|
-
$et->VerboseDir('RSRC', $numTypes
|
|
98
|
+
$et->VerboseDir('RSRC', $numTypes);
|
|
93
99
|
|
|
94
100
|
# parse resource type list
|
|
95
|
-
for ($i=0; $i
|
|
101
|
+
for ($i=0; $i<$numTypes; ++$i) {
|
|
96
102
|
my $off = $typeOff + 2 + 8 * $i; # offset of entry in type list
|
|
97
103
|
last if $off + 8 > $mapLen;
|
|
98
104
|
my $resType = substr($map,$off,4); # resource type
|
|
@@ -15,7 +15,7 @@ use strict;
|
|
|
15
15
|
use vars qw($VERSION);
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.02';
|
|
19
19
|
|
|
20
20
|
# Radiance tags
|
|
21
21
|
%Image::ExifTool::Radiance::Main = (
|
|
@@ -42,6 +42,7 @@ $VERSION = '1.01';
|
|
|
42
42
|
},
|
|
43
43
|
},
|
|
44
44
|
_command => 'Command',
|
|
45
|
+
_comment => 'Comment',
|
|
45
46
|
software => 'Software',
|
|
46
47
|
view => 'View',
|
|
47
48
|
'format' => 'Format', # <-- this is the one that caused the conflict when uppercase
|
|
@@ -74,8 +75,12 @@ sub ProcessHDR($$)
|
|
|
74
75
|
while ($raf->ReadLine($buff)) {
|
|
75
76
|
chomp $buff;
|
|
76
77
|
last unless length($buff) > 0 and length($buff) < 4096;
|
|
78
|
+
if ($buff =~ s/^#\s*//) {
|
|
79
|
+
$et->HandleTag($tagTablePtr, '_comment', $buff) if length $buff;
|
|
80
|
+
next;
|
|
81
|
+
}
|
|
77
82
|
unless ($buff =~ /^(.*)?\s*=\s*(.*)/) {
|
|
78
|
-
$et->HandleTag($tagTablePtr, '_command', $buff);
|
|
83
|
+
$et->HandleTag($tagTablePtr, '_command', $buff) if length $buff;
|
|
79
84
|
next;
|
|
80
85
|
}
|
|
81
86
|
# use lower-case tag names to avoid conflicts with reserved tag table entries
|
|
@@ -19,7 +19,7 @@ use vars qw($VERSION);
|
|
|
19
19
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
20
20
|
use Image::ExifTool::Exif;
|
|
21
21
|
|
|
22
|
-
$VERSION = '1.
|
|
22
|
+
$VERSION = '1.35';
|
|
23
23
|
|
|
24
24
|
sub ProcessRicohText($$$);
|
|
25
25
|
sub ProcessRicohRMETA($$$);
|
|
@@ -875,6 +875,7 @@ my %ricohLensIDs = (
|
|
|
875
875
|
Name => 'SoundFile',
|
|
876
876
|
Notes => 'audio data recorded in JPEG images by the G700SE',
|
|
877
877
|
},
|
|
878
|
+
_barcode => { Name => 'Barcodes', List => 1 },
|
|
878
879
|
);
|
|
879
880
|
|
|
880
881
|
# information stored in Ricoh AVI images (ref PH)
|
|
@@ -1004,6 +1005,23 @@ sub ProcessRicohRMETA($$$)
|
|
|
1004
1005
|
# (but it looks like the int16u at $dirStart+6 is the next block number
|
|
1005
1006
|
# if the data is continued, or 0 for the last block)
|
|
1006
1007
|
$dirLen < 14 and $et->Warn('Short Ricoh RMETA block', 1), return 0;
|
|
1008
|
+
if ($$dataPt =~ /^.{20}BARCODE/s) {
|
|
1009
|
+
my $val = substr($$dataPt, 20);
|
|
1010
|
+
$val =~ s/\0.*//s;
|
|
1011
|
+
$val =~ s/^BARCODE\w+,\d{2},//;
|
|
1012
|
+
my @codes;
|
|
1013
|
+
for (;;) {
|
|
1014
|
+
$val =~ s/(\d+),// and length $val >= $1 or last;
|
|
1015
|
+
push @codes, substr($val, 0, $1);
|
|
1016
|
+
last unless length $val > $1;
|
|
1017
|
+
$val = substr($val, $1+1);
|
|
1018
|
+
}
|
|
1019
|
+
$et->HandleTag($tagTablePtr, '_barcode', \@codes) if @codes;
|
|
1020
|
+
return 1;
|
|
1021
|
+
} elsif ($$dataPt =~ /^.{18}ASCII/s) {
|
|
1022
|
+
# (ignore barcode tag names for now)
|
|
1023
|
+
return 1;
|
|
1024
|
+
}
|
|
1007
1025
|
my $audioLen = Get16u($dataPt, $dirStart+12);
|
|
1008
1026
|
$audioLen + 14 > $dirLen and $et->Warn('Truncated Ricoh RMETA audio data', 1), return 0;
|
|
1009
1027
|
my $buff = substr($$dataPt, $dirStart + 14, $audioLen);
|
|
@@ -300,6 +300,7 @@ sub ShiftTime($;$$$)
|
|
|
300
300
|
#
|
|
301
301
|
SplitTime($val, \@time) or return "Invalid time string ($val)";
|
|
302
302
|
if (defined $time[0]) {
|
|
303
|
+
return "Can't shift from year 0000" if $time[0] eq '0000';
|
|
303
304
|
$mode = defined $time[3] ? 'DateTime' : 'Date';
|
|
304
305
|
} elsif (defined $time[3]) {
|
|
305
306
|
$mode = 'Time';
|
|
@@ -16,7 +16,7 @@ use vars qw($VERSION);
|
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
17
17
|
use Image::ExifTool::Sigma;
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.27';
|
|
20
20
|
|
|
21
21
|
sub ProcessX3FHeader($$$);
|
|
22
22
|
sub ProcessX3FDirectory($$$);
|
|
@@ -427,36 +427,43 @@ sub WriteX3F($$)
|
|
|
427
427
|
$len -= 28;
|
|
428
428
|
|
|
429
429
|
# only rewrite full-sized JpgFromRaw (version 2.0, type 2, format 18)
|
|
430
|
-
if ($buff =~ /^SECi\0\0\x02\0\x02\0\0\0\x12\0\0\0/
|
|
431
|
-
$$et{ImageWidth} == unpack('x16V', $buff))
|
|
432
|
-
{
|
|
430
|
+
if ($buff =~ /^SECi\0\0\x02\0\x02\0\0\0\x12\0\0\0/) {
|
|
433
431
|
$raf->Read($buff, $len) == $len or return 'Error reading JpgFromRaw';
|
|
434
|
-
#
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
432
|
+
if ($buff =~ /^\xff\xd8\xff\xe1/) { # does this preview contain EXIF?
|
|
433
|
+
# use same write directories as JPEG
|
|
434
|
+
$et->InitWriteDirs('JPEG');
|
|
435
|
+
# make sure we don't add APP0 JFIF because it would mess up our preview identification
|
|
436
|
+
delete $$et{ADD_DIRS}{APP0};
|
|
437
|
+
delete $$et{ADD_DIRS}{JFIF};
|
|
438
|
+
# rewrite the embedded JPEG in memory
|
|
439
|
+
my $newData;
|
|
440
|
+
my %jpegInfo = (
|
|
441
|
+
Parent => 'X3F',
|
|
442
|
+
RAF => new File::RandomAccess(\$buff),
|
|
443
|
+
OutFile => \$newData,
|
|
444
|
+
);
|
|
445
|
+
$$et{FILE_TYPE} = 'JPEG';
|
|
446
|
+
my $success = $et->WriteJPEG(\%jpegInfo);
|
|
447
|
+
$$et{FILE_TYPE} = 'X3F';
|
|
448
|
+
SetByteOrder('II');
|
|
449
|
+
return 'Error writing X3F JpgFromRaw' unless $success and $newData;
|
|
450
|
+
return -1 if $success < 0;
|
|
451
|
+
# (this shouldn't happen unless someone tries to delete the EXIF...)
|
|
452
|
+
return 'EXIF segment must come first in X3F JpgFromRaw' unless $newData =~ /^\xff\xd8\xff\xe1/;
|
|
453
|
+
# write new data if anything changed, otherwise copy old image
|
|
454
|
+
my $outPt = $$et{CHANGED} ? \$newData : \$buff;
|
|
455
|
+
Write($outfile, $$outPt) or return -1;
|
|
456
|
+
# set $len to the total subsection data length
|
|
457
|
+
$len = length($$outPt);
|
|
458
|
+
$didContain = 1;
|
|
459
|
+
} else {
|
|
460
|
+
Write($outfile, $buff) or return -1;
|
|
461
|
+
}
|
|
455
462
|
} else {
|
|
456
463
|
# copy original image data
|
|
457
464
|
Image::ExifTool::CopyBlock($raf, $outfile, $len) or return 'Corrupted X3F image';
|
|
458
|
-
$len += 28;
|
|
459
465
|
}
|
|
466
|
+
$len += 28; # add back header length
|
|
460
467
|
} else {
|
|
461
468
|
# copy data for this subsection
|
|
462
469
|
Image::ExifTool::CopyBlock($raf, $outfile, $len) or return 'Corrupted X3F directory';
|
|
@@ -516,16 +523,18 @@ sub ProcessX3FDirectory($$$)
|
|
|
516
523
|
$raf->Read($buff, 28) == 28 or return 'Error reading PreviewImage header';
|
|
517
524
|
# ignore all image data but JPEG compressed (version 2.0, type 2, format 18)
|
|
518
525
|
next unless $buff =~ /^SECi\0\0\x02\0\x02\0\0\0\x12\0\0\0/;
|
|
519
|
-
|
|
520
|
-
|
|
526
|
+
$offset += 28;
|
|
527
|
+
$len -= 28;
|
|
528
|
+
$raf->Read($buff, $len) == $len or return "Error reading PreviewImage data";
|
|
529
|
+
# check fore EXIF segment, and extract this image as the JpgFromRaw
|
|
530
|
+
if ($buff =~ /^\xff\xd8\xff\xe1/) {
|
|
521
531
|
$$et{IsJpgFromRaw} = 1;
|
|
522
532
|
$tagInfo = $et->GetTagInfo($tagTablePtr, $tag);
|
|
523
533
|
delete $$et{IsJpgFromRaw};
|
|
524
534
|
}
|
|
525
|
-
|
|
526
|
-
$len
|
|
535
|
+
} else {
|
|
536
|
+
$raf->Read($buff, $len) == $len or return "Error reading $$tagInfo{Name} data";
|
|
527
537
|
}
|
|
528
|
-
$raf->Read($buff, $len) == $len or return "Error reading $$tagInfo{Name} data";
|
|
529
538
|
my $subdir = $$tagInfo{SubDirectory};
|
|
530
539
|
if ($subdir) {
|
|
531
540
|
my %dirInfo = ( DataPt => \$buff );
|
|
@@ -591,8 +600,6 @@ sub ProcessX3F($$)
|
|
|
591
600
|
$buff .= $buf2;
|
|
592
601
|
}
|
|
593
602
|
my ($widPos, $hdrType) = $ver < 4 ? (28, 'Header') : (40, 'Header4');
|
|
594
|
-
# extract ImageWidth for later
|
|
595
|
-
$$et{ImageWidth} = Get32u(\$buff, $widPos);
|
|
596
603
|
# process header information
|
|
597
604
|
my $tagTablePtr = GetTagTable('Image::ExifTool::SigmaRaw::Main');
|
|
598
605
|
unless ($outfile) {
|
|
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
34
34
|
use Image::ExifTool::Exif;
|
|
35
35
|
use Image::ExifTool::Minolta;
|
|
36
36
|
|
|
37
|
-
$VERSION = '3.
|
|
37
|
+
$VERSION = '3.32';
|
|
38
38
|
|
|
39
39
|
sub ProcessSRF($$$);
|
|
40
40
|
sub ProcessSR2($$$);
|
|
@@ -73,6 +73,7 @@ sub PrintInvLensSpec($;$$);
|
|
|
73
73
|
2 => 'Sony LA-EA2 Adapter',
|
|
74
74
|
3 => 'Sony LA-EA3 Adapter', #(NC) ILCE-7 image with A-mount lens, but also has 0x940e 2nd byte=2
|
|
75
75
|
6 => 'Sony LA-EA4 Adapter', #(NC) ILCE-7R image with A-mount lens and having phase-detect info blocks in 0x940e AFInfo
|
|
76
|
+
7 => 'Sony LA-EA5 Adapter', #JR
|
|
76
77
|
# 27 => Venus Optics Laowa 12mm f2.8 Zero-D or 105mm f2 (T3.2) Smooth Trans Focus (ref IB)
|
|
77
78
|
44 => 'Metabones Canon EF Smart Adapter', #JR
|
|
78
79
|
78 => 'Metabones Canon EF Smart Adapter Mark III or Other Adapter', #PH/JR (also Mark IV, Fotodiox and Viltrox)
|
|
@@ -143,6 +144,8 @@ sub PrintInvLensSpec($;$$);
|
|
|
143
144
|
32854 => 'Sony E 70-350mm F4.5-6.3 G OSS', #IB/JR
|
|
144
145
|
32858 => 'Sony FE 35mm F1.8', #JR/IB
|
|
145
146
|
32859 => 'Sony FE 20mm F1.8 G', #IB/JR
|
|
147
|
+
32860 => 'Sony FE 12-24mm F2.8 GM', #JR/IB
|
|
148
|
+
32864 => 'Sony FE 28-60mm F4-5.6', #JR
|
|
146
149
|
|
|
147
150
|
# (comment this out so LensID will report the LensModel, which is more useful)
|
|
148
151
|
# 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
|
|
@@ -180,7 +183,9 @@ sub PrintInvLensSpec($;$$);
|
|
|
180
183
|
49460 => 'Tamron 24mm F2.8 Di III OSD M1:2', #JR (Model F051)
|
|
181
184
|
49461 => 'Tamron 20mm F2.8 Di III OSD M1:2', #JR (Model F050)
|
|
182
185
|
49462 => 'Tamron 70-180mm F2.8 Di III VXD', #JR (Model A056)
|
|
183
|
-
|
|
186
|
+
49463 => 'Tamron 28-200mm F2.8-5.6 Di III RXD', #JR (Model A071)
|
|
187
|
+
49464 => 'Tamron 70-300mm F4.5-6.3 Di III RXD', #JR (Model A047)
|
|
188
|
+
49473 => 'Tokina atx-m 85mm F1.8 FE', #JR
|
|
184
189
|
49712 => 'Tokina FiRIN 20mm F2 FE AF', # (firmware Ver.01)
|
|
185
190
|
49713 => 'Tokina FiRIN 100mm F2.8 FE MACRO', # (firmware Ver.01)
|
|
186
191
|
|
|
@@ -209,6 +214,9 @@ sub PrintInvLensSpec($;$$);
|
|
|
209
214
|
50515 => 'Sigma 35mm F1.2 DG DN | A', #IB/JR (019)
|
|
210
215
|
50516 => 'Sigma 14-24mm F2.8 DG DN | A', #IB/JR (019)
|
|
211
216
|
50517 => 'Sigma 24-70mm F2.8 DG DN | A', #JR (019)
|
|
217
|
+
50518 => 'Sigma 100-400mm F5-6.3 DG DN OS | C', #JR (020)
|
|
218
|
+
50521 => 'Sigma 85mm F1.4 DG DN | A', #JR (020)
|
|
219
|
+
50522 => 'Sigma 105mm F2.8 DG DN MACRO | A', #JR (020)
|
|
212
220
|
|
|
213
221
|
50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
|
|
214
222
|
50993 => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB
|
|
@@ -221,6 +229,7 @@ sub PrintInvLensSpec($;$$);
|
|
|
221
229
|
51000 => 'Voigtlander NOKTON 50mm F1.2 Aspherical', #JR
|
|
222
230
|
51001 => 'Voigtlander NOKTON 21mm F1.4 Aspherical', #JR
|
|
223
231
|
51002 => 'Voigtlander APO-LANTHAR 50mm F2 Aspherical', #JR
|
|
232
|
+
51003 => 'Voigtlander NOKTON 35mm F1.2 Aspherical SE', #JR
|
|
224
233
|
|
|
225
234
|
# lenses listed in the Sigma MC-11 list, but not yet seen:
|
|
226
235
|
# 504xx => 'Sigma 18-200mm F3.5-6.3 DC MACRO OS HSM | C + MC-11', # (014)
|
|
@@ -233,7 +242,8 @@ sub PrintInvLensSpec($;$$);
|
|
|
233
242
|
51505.1 => 'Samyang AF 35mm F2.8', #PH (also 32794)
|
|
234
243
|
51507 => 'Samyang AF 35mm F1.4', #IB
|
|
235
244
|
51508 => 'Samyang AF 45mm F1.8',
|
|
236
|
-
51510 => 'Samyang AF 18mm F2.8', #JR
|
|
245
|
+
51510 => 'Samyang AF 18mm F2.8 or Samyang AF 35mm F1.8', #JR
|
|
246
|
+
51510.1 => 'Samyang AF 35mm F1.8', #JR
|
|
237
247
|
51512 => 'Samyang AF 75mm F1.8', #IB/JR
|
|
238
248
|
);
|
|
239
249
|
|
|
@@ -954,7 +964,8 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
954
964
|
# unknown offsets or values for DSC-HX60V/HX350/HX400V/QX10/QX30/QX100/RX10/RX100M2/RX100M3/WX220/WX350,
|
|
955
965
|
# ILCA-68/77M2, ILCE-5000/5100/6000/7/7M2/7R/7S/QX1, Stellar2, Lusso
|
|
956
966
|
# unknown offsets or values for DSC-HX80/HX90V/RX0/RX1RM2/RX10M2/RX10M3/RX100M4/RX100M5/WX500, ILCE-6300/6500/7RM2/7SM2, ILCA-99M2
|
|
957
|
-
# unknown offsets or values for ILCE-6100/6400/6600/7M3/7RM3/7RM4/9/9M2, DSC-RX0M2/RX10M4/RX100M6/RX100M5A/RX100M7/HX99
|
|
967
|
+
# unknown offsets or values for ILCE-6100/6400/6600/7C/7M3/7RM3/7RM4/9/9M2, DSC-RX0M2/RX10M4/RX100M6/RX100M5A/RX100M7/HX99
|
|
968
|
+
# July 2020: ILCE-7SM3 doesn't write this tag anymore
|
|
958
969
|
{
|
|
959
970
|
Name => 'Tag2010a', # ad
|
|
960
971
|
Condition => '$$self{Model} =~ /^NEX-5N$/',
|
|
@@ -995,7 +1006,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
995
1006
|
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010h' },
|
|
996
1007
|
},{
|
|
997
1008
|
Name => 'Tag2010i', # ?
|
|
998
|
-
Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9|9M2)|DSC-(RX10M4|RX100M6|RX100M5A|RX100M7|HX99|RX0M2))\b/',
|
|
1009
|
+
Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9|9M2)|DSC-(RX10M4|RX100M6|RX100M5A|RX100M7|HX99|RX0M2)|ZV-1)\b/',
|
|
999
1010
|
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010i' },
|
|
1000
1011
|
},{
|
|
1001
1012
|
Name => 'Tag_0x2010',
|
|
@@ -1380,6 +1391,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
1380
1391
|
'1 0' => 'Off',
|
|
1381
1392
|
'1 1' => 'Standard',
|
|
1382
1393
|
'1 2' => 'High',
|
|
1394
|
+
'65535 65535' => 'n/a', # ILCE-7SM3
|
|
1383
1395
|
},
|
|
1384
1396
|
},
|
|
1385
1397
|
0x2029 => { # uncompressed 14-bit RAW file type setting introduced 2015
|
|
@@ -1388,6 +1400,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
1388
1400
|
PrintConv => {
|
|
1389
1401
|
0 => 'Compressed RAW',
|
|
1390
1402
|
1 => 'Uncompressed RAW',
|
|
1403
|
+
65535 => 'n/a', # seen for ILCE-7SM3 JPEG-only
|
|
1391
1404
|
},
|
|
1392
1405
|
},
|
|
1393
1406
|
# 0x202a - first seen for ILCE-6300: 66 bytes
|
|
@@ -1423,7 +1436,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
1423
1436
|
},
|
|
1424
1437
|
},
|
|
1425
1438
|
0x202d => { #JR first seen for ILCA-99M2, ILCE-6500, DSC-RX100M5
|
|
1426
|
-
Name => 'ExposureStandardAdjustment',
|
|
1439
|
+
Name => 'ExposureStandardAdjustment',
|
|
1427
1440
|
Writable => 'rational64s',
|
|
1428
1441
|
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
1429
1442
|
PrintConvInv => '$val',
|
|
@@ -1486,6 +1499,13 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
1486
1499
|
PrintConv => 'sprintf("%.8d",$val)',
|
|
1487
1500
|
PrintConvInv => '$val',
|
|
1488
1501
|
},
|
|
1502
|
+
# 0x2032 - first seen for ILCE-7SM3, July 2020
|
|
1503
|
+
# 0x2033 - first seen for ILCE-7SM3, July 2020
|
|
1504
|
+
# 0x2034 - first seen for ILCE-7SM3, July 2020
|
|
1505
|
+
# 0x2035 - first seen for ILCE-7SM3, July 2020
|
|
1506
|
+
# 0x2036 - first seen for ILCE-7SM3, July 2020
|
|
1507
|
+
# 0x2037 - first seen for ILCE-7SM3, July 2020
|
|
1508
|
+
# 0x2039 - first seen for ILCE-7SM3, July 2020
|
|
1489
1509
|
0x3000 => {
|
|
1490
1510
|
Name => 'ShotInfo',
|
|
1491
1511
|
SubDirectory => { TagTable => 'Image::ExifTool::Sony::ShotInfo' },
|
|
@@ -1514,18 +1534,25 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
1514
1534
|
# from mid-2015: ILCE-7RM2/7SM2/6300 and newer models use different offsets
|
|
1515
1535
|
{
|
|
1516
1536
|
Name => 'Tag9050a',
|
|
1517
|
-
Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(6100|6300|6400|6500|6600|7M3|7RM2|7RM3|7RM4|7SM2|9|9M2)|ILCA-99M2)/',
|
|
1537
|
+
Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(6100|6300|6400|6500|6600|7C|7M3|7RM2|7RM3|7RM4|7SM2|7SM3|9|9M2)|ILCA-99M2|ZV-)/',
|
|
1518
1538
|
SubDirectory => {
|
|
1519
1539
|
TagTable => 'Image::ExifTool::Sony::Tag9050a',
|
|
1520
1540
|
ByteOrder => 'LittleEndian',
|
|
1521
1541
|
},
|
|
1522
1542
|
},{
|
|
1523
1543
|
Name => 'Tag9050b',
|
|
1524
|
-
Condition => '$$self{Model} =~ /^(ILCE-(6100|6300|6400|6500|6600|7M3|7RM2|7RM3|7RM4|7SM2|9|9M2)|ILCA-99M2)/',
|
|
1544
|
+
Condition => '$$self{Model} =~ /^(ILCE-(6100|6300|6400|6500|6600|7C|7M3|7RM2|7RM3|7RM4|7SM2|9|9M2)|ILCA-99M2)/',
|
|
1525
1545
|
SubDirectory => {
|
|
1526
1546
|
TagTable => 'Image::ExifTool::Sony::Tag9050b',
|
|
1527
1547
|
ByteOrder => 'LittleEndian',
|
|
1528
1548
|
},
|
|
1549
|
+
},{
|
|
1550
|
+
Name => 'Tag9050c',
|
|
1551
|
+
Condition => '$$self{Model} =~ /^(ILCE-7SM3)/',
|
|
1552
|
+
SubDirectory => {
|
|
1553
|
+
TagTable => 'Image::ExifTool::Sony::Tag9050c',
|
|
1554
|
+
ByteOrder => 'LittleEndian',
|
|
1555
|
+
},
|
|
1529
1556
|
},{
|
|
1530
1557
|
Name => 'Sony_0x9050',
|
|
1531
1558
|
%unknownCipherData,
|
|
@@ -1540,7 +1567,8 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
1540
1567
|
# 0x23 (e) for DSC-RX10/HX60V/HX350/HX400V/WX220/WX350, ILCE-7/7R/5000/6000, ILCA-68/77M2
|
|
1541
1568
|
# 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
|
|
1542
1569
|
# 0x26 (e) for ILCE-6100/6400/6600/7M3/7RM3/9, DSC-RX0M2/RX10M4/RX100M5A/RX100M6/HX99
|
|
1543
|
-
# 0x28 (e) for ILCE-7RM4/9M2, DSC-RX100M7
|
|
1570
|
+
# 0x28 (e) for ILCE-7RM4/9M2, DSC-RX100M7, ZV-1
|
|
1571
|
+
# 0x31 (e) for ILCE-7SM3
|
|
1544
1572
|
# first byte decoded: 40, 204, 202, 27, 58, 62, 48, 215, 28 respectively
|
|
1545
1573
|
{
|
|
1546
1574
|
Name => 'Tag9400a',
|
|
@@ -1555,7 +1583,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
1555
1583
|
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9400b' },
|
|
1556
1584
|
},{
|
|
1557
1585
|
Name => 'Tag9400c',
|
|
1558
|
-
Condition => '$$valPt =~ /^[\x23\x24\x26\x28]/',
|
|
1586
|
+
Condition => '$$valPt =~ /^[\x23\x24\x26\x28\x31]/',
|
|
1559
1587
|
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9400c' },
|
|
1560
1588
|
},{
|
|
1561
1589
|
Name => 'Sony_0x9400',
|
|
@@ -1679,7 +1707,8 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
1679
1707
|
# 13 0 9 2 2 DSC-QX10/QX100/RX100M2
|
|
1680
1708
|
# 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
|
|
1681
1709
|
# 16 0 85 2 2 DSC-HX80/HX90V/WX500
|
|
1682
|
-
# 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/9M2, ILCA-99M2
|
|
1710
|
+
# 17 0 232 1 2 DSC-RX0/RX0M2/RX1RM2/RX10M2/RX10M3/RX10M4/RX100M4/RX100M5/RX100M5A/RX100M6/RX100M7/HX99, ILCE-6100/6300/6400/6500/6600/7C/7M3/7RM2/7RM3/7RM4/7SM2/9/9M2, ILCA-99M2, ZV-1
|
|
1711
|
+
# 18 0 20 0 164 ILCE-7SM3
|
|
1683
1712
|
# other values for Panorama images and several other models
|
|
1684
1713
|
0x9404 => [{
|
|
1685
1714
|
Name => 'Tag9404a',
|
|
@@ -1713,7 +1742,8 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
1713
1742
|
# 142 var (0x25 = 37 var enc.) DSC-HX80/HX90V/RX1RM2/RX10M2/RX10M3/RX100M4/WX500, ILCE-6300/7RM2/7SM2
|
|
1714
1743
|
# 144 var (0xe1 = 225 var enc.) DSC-RX100M5
|
|
1715
1744
|
# 145 var (0x76 = 118 var enc.) ILCA-99M2, ILCE-6500, DSC-RX0
|
|
1716
|
-
# 163 var (0x8b = 139 var enc.) ILCE-6100/6400/6600/7M3/7RM3/7RM4/9/9M2, DSC-RX0M2/RX10M4/RX100M5A/RX100M6/RX100M7/HX99
|
|
1745
|
+
# 163 var (0x8b = 139 var enc.) ILCE-6100/6400/6600/7C/7M3/7RM3/7RM4/9/9M2, DSC-RX0M2/RX10M4/RX100M5A/RX100M6/RX100M7/HX99, ZV-1
|
|
1746
|
+
# July 2020: ILCE-7SM3 doesn't write this tag anymore, but writes 0x9416
|
|
1717
1747
|
0x9405 => [{
|
|
1718
1748
|
Name => 'Tag9405a',
|
|
1719
1749
|
# first byte must be 0x1b or 0x40 or 0x7d
|
|
@@ -1800,6 +1830,10 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
1800
1830
|
%unknownCipherData,
|
|
1801
1831
|
# 0x02 - int32u?: 1,3,5,7,9 (A77)
|
|
1802
1832
|
},
|
|
1833
|
+
0x9416 => { # replaces 0x9405 for the Sony ILCE-7SM3, from July 2020
|
|
1834
|
+
Name => 'Sony_0x9416',
|
|
1835
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9416' },
|
|
1836
|
+
},
|
|
1803
1837
|
0xb000 => { #8
|
|
1804
1838
|
Name => 'FileFormat',
|
|
1805
1839
|
Writable => 'int8u',
|
|
@@ -1822,6 +1856,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
1822
1856
|
'3 3 2 0' => 'ARW 2.3.2', #JR (DSC-RX1RM2,ILCE-7SM2 - support for uncompressed 14-bit RAW)
|
|
1823
1857
|
'3 3 3 0' => 'ARW 2.3.3', #JR (ILCE-9)
|
|
1824
1858
|
'3 3 5 0' => 'ARW 2.3.5', #JR (DSC-HX99)
|
|
1859
|
+
'4 0 0 0' => 'ARW 4.0', # (ILCE-7SM3)
|
|
1825
1860
|
# what about cRAW images?
|
|
1826
1861
|
},
|
|
1827
1862
|
},
|
|
@@ -1915,10 +1950,13 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
1915
1950
|
376 => 'ILCE-9M2', #JR
|
|
1916
1951
|
378 => 'ILCE-6600', #IB/JR
|
|
1917
1952
|
379 => 'ILCE-6100', #IB/JR
|
|
1953
|
+
380 => 'ZV-1', #JR
|
|
1954
|
+
381 => 'ILCE-7C', #JR
|
|
1955
|
+
383 => 'ILCE-7SM3',
|
|
1918
1956
|
},
|
|
1919
1957
|
},
|
|
1920
1958
|
0xb020 => { #2
|
|
1921
|
-
Name => 'CreativeStyle',
|
|
1959
|
+
Name => 'CreativeStyle', # (called CreativeLook by the 7SM3, ref JR)
|
|
1922
1960
|
Writable => 'string',
|
|
1923
1961
|
# (all of these values have been observed, ref JR and PH)
|
|
1924
1962
|
# - this PrintConv is included to make these strings consistent with
|
|
@@ -1942,6 +1980,12 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
1942
1980
|
Light => 'Light',
|
|
1943
1981
|
Autumnleaves=> 'Autumn Leaves',
|
|
1944
1982
|
Sepia => 'Sepia',
|
|
1983
|
+
# new for the ILCE-7SM3 (ref JR)
|
|
1984
|
+
VV2 => 'Vivid 2', # (NC)
|
|
1985
|
+
FL => 'FL', # "moody finish with sharp contrast and calm coloring as well as the impressive sky and colors of the greens"
|
|
1986
|
+
IN => 'IN', # "matte textures by suppressing the contrast and saturation"
|
|
1987
|
+
SH => 'SH', # "bright, transparent, soft, and vivid mood"
|
|
1988
|
+
# (...also Custom Look 1-6, but don't konw the values)
|
|
1945
1989
|
},
|
|
1946
1990
|
},
|
|
1947
1991
|
0xb021 => { #2
|
|
@@ -6023,6 +6067,7 @@ my %pictureProfile2010 = (
|
|
|
6023
6067
|
my %isoSetting2010 = (
|
|
6024
6068
|
0 => 'Auto',
|
|
6025
6069
|
5 => 25,
|
|
6070
|
+
7 => 40,
|
|
6026
6071
|
8 => 50,
|
|
6027
6072
|
9 => 64,
|
|
6028
6073
|
10 => 80,
|
|
@@ -6051,12 +6096,17 @@ my %isoSetting2010 = (
|
|
|
6051
6096
|
33 => 16000,
|
|
6052
6097
|
34 => 20000,
|
|
6053
6098
|
35 => 25600,
|
|
6099
|
+
36 => 32000,
|
|
6100
|
+
37 => 40000,
|
|
6054
6101
|
38 => 51200,
|
|
6055
6102
|
39 => 64000,
|
|
6103
|
+
40 => 80000,
|
|
6056
6104
|
41 => 102400,
|
|
6057
6105
|
42 => 128000,
|
|
6058
6106
|
43 => 160000,
|
|
6059
6107
|
44 => 204800,
|
|
6108
|
+
45 => 256000,
|
|
6109
|
+
46 => 320000,
|
|
6060
6110
|
47 => 409600,
|
|
6061
6111
|
);
|
|
6062
6112
|
|
|
@@ -6814,7 +6864,7 @@ my %isoSetting2010 = (
|
|
|
6814
6864
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
6815
6865
|
FORMAT => 'int8u',
|
|
6816
6866
|
NOTES => q{
|
|
6817
|
-
Valid for ILCE-6100/6400/6600/7M3/7RM3/7RM4/9/9M2, DSC-RX0M2/RX10M4/RX100M6/
|
|
6867
|
+
Valid for ILCE-6100/6400/6600/7C/7M3/7RM3/7RM4/9/9M2, DSC-RX0M2/RX10M4/RX100M6/
|
|
6818
6868
|
RX100M5A/RX100M7/HX99.
|
|
6819
6869
|
},
|
|
6820
6870
|
WRITABLE => 1,
|
|
@@ -7395,7 +7445,7 @@ my %isoSetting2010 = (
|
|
|
7395
7445
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
7396
7446
|
FORMAT => 'int8u',
|
|
7397
7447
|
NOTES => q{
|
|
7398
|
-
Valid from July 2015 for ILCE-6100/6300/6400/6500/6600/7M3/7RM2/7RM3/7RM4/
|
|
7448
|
+
Valid from July 2015 for ILCE-6100/6300/6400/6500/6600/7C/7M3/7RM2/7RM3/7RM4/
|
|
7399
7449
|
7SM2/9/9M2, ILCA-99M2.
|
|
7400
7450
|
},
|
|
7401
7451
|
WRITABLE => 1,
|
|
@@ -7484,7 +7534,7 @@ my %isoSetting2010 = (
|
|
|
7484
7534
|
# March 2019: ILCE-9 with v5.0x firmware follows ILCE-6400 in many tags ...
|
|
7485
7535
|
0x0050 => {
|
|
7486
7536
|
Name => 'ShutterCount2',
|
|
7487
|
-
Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} =~ /^(ILCE-(6100|6400|6600|7RM4|9M2))/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/)',
|
|
7537
|
+
Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7RM4|9M2))/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/)',
|
|
7488
7538
|
Format => 'int32u',
|
|
7489
7539
|
RawConv => '$val & 0x00ffffff',
|
|
7490
7540
|
},
|
|
@@ -7501,13 +7551,13 @@ my %isoSetting2010 = (
|
|
|
7501
7551
|
# 0x0058, 0x0061: E-Mount: ShutterCount and dateTime
|
|
7502
7552
|
0x0058 => { # appears not valid when flash is used ... not for ILCA-99M2
|
|
7503
7553
|
Name => 'ShutterCount2',
|
|
7504
|
-
Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} !~ /^(ILCA-99M2|ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9M2))/) and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
|
|
7554
|
+
Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} !~ /^(ILCA-99M2|ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9M2))/) and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
|
|
7505
7555
|
Format => 'int32u',
|
|
7506
7556
|
RawConv => '$val & 0x00ffffff',
|
|
7507
7557
|
},
|
|
7508
7558
|
0x0061 => { # only minutes-seconds, not for ILCA-99M2, ILCE-9
|
|
7509
7559
|
Name => 'SonyTimeMinSec',
|
|
7510
|
-
Condition => '$$self{Model} !~ /^(ILCA-99M2|ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9|9M2))/',
|
|
7560
|
+
Condition => '$$self{Model} !~ /^(ILCA-99M2|ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9|9M2))/',
|
|
7511
7561
|
Format => 'undef[2]',
|
|
7512
7562
|
ValueConv => q{
|
|
7513
7563
|
my @v = unpack('C*', $val);
|
|
@@ -7516,7 +7566,7 @@ my %isoSetting2010 = (
|
|
|
7516
7566
|
},
|
|
7517
7567
|
0x006b => {
|
|
7518
7568
|
Name => 'ReleaseMode2',
|
|
7519
|
-
Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7RM4|9M2))/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
|
|
7569
|
+
Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7RM4|9M2))/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
|
|
7520
7570
|
%releaseMode2,
|
|
7521
7571
|
},
|
|
7522
7572
|
0x006d => {
|
|
@@ -7526,7 +7576,7 @@ my %isoSetting2010 = (
|
|
|
7526
7576
|
},
|
|
7527
7577
|
0x0073 => {
|
|
7528
7578
|
Name => 'ReleaseMode2',
|
|
7529
|
-
Condition => '$$self{Model} !~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9M2))/ and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
|
|
7579
|
+
Condition => '$$self{Model} !~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9M2))/ and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
|
|
7530
7580
|
%releaseMode2,
|
|
7531
7581
|
},
|
|
7532
7582
|
0x0088 => {
|
|
@@ -7605,7 +7655,7 @@ my %isoSetting2010 = (
|
|
|
7605
7655
|
#
|
|
7606
7656
|
0x019f => {
|
|
7607
7657
|
Name => 'ShutterCount3',
|
|
7608
|
-
Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9|9M2))\b/',
|
|
7658
|
+
Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9|9M2))\b/',
|
|
7609
7659
|
Format => 'int32u',
|
|
7610
7660
|
RawConv => '$val == 0 ? undef : $val',
|
|
7611
7661
|
},
|
|
@@ -7623,7 +7673,7 @@ my %isoSetting2010 = (
|
|
|
7623
7673
|
},
|
|
7624
7674
|
0x01eb => {
|
|
7625
7675
|
Name => 'APS-CSizeCapture',
|
|
7626
|
-
Condition => '$$self{Model} =~ /^ILCE-(7RM4|9M2)/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
|
|
7676
|
+
Condition => '$$self{Model} =~ /^ILCE-(7RM4|7C|9M2)/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
|
|
7627
7677
|
PrintConv => {
|
|
7628
7678
|
0 => 'Off',
|
|
7629
7679
|
1 => 'On',
|
|
@@ -7631,7 +7681,7 @@ my %isoSetting2010 = (
|
|
|
7631
7681
|
},
|
|
7632
7682
|
0x01ed => {
|
|
7633
7683
|
Name => 'LensSpecFeatures',
|
|
7634
|
-
Condition => '$$self{Model} =~ /^ILCE-(7RM4|9M2)/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
|
|
7684
|
+
Condition => '$$self{Model} =~ /^ILCE-(7RM4|7C|9M2)/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
|
|
7635
7685
|
Priority => 0,
|
|
7636
7686
|
Format => 'undef[2]',
|
|
7637
7687
|
ValueConv => 'join " ", unpack "H2H2", $val',
|
|
@@ -7727,6 +7777,107 @@ my %isoSetting2010 = (
|
|
|
7727
7777
|
},
|
|
7728
7778
|
);
|
|
7729
7779
|
|
|
7780
|
+
%Image::ExifTool::Sony::Tag9050c = ( #JR
|
|
7781
|
+
PROCESS_PROC => \&ProcessEnciphered,
|
|
7782
|
+
WRITE_PROC => \&WriteEnciphered,
|
|
7783
|
+
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
7784
|
+
FORMAT => 'int8u',
|
|
7785
|
+
NOTES => q{
|
|
7786
|
+
Valid from July 2020 for ILCE-7SM3.
|
|
7787
|
+
},
|
|
7788
|
+
WRITABLE => 1,
|
|
7789
|
+
FIRST_ENTRY => 0,
|
|
7790
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
|
7791
|
+
DATAMEMBER => [ 0x0039 ],
|
|
7792
|
+
0x0026 => {
|
|
7793
|
+
Name => 'Shutter',
|
|
7794
|
+
Format => 'int16u[3]',
|
|
7795
|
+
PrintConv => {
|
|
7796
|
+
'0 0 0' => 'Silent / Electronic (0 0 0)',
|
|
7797
|
+
OTHER => sub {
|
|
7798
|
+
my ($val, $inv) = @_;
|
|
7799
|
+
return $inv ? ($val=~/\((.*?)\)/ ? $1 : undef) : "Mechanical ($val)";
|
|
7800
|
+
},
|
|
7801
|
+
},
|
|
7802
|
+
},
|
|
7803
|
+
0x0039 => {
|
|
7804
|
+
Name => 'FlashStatus',
|
|
7805
|
+
RawConv => '$$self{FlashFired} = $val',
|
|
7806
|
+
PrintConv => {
|
|
7807
|
+
0 => 'No Flash present',
|
|
7808
|
+
2 => 'Flash Inhibited', # seen for ILCE-7/7R continuous, panorama, HDR mode
|
|
7809
|
+
64 => 'Built-in Flash present',
|
|
7810
|
+
65 => 'Built-in Flash Fired',
|
|
7811
|
+
66 => 'Built-in Flash Inhibited', # seen for panorama, HDR, burst mode
|
|
7812
|
+
128 => 'External Flash present', # seen for NEX-5N/5T
|
|
7813
|
+
129 => 'External Flash Fired', # seen for SLT-A99V, ILCE-7R, NEX-5N/5R
|
|
7814
|
+
},
|
|
7815
|
+
},
|
|
7816
|
+
0x003a => {
|
|
7817
|
+
Name => 'ShutterCount',
|
|
7818
|
+
# or "ShutterCount"? : number of shutter actuations, does not increase during Silent Shooting,
|
|
7819
|
+
# at least for ILCE-7RM2
|
|
7820
|
+
Format => 'int32u',
|
|
7821
|
+
Notes => 'total number of image exposures made by the camera',
|
|
7822
|
+
RawConv => '$val & 0x00ffffff',
|
|
7823
|
+
PrintConv => 'sprintf("%6d",$val)',
|
|
7824
|
+
},
|
|
7825
|
+
0x0046 => { # appr. same value as Exif ExposureTime, but longer in HDR-modes
|
|
7826
|
+
Name => 'SonyExposureTime',
|
|
7827
|
+
Format => 'int16u',
|
|
7828
|
+
ValueConv => '$val ? 2 ** (16 - $val/256) : 0',
|
|
7829
|
+
ValueConvInv => '$val ? int((16 - log($val) / log(2)) * 256 + 0.5) : 0',
|
|
7830
|
+
PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"',
|
|
7831
|
+
PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)',
|
|
7832
|
+
},
|
|
7833
|
+
0x0048 => {
|
|
7834
|
+
Name => 'SonyFNumber',
|
|
7835
|
+
Format => 'int16u',
|
|
7836
|
+
ValueConv => '2 ** (($val/256 - 16) / 2)',
|
|
7837
|
+
ValueConvInv => '(log($val)*2/log(2)+16)*256',
|
|
7838
|
+
PrintConv => 'sprintf("%.1f",$val)',
|
|
7839
|
+
PrintConvInv => '$val',
|
|
7840
|
+
},
|
|
7841
|
+
0x004b => {
|
|
7842
|
+
Name => 'ReleaseMode2',
|
|
7843
|
+
%releaseMode2,
|
|
7844
|
+
},
|
|
7845
|
+
0x0050 => {
|
|
7846
|
+
Name => 'ShutterCount2',
|
|
7847
|
+
Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} =~ /^(ILCE-7SM3)/)',
|
|
7848
|
+
Format => 'int32u',
|
|
7849
|
+
RawConv => '$val & 0x00ffffff',
|
|
7850
|
+
},
|
|
7851
|
+
0x0066 => { # appr. same value as Exif ExposureTime, but not valid in HDR-modes
|
|
7852
|
+
Name => 'SonyExposureTime',
|
|
7853
|
+
Condition => '$$self{Model} =~ /^(ILCE-7SM3)/',
|
|
7854
|
+
Format => 'int16u',
|
|
7855
|
+
ValueConv => '$val ? 2 ** (16 - $val/256) : 0',
|
|
7856
|
+
ValueConvInv => '$val ? int((16 - log($val) / log(2)) * 256 + 0.5) : 0',
|
|
7857
|
+
PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"',
|
|
7858
|
+
PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)',
|
|
7859
|
+
},
|
|
7860
|
+
0x0068 => { # appr. same value as Exif ExposureTime, but not valid in HDR-modes
|
|
7861
|
+
Name => 'SonyFNumber',
|
|
7862
|
+
Condition => '$$self{Model} =~ /^(ILCE-7SM3)/',
|
|
7863
|
+
Format => 'int16u',
|
|
7864
|
+
ValueConv => '2 ** (($val/256 - 16) / 2)',
|
|
7865
|
+
ValueConvInv => '(log($val)*2/log(2)+16)*256',
|
|
7866
|
+
PrintConv => 'sprintf("%.1f",$val)',
|
|
7867
|
+
PrintConvInv => '$val',
|
|
7868
|
+
},
|
|
7869
|
+
0x006b => {
|
|
7870
|
+
Name => 'ReleaseMode2',
|
|
7871
|
+
Condition => '$$self{Model} =~ /^(ILCE-7SM3)/',
|
|
7872
|
+
%releaseMode2,
|
|
7873
|
+
},
|
|
7874
|
+
0x0088 => {
|
|
7875
|
+
Name => 'InternalSerialNumber', #(NC)
|
|
7876
|
+
Format => 'int8u[6]',
|
|
7877
|
+
PrintConv => 'unpack "H*", pack "C*", split " ", $val',
|
|
7878
|
+
},
|
|
7879
|
+
);
|
|
7880
|
+
|
|
7730
7881
|
%Image::ExifTool::Sony::Tag9400a = ( #JR
|
|
7731
7882
|
PROCESS_PROC => \&ProcessEnciphered,
|
|
7732
7883
|
WRITE_PROC => \&WriteEnciphered,
|
|
@@ -7896,20 +8047,18 @@ my %isoSetting2010 = (
|
|
|
7896
8047
|
NOTES => q{
|
|
7897
8048
|
Valid for DSC-HX60V/HX80/HX90V/HX99/HX350/HX400V/QX30/RX0/RX1RM2/RX10/
|
|
7898
8049
|
RX10M2/RX10M3/RX10M4/RX100M3/RX100M4/RX100M5/RX100M5A/RX100M6/RX100M7/WX220/
|
|
7899
|
-
WX350/WX500, ILCE-7/7R/7S/7M2/7M3/7RM2/7RM3/7RM4/7SM2/9/9M2/5000/
|
|
7900
|
-
6100/6300/6400/6500/6600/QX1, ILCA-68/77M2/99M2.
|
|
8050
|
+
WX350/WX500, ILCE-7/7C/7R/7S/7M2/7M3/7RM2/7RM3/7RM4/7SM2/7SM3/9/9M2/5000/
|
|
8051
|
+
5100/6000/6100/6300/6400/6500/6600/QX1, ILCA-68/77M2/99M2.
|
|
7901
8052
|
},
|
|
7902
8053
|
FIRST_ENTRY => 0,
|
|
7903
8054
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
|
7904
8055
|
0x0009 => { %releaseMode2 },
|
|
7905
|
-
0x000a =>
|
|
7906
|
-
Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9|9M2)|DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX99|RX0M2))\b/',
|
|
7907
|
-
Name => 'ShotNumberSincePowerUp',
|
|
7908
|
-
Format => 'int8u',
|
|
7909
|
-
},{
|
|
8056
|
+
0x000a => {
|
|
7910
8057
|
Name => 'ShotNumberSincePowerUp',
|
|
8058
|
+
Condition => '$$self{Model} =~ /^(ILCA-(68|77M2|99M2)|ILCE-(5000|5100|6000|6300|6500|7|7M2|7R|7RM2|7S|7SM2|QX1)|DSC-(HX350|HX400V|HX60V|HX80|HX90|HX90V|QX30|RX0|RX1RM2|RX10|RX10M2|RX10M3|RX100M3|RX100M4|RX100M5|WX220|WX350|WX500))\b/',
|
|
8059
|
+
Notes => 'valid only for some models',
|
|
7911
8060
|
Format => 'int32u',
|
|
7912
|
-
}
|
|
8061
|
+
},
|
|
7913
8062
|
0x0012 => { %sequenceImageNumber },
|
|
7914
8063
|
0x0016 => {
|
|
7915
8064
|
Name => 'SequenceLength',
|
|
@@ -7955,6 +8104,7 @@ my %isoSetting2010 = (
|
|
|
7955
8104
|
},
|
|
7956
8105
|
0x002a => {
|
|
7957
8106
|
Name => 'Quality2',
|
|
8107
|
+
Condition => '$$self{Model} !~ /^(ILCE-7SM3)\b/',
|
|
7958
8108
|
PrintConv => {
|
|
7959
8109
|
0 => 'JPEG',
|
|
7960
8110
|
1 => 'RAW',
|
|
@@ -7964,11 +8114,13 @@ my %isoSetting2010 = (
|
|
|
7964
8114
|
},
|
|
7965
8115
|
0x0047 => {
|
|
7966
8116
|
Name => 'SonyImageHeight',
|
|
8117
|
+
Condition => '$$self{Model} !~ /^(ILCE-7SM3)\b/',
|
|
7967
8118
|
Format => 'int16u',
|
|
7968
8119
|
PrintConv => '$val > 0 ? 8*$val : "n.a."',
|
|
7969
8120
|
},
|
|
7970
8121
|
0x0053 => {
|
|
7971
8122
|
Name => 'ModelReleaseYear',
|
|
8123
|
+
Condition => '$$self{Model} !~ /^(ILCE-7SM3)\b/',
|
|
7972
8124
|
Format => 'int8u',
|
|
7973
8125
|
PrintConv => 'sprintf("20%.2d", $val)',
|
|
7974
8126
|
},
|
|
@@ -7983,11 +8135,12 @@ my %isoSetting2010 = (
|
|
|
7983
8135
|
FIRST_ENTRY => 0,
|
|
7984
8136
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
|
7985
8137
|
DATAMEMBER => [ 0 ],
|
|
7986
|
-
IS_SUBDIR => [ 0x0498, 0x04a2, 0x059d, 0x0634, 0x0636, 0x064c, 0x0653, 0x0678, 0x06b8, 0x06de, 0x06e7 ],
|
|
8138
|
+
IS_SUBDIR => [ 0x0498, 0x04a1, 0x04a2, 0x059d, 0x0634, 0x0636, 0x064c, 0x0653, 0x0678, 0x06b8, 0x06de, 0x06e7 ],
|
|
7987
8139
|
0x0000 => { Name => 'Ver9401', Hidden => 1, RawConv => '$$self{Ver9401} = $val; $$self{OPTIONS}{Unknown}<2 ? undef : $val' },
|
|
7988
8140
|
|
|
7989
8141
|
0x0498 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 148', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
|
7990
|
-
|
|
8142
|
+
0x04a1 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 160', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
|
8143
|
+
0x04a2 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(152|154|155)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
|
7991
8144
|
0x059d => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(144|146)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
|
7992
8145
|
0x0634 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 68', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
|
7993
8146
|
0x0636 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(73|74)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
|
@@ -8058,6 +8211,7 @@ my %isoSetting2010 = (
|
|
|
8058
8211
|
14 => 'Tracking',
|
|
8059
8212
|
15 => 'Face Tracking',
|
|
8060
8213
|
20 => 'Animal Eye Tracking',
|
|
8214
|
+
# 21 => '???', # (ILCE-7SM3)
|
|
8061
8215
|
255 => 'Manual',
|
|
8062
8216
|
},
|
|
8063
8217
|
},
|
|
@@ -8329,7 +8483,7 @@ my %isoSetting2010 = (
|
|
|
8329
8483
|
# also often deviating results for Sony FE 90mm F2.8 Macro G OSS ...
|
|
8330
8484
|
Name => 'SonyFNumber',
|
|
8331
8485
|
Format => 'int16u',
|
|
8332
|
-
Condition => '$$self{Model} !~ /^DSC
|
|
8486
|
+
Condition => '$$self{Model} !~ /^(DSC-|ZV-)/',
|
|
8333
8487
|
ValueConv => '2 ** (($val/256 - 16) / 2)',
|
|
8334
8488
|
ValueConvInv => '(log($val)*2/log(2)+16)*256',
|
|
8335
8489
|
PrintConv => 'sprintf("%.1f",$val)',
|
|
@@ -8445,7 +8599,7 @@ my %isoSetting2010 = (
|
|
|
8445
8599
|
},
|
|
8446
8600
|
0x0342 => {
|
|
8447
8601
|
Name => 'LensZoomPosition',
|
|
8448
|
-
Condition => '$$self{Model} !~ /^(ILCA-|ILCE-(7RM2|7M3|7RM3|7RM4|7SM2|6100|6300|6400|6500|6600|9|9M2)|DSC-(HX80|HX90V|HX99|RX0|RX10M2|RX10M3|RX10M4|RX100M4|RX100M5|RX100M5A|RX100M6|RX100M7|WX500))/',
|
|
8602
|
+
Condition => '$$self{Model} !~ /^(ILCA-|ILCE-(7RM2|7M3|7RM3|7RM4|7SM2|6100|6300|6400|6500|6600|7C|9|9M2)|DSC-(HX80|HX90V|HX99|RX0|RX10M2|RX10M3|RX10M4|RX100M4|RX100M5|RX100M5A|RX100M6|RX100M7|WX500)|ZV-)/',
|
|
8449
8603
|
Format => 'int16u',
|
|
8450
8604
|
PrintConv => 'sprintf("%.0f%%",$val/10.24)',
|
|
8451
8605
|
PrintConvInv => '$val=~s/ ?%$//; $val * 10.24',
|
|
@@ -8457,7 +8611,7 @@ my %isoSetting2010 = (
|
|
|
8457
8611
|
},
|
|
8458
8612
|
0x034e => {
|
|
8459
8613
|
Name => 'LensZoomPosition',
|
|
8460
|
-
Condition => '$$self{Model} =~ /^(DSC-(RX100M5|RX100M5A|RX100M6|RX100M7|RX10M4|HX99)|ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9M2))/',
|
|
8614
|
+
Condition => '$$self{Model} =~ /^(DSC-(RX100M5|RX100M5A|RX100M6|RX100M7|RX10M4|HX99)|ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9M2))/',
|
|
8461
8615
|
Format => 'int16u',
|
|
8462
8616
|
PrintConv => 'sprintf("%.0f%%",$val/10.24)',
|
|
8463
8617
|
PrintConvInv => '$val=~s/ ?%$//; $val * 10.24',
|
|
@@ -8469,7 +8623,7 @@ my %isoSetting2010 = (
|
|
|
8469
8623
|
},
|
|
8470
8624
|
0x035c => {
|
|
8471
8625
|
Name => 'VignettingCorrParams',
|
|
8472
|
-
Condition => '$$self{Model} =~ /^(ILCA-99M2|ILCE-(6100|6400|6500|6600|7M3|7RM3|7RM4|9|9M2))/',
|
|
8626
|
+
Condition => '$$self{Model} =~ /^(ILCA-99M2|ILCE-(6100|6400|6500|6600|7C|7M3|7RM3|7RM4|9|9M2))/',
|
|
8473
8627
|
Format => 'int16s[16]',
|
|
8474
8628
|
},
|
|
8475
8629
|
0x035a => {
|
|
@@ -8506,7 +8660,7 @@ my %isoSetting2010 = (
|
|
|
8506
8660
|
},
|
|
8507
8661
|
0x03b8 => {
|
|
8508
8662
|
Name => 'ChromaticAberrationCorrParams',
|
|
8509
|
-
Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9|9M2))/',
|
|
8663
|
+
Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9|9M2))/',
|
|
8510
8664
|
Format => 'int16s[32]',
|
|
8511
8665
|
},
|
|
8512
8666
|
);
|
|
@@ -8741,7 +8895,8 @@ my %isoSetting2010 = (
|
|
|
8741
8895
|
# 1 1 3 0 for ILCA-68/77M2/99M2
|
|
8742
8896
|
# 0 0 0 0 for NEX and ILCE-3000/3500, also seen for SLT/ILCA with non-AF lens
|
|
8743
8897
|
# 1 0 0 0 for ILCE-5000/5100/6000/7/7M2/7R/7S/QX1
|
|
8744
|
-
# 6 0 0 0 for ILCE-6100/6300/6400/6500/6600/7M3/7RM2/7RM3/7RM4/7SM2/9/9M2
|
|
8898
|
+
# 6 0 0 0 for ILCE-6100/6300/6400/6500/6600/7C/7M3/7RM2/7RM3/7RM4/7SM2/9/9M2
|
|
8899
|
+
# 9 . . . for ILCE-7SM3
|
|
8745
8900
|
# 0 2 0 0 for NEX/ILCE with LA-EA2/EA4 Phase-AF adapter
|
|
8746
8901
|
# 2 0 0 0 seen for a few NEX-5N images
|
|
8747
8902
|
# 2 2 0 0 seen for a few NEX-5N/7 images with LA-EA2 adapter
|
|
@@ -9245,6 +9400,146 @@ my %isoSetting2010 = (
|
|
|
9245
9400
|
0xbc => { Name => 'AFStatus_94_E6_Center_F2-8', %Image::ExifTool::Minolta::afStatusInfo },
|
|
9246
9401
|
);
|
|
9247
9402
|
|
|
9403
|
+
# tag 0x9416 decoding (ref JR)
|
|
9404
|
+
%Image::ExifTool::Sony::Tag9416 = (
|
|
9405
|
+
PROCESS_PROC => \&ProcessEnciphered,
|
|
9406
|
+
WRITE_PROC => \&WriteEnciphered,
|
|
9407
|
+
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
9408
|
+
FORMAT => 'int8u',
|
|
9409
|
+
NOTES => 'Valid for the ILCE-7SM3.',
|
|
9410
|
+
FIRST_ENTRY => 0,
|
|
9411
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
|
9412
|
+
0x0000 => { Name => 'Tag9416_0000', PrintConv => 'sprintf("%3d",$val)', RawConv => '$$self{TagVersion} = $val' },
|
|
9413
|
+
0x0004 => {
|
|
9414
|
+
Name => 'SonyISO',
|
|
9415
|
+
Format => 'int16u',
|
|
9416
|
+
ValueConv => '100 * 2**(16 - $val/256)',
|
|
9417
|
+
ValueConvInv => '256 * (16 - log($val/100)/log(2))',
|
|
9418
|
+
PrintConv => 'sprintf("%.0f",$val)',
|
|
9419
|
+
PrintConvInv => '$val',
|
|
9420
|
+
},
|
|
9421
|
+
0x0006 => { %gain2010 },
|
|
9422
|
+
0x000a => { # appr. same value as Exif ExposureTime, but shorter in HDR-modes
|
|
9423
|
+
Name => 'SonyExposureTime2',
|
|
9424
|
+
Format => 'int16u',
|
|
9425
|
+
ValueConv => '$val ? 2 ** (16 - $val/256) : 0',
|
|
9426
|
+
ValueConvInv => '$val ? int((16 - log($val) / log(2)) * 256 + 0.5) : 0',
|
|
9427
|
+
PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"',
|
|
9428
|
+
PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)',
|
|
9429
|
+
},
|
|
9430
|
+
0x000c => {
|
|
9431
|
+
Name => 'ExposureTime',
|
|
9432
|
+
Format => 'rational32u',
|
|
9433
|
+
PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', # (Bulb NC)
|
|
9434
|
+
PrintConvInv => 'lc($val) eq "bulb" ? 0 : $val',
|
|
9435
|
+
},
|
|
9436
|
+
0x0010 => { # but sometimes deviating results
|
|
9437
|
+
Name => 'SonyFNumber2',
|
|
9438
|
+
Format => 'int16u',
|
|
9439
|
+
ValueConv => '2 ** (($val/256 - 16) / 2)',
|
|
9440
|
+
ValueConvInv => '(log($val)*2/log(2)+16)*256',
|
|
9441
|
+
PrintConv => 'sprintf("%.1f",$val)',
|
|
9442
|
+
PrintConvInv => '$val',
|
|
9443
|
+
},
|
|
9444
|
+
0x0012 => {
|
|
9445
|
+
Name => 'SonyMaxApertureValue', # (at current focal length)
|
|
9446
|
+
Format => 'int16u',
|
|
9447
|
+
ValueConv => '2 ** (($val/256 - 16) / 2)',
|
|
9448
|
+
ValueConvInv => '(log($val)*2/log(2)+16)*256',
|
|
9449
|
+
PrintConv => 'sprintf("%.1f",$val)',
|
|
9450
|
+
PrintConvInv => '$val',
|
|
9451
|
+
},
|
|
9452
|
+
0x001d => { %sequenceImageNumber },
|
|
9453
|
+
0x0035 => {
|
|
9454
|
+
Name => 'ExposureProgram',
|
|
9455
|
+
Priority => 0,
|
|
9456
|
+
SeparateTable => 'ExposureProgram3',
|
|
9457
|
+
PrintConv => \%sonyExposureProgram3,
|
|
9458
|
+
},
|
|
9459
|
+
0x0048 => {
|
|
9460
|
+
Name => 'LensMount',
|
|
9461
|
+
Condition => '$$self{Model} !~ /^(DSC-)/',
|
|
9462
|
+
PrintConv => {
|
|
9463
|
+
0 => 'Unknown',
|
|
9464
|
+
1 => 'A-mount',
|
|
9465
|
+
2 => 'E-mount',
|
|
9466
|
+
3 => 'A-mount (3)',
|
|
9467
|
+
},
|
|
9468
|
+
},
|
|
9469
|
+
0x0049 => {
|
|
9470
|
+
Name => 'LensFormat',
|
|
9471
|
+
Condition => '$$self{Model} !~ /^(DSC-)/',
|
|
9472
|
+
PrintConv => {
|
|
9473
|
+
0 => 'Unknown',
|
|
9474
|
+
1 => 'APS-C',
|
|
9475
|
+
2 => 'Full-frame',
|
|
9476
|
+
},
|
|
9477
|
+
},
|
|
9478
|
+
0x004a => {
|
|
9479
|
+
Name => 'LensMount',
|
|
9480
|
+
DataMember => 'LensMount',
|
|
9481
|
+
RawConv => '$$self{LensMount} = $val; $$self{Model} =~ /^(DSC-)/ ? undef : $val',
|
|
9482
|
+
PrintConv => {
|
|
9483
|
+
0 => 'Unknown',
|
|
9484
|
+
1 => 'A-mount',
|
|
9485
|
+
2 => 'E-mount',
|
|
9486
|
+
},
|
|
9487
|
+
},
|
|
9488
|
+
0x004b => {
|
|
9489
|
+
Name => 'LensType2',
|
|
9490
|
+
Condition => '$$self{LensMount} == 2',
|
|
9491
|
+
Format => 'int16u',
|
|
9492
|
+
SeparateTable => 'LensType2',
|
|
9493
|
+
PrintConv => \%sonyLensTypes2,
|
|
9494
|
+
},
|
|
9495
|
+
0x004d => {
|
|
9496
|
+
Name => 'LensType',
|
|
9497
|
+
Condition => '$$self{LensMount} == 1',
|
|
9498
|
+
Priority => 0, #PH (just to be safe)
|
|
9499
|
+
Format => 'int16u', #PH
|
|
9500
|
+
SeparateTable => 1,
|
|
9501
|
+
ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)',
|
|
9502
|
+
PrintConv => \%sonyLensTypes,
|
|
9503
|
+
},
|
|
9504
|
+
0x004f => {
|
|
9505
|
+
Name => 'DistortionCorrParams',
|
|
9506
|
+
Format => 'int16s[16]',
|
|
9507
|
+
},
|
|
9508
|
+
0x0071 => {
|
|
9509
|
+
Name => 'FocalLength',
|
|
9510
|
+
Format => 'int16u',
|
|
9511
|
+
ValueConv => '$val / 10',
|
|
9512
|
+
ValueConvInv => '$val * 10',
|
|
9513
|
+
PrintConv => 'sprintf("%.1f mm",$val)',
|
|
9514
|
+
PrintConvInv => '$val =~ s/ ?mm//; $val',
|
|
9515
|
+
},
|
|
9516
|
+
0x0073 => {
|
|
9517
|
+
Name => 'MinFocalLength',
|
|
9518
|
+
Format => 'int16u',
|
|
9519
|
+
ValueConv => '$val / 10',
|
|
9520
|
+
ValueConvInv => '$val * 10',
|
|
9521
|
+
PrintConv => 'sprintf("%.1f mm",$val)',
|
|
9522
|
+
PrintConvInv => '$val =~ s/ ?mm//; $val',
|
|
9523
|
+
},
|
|
9524
|
+
0x0075 => { # may give 0 for fixed focal length lenses
|
|
9525
|
+
Name => 'MaxFocalLength',
|
|
9526
|
+
Format => 'int16u',
|
|
9527
|
+
RawConv => '$val || undef',
|
|
9528
|
+
ValueConv => '$val / 10',
|
|
9529
|
+
ValueConvInv => '$val * 10',
|
|
9530
|
+
PrintConv => 'sprintf("%.1f mm",$val)',
|
|
9531
|
+
PrintConvInv => '$val =~ s/ ?mm//; $val',
|
|
9532
|
+
},
|
|
9533
|
+
0x088f => {
|
|
9534
|
+
Name => 'VignettingCorrParams',
|
|
9535
|
+
Format => 'int16s[16]',
|
|
9536
|
+
},
|
|
9537
|
+
0x0914 => {
|
|
9538
|
+
Name => 'ChromaticAberrationCorrParams',
|
|
9539
|
+
Format => 'int16s[32]',
|
|
9540
|
+
},
|
|
9541
|
+
);
|
|
9542
|
+
|
|
9248
9543
|
%Image::ExifTool::Sony::FaceInfo1 = (
|
|
9249
9544
|
%binaryDataAttrs,
|
|
9250
9545
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
|
@@ -9742,12 +10037,88 @@ my %isoSetting2010 = (
|
|
|
9742
10037
|
# 0x8100 - 16 bytes starting with 0x060e2b340401
|
|
9743
10038
|
0x8100 => { Name => 'Sony_rtmd_0x8100', Format => 'int8u', %hidUnk },
|
|
9744
10039
|
0x8101 => { Name => 'Sony_rtmd_0x8101', Format => 'int8u', %hidUnk }, # seen: 0,1
|
|
10040
|
+
0x8106 => { Name => 'Sony_rtmd_0x8106', Format => 'int32u', %hidUnk }, # seen: "25 1"
|
|
9745
10041
|
0x8109 => { Name => 'Sony_rtmd_0x8109', Format => 'int32u', %hidUnk }, # seen: "1 50"
|
|
9746
10042
|
0x810a => { Name => 'Sony_rtmd_0x810a', Format => 'int16u', %hidUnk }, # seen: 0
|
|
9747
10043
|
0x810b => { Name => 'Sony_rtmd_0x810b', Format => 'int16u', %hidUnk }, # seen: 100
|
|
9748
10044
|
0x810c => { Name => 'Sony_rtmd_0x810c', Format => 'int16u', %hidUnk }, # seen: 100
|
|
9749
10045
|
0x810d => { Name => 'Sony_rtmd_0x810d', Format => 'int8u', %hidUnk }, # seen: 1
|
|
10046
|
+
0x8115 => { Name => 'Sony_rtmd_0x8115', Format => 'int16u', %hidUnk }, # seen: 100
|
|
9750
10047
|
# 0x8300 - container for other tags in this format
|
|
10048
|
+
0x8500 => {
|
|
10049
|
+
Name => 'GPSVersionID',
|
|
10050
|
+
Groups => { 2 => 'Location' },
|
|
10051
|
+
Format => 'int8u',
|
|
10052
|
+
PrintConv => '$val =~ tr/ /./; $val',
|
|
10053
|
+
},
|
|
10054
|
+
0x8501 => {
|
|
10055
|
+
Name => 'GPSLatitudeRef',
|
|
10056
|
+
Groups => { 2 => 'Location' },
|
|
10057
|
+
Format => 'string',
|
|
10058
|
+
PrintConv => {
|
|
10059
|
+
N => 'North',
|
|
10060
|
+
S => 'South',
|
|
10061
|
+
},
|
|
10062
|
+
},
|
|
10063
|
+
0x8502 => {
|
|
10064
|
+
Name => 'GPSLatitude',
|
|
10065
|
+
Groups => { 2 => 'Location' },
|
|
10066
|
+
Format => 'rational64u',
|
|
10067
|
+
ValueConv => 'require Image::ExifTool::GPS;Image::ExifTool::GPS::ToDegrees($val)',
|
|
10068
|
+
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)',
|
|
10069
|
+
},
|
|
10070
|
+
0x8503 => {
|
|
10071
|
+
Name => 'GPSLongitudeRef',
|
|
10072
|
+
Groups => { 2 => 'Location' },
|
|
10073
|
+
Format => 'string',
|
|
10074
|
+
PrintConv => {
|
|
10075
|
+
E => 'East',
|
|
10076
|
+
W => 'West',
|
|
10077
|
+
},
|
|
10078
|
+
},
|
|
10079
|
+
0x8504 => {
|
|
10080
|
+
Name => 'GPSLongitude',
|
|
10081
|
+
Groups => { 2 => 'Location' },
|
|
10082
|
+
Format => 'rational64u',
|
|
10083
|
+
ValueConv => 'require Image::ExifTool::GPS;Image::ExifTool::GPS::ToDegrees($val)',
|
|
10084
|
+
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)',
|
|
10085
|
+
},
|
|
10086
|
+
0x8507 => {
|
|
10087
|
+
Name => 'GPSTimeStamp',
|
|
10088
|
+
Groups => { 2 => 'Time' },
|
|
10089
|
+
Format => 'rational64u',
|
|
10090
|
+
ValueConv => 'require Image::ExifTool::GPS;Image::ExifTool::GPS::ConvertTimeStamp($val)',
|
|
10091
|
+
PrintConv => 'Image::ExifTool::GPS::PrintTimeStamp($val)',
|
|
10092
|
+
},
|
|
10093
|
+
0x8509 => {
|
|
10094
|
+
Name => 'GPSStatus',
|
|
10095
|
+
Groups => { 2 => 'Location' },
|
|
10096
|
+
Format => 'string',
|
|
10097
|
+
PrintConv => {
|
|
10098
|
+
A => 'Measurement Active',
|
|
10099
|
+
V => 'Measurement Void',
|
|
10100
|
+
},
|
|
10101
|
+
},
|
|
10102
|
+
0x850a => {
|
|
10103
|
+
Name => 'GPSMeasureMode',
|
|
10104
|
+
Groups => { 2 => 'Location' },
|
|
10105
|
+
Format => 'string',
|
|
10106
|
+
PrintConv => {
|
|
10107
|
+
2 => '2-Dimensional Measurement',
|
|
10108
|
+
3 => '3-Dimensional Measurement',
|
|
10109
|
+
},
|
|
10110
|
+
},
|
|
10111
|
+
0x8512 => {
|
|
10112
|
+
Name => 'GPSMapDatum',
|
|
10113
|
+
Groups => { 2 => 'Location' },
|
|
10114
|
+
Format => 'string',
|
|
10115
|
+
},
|
|
10116
|
+
0x851d => {
|
|
10117
|
+
Name => 'GPSDateStamp',
|
|
10118
|
+
Groups => { 2 => 'Time' },
|
|
10119
|
+
Format => 'string',
|
|
10120
|
+
ValueConv => 'Image::ExifTool::Exif::ExifDate($val)',
|
|
10121
|
+
},
|
|
9751
10122
|
0xe000 => { Name => 'Sony_rtmd_0xe000', Format => 'int8u', %hidUnk }, # (16 bytes)
|
|
9752
10123
|
0xe300 => { Name => 'Sony_rtmd_0xe300', Format => 'int8u', %hidUnk }, # seen: 0,1
|
|
9753
10124
|
0xe301 => { Name => 'Sony_rtmd_0xe301', Format => 'int32u', %hidUnk }, # seen: 100
|
|
@@ -9760,6 +10131,8 @@ my %isoSetting2010 = (
|
|
|
9760
10131
|
ValueConv => 'my @a=unpack("x1H4H2H2H2H2H2",$val); "$a[0]:$a[1]:$a[2] $a[3]:$a[4]:$a[5]"',
|
|
9761
10132
|
PrintConv => '$self->ConvertDateTime($val)',
|
|
9762
10133
|
},
|
|
10134
|
+
# f010 - 2048 bytes
|
|
10135
|
+
# f020 - 543 bytes
|
|
9763
10136
|
);
|
|
9764
10137
|
|
|
9765
10138
|
# Composite Sony tags
|
|
@@ -9794,6 +10167,17 @@ my %isoSetting2010 = (
|
|
|
9794
10167
|
},
|
|
9795
10168
|
PrintConv => '$val eq "inf" ? $val : sprintf("%.2f m",$val)',
|
|
9796
10169
|
},
|
|
10170
|
+
GPSDateTime => {
|
|
10171
|
+
Description => 'GPS Date/Time',
|
|
10172
|
+
Groups => { 2 => 'Time' },
|
|
10173
|
+
SubDoc => 1, # generate for all sub-documents
|
|
10174
|
+
Require => {
|
|
10175
|
+
0 => 'Sony:GPSDateStamp',
|
|
10176
|
+
1 => 'Sony:GPSTimeStamp',
|
|
10177
|
+
},
|
|
10178
|
+
ValueConv => '"$val[0] $val[1]Z"',
|
|
10179
|
+
PrintConv => '$self->ConvertDateTime($val)',
|
|
10180
|
+
},
|
|
9797
10181
|
);
|
|
9798
10182
|
|
|
9799
10183
|
# add our composite tags
|