exiftool_vendored 11.99.0 → 12.11.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of exiftool_vendored might be problematic. Click here for more details.
- 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
|