exiftool_vendored 11.99.0 → 12.06.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 +119 -2
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +32 -32
- data/bin/exiftool +55 -50
- data/bin/lib/Image/ExifTool.pm +155 -109
- data/bin/lib/Image/ExifTool.pod +103 -77
- 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 +11 -6
- data/bin/lib/Image/ExifTool/Canon.pm +2 -1
- 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 +16 -3
- 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 +5 -0
- data/bin/lib/Image/ExifTool/GeoTiff.pm +2 -0
- data/bin/lib/Image/ExifTool/GoPro.pm +10 -1
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/ID3.pm +86 -12
- 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/MacOS.pm +1 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +3 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +134 -15
- data/bin/lib/Image/ExifTool/Olympus.pm +34 -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 +147 -13
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +33 -0
- data/bin/lib/Image/ExifTool/Parrot.pm +2 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +2 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +2 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +204 -27
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +355 -19
- data/bin/lib/Image/ExifTool/README +20 -19
- 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 +376 -11
- data/bin/lib/Image/ExifTool/TagLookup.pm +1949 -1872
- data/bin/lib/Image/ExifTool/TagNames.pod +329 -53
- 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 +23 -15
- data/bin/lib/Image/ExifTool/Writer.pl +44 -21
- data/bin/lib/Image/ExifTool/XMP.pm +41 -4
- data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
- data/bin/lib/Image/ExifTool/ZISRAW.pm +123 -0
- data/bin/perl-Image-ExifTool.spec +31 -31
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +4 -3
@@ -763,25 +763,26 @@ numerical, and generated automatically otherwise.
|
|
763
763
|
conditionally deleted.
|
764
764
|
|
765
765
|
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
|
766
|
+
is set to zero), and for EXIF and QuickTime tables gives
|
767
|
+
format for writing. Writable may be set to 1 for MakerNotes
|
768
|
+
information because the existing format is always used,
|
769
|
+
however providing a format is desirable because it is used in
|
770
|
+
validating the value. Set to 2 for tag to show "yes" in the
|
771
|
+
Writable column of the tag name documentation even when there
|
772
|
+
is no WRITE_PROC defined (eg. if it is written via an Extra
|
773
|
+
tag). For EXIF and QuickTime tables, the Writable flag may be
|
774
|
+
different than the Format flag, in which case Format is used
|
775
|
+
for converting the binary value and Writable specifies the
|
776
|
+
format code written to the EXIF IFD. For SubDirectories in
|
777
|
+
EXIF information, this flag is only defined if the
|
778
|
+
SubDirectory is writable as a block, or if the SubDirectory
|
779
|
+
can not be edited (in which case Writable is set to 0). If
|
780
|
+
non-zero, the SubDirectory is also extracted as a block, so
|
781
|
+
the Binary and Protected flags should usually set as well.
|
782
|
+
There is currently no way to specify a write format for a
|
783
|
+
SubDirectory that is not writable as a block (the default is
|
784
|
+
'int32u' for IFD-type SubDirectories, and 'undef' for all
|
785
|
+
others).
|
785
786
|
|
786
787
|
WriteAlso : Used for writable tag to specify other tags to write when this
|
787
788
|
tag is written. The value is a hash reference. The hash keys
|
@@ -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.28';
|
38
38
|
|
39
39
|
sub ProcessSRF($$$);
|
40
40
|
sub ProcessSR2($$$);
|
@@ -143,6 +143,7 @@ sub PrintInvLensSpec($;$$);
|
|
143
143
|
32854 => 'Sony E 70-350mm F4.5-6.3 G OSS', #IB/JR
|
144
144
|
32858 => 'Sony FE 35mm F1.8', #JR/IB
|
145
145
|
32859 => 'Sony FE 20mm F1.8 G', #IB/JR
|
146
|
+
32860 => 'Sony FE 12-24mm F2.8 GM', #JR/IB
|
146
147
|
|
147
148
|
# (comment this out so LensID will report the LensModel, which is more useful)
|
148
149
|
# 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
|
@@ -180,6 +181,7 @@ sub PrintInvLensSpec($;$$);
|
|
180
181
|
49460 => 'Tamron 24mm F2.8 Di III OSD M1:2', #JR (Model F051)
|
181
182
|
49461 => 'Tamron 20mm F2.8 Di III OSD M1:2', #JR (Model F050)
|
182
183
|
49462 => 'Tamron 70-180mm F2.8 Di III VXD', #JR (Model A056)
|
184
|
+
49463 => 'Tamron 28-200mm F2.8-5.6 Di III RXD', #JR (Model A071)
|
183
185
|
|
184
186
|
49712 => 'Tokina FiRIN 20mm F2 FE AF', # (firmware Ver.01)
|
185
187
|
49713 => 'Tokina FiRIN 100mm F2.8 FE MACRO', # (firmware Ver.01)
|
@@ -209,6 +211,8 @@ sub PrintInvLensSpec($;$$);
|
|
209
211
|
50515 => 'Sigma 35mm F1.2 DG DN | A', #IB/JR (019)
|
210
212
|
50516 => 'Sigma 14-24mm F2.8 DG DN | A', #IB/JR (019)
|
211
213
|
50517 => 'Sigma 24-70mm F2.8 DG DN | A', #JR (019)
|
214
|
+
50518 => 'Sigma 100-400mm F5-6.3 DG DN OS | C', #JR (020)
|
215
|
+
50521 => 'Sigma 85mm F1.4 DG DN | A', #JR (020)
|
212
216
|
|
213
217
|
50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
|
214
218
|
50993 => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB
|
@@ -221,6 +225,7 @@ sub PrintInvLensSpec($;$$);
|
|
221
225
|
51000 => 'Voigtlander NOKTON 50mm F1.2 Aspherical', #JR
|
222
226
|
51001 => 'Voigtlander NOKTON 21mm F1.4 Aspherical', #JR
|
223
227
|
51002 => 'Voigtlander APO-LANTHAR 50mm F2 Aspherical', #JR
|
228
|
+
51003 => 'Voigtlander NOKTON 35mm F1.2 Aspherical SE', #JR
|
224
229
|
|
225
230
|
# lenses listed in the Sigma MC-11 list, but not yet seen:
|
226
231
|
# 504xx => 'Sigma 18-200mm F3.5-6.3 DC MACRO OS HSM | C + MC-11', # (014)
|
@@ -995,7 +1000,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
995
1000
|
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010h' },
|
996
1001
|
},{
|
997
1002
|
Name => 'Tag2010i', # ?
|
998
|
-
Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9|9M2)|DSC-(RX10M4|RX100M6|RX100M5A|RX100M7|HX99|RX0M2))\b/',
|
1003
|
+
Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9|9M2)|DSC-(RX10M4|RX100M6|RX100M5A|RX100M7|HX99|RX0M2)|ZV-1)\b/',
|
999
1004
|
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010i' },
|
1000
1005
|
},{
|
1001
1006
|
Name => 'Tag_0x2010',
|
@@ -1380,6 +1385,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1380
1385
|
'1 0' => 'Off',
|
1381
1386
|
'1 1' => 'Standard',
|
1382
1387
|
'1 2' => 'High',
|
1388
|
+
'65535 65535' => 'n/a', # ILCE-7SM3
|
1383
1389
|
},
|
1384
1390
|
},
|
1385
1391
|
0x2029 => { # uncompressed 14-bit RAW file type setting introduced 2015
|
@@ -1388,6 +1394,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1388
1394
|
PrintConv => {
|
1389
1395
|
0 => 'Compressed RAW',
|
1390
1396
|
1 => 'Uncompressed RAW',
|
1397
|
+
65535 => 'n/a', # seen for ILCE-7SM3 JPEG-only
|
1391
1398
|
},
|
1392
1399
|
},
|
1393
1400
|
# 0x202a - first seen for ILCE-6300: 66 bytes
|
@@ -1486,6 +1493,13 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1486
1493
|
PrintConv => 'sprintf("%.8d",$val)',
|
1487
1494
|
PrintConvInv => '$val',
|
1488
1495
|
},
|
1496
|
+
# 0x2032 - first seen for ILCE-7SM3, July 2020
|
1497
|
+
# 0x2033 - first seen for ILCE-7SM3, July 2020
|
1498
|
+
# 0x2034 - first seen for ILCE-7SM3, July 2020
|
1499
|
+
# 0x2035 - first seen for ILCE-7SM3, July 2020
|
1500
|
+
# 0x2036 - first seen for ILCE-7SM3, July 2020
|
1501
|
+
# 0x2037 - first seen for ILCE-7SM3, July 2020
|
1502
|
+
# 0x2039 - first seen for ILCE-7SM3, July 2020
|
1489
1503
|
0x3000 => {
|
1490
1504
|
Name => 'ShotInfo',
|
1491
1505
|
SubDirectory => { TagTable => 'Image::ExifTool::Sony::ShotInfo' },
|
@@ -1514,7 +1528,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1514
1528
|
# from mid-2015: ILCE-7RM2/7SM2/6300 and newer models use different offsets
|
1515
1529
|
{
|
1516
1530
|
Name => 'Tag9050a',
|
1517
|
-
Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(6100|6300|6400|6500|6600|7M3|7RM2|7RM3|7RM4|7SM2|9|9M2)|ILCA-99M2)/',
|
1531
|
+
Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(6100|6300|6400|6500|6600|7M3|7RM2|7RM3|7RM4|7SM2|7SM3|9|9M2)|ILCA-99M2|ZV-)/',
|
1518
1532
|
SubDirectory => {
|
1519
1533
|
TagTable => 'Image::ExifTool::Sony::Tag9050a',
|
1520
1534
|
ByteOrder => 'LittleEndian',
|
@@ -1526,6 +1540,13 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1526
1540
|
TagTable => 'Image::ExifTool::Sony::Tag9050b',
|
1527
1541
|
ByteOrder => 'LittleEndian',
|
1528
1542
|
},
|
1543
|
+
},{
|
1544
|
+
Name => 'Tag9050c',
|
1545
|
+
Condition => '$$self{Model} =~ /^(ILCE-7SM3)/',
|
1546
|
+
SubDirectory => {
|
1547
|
+
TagTable => 'Image::ExifTool::Sony::Tag9050c',
|
1548
|
+
ByteOrder => 'LittleEndian',
|
1549
|
+
},
|
1529
1550
|
},{
|
1530
1551
|
Name => 'Sony_0x9050',
|
1531
1552
|
%unknownCipherData,
|
@@ -1540,7 +1561,8 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1540
1561
|
# 0x23 (e) for DSC-RX10/HX60V/HX350/HX400V/WX220/WX350, ILCE-7/7R/5000/6000, ILCA-68/77M2
|
1541
1562
|
# 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
1563
|
# 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
|
1564
|
+
# 0x28 (e) for ILCE-7RM4/9M2, DSC-RX100M7, ZV-1
|
1565
|
+
# 0x31 (e) for ILCE-7SM3
|
1544
1566
|
# first byte decoded: 40, 204, 202, 27, 58, 62, 48, 215, 28 respectively
|
1545
1567
|
{
|
1546
1568
|
Name => 'Tag9400a',
|
@@ -1679,7 +1701,8 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1679
1701
|
# 13 0 9 2 2 DSC-QX10/QX100/RX100M2
|
1680
1702
|
# 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
1703
|
# 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
|
1704
|
+
# 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, ZV-1
|
1705
|
+
# 18 0 20 0 164 ILCE-7SM3
|
1683
1706
|
# other values for Panorama images and several other models
|
1684
1707
|
0x9404 => [{
|
1685
1708
|
Name => 'Tag9404a',
|
@@ -1713,7 +1736,8 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1713
1736
|
# 142 var (0x25 = 37 var enc.) DSC-HX80/HX90V/RX1RM2/RX10M2/RX10M3/RX100M4/WX500, ILCE-6300/7RM2/7SM2
|
1714
1737
|
# 144 var (0xe1 = 225 var enc.) DSC-RX100M5
|
1715
1738
|
# 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
|
1739
|
+
# 163 var (0x8b = 139 var enc.) ILCE-6100/6400/6600/7M3/7RM3/7RM4/9/9M2, DSC-RX0M2/RX10M4/RX100M5A/RX100M6/RX100M7/HX99, ZV-1
|
1740
|
+
# July 2020: ILCE-7SM3 doesn't write this tag anymore, but writes 0x9416
|
1717
1741
|
0x9405 => [{
|
1718
1742
|
Name => 'Tag9405a',
|
1719
1743
|
# first byte must be 0x1b or 0x40 or 0x7d
|
@@ -1800,6 +1824,10 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1800
1824
|
%unknownCipherData,
|
1801
1825
|
# 0x02 - int32u?: 1,3,5,7,9 (A77)
|
1802
1826
|
},
|
1827
|
+
0x9416 => { # replaces 0x9405 for the Sony ILCE-7SM3, from July 2020
|
1828
|
+
Name => 'Sony_0x9416',
|
1829
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9416' },
|
1830
|
+
},
|
1803
1831
|
0xb000 => { #8
|
1804
1832
|
Name => 'FileFormat',
|
1805
1833
|
Writable => 'int8u',
|
@@ -1822,6 +1850,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1822
1850
|
'3 3 2 0' => 'ARW 2.3.2', #JR (DSC-RX1RM2,ILCE-7SM2 - support for uncompressed 14-bit RAW)
|
1823
1851
|
'3 3 3 0' => 'ARW 2.3.3', #JR (ILCE-9)
|
1824
1852
|
'3 3 5 0' => 'ARW 2.3.5', #JR (DSC-HX99)
|
1853
|
+
'4 0 0 0' => 'ARW 4.0', # (ILCE-7SM3)
|
1825
1854
|
# what about cRAW images?
|
1826
1855
|
},
|
1827
1856
|
},
|
@@ -1915,6 +1944,8 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1915
1944
|
376 => 'ILCE-9M2', #JR
|
1916
1945
|
378 => 'ILCE-6600', #IB/JR
|
1917
1946
|
379 => 'ILCE-6100', #IB/JR
|
1947
|
+
380 => 'ZV-1', #JR
|
1948
|
+
383 => 'ILCE-7SM3',
|
1918
1949
|
},
|
1919
1950
|
},
|
1920
1951
|
0xb020 => { #2
|
@@ -6051,8 +6082,11 @@ my %isoSetting2010 = (
|
|
6051
6082
|
33 => 16000,
|
6052
6083
|
34 => 20000,
|
6053
6084
|
35 => 25600,
|
6085
|
+
36 => 32000,
|
6086
|
+
37 => 40000,
|
6054
6087
|
38 => 51200,
|
6055
6088
|
39 => 64000,
|
6089
|
+
40 => 80000,
|
6056
6090
|
41 => 102400,
|
6057
6091
|
42 => 128000,
|
6058
6092
|
43 => 160000,
|
@@ -7727,6 +7761,107 @@ my %isoSetting2010 = (
|
|
7727
7761
|
},
|
7728
7762
|
);
|
7729
7763
|
|
7764
|
+
%Image::ExifTool::Sony::Tag9050c = ( #JR
|
7765
|
+
PROCESS_PROC => \&ProcessEnciphered,
|
7766
|
+
WRITE_PROC => \&WriteEnciphered,
|
7767
|
+
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
7768
|
+
FORMAT => 'int8u',
|
7769
|
+
NOTES => q{
|
7770
|
+
Valid from July 2020 for ILCE-7SM3.
|
7771
|
+
},
|
7772
|
+
WRITABLE => 1,
|
7773
|
+
FIRST_ENTRY => 0,
|
7774
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
7775
|
+
DATAMEMBER => [ 0x0039 ],
|
7776
|
+
0x0026 => {
|
7777
|
+
Name => 'Shutter',
|
7778
|
+
Format => 'int16u[3]',
|
7779
|
+
PrintConv => {
|
7780
|
+
'0 0 0' => 'Silent / Electronic (0 0 0)',
|
7781
|
+
OTHER => sub {
|
7782
|
+
my ($val, $inv) = @_;
|
7783
|
+
return $inv ? ($val=~/\((.*?)\)/ ? $1 : undef) : "Mechanical ($val)";
|
7784
|
+
},
|
7785
|
+
},
|
7786
|
+
},
|
7787
|
+
0x0039 => {
|
7788
|
+
Name => 'FlashStatus',
|
7789
|
+
RawConv => '$$self{FlashFired} = $val',
|
7790
|
+
PrintConv => {
|
7791
|
+
0 => 'No Flash present',
|
7792
|
+
2 => 'Flash Inhibited', # seen for ILCE-7/7R continuous, panorama, HDR mode
|
7793
|
+
64 => 'Built-in Flash present',
|
7794
|
+
65 => 'Built-in Flash Fired',
|
7795
|
+
66 => 'Built-in Flash Inhibited', # seen for panorama, HDR, burst mode
|
7796
|
+
128 => 'External Flash present', # seen for NEX-5N/5T
|
7797
|
+
129 => 'External Flash Fired', # seen for SLT-A99V, ILCE-7R, NEX-5N/5R
|
7798
|
+
},
|
7799
|
+
},
|
7800
|
+
0x003a => {
|
7801
|
+
Name => 'ShutterCount',
|
7802
|
+
# or "ShutterCount"? : number of shutter actuations, does not increase during Silent Shooting,
|
7803
|
+
# at least for ILCE-7RM2
|
7804
|
+
Format => 'int32u',
|
7805
|
+
Notes => 'total number of image exposures made by the camera',
|
7806
|
+
RawConv => '$val & 0x00ffffff',
|
7807
|
+
PrintConv => 'sprintf("%6d",$val)',
|
7808
|
+
},
|
7809
|
+
0x0046 => { # appr. same value as Exif ExposureTime, but longer in HDR-modes
|
7810
|
+
Name => 'SonyExposureTime',
|
7811
|
+
Format => 'int16u',
|
7812
|
+
ValueConv => '$val ? 2 ** (16 - $val/256) : 0',
|
7813
|
+
ValueConvInv => '$val ? int((16 - log($val) / log(2)) * 256 + 0.5) : 0',
|
7814
|
+
PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"',
|
7815
|
+
PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)',
|
7816
|
+
},
|
7817
|
+
0x0048 => {
|
7818
|
+
Name => 'SonyFNumber',
|
7819
|
+
Format => 'int16u',
|
7820
|
+
ValueConv => '2 ** (($val/256 - 16) / 2)',
|
7821
|
+
ValueConvInv => '(log($val)*2/log(2)+16)*256',
|
7822
|
+
PrintConv => 'sprintf("%.1f",$val)',
|
7823
|
+
PrintConvInv => '$val',
|
7824
|
+
},
|
7825
|
+
0x004b => {
|
7826
|
+
Name => 'ReleaseMode2',
|
7827
|
+
%releaseMode2,
|
7828
|
+
},
|
7829
|
+
0x0050 => {
|
7830
|
+
Name => 'ShutterCount2',
|
7831
|
+
Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} =~ /^(ILCE-7SM3)/)',
|
7832
|
+
Format => 'int32u',
|
7833
|
+
RawConv => '$val & 0x00ffffff',
|
7834
|
+
},
|
7835
|
+
0x0066 => { # appr. same value as Exif ExposureTime, but not valid in HDR-modes
|
7836
|
+
Name => 'SonyExposureTime',
|
7837
|
+
Condition => '$$self{Model} =~ /^(ILCE-7SM3)/',
|
7838
|
+
Format => 'int16u',
|
7839
|
+
ValueConv => '$val ? 2 ** (16 - $val/256) : 0',
|
7840
|
+
ValueConvInv => '$val ? int((16 - log($val) / log(2)) * 256 + 0.5) : 0',
|
7841
|
+
PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"',
|
7842
|
+
PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)',
|
7843
|
+
},
|
7844
|
+
0x0068 => { # appr. same value as Exif ExposureTime, but not valid in HDR-modes
|
7845
|
+
Name => 'SonyFNumber',
|
7846
|
+
Condition => '$$self{Model} =~ /^(ILCE-7SM3)/',
|
7847
|
+
Format => 'int16u',
|
7848
|
+
ValueConv => '2 ** (($val/256 - 16) / 2)',
|
7849
|
+
ValueConvInv => '(log($val)*2/log(2)+16)*256',
|
7850
|
+
PrintConv => 'sprintf("%.1f",$val)',
|
7851
|
+
PrintConvInv => '$val',
|
7852
|
+
},
|
7853
|
+
0x006b => {
|
7854
|
+
Name => 'ReleaseMode2',
|
7855
|
+
Condition => '$$self{Model} =~ /^(ILCE-7SM3)/',
|
7856
|
+
%releaseMode2,
|
7857
|
+
},
|
7858
|
+
0x0088 => {
|
7859
|
+
Name => 'InternalSerialNumber', #(NC)
|
7860
|
+
Format => 'int8u[6]',
|
7861
|
+
PrintConv => 'unpack "H*", pack "C*", split " ", $val',
|
7862
|
+
},
|
7863
|
+
);
|
7864
|
+
|
7730
7865
|
%Image::ExifTool::Sony::Tag9400a = ( #JR
|
7731
7866
|
PROCESS_PROC => \&ProcessEnciphered,
|
7732
7867
|
WRITE_PROC => \&WriteEnciphered,
|
@@ -7903,7 +8038,7 @@ my %isoSetting2010 = (
|
|
7903
8038
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
7904
8039
|
0x0009 => { %releaseMode2 },
|
7905
8040
|
0x000a => [{
|
7906
|
-
Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9|9M2)|DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX99|RX0M2))\b/',
|
8041
|
+
Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9|9M2)|DSC-(RX10M4|RX100M6|RX100M7|RX100M5A|HX99|RX0M2)|ZV-1)\b/',
|
7907
8042
|
Name => 'ShotNumberSincePowerUp',
|
7908
8043
|
Format => 'int8u',
|
7909
8044
|
},{
|
@@ -7983,11 +8118,12 @@ my %isoSetting2010 = (
|
|
7983
8118
|
FIRST_ENTRY => 0,
|
7984
8119
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
7985
8120
|
DATAMEMBER => [ 0 ],
|
7986
|
-
IS_SUBDIR => [ 0x0498, 0x04a2, 0x059d, 0x0634, 0x0636, 0x064c, 0x0653, 0x0678, 0x06b8, 0x06de, 0x06e7 ],
|
8121
|
+
IS_SUBDIR => [ 0x0498, 0x04a1, 0x04a2, 0x059d, 0x0634, 0x0636, 0x064c, 0x0653, 0x0678, 0x06b8, 0x06de, 0x06e7 ],
|
7987
8122
|
0x0000 => { Name => 'Ver9401', Hidden => 1, RawConv => '$$self{Ver9401} = $val; $$self{OPTIONS}{Unknown}<2 ? undef : $val' },
|
7988
8123
|
|
7989
8124
|
0x0498 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 148', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
7990
|
-
|
8125
|
+
0x04a1 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 160', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
8126
|
+
0x04a2 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(152|154|155)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
7991
8127
|
0x059d => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(144|146)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
7992
8128
|
0x0634 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 68', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
7993
8129
|
0x0636 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(73|74)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
@@ -8058,6 +8194,7 @@ my %isoSetting2010 = (
|
|
8058
8194
|
14 => 'Tracking',
|
8059
8195
|
15 => 'Face Tracking',
|
8060
8196
|
20 => 'Animal Eye Tracking',
|
8197
|
+
# 21 => '???', # (ILCE-7SM3)
|
8061
8198
|
255 => 'Manual',
|
8062
8199
|
},
|
8063
8200
|
},
|
@@ -8329,7 +8466,7 @@ my %isoSetting2010 = (
|
|
8329
8466
|
# also often deviating results for Sony FE 90mm F2.8 Macro G OSS ...
|
8330
8467
|
Name => 'SonyFNumber',
|
8331
8468
|
Format => 'int16u',
|
8332
|
-
Condition => '$$self{Model} !~ /^DSC
|
8469
|
+
Condition => '$$self{Model} !~ /^(DSC-|ZV-)/',
|
8333
8470
|
ValueConv => '2 ** (($val/256 - 16) / 2)',
|
8334
8471
|
ValueConvInv => '(log($val)*2/log(2)+16)*256',
|
8335
8472
|
PrintConv => 'sprintf("%.1f",$val)',
|
@@ -8445,7 +8582,7 @@ my %isoSetting2010 = (
|
|
8445
8582
|
},
|
8446
8583
|
0x0342 => {
|
8447
8584
|
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))/',
|
8585
|
+
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)|ZV-)/',
|
8449
8586
|
Format => 'int16u',
|
8450
8587
|
PrintConv => 'sprintf("%.0f%%",$val/10.24)',
|
8451
8588
|
PrintConvInv => '$val=~s/ ?%$//; $val * 10.24',
|
@@ -9245,6 +9382,145 @@ my %isoSetting2010 = (
|
|
9245
9382
|
0xbc => { Name => 'AFStatus_94_E6_Center_F2-8', %Image::ExifTool::Minolta::afStatusInfo },
|
9246
9383
|
);
|
9247
9384
|
|
9385
|
+
# tag 0x9416 decoding (ref JR)
|
9386
|
+
%Image::ExifTool::Sony::Tag9416 = (
|
9387
|
+
PROCESS_PROC => \&ProcessEnciphered,
|
9388
|
+
WRITE_PROC => \&WriteEnciphered,
|
9389
|
+
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
9390
|
+
FORMAT => 'int8u',
|
9391
|
+
FIRST_ENTRY => 0,
|
9392
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
9393
|
+
0x0000 => { Name => 'Tag9416_0000', PrintConv => 'sprintf("%3d",$val)', RawConv => '$$self{TagVersion} = $val' },
|
9394
|
+
0x0004 => {
|
9395
|
+
Name => 'SonyISO',
|
9396
|
+
Format => 'int16u',
|
9397
|
+
ValueConv => '100 * 2**(16 - $val/256)',
|
9398
|
+
ValueConvInv => '256 * (16 - log($val/100)/log(2))',
|
9399
|
+
PrintConv => 'sprintf("%.0f",$val)',
|
9400
|
+
PrintConvInv => '$val',
|
9401
|
+
},
|
9402
|
+
0x0006 => { %gain2010 },
|
9403
|
+
0x000a => { # appr. same value as Exif ExposureTime, but shorter in HDR-modes
|
9404
|
+
Name => 'SonyExposureTime2',
|
9405
|
+
Format => 'int16u',
|
9406
|
+
ValueConv => '$val ? 2 ** (16 - $val/256) : 0',
|
9407
|
+
ValueConvInv => '$val ? int((16 - log($val) / log(2)) * 256 + 0.5) : 0',
|
9408
|
+
PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"',
|
9409
|
+
PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)',
|
9410
|
+
},
|
9411
|
+
0x000c => {
|
9412
|
+
Name => 'ExposureTime',
|
9413
|
+
Format => 'rational32u',
|
9414
|
+
PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', # (Bulb NC)
|
9415
|
+
PrintConvInv => 'lc($val) eq "bulb" ? 0 : $val',
|
9416
|
+
},
|
9417
|
+
0x0010 => { # but sometimes deviating results
|
9418
|
+
Name => 'SonyFNumber2',
|
9419
|
+
Format => 'int16u',
|
9420
|
+
ValueConv => '2 ** (($val/256 - 16) / 2)',
|
9421
|
+
ValueConvInv => '(log($val)*2/log(2)+16)*256',
|
9422
|
+
PrintConv => 'sprintf("%.1f",$val)',
|
9423
|
+
PrintConvInv => '$val',
|
9424
|
+
},
|
9425
|
+
0x0012 => {
|
9426
|
+
Name => 'SonyMaxApertureValue', # (at current focal length)
|
9427
|
+
Format => 'int16u',
|
9428
|
+
ValueConv => '2 ** (($val/256 - 16) / 2)',
|
9429
|
+
ValueConvInv => '(log($val)*2/log(2)+16)*256',
|
9430
|
+
PrintConv => 'sprintf("%.1f",$val)',
|
9431
|
+
PrintConvInv => '$val',
|
9432
|
+
},
|
9433
|
+
0x001d => { %sequenceImageNumber },
|
9434
|
+
0x0035 => {
|
9435
|
+
Name => 'ExposureProgram',
|
9436
|
+
Priority => 0,
|
9437
|
+
SeparateTable => 'ExposureProgram3',
|
9438
|
+
PrintConv => \%sonyExposureProgram3,
|
9439
|
+
},
|
9440
|
+
0x0048 => {
|
9441
|
+
Name => 'LensMount',
|
9442
|
+
Condition => '$$self{Model} !~ /^(DSC-)/',
|
9443
|
+
PrintConv => {
|
9444
|
+
0 => 'Unknown',
|
9445
|
+
1 => 'A-mount',
|
9446
|
+
2 => 'E-mount',
|
9447
|
+
3 => 'A-mount (3)',
|
9448
|
+
},
|
9449
|
+
},
|
9450
|
+
0x0049 => {
|
9451
|
+
Name => 'LensFormat',
|
9452
|
+
Condition => '$$self{Model} !~ /^(DSC-)/',
|
9453
|
+
PrintConv => {
|
9454
|
+
0 => 'Unknown',
|
9455
|
+
1 => 'APS-C',
|
9456
|
+
2 => 'Full-frame',
|
9457
|
+
},
|
9458
|
+
},
|
9459
|
+
0x004a => {
|
9460
|
+
Name => 'LensMount',
|
9461
|
+
DataMember => 'LensMount',
|
9462
|
+
RawConv => '$$self{LensMount} = $val; $$self{Model} =~ /^(DSC-)/ ? undef : $val',
|
9463
|
+
PrintConv => {
|
9464
|
+
0 => 'Unknown',
|
9465
|
+
1 => 'A-mount',
|
9466
|
+
2 => 'E-mount',
|
9467
|
+
},
|
9468
|
+
},
|
9469
|
+
0x004b => {
|
9470
|
+
Name => 'LensType2',
|
9471
|
+
Condition => '$$self{LensMount} == 2',
|
9472
|
+
Format => 'int16u',
|
9473
|
+
SeparateTable => 'LensType2',
|
9474
|
+
PrintConv => \%sonyLensTypes2,
|
9475
|
+
},
|
9476
|
+
0x004d => {
|
9477
|
+
Name => 'LensType',
|
9478
|
+
Condition => '$$self{LensMount} == 1',
|
9479
|
+
Priority => 0, #PH (just to be safe)
|
9480
|
+
Format => 'int16u', #PH
|
9481
|
+
SeparateTable => 1,
|
9482
|
+
ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)',
|
9483
|
+
PrintConv => \%sonyLensTypes,
|
9484
|
+
},
|
9485
|
+
0x004f => {
|
9486
|
+
Name => 'DistortionCorrParams',
|
9487
|
+
Format => 'int16s[16]',
|
9488
|
+
},
|
9489
|
+
0x0071 => {
|
9490
|
+
Name => 'FocalLength',
|
9491
|
+
Format => 'int16u',
|
9492
|
+
ValueConv => '$val / 10',
|
9493
|
+
ValueConvInv => '$val * 10',
|
9494
|
+
PrintConv => 'sprintf("%.1f mm",$val)',
|
9495
|
+
PrintConvInv => '$val =~ s/ ?mm//; $val',
|
9496
|
+
},
|
9497
|
+
0x0073 => {
|
9498
|
+
Name => 'MinFocalLength',
|
9499
|
+
Format => 'int16u',
|
9500
|
+
ValueConv => '$val / 10',
|
9501
|
+
ValueConvInv => '$val * 10',
|
9502
|
+
PrintConv => 'sprintf("%.1f mm",$val)',
|
9503
|
+
PrintConvInv => '$val =~ s/ ?mm//; $val',
|
9504
|
+
},
|
9505
|
+
0x0075 => { # may give 0 for fixed focal length lenses
|
9506
|
+
Name => 'MaxFocalLength',
|
9507
|
+
Format => 'int16u',
|
9508
|
+
RawConv => '$val || undef',
|
9509
|
+
ValueConv => '$val / 10',
|
9510
|
+
ValueConvInv => '$val * 10',
|
9511
|
+
PrintConv => 'sprintf("%.1f mm",$val)',
|
9512
|
+
PrintConvInv => '$val =~ s/ ?mm//; $val',
|
9513
|
+
},
|
9514
|
+
0x088f => {
|
9515
|
+
Name => 'VignettingCorrParams',
|
9516
|
+
Format => 'int16s[16]',
|
9517
|
+
},
|
9518
|
+
0x0914 => {
|
9519
|
+
Name => 'ChromaticAberrationCorrParams',
|
9520
|
+
Format => 'int16s[32]',
|
9521
|
+
},
|
9522
|
+
);
|
9523
|
+
|
9248
9524
|
%Image::ExifTool::Sony::FaceInfo1 = (
|
9249
9525
|
%binaryDataAttrs,
|
9250
9526
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
@@ -9742,12 +10018,88 @@ my %isoSetting2010 = (
|
|
9742
10018
|
# 0x8100 - 16 bytes starting with 0x060e2b340401
|
9743
10019
|
0x8100 => { Name => 'Sony_rtmd_0x8100', Format => 'int8u', %hidUnk },
|
9744
10020
|
0x8101 => { Name => 'Sony_rtmd_0x8101', Format => 'int8u', %hidUnk }, # seen: 0,1
|
10021
|
+
0x8106 => { Name => 'Sony_rtmd_0x8106', Format => 'int32u', %hidUnk }, # seen: "25 1"
|
9745
10022
|
0x8109 => { Name => 'Sony_rtmd_0x8109', Format => 'int32u', %hidUnk }, # seen: "1 50"
|
9746
10023
|
0x810a => { Name => 'Sony_rtmd_0x810a', Format => 'int16u', %hidUnk }, # seen: 0
|
9747
10024
|
0x810b => { Name => 'Sony_rtmd_0x810b', Format => 'int16u', %hidUnk }, # seen: 100
|
9748
10025
|
0x810c => { Name => 'Sony_rtmd_0x810c', Format => 'int16u', %hidUnk }, # seen: 100
|
9749
10026
|
0x810d => { Name => 'Sony_rtmd_0x810d', Format => 'int8u', %hidUnk }, # seen: 1
|
10027
|
+
0x8115 => { Name => 'Sony_rtmd_0x8115', Format => 'int16u', %hidUnk }, # seen: 100
|
9750
10028
|
# 0x8300 - container for other tags in this format
|
10029
|
+
0x8500 => {
|
10030
|
+
Name => 'GPSVersionID',
|
10031
|
+
Groups => { 2 => 'Location' },
|
10032
|
+
Format => 'int8u',
|
10033
|
+
PrintConv => '$val =~ tr/ /./; $val',
|
10034
|
+
},
|
10035
|
+
0x8501 => {
|
10036
|
+
Name => 'GPSLatitudeRef',
|
10037
|
+
Groups => { 2 => 'Location' },
|
10038
|
+
Format => 'string',
|
10039
|
+
PrintConv => {
|
10040
|
+
N => 'North',
|
10041
|
+
S => 'South',
|
10042
|
+
},
|
10043
|
+
},
|
10044
|
+
0x8502 => {
|
10045
|
+
Name => 'GPSLatitude',
|
10046
|
+
Groups => { 2 => 'Location' },
|
10047
|
+
Format => 'rational64u',
|
10048
|
+
ValueConv => 'require Image::ExifTool::GPS;Image::ExifTool::GPS::ToDegrees($val)',
|
10049
|
+
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)',
|
10050
|
+
},
|
10051
|
+
0x8503 => {
|
10052
|
+
Name => 'GPSLongitudeRef',
|
10053
|
+
Groups => { 2 => 'Location' },
|
10054
|
+
Format => 'string',
|
10055
|
+
PrintConv => {
|
10056
|
+
E => 'East',
|
10057
|
+
W => 'West',
|
10058
|
+
},
|
10059
|
+
},
|
10060
|
+
0x8504 => {
|
10061
|
+
Name => 'GPSLongitude',
|
10062
|
+
Groups => { 2 => 'Location' },
|
10063
|
+
Format => 'rational64u',
|
10064
|
+
ValueConv => 'require Image::ExifTool::GPS;Image::ExifTool::GPS::ToDegrees($val)',
|
10065
|
+
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)',
|
10066
|
+
},
|
10067
|
+
0x8507 => {
|
10068
|
+
Name => 'GPSTimeStamp',
|
10069
|
+
Groups => { 2 => 'Time' },
|
10070
|
+
Format => 'rational64u',
|
10071
|
+
ValueConv => 'require Image::ExifTool::GPS;Image::ExifTool::GPS::ConvertTimeStamp($val)',
|
10072
|
+
PrintConv => 'Image::ExifTool::GPS::PrintTimeStamp($val)',
|
10073
|
+
},
|
10074
|
+
0x8509 => {
|
10075
|
+
Name => 'GPSStatus',
|
10076
|
+
Groups => { 2 => 'Location' },
|
10077
|
+
Format => 'string',
|
10078
|
+
PrintConv => {
|
10079
|
+
A => 'Measurement Active',
|
10080
|
+
V => 'Measurement Void',
|
10081
|
+
},
|
10082
|
+
},
|
10083
|
+
0x850a => {
|
10084
|
+
Name => 'GPSMeasureMode',
|
10085
|
+
Groups => { 2 => 'Location' },
|
10086
|
+
Format => 'string',
|
10087
|
+
PrintConv => {
|
10088
|
+
2 => '2-Dimensional Measurement',
|
10089
|
+
3 => '3-Dimensional Measurement',
|
10090
|
+
},
|
10091
|
+
},
|
10092
|
+
0x8512 => {
|
10093
|
+
Name => 'GPSMapDatum',
|
10094
|
+
Groups => { 2 => 'Location' },
|
10095
|
+
Format => 'string',
|
10096
|
+
},
|
10097
|
+
0x851d => {
|
10098
|
+
Name => 'GPSDateStamp',
|
10099
|
+
Groups => { 2 => 'Time' },
|
10100
|
+
Format => 'string',
|
10101
|
+
ValueConv => 'Image::ExifTool::Exif::ExifDate($val)',
|
10102
|
+
},
|
9751
10103
|
0xe000 => { Name => 'Sony_rtmd_0xe000', Format => 'int8u', %hidUnk }, # (16 bytes)
|
9752
10104
|
0xe300 => { Name => 'Sony_rtmd_0xe300', Format => 'int8u', %hidUnk }, # seen: 0,1
|
9753
10105
|
0xe301 => { Name => 'Sony_rtmd_0xe301', Format => 'int32u', %hidUnk }, # seen: 100
|
@@ -9760,6 +10112,8 @@ my %isoSetting2010 = (
|
|
9760
10112
|
ValueConv => 'my @a=unpack("x1H4H2H2H2H2H2",$val); "$a[0]:$a[1]:$a[2] $a[3]:$a[4]:$a[5]"',
|
9761
10113
|
PrintConv => '$self->ConvertDateTime($val)',
|
9762
10114
|
},
|
10115
|
+
# f010 - 2048 bytes
|
10116
|
+
# f020 - 543 bytes
|
9763
10117
|
);
|
9764
10118
|
|
9765
10119
|
# Composite Sony tags
|
@@ -9794,6 +10148,17 @@ my %isoSetting2010 = (
|
|
9794
10148
|
},
|
9795
10149
|
PrintConv => '$val eq "inf" ? $val : sprintf("%.2f m",$val)',
|
9796
10150
|
},
|
10151
|
+
GPSDateTime => {
|
10152
|
+
Description => 'GPS Date/Time',
|
10153
|
+
Groups => { 2 => 'Time' },
|
10154
|
+
SubDoc => 1, # generate for all sub-documents
|
10155
|
+
Require => {
|
10156
|
+
0 => 'Sony:GPSDateStamp',
|
10157
|
+
1 => 'Sony:GPSTimeStamp',
|
10158
|
+
},
|
10159
|
+
ValueConv => '"$val[0] $val[1]Z"',
|
10160
|
+
PrintConv => '$self->ConvertDateTime($val)',
|
10161
|
+
},
|
9797
10162
|
);
|
9798
10163
|
|
9799
10164
|
# add our composite tags
|