exiftool-vendored.pl 12.69.0 → 12.72.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.
- package/bin/Changes +78 -12
- package/bin/MANIFEST +5 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +10 -10
- package/bin/exiftool +32 -25
- package/bin/lib/Image/ExifTool/AAC.pm +175 -0
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +2 -1
- package/bin/lib/Image/ExifTool/CBOR.pm +18 -2
- package/bin/lib/Image/ExifTool/Canon.pm +82 -20
- package/bin/lib/Image/ExifTool/DJI.pm +3 -2
- package/bin/lib/Image/ExifTool/EXE.pm +54 -6
- package/bin/lib/Image/ExifTool/Exif.pm +111 -11
- package/bin/lib/Image/ExifTool/FujiFilm.pm +145 -20
- package/bin/lib/Image/ExifTool/GIF.pm +5 -1
- package/bin/lib/Image/ExifTool/GoPro.pm +16 -1
- package/bin/lib/Image/ExifTool/ID3.pm +76 -10
- package/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- package/bin/lib/Image/ExifTool/JPEG.pm +1 -1
- package/bin/lib/Image/ExifTool/JSON.pm +4 -1
- package/bin/lib/Image/ExifTool/Jpeg2000.pm +30 -15
- package/bin/lib/Image/ExifTool/M2TS.pm +21 -16
- package/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
- package/bin/lib/Image/ExifTool/Nikon.pm +203 -102
- package/bin/lib/Image/ExifTool/Olympus.pm +7 -1
- package/bin/lib/Image/ExifTool/PNG.pm +8 -13
- package/bin/lib/Image/ExifTool/Panasonic.pm +10 -1
- package/bin/lib/Image/ExifTool/Pentax.pm +15 -6
- package/bin/lib/Image/ExifTool/QuickTime.pm +59 -13
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +59 -11
- package/bin/lib/Image/ExifTool/README +7 -2
- package/bin/lib/Image/ExifTool/RIFF.pm +53 -9
- package/bin/lib/Image/ExifTool/Ricoh.pm +109 -1
- package/bin/lib/Image/ExifTool/Samsung.pm +3 -2
- package/bin/lib/Image/ExifTool/Sony.pm +177 -37
- package/bin/lib/Image/ExifTool/TagLookup.pm +6961 -6856
- package/bin/lib/Image/ExifTool/TagNames.pod +580 -344
- package/bin/lib/Image/ExifTool/Text.pm +4 -5
- package/bin/lib/Image/ExifTool/Validate.pm +6 -5
- package/bin/lib/Image/ExifTool/WriteExif.pl +19 -4
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -0
- package/bin/lib/Image/ExifTool/WriteRIFF.pl +9 -3
- package/bin/lib/Image/ExifTool/Writer.pl +102 -50
- package/bin/lib/Image/ExifTool.pm +74 -36
- package/bin/lib/Image/ExifTool.pod +28 -17
- package/bin/perl-Image-ExifTool.spec +9 -9
- package/bin/pp_build_exe.args +5 -4
- package/package.json +4 -5
|
@@ -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
|