exiftool_vendored 11.99.0 → 12.06.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
|