exiftool_vendored 12.68.0 → 12.72.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +98 -15
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +10 -10
- data/bin/exiftool +32 -25
- data/bin/lib/Image/ExifTool/AAC.pm +175 -0
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +2 -1
- data/bin/lib/Image/ExifTool/CBOR.pm +18 -2
- data/bin/lib/Image/ExifTool/Canon.pm +87 -20
- data/bin/lib/Image/ExifTool/DJI.pm +3 -2
- data/bin/lib/Image/ExifTool/DNG.pm +25 -2
- data/bin/lib/Image/ExifTool/EXE.pm +54 -6
- data/bin/lib/Image/ExifTool/Exif.pm +204 -22
- data/bin/lib/Image/ExifTool/FujiFilm.pm +145 -20
- data/bin/lib/Image/ExifTool/GIF.pm +5 -1
- data/bin/lib/Image/ExifTool/GoPro.pm +16 -1
- data/bin/lib/Image/ExifTool/ID3.pm +76 -10
- data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/JSON.pm +4 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +30 -15
- data/bin/lib/Image/ExifTool/M2TS.pm +21 -16
- data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +213 -105
- data/bin/lib/Image/ExifTool/Olympus.pm +7 -1
- data/bin/lib/Image/ExifTool/PNG.pm +8 -13
- data/bin/lib/Image/ExifTool/Panasonic.pm +15 -2
- data/bin/lib/Image/ExifTool/Pentax.pm +15 -6
- data/bin/lib/Image/ExifTool/PhotoMechanic.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +60 -14
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +59 -11
- data/bin/lib/Image/ExifTool/README +14 -5
- data/bin/lib/Image/ExifTool/RIFF.pm +60 -10
- data/bin/lib/Image/ExifTool/Ricoh.pm +109 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +3 -2
- data/bin/lib/Image/ExifTool/Sony.pm +177 -37
- data/bin/lib/Image/ExifTool/TagLookup.pm +6971 -6714
- data/bin/lib/Image/ExifTool/TagNames.pod +957 -372
- data/bin/lib/Image/ExifTool/Text.pm +4 -5
- data/bin/lib/Image/ExifTool/Validate.pm +23 -20
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
- data/bin/lib/Image/ExifTool/WriteExif.pl +33 -8
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -0
- data/bin/lib/Image/ExifTool/WriteRIFF.pl +31 -6
- data/bin/lib/Image/ExifTool/Writer.pl +121 -28
- data/bin/lib/Image/ExifTool/XMP.pm +67 -2
- data/bin/lib/Image/ExifTool/XMP2.pl +35 -0
- data/bin/lib/Image/ExifTool.pm +94 -43
- data/bin/lib/Image/ExifTool.pod +28 -17
- data/bin/perl-Image-ExifTool.spec +9 -9
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
@@ -9,6 +9,7 @@
|
|
9
9
|
# 2) http://homepage3.nifty.com/kamisaka/makernote/makernote_ricoh.htm
|
10
10
|
# 3) Tim Gray private communication (GR)
|
11
11
|
# 4) https://github.com/atotto/ricoh-theta-tools/
|
12
|
+
# 5) https://github.com/ricohapi/theta-api-specs/blob/main/theta-metadata/README.md
|
12
13
|
# IB) Iliah Borg private communication (LibRaw)
|
13
14
|
#------------------------------------------------------------------------------
|
14
15
|
|
@@ -18,11 +19,13 @@ use strict;
|
|
18
19
|
use vars qw($VERSION);
|
19
20
|
use Image::ExifTool qw(:DataAccess :Utils);
|
20
21
|
use Image::ExifTool::Exif;
|
22
|
+
use Image::ExifTool::GPS;
|
21
23
|
|
22
|
-
$VERSION = '1.
|
24
|
+
$VERSION = '1.37';
|
23
25
|
|
24
26
|
sub ProcessRicohText($$$);
|
25
27
|
sub ProcessRicohRMETA($$$);
|
28
|
+
sub ProcessRicohRDT($$$);
|
26
29
|
|
27
30
|
# lens types for Ricoh GXR
|
28
31
|
my %ricohLensIDs = (
|
@@ -908,6 +911,65 @@ my %ricohLensIDs = (
|
|
908
911
|
},
|
909
912
|
);
|
910
913
|
|
914
|
+
# real-time metadata in RDTA atom (ref 5)
|
915
|
+
%Image::ExifTool::Ricoh::RDTA = (
|
916
|
+
PROCESS_PROC => \&ProcessRicohRDT,
|
917
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Location' },
|
918
|
+
0 => { Name => 'Accelerometer', Format => 'float[3]' },
|
919
|
+
16 => { Name => 'TimeStamp', Format => 'int64u', ValueConv => '$val * 1e-9' },
|
920
|
+
);
|
921
|
+
|
922
|
+
# real-time metadata in RDTB atom (ref 5)
|
923
|
+
%Image::ExifTool::Ricoh::RDTB = (
|
924
|
+
PROCESS_PROC => \&ProcessRicohRDT,
|
925
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Location' },
|
926
|
+
0 => { Name => 'Gyroscope', Format => 'float[3]', Notes => 'rad/s' },
|
927
|
+
16 => { Name => 'TimeStamp', Format => 'int64u', ValueConv => '$val * 1e-9' },
|
928
|
+
);
|
929
|
+
|
930
|
+
# real-time metadata in RDTC atom (ref 5)
|
931
|
+
%Image::ExifTool::Ricoh::RDTC = (
|
932
|
+
PROCESS_PROC => \&ProcessRicohRDT,
|
933
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Location' },
|
934
|
+
0 => { Name => 'MagneticField', Format => 'float[3]' },
|
935
|
+
16 => { Name => 'TimeStamp', Format => 'int64u', ValueConv => '$val * 1e-9' },
|
936
|
+
);
|
937
|
+
|
938
|
+
# real-time metadata in RDTG atom (ref 5)
|
939
|
+
%Image::ExifTool::Ricoh::RDTG = (
|
940
|
+
PROCESS_PROC => \&ProcessRicohRDT,
|
941
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Video' },
|
942
|
+
0 => { Name => 'TimeStamp', Format => 'int64u', ValueConv => '$val * 1e-9' },
|
943
|
+
100 => { Name => 'FrameNumber', Notes => 'generated internally' },
|
944
|
+
);
|
945
|
+
|
946
|
+
# real-time metadata in RDTL atom (ref 5)
|
947
|
+
%Image::ExifTool::Ricoh::RDTL = (
|
948
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Location' },
|
949
|
+
0 => {
|
950
|
+
Name => 'GPSDateTime',
|
951
|
+
Groups => { 2 => 'Time' },
|
952
|
+
Format => 'double',
|
953
|
+
ValueConv => 'ConvertUnixTime($val*1e-9, 1, 9)', # (NC -- what is the epoch?)
|
954
|
+
PrintConv => '$self->ConvertDateTime($val)',
|
955
|
+
},
|
956
|
+
8 => {
|
957
|
+
Name => 'GPSLatitude',
|
958
|
+
Format => 'double',
|
959
|
+
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)',
|
960
|
+
},
|
961
|
+
16 => {
|
962
|
+
Name => 'GPSLongitude',
|
963
|
+
Format => 'double',
|
964
|
+
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)',
|
965
|
+
},
|
966
|
+
24 => {
|
967
|
+
Name => 'GPSAltitude',
|
968
|
+
Format => 'double',
|
969
|
+
PrintConv => '($val =~ s/^-// ? "$val m Below" : "$val m Above") . " Sea Level"',
|
970
|
+
},
|
971
|
+
);
|
972
|
+
|
911
973
|
# Ricoh composite tags
|
912
974
|
%Image::ExifTool::Ricoh::Composite = (
|
913
975
|
GROUPS => { 2 => 'Camera' },
|
@@ -932,6 +994,52 @@ my %ricohLensIDs = (
|
|
932
994
|
Image::ExifTool::AddCompositeTags('Image::ExifTool::Ricoh');
|
933
995
|
|
934
996
|
|
997
|
+
#------------------------------------------------------------------------------
|
998
|
+
# Process Ricoh RDT* real-time metadata
|
999
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
1000
|
+
# Returns: 1 on success, otherwise returns 0 and sets a Warning
|
1001
|
+
sub ProcessRicohRDT($$$)
|
1002
|
+
{
|
1003
|
+
my ($et, $dirInfo, $tagTablePtr) = @_;
|
1004
|
+
my $dataPt = $$dirInfo{DataPt};
|
1005
|
+
my $dirLen = $$dirInfo{DirLen};
|
1006
|
+
my $dirName = $$dirInfo{DirName};
|
1007
|
+
my ($i, $rdtg);
|
1008
|
+
return 0 if $dirLen < 16;
|
1009
|
+
my $ee = $et->Options('ExtractEmbedded');
|
1010
|
+
unless ($ee) {
|
1011
|
+
$et->WarnOnce('Use ExtractEmbedded option to read Ricoh real-time metadata',3);
|
1012
|
+
return 1;
|
1013
|
+
}
|
1014
|
+
my $endian = substr($$dataPt, 8, 2);
|
1015
|
+
SetByteOrder($endian eq "\x23\x01" ? 'II' : 'MM');
|
1016
|
+
my $count = Get32u($dataPt, 0);
|
1017
|
+
my $len = Get16u($dataPt, 6);
|
1018
|
+
if ($dirName eq 'RicohRDTG') {
|
1019
|
+
if ($ee < 2) {
|
1020
|
+
$et->WarnOnce('Set ExtractEmbedded option to 2 or higher to extract frame timestamps',3);
|
1021
|
+
return 1;
|
1022
|
+
}
|
1023
|
+
$rdtg = 0;
|
1024
|
+
$et->WarnOnce('Unexpected RDTG record length') if $len > 8;
|
1025
|
+
}
|
1026
|
+
if ($count * $len + 16 > $dirLen) {
|
1027
|
+
$et->Warn("Truncated $dirName data");
|
1028
|
+
$count = int(($dirLen - 16) / $len);
|
1029
|
+
}
|
1030
|
+
$et->VerboseDir($dirName);
|
1031
|
+
$$dirInfo{DirStart} = 16;
|
1032
|
+
$$dirInfo{DirLen} = $len;
|
1033
|
+
for ($i=0; $i<$count; ++$i) {;
|
1034
|
+
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
1035
|
+
$et->HandleTag($tagTablePtr, 100, $rdtg++) if defined $rdtg;
|
1036
|
+
$et->ProcessBinaryData($dirInfo, $tagTablePtr);
|
1037
|
+
$$dirInfo{DirStart} += $len;
|
1038
|
+
}
|
1039
|
+
delete $$et{DOC_NUM};
|
1040
|
+
return 1;
|
1041
|
+
}
|
1042
|
+
|
935
1043
|
#------------------------------------------------------------------------------
|
936
1044
|
# Process Ricoh text-based maker notes
|
937
1045
|
# Inputs: 0) ExifTool object reference
|
@@ -22,7 +22,7 @@ use vars qw($VERSION %samsungLensTypes);
|
|
22
22
|
use Image::ExifTool qw(:DataAccess :Utils);
|
23
23
|
use Image::ExifTool::Exif;
|
24
24
|
|
25
|
-
$VERSION = '1.
|
25
|
+
$VERSION = '1.55';
|
26
26
|
|
27
27
|
sub WriteSTMN($$$);
|
28
28
|
sub ProcessINFO($$$);
|
@@ -904,9 +904,10 @@ my %formatMinMax = (
|
|
904
904
|
Name => 'SamsungSvss',
|
905
905
|
SubDirectory => { TagTable => 'Image::ExifTool::Samsung::svss' },
|
906
906
|
},
|
907
|
+
mdln => 'SamsungModel', #PH (Samsung SM-A136U, etc)
|
907
908
|
# swtr - 4 bytes, all zero
|
908
909
|
# scid - 8 bytes, all zero
|
909
|
-
# saut - 4 bytes, all zero
|
910
|
+
# saut - 4 or 6 bytes, all zero
|
910
911
|
);
|
911
912
|
|
912
913
|
# Samsung MP4 svss information (PH - from SM-C101 sample)
|
@@ -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.65';
|
38
38
|
|
39
39
|
sub ProcessSRF($$$);
|
40
40
|
sub ProcessSR2($$$);
|
@@ -69,11 +69,13 @@ sub PrintInvLensSpec($;$$);
|
|
69
69
|
'0.10' => 'Zeiss Touit 50mm F2.8 Macro', # (firmware Ver.00)
|
70
70
|
'0.11' => 'Zeiss Loxia 50mm F2', # (firmware Ver.01)
|
71
71
|
'0.12' => 'Zeiss Loxia 35mm F2', # (firmware Ver.01)
|
72
|
+
'0.13' => 'Viltrox 85mm F1.8', # original AF version; Mark II version is at 47473
|
72
73
|
1 => 'Sony LA-EA1 or Sigma MC-11 Adapter', # MC-11 with not-supported lenses
|
73
74
|
2 => 'Sony LA-EA2 Adapter',
|
74
75
|
3 => 'Sony LA-EA3 Adapter',
|
75
76
|
6 => 'Sony LA-EA4 Adapter',
|
76
77
|
7 => 'Sony LA-EA5 Adapter', #JR
|
78
|
+
13 => 'Samyang AF 35-150mm F2-2.8',
|
77
79
|
# 27 => Venus Optics Laowa 12mm f2.8 Zero-D or 105mm f2 (T3.2) Smooth Trans Focus (ref IB)
|
78
80
|
44 => 'Metabones Canon EF Smart Adapter', #JR
|
79
81
|
78 => 'Metabones Canon EF Smart Adapter Mark III or Other Adapter', #PH/JR (also Mark IV, Fotodiox and Viltrox)
|
@@ -164,6 +166,7 @@ sub PrintInvLensSpec($;$$);
|
|
164
166
|
32879 => 'Sony FE 50mm F1.4 GM', #JR
|
165
167
|
32884 => 'Sony FE 70-200mm F4 Macro G OSS II', #JR
|
166
168
|
32885 => 'Sony FE 16-35mm F2.8 GM II', #JR
|
169
|
+
32886 => 'Sony FE 300mm F2.8 OSS', #JR
|
167
170
|
|
168
171
|
# (comment this out so LensID will report the LensModel, which is more useful)
|
169
172
|
# 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
|
@@ -216,13 +219,22 @@ sub PrintInvLensSpec($;$$);
|
|
216
219
|
49470 => 'Tamron 28-75mm F2.8 Di III VXD G2', #JR (Model A063)
|
217
220
|
49471 => 'Tamron 50-400mm F4.5-6.3 Di III VC VXD', #JR (Model A067)
|
218
221
|
49472 => 'Tamron 20-40mm F2.8 Di III VXD', #JR (Model A062)
|
219
|
-
|
220
|
-
49473 => 'Tokina atx-m 85mm F1.8 FE
|
221
|
-
49473.
|
222
|
-
49473.
|
222
|
+
49473 => 'Tamron 17-50mm F4 Di III VXD or Tokina or Viltrox lens', #JR (Model A068)
|
223
|
+
49473.1 => 'Tokina atx-m 85mm F1.8 FE', #JR
|
224
|
+
49473.2 => 'Viltrox 23mm F1.4 E', #JR
|
225
|
+
49473.3 => 'Viltrox 56mm F1.4 E', #JR
|
226
|
+
49473.4 => 'Viltrox 85mm F1.8 II FE', #JR
|
223
227
|
49474 => 'Tamron 70-180mm F2.8 Di III VXD G2 or Viltrox lens', #JR (Model A065)
|
224
|
-
49474.1 => 'Viltrox
|
228
|
+
49474.1 => 'Viltrox 13mm F1.4 E',
|
225
229
|
49474.2 => 'Viltrox 16mm F1.8 FE', #JR
|
230
|
+
49474.3 => 'Viltrox 23mm F1.4 E', #JR
|
231
|
+
49474.4 => 'Viltrox 24mm F1.8 FE', #JR
|
232
|
+
49474.5 => 'Viltrox 28mm F1.8 FE', #JR
|
233
|
+
49474.6 => 'Viltrox 33mm F1.4 E', #JR
|
234
|
+
49474.7 => 'Viltrox 35mm F1.8 FE', #JR
|
235
|
+
49474.8 => 'Viltrox 50mm F1.8 FE', #JR
|
236
|
+
49474.9 => 'Viltrox 75mm F1.2 E', #JR
|
237
|
+
|
226
238
|
49712 => 'Tokina FiRIN 20mm F2 FE AF', # (firmware Ver.01)
|
227
239
|
49713 => 'Tokina FiRIN 100mm F2.8 FE MACRO', # (firmware Ver.01)
|
228
240
|
49714 => 'Tokina atx-m 11-18mm F2.8 E', #JR
|
@@ -273,6 +285,7 @@ sub PrintInvLensSpec($;$$);
|
|
273
285
|
50538 => 'Sigma 17mm F4 DG DN | C', #JR (023)
|
274
286
|
50539 => 'Sigma 50mm F1.4 DG DN | A', #JR (023)
|
275
287
|
50540 => 'Sigma 14mm F1.4 DG DN | A', #JR (023)
|
288
|
+
50543 => 'Sigma 70-200mm F2.8 DG DN OS | S', #JR (023)
|
276
289
|
50544 => 'Sigma 23mm F1.4 DC DN | C', #JR (023)
|
277
290
|
50547 => 'Sigma 10-18mm F2.8 DC DN | C', #JR (023)
|
278
291
|
|
@@ -1630,9 +1643,20 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1630
1643
|
# 0x203e - int8u: seen 0, 1, 2, 3, 4 and 255: possibly nr. of detected/tracked faces?
|
1631
1644
|
# 0x203f - int16u
|
1632
1645
|
# 0x2041 - int8u
|
1633
|
-
# 0x2044 - int32u[2]
|
1634
|
-
|
1635
|
-
|
1646
|
+
# 0x2044 - int32u[2] offset and size of some unknown data, relative to TIFF header in JPG and ARW - PH
|
1647
|
+
0x2044 => {
|
1648
|
+
Name => 'HiddenInfo',
|
1649
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Sony::HiddenInfo' },
|
1650
|
+
},
|
1651
|
+
# 0x2047 - first seen for ILCE-9M3, November 2023
|
1652
|
+
# 0x2048 - first seen for ILCE-9M3
|
1653
|
+
# 0x2049 - undef[2]
|
1654
|
+
0x204a => { #JR
|
1655
|
+
Name => 'FocusLocation2',
|
1656
|
+
Writable => 'int16u',
|
1657
|
+
Count => 4,
|
1658
|
+
NOTES => 'same as FocusLocation within one pixel',
|
1659
|
+
},
|
1636
1660
|
0x3000 => {
|
1637
1661
|
Name => 'ShotInfo',
|
1638
1662
|
SubDirectory => { TagTable => 'Image::ExifTool::Sony::ShotInfo' },
|
@@ -1704,7 +1728,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1704
1728
|
# 0x28 (e) for ILCE-7RM4/9M2, DSC-RX100M7, ZV-1/1F/1M2/E10
|
1705
1729
|
# 0x31 (e) for ILCE-1/7M4/7SM3, ILME-FX3
|
1706
1730
|
# 0x32 (e) for ILCE-7RM5, ILME-FX30
|
1707
|
-
# 0x33 (e) for ILCE-6700
|
1731
|
+
# 0x33 (e) for ILCE-6700/7CM2/7CR/9M3, ZV-E1
|
1708
1732
|
# first byte decoded: 40, 204, 202, 27, 58, 62, 48, 215, 28, 106, 89, 63 respectively
|
1709
1733
|
{
|
1710
1734
|
Name => 'Tag9400a',
|
@@ -1826,6 +1850,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1826
1850
|
# 0x25 (37) ILCE-7M4
|
1827
1851
|
# 0x26 (38) ILCE-7RM5, ILME-FX30
|
1828
1852
|
# 0x27 (39) ILCE-6700/7CM2/7CR, ZV-E1
|
1853
|
+
# 0x28 (40) ILCE-9M3
|
1829
1854
|
# var var SLT-A58/A99V, HV, ILCA-68/77M2/99M2
|
1830
1855
|
# only valid when first byte 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x17, 0x19, 0x1a, 0x1c (enciphered 0x8a, 0x70, 0xb6, 0x69, 0x88, 0x20, 0x30, 0xd7, 0xbb, 0x92, 0x28)
|
1831
1856
|
# Condition => '$$self{DoubleCipher} ? $$valPt =~ /^[\x7e\x46\x1d\x18\x3a\x95\x24\x26\xd6]\x01/ : $$valPt =~ /^[\x8a\x70\xb6\x69\x88\x20\x30\xd7\xbb\x92\x28]\x01/',
|
@@ -1904,11 +1929,15 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1904
1929
|
Name => 'Tag9406',
|
1905
1930
|
# - first byte must be 0x01 or 0x02 (enciphered 0x01 or 0x08),
|
1906
1931
|
# or 0x03 (enc. 0x1b) for ILCE-6100/6300/6400/6500/6600/7M3/7RM2/7RM3/7RM4/7SM2/9/9M2, and ILCA-99M2
|
1907
|
-
# or 0x04 (enc. 0x40) for ILCE-6700, ZV-E1
|
1908
1932
|
# third byte must be 0x02 or 0x03 (enciphered 0x08 or 0x1b) - ref JR
|
1909
1933
|
# (applies to most SLT/ILCA and NEX/ILCE models, but no DSC models)
|
1910
|
-
Condition => '$$valPt =~ /^[\x01\x08\x1b].[\x08\x1b]/s
|
1934
|
+
Condition => '$$valPt =~ /^[\x01\x08\x1b].[\x08\x1b]/s',
|
1911
1935
|
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9406' },
|
1936
|
+
},{
|
1937
|
+
Name => 'Tag9406b',
|
1938
|
+
# - first byte 0x04 (enc. 0x40) for ILCE-6700/7CM2/7CR/9M3, ZV-E1
|
1939
|
+
Condition => '$$valPt =~ /^[\x40]/s',
|
1940
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9406b' },
|
1912
1941
|
},{
|
1913
1942
|
Name => 'Sony_0x9406',
|
1914
1943
|
%unknownCipherData,
|
@@ -2001,6 +2030,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
2001
2030
|
'3 3 5 0' => 'ARW 2.3.5', #JR (DSC-HX99)
|
2002
2031
|
'4 0 0 0' => 'ARW 4.0', # (ILCE-7SM3)
|
2003
2032
|
'4 0 1 0' => 'ARW 4.0.1', #github#195 (ZV-E1)
|
2033
|
+
'5 0 0 0' => 'ARW 5.0', # (ILCE-9M3)
|
2004
2034
|
# what about cRAW images?
|
2005
2035
|
},
|
2006
2036
|
},
|
@@ -2107,6 +2137,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
2107
2137
|
389 => 'ZV-1F', #IB
|
2108
2138
|
390 => 'ILCE-7RM5', #IB
|
2109
2139
|
391 => 'ILME-FX30', #JR
|
2140
|
+
392 => 'ILCE-9M3', #JR
|
2110
2141
|
393 => 'ZV-E1', #JR
|
2111
2142
|
394 => 'ILCE-6700', #JR
|
2112
2143
|
395 => 'ZV-1M2', #JR
|
@@ -5929,6 +5960,29 @@ my %faceInfo = (
|
|
5929
5960
|
# 0x001a, 0x001c appear to be 2 int16u values, meaning unknown
|
5930
5961
|
);
|
5931
5962
|
|
5963
|
+
# hidden information (ref PH)
|
5964
|
+
%Image::ExifTool::Sony::HiddenInfo = (
|
5965
|
+
%binaryDataAttrs,
|
5966
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
5967
|
+
FORMAT => 'int32u',
|
5968
|
+
IS_OFFSET => [ 0 ], # tag 0 is 'IsOffset'
|
5969
|
+
0 => {
|
5970
|
+
Name => 'HiddenDataOffset',
|
5971
|
+
IsOffset => 1,
|
5972
|
+
OffsetPair => 1,
|
5973
|
+
DataTag => 'HiddenData',
|
5974
|
+
WriteGroup => 'MakerNotes',
|
5975
|
+
Protectd => 2,
|
5976
|
+
},
|
5977
|
+
1 => {
|
5978
|
+
Name => 'HiddenDataLength',
|
5979
|
+
OffsetPair => 0,
|
5980
|
+
DataTag => 'HiddenData',
|
5981
|
+
WriteGroup => 'MakerNotes',
|
5982
|
+
Protectd => 2,
|
5983
|
+
},
|
5984
|
+
);
|
5985
|
+
|
5932
5986
|
# shot information (ref PH)
|
5933
5987
|
%Image::ExifTool::Sony::ShotInfo = (
|
5934
5988
|
%binaryDataAttrs,
|
@@ -8397,7 +8451,7 @@ my %isoSetting2010 = (
|
|
8397
8451
|
},
|
8398
8452
|
0x002a => [{
|
8399
8453
|
Name => 'Quality2',
|
8400
|
-
Condition => '$$self{Model} !~ /^(ILCE-(1|6700|7CM2|7CR|7M4|7RM5|7SM3)|ILME-(FX3|FX30)|ZV-E1)\b/',
|
8454
|
+
Condition => '$$self{Model} !~ /^(ILCE-(1|6700|7CM2|7CR|7M4|7RM5|7SM3|9M3)|ILME-(FX3|FX30)|ZV-E1)\b/',
|
8401
8455
|
PrintConv => {
|
8402
8456
|
0 => 'JPEG',
|
8403
8457
|
1 => 'RAW',
|
@@ -8414,15 +8468,15 @@ my %isoSetting2010 = (
|
|
8414
8468
|
6 => 'RAW + HEIF',
|
8415
8469
|
},
|
8416
8470
|
}],
|
8417
|
-
0x0047 => {
|
8418
|
-
Name => 'SonyImageHeight',
|
8419
|
-
Condition => '$$self{Model} !~ /^(ILCE-(1|6700|7M4|7RM5|7SM3)|ILME-(FX3|FX30)|ZV-E1)\b/',
|
8420
|
-
Format => 'int16u',
|
8421
|
-
PrintConv => '$val > 0 ? 8*$val : "n.a."',
|
8422
|
-
},
|
8471
|
+
# 0x0047 => { # often incorrect, requires 16x for some models
|
8472
|
+
# Name => 'SonyImageHeight',
|
8473
|
+
# Condition => '$$self{Model} !~ /^(ILCE-(1|6700|7CM2|7CR|7M4|7RM5|7SM3|9M3)|ILME-(FX3|FX30)|ZV-E1)\b/',
|
8474
|
+
# Format => 'int16u',
|
8475
|
+
# PrintConv => '$val > 0 ? 8*$val : "n.a."',
|
8476
|
+
# },
|
8423
8477
|
0x0053 => {
|
8424
8478
|
Name => 'ModelReleaseYear',
|
8425
|
-
Condition => '$$self{Model} !~ /^(ILCE-(1|6700|7CM2|7CR|7M4|7RM5|7SM3)|ILME-(FX3|FX30)|ZV-E1)\b/',
|
8479
|
+
Condition => '$$self{Model} !~ /^(ILCE-(1|6700|7CM2|7CR|7M4|7RM5|7SM3|9M3)|ILME-(FX3|FX30)|ZV-E1)\b/',
|
8426
8480
|
Format => 'int8u',
|
8427
8481
|
PrintConv => 'sprintf("20%.2d", $val)',
|
8428
8482
|
},
|
@@ -8461,10 +8515,11 @@ my %isoSetting2010 = (
|
|
8461
8515
|
FIRST_ENTRY => 0,
|
8462
8516
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
8463
8517
|
DATAMEMBER => [ 0 ],
|
8464
|
-
IS_SUBDIR => [ 0x03e2, 0x044e, 0x0498, 0x049d, 0x04a1, 0x04a2, 0x04ba, 0x059d, 0x0634, 0x0636, 0x064c, 0x0653, 0x0678, 0x06b8, 0x06de, 0x06e7 ],
|
8518
|
+
IS_SUBDIR => [ 0x03e2, 0x03f4, 0x044e, 0x0498, 0x049d, 0x04a1, 0x04a2, 0x04ba, 0x059d, 0x0634, 0x0636, 0x064c, 0x0653, 0x0678, 0x06b8, 0x06de, 0x06e7 ],
|
8465
8519
|
0x0000 => { Name => 'Ver9401', Hidden => 1, RawConv => '$$self{Ver9401} = $val; $$self{OPTIONS}{Unknown}<2 ? undef : $val' },
|
8466
8520
|
|
8467
8521
|
0x03e2 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 181', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
8522
|
+
0x03f4 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 185', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
8468
8523
|
0x044e => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 178', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
8469
8524
|
0x0498 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 148', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
8470
8525
|
0x049d => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 167', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
@@ -9013,30 +9068,19 @@ my %isoSetting2010 = (
|
|
9013
9068
|
FORMAT => 'int8u',
|
9014
9069
|
WRITABLE => 1,
|
9015
9070
|
FIRST_ENTRY => 0,
|
9016
|
-
DATAMEMBER => [ 0 ],
|
9017
9071
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
9018
9072
|
# 0x0000: 1 for SLT-A37/A57/A65/A77, NEX-5N/7/F3/VG20
|
9019
9073
|
# 2 for SLT-A58/99V, NEX-3N/5R/5T/6/VG30/VG900, ILCA-68/77M2, ILCE-3000/3500/7/7M2/7R/7S/5000/6000
|
9020
9074
|
# 3 for ILCA-99M2, ILCE-6100/6300/6400/6500/6600/7C/7M3/7M4/7RM2/7RM3/7RM4/7RM5/7SM2/7SM3/9/9M2/1
|
9021
|
-
# 4 for ILCE-6700/7CM2/7CR, ZV-E1
|
9022
|
-
0x0000 => { Name => 'Ver9406', Hidden => 1, RawConv => '$$self{Ver9406} = $val; $$self{OPTIONS}{Unknown}<2 ? undef : $val' },
|
9023
9075
|
# 0x0001+0x0002: Int16u, seen 580 - 770: similar to "BatteryUnknown" ??
|
9024
9076
|
# 0x0005: int8u, seen 73 - 117: maybe Fahrenheit? Higher than "AmbientTemperature", but same trend.
|
9025
|
-
|
9026
|
-
0x0005 => [{
|
9077
|
+
0x0005 => {
|
9027
9078
|
Name => 'BatteryTemperature',
|
9028
|
-
Condition => '$$self{Ver9406} != 4',
|
9029
9079
|
ValueConv => '($val - 32) / 1.8', # convert to Celsius
|
9030
9080
|
ValueConvInv => '$val * 1.8 + 32',
|
9031
9081
|
PrintConv => 'sprintf("%.1f C",$val)',
|
9032
9082
|
PrintConvInv => '$val=~s/\s*C//; $val',
|
9033
|
-
},
|
9034
|
-
Name => 'BatteryLevel',
|
9035
|
-
Condition => '$$self{Ver9406} == 4',
|
9036
|
-
RawConv => '$val ? $val : undef', # only valid when not 0
|
9037
|
-
PrintConv => '"$val%"',
|
9038
|
-
PrintConvInv => '$val=~s/\s*\%//; $val',
|
9039
|
-
}],
|
9083
|
+
},
|
9040
9084
|
# 0x0006: usually 0, seen non-zero values only for SLT-A99V, ILCA-77M2/99M2 and ILCE-7/7R/7RM2/9: BatteryLevel Grip ?
|
9041
9085
|
0x0006 => {
|
9042
9086
|
Name => 'BatteryLevelGrip1',
|
@@ -9047,7 +9091,6 @@ my %isoSetting2010 = (
|
|
9047
9091
|
# 0x0007: seen values from 8 - 105, decreasing in sequences of images: BatteryLevel
|
9048
9092
|
0x0007 => {
|
9049
9093
|
Name => 'BatteryLevel',
|
9050
|
-
Condition => '$$self{Ver9406} != 4',
|
9051
9094
|
PrintConv => '"$val%"',
|
9052
9095
|
PrintConvInv => '$val=~s/\s*\%//; $val',
|
9053
9096
|
},
|
@@ -9066,6 +9109,49 @@ my %isoSetting2010 = (
|
|
9066
9109
|
# 0x0025: 0 or 1 for other SLT and NEX (0x0022, 0x0023, 0x0024 = 255)
|
9067
9110
|
);
|
9068
9111
|
|
9112
|
+
# Tag9406b (ref JR)
|
9113
|
+
%Image::ExifTool::Sony::Tag9406b = (
|
9114
|
+
PROCESS_PROC => \&ProcessEnciphered,
|
9115
|
+
WRITE_PROC => \&WriteEnciphered,
|
9116
|
+
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
9117
|
+
FORMAT => 'int8u',
|
9118
|
+
WRITABLE => 1,
|
9119
|
+
FIRST_ENTRY => 0,
|
9120
|
+
DATAMEMBER => [ 1, 4, 6 ],
|
9121
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
9122
|
+
# 0x0000: 4 for ILCE-6700/7CM2/7CR/9M3, ZV-E1
|
9123
|
+
0x0001 => {
|
9124
|
+
Name => 'Battery2',
|
9125
|
+
Hidden => 1,
|
9126
|
+
RawConv => '$$self{Battery2} = $val; $$self{OPTIONS}{Unknown}<2 ? undef : $val',
|
9127
|
+
# 0 for single battery, 1 for 2 batteries
|
9128
|
+
},
|
9129
|
+
0x0004 => {
|
9130
|
+
Name => 'BatteryStatus1',
|
9131
|
+
Hidden => 1,
|
9132
|
+
# seen 3, 5, 7: when 3 or 7 0x0005 appears valid; when 5, 0x0005 always 0
|
9133
|
+
RawConv => '$$self{BatteryStatus1} = $val; $$self{OPTIONS}{Unknown}<2 ? undef : $val',
|
9134
|
+
},
|
9135
|
+
0x0005 => {
|
9136
|
+
Name => 'BatteryLevel',
|
9137
|
+
Condition => '$$self{BatteryStatus1} != 5',
|
9138
|
+
PrintConv => '"$val%"',
|
9139
|
+
PrintConvInv => '$val=~s/\s*\%//; $val',
|
9140
|
+
},
|
9141
|
+
0x0006 => {
|
9142
|
+
Name => 'BatteryStatus2',
|
9143
|
+
Condition => '$$self{Battery2} == 1',
|
9144
|
+
Hidden => 1,
|
9145
|
+
RawConv => '$$self{BatteryStatus2} = $val; $$self{OPTIONS}{Unknown}<2 ? undef : $val',
|
9146
|
+
},
|
9147
|
+
0x0007 => {
|
9148
|
+
Name => 'BatteryLevel2',
|
9149
|
+
Condition => '$$self{Battery2} == 1 and $$self{BatteryStatus2} != 5',
|
9150
|
+
PrintConv => '"$val%"',
|
9151
|
+
PrintConvInv => '$val=~s/\s*\%//; $val',
|
9152
|
+
},
|
9153
|
+
);
|
9154
|
+
|
9069
9155
|
# Tag940a (ref PH, decoded mainly from A77)
|
9070
9156
|
%Image::ExifTool::Sony::Tag940a = (
|
9071
9157
|
PROCESS_PROC => \&ProcessEnciphered,
|
@@ -9760,7 +9846,7 @@ my %isoSetting2010 = (
|
|
9760
9846
|
WRITE_PROC => \&WriteEnciphered,
|
9761
9847
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
9762
9848
|
FORMAT => 'int8u',
|
9763
|
-
NOTES => 'Valid for the ILCE-1/6700/7CM2/7CR/7M4/7RM5/7SM3, ILME-FX3/FX30, ZV-E1.',
|
9849
|
+
NOTES => 'Valid for the ILCE-1/6700/7CM2/7CR/7M4/7RM5/7SM3/9M3, ILME-FX3/FX30, ZV-E1.',
|
9764
9850
|
FIRST_ENTRY => 0,
|
9765
9851
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
9766
9852
|
0x0000 => { Name => 'Tag9416_0000', PrintConv => 'sprintf("%3d",$val)', RawConv => '$$self{TagVersion} = $val' },
|
@@ -9944,7 +10030,7 @@ my %isoSetting2010 = (
|
|
9944
10030
|
},
|
9945
10031
|
0x08e5 => {
|
9946
10032
|
Name => 'APS-CSizeCapture',
|
9947
|
-
Condition => '$$self{Model} =~ /^(ILCE-7RM5|ZV-E1)\b/',
|
10033
|
+
Condition => '$$self{Model} =~ /^(ILCE-(7CM2|7CR|7RM5)|ZV-E1)\b/',
|
9948
10034
|
PrintConv => {
|
9949
10035
|
0 => 'Off',
|
9950
10036
|
1 => 'On',
|
@@ -10674,6 +10760,32 @@ my %isoSetting2010 = (
|
|
10674
10760
|
ValueConv => '$val[1] =~ /^W/i ? -$val[0] : $val[0]',
|
10675
10761
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
|
10676
10762
|
},
|
10763
|
+
HiddenData => {
|
10764
|
+
Require => {
|
10765
|
+
# (Note: This pointer is fragile in JPEG images, and won't be updated
|
10766
|
+
# when the file is written unless the EXIF information is also written, but
|
10767
|
+
# an incorrect offset is fixed by subsequently writing EXIF with ExifTool)
|
10768
|
+
0 => 'Sony:HiddenDataOffset',
|
10769
|
+
1 => 'Sony:HiddenDataLength',
|
10770
|
+
},
|
10771
|
+
Notes => q{
|
10772
|
+
hidden data in some Sony JPG and ARW images, extracted only if specifically
|
10773
|
+
requested
|
10774
|
+
},
|
10775
|
+
RawConv => q{
|
10776
|
+
my $hdOff = $val[0];
|
10777
|
+
my $reqTag = $$self{REQ_TAG_LOOKUP}{hiddendata};
|
10778
|
+
my $hDump = $self->Options('HtmlDump');
|
10779
|
+
return undef unless $reqTag or $self->Options('Validate') or $hDump;
|
10780
|
+
my $dataPt = Image::ExifTool::Sony::ReadHiddenData($self, $hdOff, $val[1]);
|
10781
|
+
if ($dataPt and $hDump) {
|
10782
|
+
my $msg = '(Sony HiddenData)';
|
10783
|
+
$msg .= ' <span class=V>(fixed)</span>' if $hdOff != $val[0];
|
10784
|
+
$self->HDump($hdOff, $val[1], $msg, undef, 0x08);
|
10785
|
+
}
|
10786
|
+
return $reqTag ? $dataPt : undef;
|
10787
|
+
},
|
10788
|
+
},
|
10677
10789
|
);
|
10678
10790
|
|
10679
10791
|
# add our composite tags
|
@@ -10722,6 +10834,34 @@ sub SortLensTypes
|
|
10722
10834
|
$$minoltaTypes{OTHER} = $other;
|
10723
10835
|
}
|
10724
10836
|
|
10837
|
+
#------------------------------------------------------------------------------
|
10838
|
+
# Read HiddenData from JPEG trailer
|
10839
|
+
# Inputs: 0) ExifTool ref, 1) HiddenDataOffset (abs), 2) HiddenDataLength
|
10840
|
+
# Returns: HiddenData reference, or undef on error
|
10841
|
+
# --> updates $hdOff upon return if it was incorrect
|
10842
|
+
sub ReadHiddenData($$$)
|
10843
|
+
{
|
10844
|
+
my ($et, $hdOff, $hdLen) = @_;
|
10845
|
+
my $raf = $$et{RAF};
|
10846
|
+
my ($buff, $pos);
|
10847
|
+
unless ($raf->Seek($hdOff,0) and $raf->Read($buff,$hdLen) == $hdLen and
|
10848
|
+
$buff=~/^\x55\x26\x11\x05\0/)
|
10849
|
+
{
|
10850
|
+
# search the first 4096 bytes of the trailer to find the HiddenData
|
10851
|
+
unless ($$et{TrailerStart} and $raf->Seek($$et{TrailerStart},0) and
|
10852
|
+
$raf->Read($buff,4096) and $buff=~/\x55\x26\x11\x05\0/g and
|
10853
|
+
$pos = $$et{TrailerStart}+pos($buff)-5 and $raf->Seek($pos,0) and
|
10854
|
+
$raf->Read($buff,$hdLen) == $hdLen)
|
10855
|
+
{
|
10856
|
+
$et->Warn('Error reading HiddenData',1);
|
10857
|
+
return undef;
|
10858
|
+
}
|
10859
|
+
$_[1] = $pos; # return fixed offset
|
10860
|
+
$et->Warn('Fixed incorrect HiddenDataOffset',1) if $et->Options('Validate') or $$et{IsWriting};
|
10861
|
+
}
|
10862
|
+
return \$buff;
|
10863
|
+
}
|
10864
|
+
|
10725
10865
|
#------------------------------------------------------------------------------
|
10726
10866
|
# Process "SONY PIC\0" maker notes (DSC-H200/J10/W370/W510, MHS-TS20, ref PH)
|
10727
10867
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|