exiftool_vendored 11.55.0 → 11.57.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of exiftool_vendored might be problematic. Click here for more details.

@@ -4,6 +4,8 @@
4
4
  # Description: Read Motorola meta information
5
5
  #
6
6
  # Revisions: 2015/10/29 - P. Harvey Created
7
+ #
8
+ # References: 1) Neal Krawetz private communication
7
9
  #------------------------------------------------------------------------------
8
10
 
9
11
  package Image::ExifTool::Motorola;
@@ -12,7 +14,7 @@ use strict;
12
14
  use vars qw($VERSION);
13
15
  use Image::ExifTool::Exif;
14
16
 
15
- $VERSION = '1.00';
17
+ $VERSION = '1.01';
16
18
 
17
19
  # Motorola makernotes tags (ref PH)
18
20
  %Image::ExifTool::Motorola::Main = (
@@ -20,14 +22,122 @@ $VERSION = '1.00';
20
22
  CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
21
23
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
22
24
  WRITABLE => 1,
23
- # 0x5570 - some sort of picture mode (auto,hdr)
24
- # 0x6400 - HDR? (OFF,ON)
25
- # 0x6410 - HDR? (NO,YES)
26
- # 0x6420 - only exists in HDR images
27
- 0x665e => { Name => 'Sensor', Writable => 'string' }, # (eg. "BACK,IMX230")
28
- # 0x6700 - serial number?
29
- 0x6705 => { Name => 'ManufactureDate', Writable => 'string' }, # (NC, eg. "03Jun2015")
30
- # 0x6706 - serial number?
25
+ # 0x54e0 - int8u: 1
26
+ # 0x54f0 - float
27
+ 0x5500 => { Name => 'BuildNumber', Writable => 'string' }, #1 (eg. 'MPJ24.139-23.4')
28
+ 0x5501 => { Name => 'SerialNumber', Writable => 'string' }, #1 (eg. 'ZY2238TJ4V')
29
+ # 0x5502 - int8u
30
+ # 0x5503 - int8u
31
+ # 0x5510 - int8u: 0,1
32
+ # 0x5511 - int32u (3 of these tags for some cameras)
33
+ # 0x5512 - int32u
34
+ # 0x5520 - int16s
35
+ # 0x5530 - string: 'continuous-picture','auto','continuous-video'
36
+ # 0x5540 - int8u: 95
37
+ # 0x5550 - int8u: 85,90
38
+ # 0x5560 - string: 'auto'
39
+ # 0x5570 - string: 'auto','auto-hdr'
40
+ # 0x5580 - int32s: 9000,14949,15000,24000
41
+ # 0x5590 - int32s: 30000
42
+ # 0x55a0 - int32s: 960,1280,1440
43
+ # 0x55b0 - int32s: 720,960,1080
44
+ # 0x55c0 - int32s: 30
45
+ # 0x55d0 - string: 'yuv420sp'
46
+ # 0x55e0-0x55e9 - int16u
47
+ # 0x55f0 - int8u: 10
48
+ # 0x55f1 - int8u: 13
49
+ # 0x55f2-0x55f5 - int16u[130]
50
+ # 0x5600 - int8u: 0,16
51
+ # 0x5601 - int16u[16]
52
+ # 0x5602 - int32u[3,50]
53
+ # 0x5603 - int32u: 0
54
+ # 0x6400 - string: 'AUTO','ON','OFF'
55
+ # 0x6401 - string: 'HDR'
56
+ # 0x6410 - string: 'NO','YES'
57
+ # 0x6420 - int32s: 0 (only exists in HDR images?)
58
+ # 0x6430 - float
59
+ # 0x6431 - int8u: 0,1
60
+ # 0x6432 - int8u: 0,79,100
61
+ # 0x6433 - int8u: 0,1
62
+ # 0x6434 - int8u: 0,65,100
63
+ # 0x6435 - int8u: 1,6,24
64
+ # 0x6436 - int8u: 55,60
65
+ # 0x6437 - int8u: 30,35,40
66
+ # 0x6438 - int8u: 24,40
67
+ # 0x6439 - int8u: 15,50
68
+ # 0x643a - int8u: 0,20
69
+ # 0x643b - string: '2,8,-4','2,10,-4',''
70
+ # 0x643c - int32s
71
+ # 0x643d - float
72
+ # 0x6440 - int8u[N]: 0's and 1's
73
+ # 0x6441 - int8u[N]
74
+ # 0x6442,0x6443 - int8u[N]: 0's and 1's
75
+ # 0x644d - string: 'YES'
76
+ # 0x644f - float
77
+ # 0x6450 - float
78
+ # 0x6451 - float: 0.699999988079071
79
+ # 0x6452 - int8u: 1
80
+ # 0x6470 - string: 'AUTO'
81
+ # 0x6471 - int8u: 1
82
+ # 0x6473 - int8u: 24
83
+ # 0x6474 - int8u: 10
84
+ # 0x6475 - int32u[24]
85
+ # 0x6476 - int32u: 2
86
+ # 0x6490 - int8u: 0
87
+ # 0x64c0 - int32s: 0,2
88
+ # 0x64c1 - int32u: 1,4,64
89
+ # 0x64c2,0x64c3 - int32s
90
+ # 0x64c4 - int32s
91
+ # 0x64c5 - int32u
92
+ # 0x6500 - int8u: 1
93
+ # 0x6501 - string: 'Luma-Chroma Plane','Chroma only' or int8u: 0
94
+ # 0x6502 - string: 'Luma-Chroma Plane','Chroma only','' or int8u: 1,255
95
+ # 0x6504 - int32s
96
+ # 0x6530-0x6535 - int32s
97
+ # 0x6600-0x6605 - int8u
98
+ # 0x6606 - string: 'D50','TL84','5000' - illuminant? color temperature?
99
+ # 0x6607 - string: 'D50g','D65','3000' - illuminant? color temperature?
100
+ # 0x6608 - string: 'A'
101
+ # 0x6609-0x660e - float
102
+ # 0x660f - int12u
103
+ # 0x6612-0x661b - int16u
104
+ # 0x661d - int16u
105
+ # 0x661e-0x6635 - float
106
+ # 0x6637 - int8u[212]
107
+ # 0x6640,0x6641 - int8u
108
+ # 0x6642-0x6649 - int16u
109
+ # 0x664e - in8u
110
+ # 0x664f-0x6652 - int16u
111
+ # 0x6653 - string: 'QC','AL'
112
+ # 0x6654-0x6656 - int16u
113
+ # 0x665d - int8u: 0
114
+ 0x665e => { Name => 'Sensor', Writable => 'string' }, # (eg. 'BACK,IMX230')
115
+ # 0x6700 - string: eg. 'eac040d0','333e1721','001b7b3a','000000000005040f'
116
+ # 0x6701 - string: eg. '14048001',940140230','940140190'
117
+ # 0x6702 - string: '0L','1L','0S','3S','32','33,'42'
118
+ # 0x6703 - string: 'PR','SEG','LIG','LI','SHV','SH','SO'
119
+ # 0x6704 - string: 'DO','GX1','GZ0','GZ1','GX2','VI','VI1','VI2','GU',''
120
+ 0x6705 => { Name => 'ManufactureDate', Writable => 'string' }, # (NC, eg. '03Jun2015')
121
+ # 0x6706 - string: eg. '30454e4e','42%','01%','01','1','904c2ca2'
122
+ # 0x6707 - string: eg. '1','25a2ca16','002371e1','69'
123
+ # 0x6708-0x670c - string or int16u (string may be firmware revision)
124
+ # 0x6800 - int32u: 1,2
125
+ # 0x6801,0x6802 - float
126
+ # 0x6803 - int16u
127
+ # 0x6804,0x6805 - float
128
+ # 0x6806 - int16u,int32s
129
+ # 0x6807 - int32s,int32u[3]
130
+ # 0x6808 - int32u,int32u[3]
131
+ # 0x6809,0x680a - float[3]
132
+ # 0x680d - int8u: 0
133
+ # 0x680e - float: 0
134
+ # 0x7000 - int8u: 0,2
135
+ # 0x7001,0x7002 - int16s
136
+ # 0x7003-0x7005 - int16u
137
+ # 0x7100 - string: '0-7'
138
+ # 0x7101 - string: '4-7','0-7'
139
+ # 0x7102 - string: '0-3',''
140
+ # 0x7103,0x7104 - string: comma-separated lists of numbers
31
141
  );
32
142
 
33
143
  1; # end
@@ -60,7 +60,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
60
60
  use Image::ExifTool::Exif;
61
61
  use Image::ExifTool::GPS;
62
62
 
63
- $VERSION = '3.66';
63
+ $VERSION = '3.67';
64
64
 
65
65
  sub LensIDConv($$$);
66
66
  sub ProcessNikonAVI($$$);
@@ -2028,6 +2028,17 @@ my %binaryDataAttrs = (
2028
2028
  Name => 'SceneAssist',
2029
2029
  Writable => 'string',
2030
2030
  },
2031
+ 0x009d => { #NealKrawetz
2032
+ Name => 'DateStampMode',
2033
+ Writable => 'int16u',
2034
+ Notes => 'feature to imprint date/time on image',
2035
+ PrintConv => { #PH
2036
+ 0 => 'Off',
2037
+ 1 => 'Date & Time',
2038
+ 2 => 'Date',
2039
+ 3 => 'Date Counter', # (NC) (D3500)
2040
+ },
2041
+ },
2031
2042
  0x009e => { #JD
2032
2043
  Name => 'RetouchHistory',
2033
2044
  Writable => 'int16u',
@@ -3702,6 +3702,7 @@ my %indexInfo = (
3702
3702
  },
3703
3703
  0x7f => {
3704
3704
  Name => 'DateTimeOriginal', #(NC)
3705
+ Description => 'Date/Time Original',
3705
3706
  Format => 'string[24]',
3706
3707
  Groups => { 2 => 'Time' },
3707
3708
  PrintConv => '$self->ConvertDateTime($val)',
@@ -70,6 +70,7 @@ my %formatType = (
70
70
  chromaticities => { },
71
71
  capDate => {
72
72
  Name => 'DateTimeOriginal',
73
+ Description => 'Date/Time Original',
73
74
  Groups => { 2 => 'Time' },
74
75
  PrintConv => '$self->ConvertDateTime($val)',
75
76
  },
@@ -1270,7 +1270,7 @@ my %shootingMode = (
1270
1270
  },
1271
1271
  0xd1 => { #PH
1272
1272
  Name => 'ISO',
1273
- RawConv => '$val == 4294967295 ? undef : $val',
1273
+ RawConv => '$val > 0xfffffff0 ? undef : $val',
1274
1274
  Writable => 'int32u',
1275
1275
  },
1276
1276
  0xd6 => { #PH (DC-S1)
@@ -32,6 +32,8 @@
32
32
  # 20) https://developer.apple.com/legacy/library/documentation/quicktime/reference/QT7-1_Update_Reference/QT7-1_Update_Reference.pdf
33
33
  # 21) Francois Bonzon private communication
34
34
  # 22) https://developer.apple.com/library/mac/documentation/QuickTime/QTFF/Metadata/Metadata.html
35
+ # 23) http://atomicparsley.sourceforge.net/mpeg-4files.html
36
+ # 24) https://github.com/sergiomb2/libmp4v2/wiki/iTunesMetadata
35
37
  #------------------------------------------------------------------------------
36
38
 
37
39
  package Image::ExifTool::QuickTime;
@@ -42,7 +44,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
42
44
  use Image::ExifTool::Exif;
43
45
  use Image::ExifTool::GPS;
44
46
 
45
- $VERSION = '2.33';
47
+ $VERSION = '2.35';
46
48
 
47
49
  sub ProcessMOV($$;$);
48
50
  sub ProcessKeys($$$);
@@ -1611,6 +1613,7 @@ my %eeBox = (
1611
1613
  },
1612
1614
  date => { # (NC)
1613
1615
  Name => 'DateTimeOriginal',
1616
+ Description => 'Date/Time Original',
1614
1617
  Groups => { 2 => 'Time' },
1615
1618
  Shift => 'Time',
1616
1619
  ValueConv => q{
@@ -2791,6 +2794,7 @@ my %eeBox = (
2791
2794
  covr => { Name => 'CoverArt', Groups => { 2 => 'Preview' } },
2792
2795
  cpil => { #10
2793
2796
  Name => 'Compilation',
2797
+ Format => 'int8u', #23
2794
2798
  PrintConv => { 0 => 'No', 1 => 'Yes' },
2795
2799
  },
2796
2800
  disk => {
@@ -2801,6 +2805,7 @@ my %eeBox = (
2801
2805
  },
2802
2806
  pgap => { #10
2803
2807
  Name => 'PlayGap',
2808
+ Format => 'int8u', #23
2804
2809
  PrintConv => {
2805
2810
  0 => 'Insert Gap',
2806
2811
  1 => 'No Gap',
@@ -2822,6 +2827,7 @@ my %eeBox = (
2822
2827
  #
2823
2828
  akID => { #10
2824
2829
  Name => 'AppleStoreAccountType',
2830
+ Format => 'int8u', #24
2825
2831
  PrintConv => {
2826
2832
  0 => 'iTunes',
2827
2833
  1 => 'AOL',
@@ -2845,6 +2851,7 @@ my %eeBox = (
2845
2851
  gnre => { #10
2846
2852
  Name => 'Genre',
2847
2853
  Avoid => 1,
2854
+ # (Note: not written as int16u if numerical, although it should be)
2848
2855
  PrintConv => q{
2849
2856
  return $val unless $val =~ /^\d+$/;
2850
2857
  require Image::ExifTool::ID3;
@@ -5238,12 +5245,14 @@ my %eeBox = (
5238
5245
  grup => { Name => 'Grouping', Avoid => 1 }, #10
5239
5246
  hdvd => { #10
5240
5247
  Name => 'HDVideo',
5248
+ Format => 'int8u', #24
5241
5249
  PrintConv => { 0 => 'No', 1 => 'Yes' },
5242
5250
  },
5243
5251
  keyw => 'Keyword', #7
5244
5252
  ldes => 'LongDescription', #10
5245
5253
  pcst => { #7
5246
5254
  Name => 'Podcast',
5255
+ Format => 'int8u', #23
5247
5256
  PrintConv => { 0 => 'No', 1 => 'Yes' },
5248
5257
  },
5249
5258
  perf => 'Performer',
@@ -5255,6 +5264,7 @@ my %eeBox = (
5255
5264
  purl => 'PodcastURL', #7
5256
5265
  rtng => { #10
5257
5266
  Name => 'Rating',
5267
+ Format => 'int8u', #23
5258
5268
  PrintConv => {
5259
5269
  0 => 'none',
5260
5270
  1 => 'Explicit',
@@ -5432,6 +5442,7 @@ my %eeBox = (
5432
5442
  sosn => 'SortShow', #10
5433
5443
  stik => { #10
5434
5444
  Name => 'MediaType',
5445
+ Format => 'int8u', #23
5435
5446
  PrintConvColumns => 2,
5436
5447
  PrintConv => { #(http://weblog.xanga.com/gryphondwb/615474010/iphone-ringtones---what-did-itunes-741-really-do.html)
5437
5448
  0 => 'Movie (old)', #forum9059 (was Movie)
@@ -5463,6 +5474,7 @@ my %eeBox = (
5463
5474
  yrrc => 'Year', #(ffmpeg source)
5464
5475
  itnu => { #PH (iTunes 10.5)
5465
5476
  Name => 'iTunesU',
5477
+ Format => 'int8s',
5466
5478
  Description => 'iTunes U',
5467
5479
  PrintConv => { 0 => 'No', 1 => 'Yes' },
5468
5480
  },
@@ -27,12 +27,12 @@
27
27
  package Image::ExifTool::Sony;
28
28
 
29
29
  use strict;
30
- use vars qw($VERSION %sonyLensTypes);
30
+ use vars qw($VERSION %sonyLensTypes %sonyLensTypes2);
31
31
  use Image::ExifTool qw(:DataAccess :Utils);
32
32
  use Image::ExifTool::Exif;
33
33
  use Image::ExifTool::Minolta;
34
34
 
35
- $VERSION = '3.09';
35
+ $VERSION = '3.11';
36
36
 
37
37
  sub ProcessSRF($$$);
38
38
  sub ProcessSR2($$$);
@@ -52,7 +52,7 @@ sub PrintInvLensSpec($;$$);
52
52
 
53
53
  # Sony E-mount lenses
54
54
  # (NOTE: these should be kept in sync with the 65535 entries in %minoltaLensTypes)
55
- my %sonyLensTypes2 = (
55
+ %sonyLensTypes2 = (
56
56
  Notes => 'Lens type numbers for Sony E-mount lenses used by NEX/ILCE models.',
57
57
  0 => 'Unknown E-mount lens or other lens',
58
58
  0.1 => 'Sigma 19mm F2.8 [EX] DN',
@@ -193,8 +193,11 @@ my %sonyLensTypes2 = (
193
193
  50503 => 'Sigma 16mm F1.4 DC DN | C', #JR (017)
194
194
  50507 => 'Sigma 105mm F1.4 DG HSM | A', #IB (018)
195
195
  50508 => 'Sigma 56mm F1.4 DC DN | C', #JR (018)
196
- 50512 => 'Sigma 70-200mm F2.8 DG OS HSM | S', #IB (018)
196
+ 50512 => 'Sigma 70-200mm F2.8 DG OS HSM | S + MC-11', #IB (018) (JR added "+ MC-11")
197
197
  50513 => 'Sigma 70mm F2.8 DG MACRO | A', #JR (018)
198
+ 50514 => 'Sigma 45mm F2.8 DG DN | C', #IB/JR (019)
199
+ 50515 => 'Sigma 35mm F1.2 DG DN | A', #IB/JR (019)
200
+ 50516 => 'Sigma 14-24mm F2.8 DG DN | A', #IB/JR (019)
198
201
 
199
202
  50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
200
203
  50993 => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB
@@ -933,7 +936,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
933
936
  # unknown offsets or values for DSC-HX60V/HX350/HX400V/QX10/QX30/QX100/RX10/RX100M2/RX100M3/WX220/WX350,
934
937
  # ILCA-68/77M2, ILCE-5000/5100/6000/7/7M2/7R/7S/QX1, Stellar2, Lusso
935
938
  # unknown offsets or values for DSC-HX80/HX90V/RX0/RX1RM2/RX10M2/RX10M3/RX100M4/RX100M5/WX500, ILCE-6300/6500/7RM2/7SM2, ILCA-99M2
936
- # unknown offsets or values for ILCE-6400/7M3/7RM3/9, DSC-RX10M4/RX100M6/RX100M5A/HX99
939
+ # unknown offsets or values for ILCE-6400/7M3/7RM3/7RM4/9, DSC-RX0M2/RX10M4/RX100M6/RX100M5A/HX99
937
940
  {
938
941
  Name => 'Tag2010a', # ad
939
942
  Condition => '$$self{Model} =~ /^NEX-5N$/',
@@ -974,7 +977,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
974
977
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010h' },
975
978
  },{
976
979
  Name => 'Tag2010i', # ?
977
- Condition => '$$self{Model} =~ /^(ILCE-(6400|7M3|7RM3|9)|DSC-(RX10M4|RX100M6|RX100M5A|HX99|RX0M2))\b/',
980
+ Condition => '$$self{Model} =~ /^(ILCE-(6400|7M3|7RM3|7RM4|9)|DSC-(RX10M4|RX100M6|RX100M5A|HX99|RX0M2))\b/',
978
981
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010i' },
979
982
  },{
980
983
  Name => 'Tag_0x2010',
@@ -1032,6 +1035,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1032
1035
  1 => 'Flash Fired',
1033
1036
  2 => 'External Flash Fired',
1034
1037
  3 => 'Wireless Controlled Flash Fired', # (NC) seen for ILCE-9 and ILCE-7M3 images
1038
+ # 5 => 'External Flash ???', # seen for ILCE-7RM4
1035
1039
  },
1036
1040
  },
1037
1041
  # 0x2018 - something with external flash: seen 1 only when 0x2017 = 2
@@ -1491,14 +1495,14 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1491
1495
  # from mid-2015: ILCE-7RM2/7SM2/6300 and newer models use different offsets
1492
1496
  {
1493
1497
  Name => 'Tag9050a',
1494
- Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(6300|6400|6500|7M3|7RM2|7RM3|7SM2|9)|ILCA-99M2)/',
1498
+ Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(6300|6400|6500|7M3|7RM2|7RM3|7RM4|7SM2|9)|ILCA-99M2)/',
1495
1499
  SubDirectory => {
1496
1500
  TagTable => 'Image::ExifTool::Sony::Tag9050a',
1497
1501
  ByteOrder => 'LittleEndian',
1498
1502
  },
1499
1503
  },{
1500
1504
  Name => 'Tag9050b',
1501
- Condition => '$$self{Model} =~ /^(ILCE-(6300|6400|6500|7M3|7RM2|7RM3|7SM2|9)|ILCA-99M2)/',
1505
+ Condition => '$$self{Model} =~ /^(ILCE-(6300|6400|6500|7M3|7RM2|7RM3|7RM4|7SM2|9)|ILCA-99M2)/',
1502
1506
  SubDirectory => {
1503
1507
  TagTable => 'Image::ExifTool::Sony::Tag9050b',
1504
1508
  ByteOrder => 'LittleEndian',
@@ -1516,7 +1520,8 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1516
1520
  # 0xd0 (e) H90, W650, W690: tag9400 decoding appears not valid/different
1517
1521
  # 0x23 (e) for DSC-RX10/HX60V/HX350/HX400V/WX220/WX350, ILCE-7/7R/5000/6000, ILCA-68/77M2
1518
1522
  # 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
1519
- # 0x26 (e) for ILCE-6400/7M3/7RM3/9, DSC-RX10M4/RX100M5A/RX100M6/HX99
1523
+ # 0x26 (e) for ILCE-6400/7M3/7RM3/9, DSC-RX0M2/RX10M4/RX100M5A/RX100M6/HX99
1524
+ # 0x28 (e) for ILCE-7RM4
1520
1525
  # first byte decoded: 40, 204, 202, 27, 58, 62, 48, 215 respectively
1521
1526
  {
1522
1527
  Name => 'Tag9400a',
@@ -1531,7 +1536,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1531
1536
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9400b' },
1532
1537
  },{
1533
1538
  Name => 'Tag9400c',
1534
- Condition => '$$valPt =~ /^[\x23\x24\x26]/',
1539
+ Condition => '$$valPt =~ /^[\x23\x24\x26\x28]/',
1535
1540
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9400c' },
1536
1541
  },{
1537
1542
  Name => 'Sony_0x9400',
@@ -1586,11 +1591,12 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1586
1591
  # 7c 00 fe 0f 0x0adb (w) ILCE-9 v0.01-v2.00
1587
1592
  # 7d 00 fe 0f 0x0adb (w) ILCE-9 v2.10-v4.10
1588
1593
  # 7f 00 fa 0f 0x0add (x) DSC-RX10M4 v1.00
1589
- # 80 00 fa 0f 0x0add (x) ILCE-7M3/7RM3 v1.00-v2.10
1594
+ # 80 00 fa 0f 0x0add (x) ILCE-7M3/7RM3 v1.00-v3.01
1590
1595
  # 82 00 fc 0f 0x0ad9 (y) DSC-RX100M5A v1.00, DSC-RX100M6 v1.00
1591
1596
  # 90 00 fe 0f 0x098f? (z) DSC-HX99 v1.00
1592
- # 92 10 ff 0f (za) ILCE-6400 v1.00
1593
- # 94 00 ce 0b 0x0879 (zb) ILCE-9 v4.13-v5.00
1597
+ # 92 10 ff 0f 0x0990 (za) ILCE-6400 v1.00
1598
+ # 94 00 ce 0b 0x0879 (zb) ILCE-9 v5.0x, DSC-RX0M2
1599
+ # 98 00 db 0c 0x088a (zc) ILCE-7RM4 v1.00
1594
1600
  #
1595
1601
  # 0x0004 - (RX100: 0 or 1. subsequent data valid only if 1 - PH)
1596
1602
  # 0x0007 => {
@@ -1629,7 +1635,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1629
1635
  # 0x1d 0x01 DSC-RX10M4
1630
1636
  # 0x1e 0x01 ILCE-7M3/7RM3, DSC-RX100M5A/RX100M6
1631
1637
  # 0x1f 0x01 DSC-HX99
1632
- # 0x20 0x01 ILCE-6400, ILCE-9 v5.00
1638
+ # 0x20 0x01 ILCE-6400/7RM4, ILCE-9 v5.0x, DSC-RX0M2
1633
1639
  # var var SLT-A58/A99V, HV, ILCA-68/77M2/99M2
1634
1640
  # 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)
1635
1641
  # 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/',
@@ -1653,7 +1659,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1653
1659
  # 13 0 9 2 2 DSC-QX10/QX100/RX100M2
1654
1660
  # 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
1655
1661
  # 16 0 85 2 2 DSC-HX80/HX90V/WX500
1656
- # 17 0 232 1 2 DSC-RX0/RX1RM2/RX10M2/RX10M3/RX10M4/RX100M4/RX100M5/RX100M5A/RX100M6/HX99, ILCE-6300/6400/6500/7M3/7RM2/7RM3/7SM2/9, ILCA-99M2
1662
+ # 17 0 232 1 2 DSC-RX0/RX0M2/RX1RM2/RX10M2/RX10M3/RX10M4/RX100M4/RX100M5/RX100M5A/RX100M6/HX99, ILCE-6300/6400/6500/7M3/7RM2/7RM3/7RM4/7SM2/9, ILCA-99M2
1657
1663
  # other values for Panorama images and several other models
1658
1664
  0x9404 => [{
1659
1665
  Name => 'Tag9404a',
@@ -1687,7 +1693,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1687
1693
  # 142 var (0x25 = 37 var enc.) DSC-HX80/HX90V/RX1RM2/RX10M2/RX10M3/RX100M4/WX500, ILCE-6300/7RM2/7SM2
1688
1694
  # 144 var (0xe1 = 225 var enc.) DSC-RX100M5
1689
1695
  # 145 var (0x76 = 118 var enc.) ILCA-99M2, ILCE-6500, DSC-RX0
1690
- # 163 var (0x8b = 139 var enc.) ILCE-6400/7M3/7RM3/9, DSC-RX10M4/RX100M5A/RX100M6/HX99
1696
+ # 163 var (0x8b = 139 var enc.) ILCE-6400/7M3/7RM3/7RM4/9, DSC-RX0M2/RX10M4/RX100M5A/RX100M6/HX99
1691
1697
  0x9405 => [{
1692
1698
  Name => 'Tag9405a',
1693
1699
  # first byte must be 0x1b or 0x40 or 0x7d
@@ -1704,9 +1710,10 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1704
1710
  }],
1705
1711
  0x9406 => [{
1706
1712
  Name => 'Tag9406',
1707
- # - first byte must be 0x01 or 0x02 (enciphered 0x01 or 0x08), or 0x03 (enc. 0x1b) for ILCE-6300/7RM2/7SM2, and
1713
+ # - first byte must be 0x01 or 0x02 (enciphered 0x01 or 0x08),
1714
+ # or 0x03 (enc. 0x1b) for ILCE-6300/6400/6500/7M3/7RM2/7RM3/7RM4/7SM2/9, and ILCA-99M2
1708
1715
  # third byte must be 0x02 or 0x03 (enciphered 0x08 or 0x1b) - ref JR
1709
- # (applies to most SLT and NEX models, but no DSC models)
1716
+ # (applies to most SLT/ILCA and NEX/ILCE models, but no DSC models)
1710
1717
  Condition => '$$valPt =~ /^[\x01\x08\x1b].[\x08\x1b]/s',
1711
1718
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9406' },
1712
1719
  },{
@@ -1883,6 +1890,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1883
1890
  369 => 'DSC-RX100M5A', #JR
1884
1891
  371 => 'ILCE-6400', #IB
1885
1892
  372 => 'DSC-RX0M2', #JR
1893
+ 375 => 'ILCE-7RM4', #IB
1886
1894
  },
1887
1895
  },
1888
1896
  0xb020 => { #2
@@ -6036,6 +6044,7 @@ my %isoSetting2010 = (
6036
6044
  FIRST_ENTRY => 0,
6037
6045
  PRIORITY => 0,
6038
6046
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
6047
+ IS_SUBDIR => [ 0x04b0 ],
6039
6048
  0x04b0 => {
6040
6049
  Name => 'MeterInfo',
6041
6050
  Format => 'int32u[486]',
@@ -6072,6 +6081,7 @@ my %isoSetting2010 = (
6072
6081
  FIRST_ENTRY => 0,
6073
6082
  PRIORITY => 0,
6074
6083
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
6084
+ IS_SUBDIR => [ 0x04b4 ],
6075
6085
  0x0000 => { %sequenceImageNumber }, #PH
6076
6086
  0x0004 => { %sequenceFileNumber }, #PH
6077
6087
  0x0008 => { %releaseMode2, Format => 'int32u' },
@@ -6139,6 +6149,7 @@ my %isoSetting2010 = (
6139
6149
  FIRST_ENTRY => 0,
6140
6150
  PRIORITY => 0,
6141
6151
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
6152
+ IS_SUBDIR => [ 0x0490 ],
6142
6153
  0x0000 => { %sequenceImageNumber }, #PH
6143
6154
  0x0004 => { %sequenceFileNumber }, #PH
6144
6155
  0x0008 => { %releaseMode2, Format => 'int32u' },
@@ -6207,6 +6218,7 @@ my %isoSetting2010 = (
6207
6218
  FIRST_ENTRY => 0,
6208
6219
  PRIORITY => 0,
6209
6220
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
6221
+ IS_SUBDIR => [ 0x050c ],
6210
6222
  0x0000 => { %sequenceImageNumber }, #PH
6211
6223
  0x0004 => { %sequenceFileNumber }, #PH
6212
6224
  0x0008 => { %releaseMode2, Format => 'int32u' },
@@ -6269,6 +6281,8 @@ my %isoSetting2010 = (
6269
6281
  FIRST_ENTRY => 0,
6270
6282
  PRIORITY => 0,
6271
6283
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
6284
+ DATAMEMBER => [ 0x1892 ],
6285
+ IS_SUBDIR => [ 0x04b8 ],
6272
6286
  0x0000 => { %sequenceImageNumber }, #PH
6273
6287
  0x0004 => { %sequenceFileNumber }, #PH
6274
6288
  0x0008 => { %releaseMode2, Format => 'int32u' },
@@ -6371,7 +6385,9 @@ my %isoSetting2010 = (
6371
6385
  Condition => '$$self{Model} !~ /^(DSC-|Stellar)/',
6372
6386
  Format => 'int16s[16]',
6373
6387
  },
6374
- # 0x1890 - same as 0x1892, but has value 3 for 50mm F1.4 ZA, DT 18-135mm and for 70-400mm G II: meaning ??
6388
+ # 0x1890 - same as 0x1892, but has value 3 for SAL18135, SAL50F14Z, SAL55300, SAL70200G2, SAL70300G2, SAL70400G2
6389
+ # Presumably, these are the A-mount lenses "compatible with software updates" as referred to in the ILCA-99M2 manual.
6390
+ # Indeed, SAL70400G2 on ILCA-77M2 gives Version: "Lens: Ver.01"
6375
6391
  0x1891 => {
6376
6392
  Name => 'LensFormat',
6377
6393
  Condition => '$$self{Model} !~ /^(DSC-|Stellar)/',
@@ -6433,6 +6449,7 @@ my %isoSetting2010 = (
6433
6449
  FIRST_ENTRY => 0,
6434
6450
  PRIORITY => 0,
6435
6451
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
6452
+ IS_SUBDIR => [ 0x01e0 ],
6436
6453
  0x0004 => { %releaseMode2, Format => 'int32u' }, # NOT at offset 0x08 !
6437
6454
  #0x002e => { Name => 'SonyImageWidth3', Format => 'int16u' },
6438
6455
  #0x0042 => { Name => 'SonyImageWidth3', Format => 'int16u' },
@@ -6512,6 +6529,8 @@ my %isoSetting2010 = (
6512
6529
  FIRST_ENTRY => 0,
6513
6530
  PRIORITY => 0,
6514
6531
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
6532
+ DATAMEMBER => [ 0x18be ],
6533
+ IS_SUBDIR => [ 0x0388 ],
6515
6534
  0x0004 => { %releaseMode2, Format => 'int32u' }, # NOT at offset 0x08 !
6516
6535
  0x0050 => { %dynamicRangeOptimizer2010 },
6517
6536
  0x020c => { %releaseMode2010 },
@@ -6574,7 +6593,7 @@ my %isoSetting2010 = (
6574
6593
  Condition => '$$self{Model} !~ /^DSC-/',
6575
6594
  Format => 'int16s[16]',
6576
6595
  },
6577
- # 0x18bc - same as 0x18be, but has value 3 for 50mm F1.4 ZA, DT 18-135mm and for 70-400mm G II: meaning ??
6596
+ # 0x18bc - same as 0x18be, but has value 3 for SAL18135, SAL50F14Z, SAL55300, SAL70200G2, SAL70300G2, SAL70400G2
6578
6597
  0x18bd => {
6579
6598
  Name => 'LensFormat',
6580
6599
  Condition => '$$self{Model} !~ /^DSC-/',
@@ -6639,6 +6658,8 @@ my %isoSetting2010 = (
6639
6658
  FIRST_ENTRY => 0,
6640
6659
  PRIORITY => 0,
6641
6660
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
6661
+ DATAMEMBER => [ 0x18ee ],
6662
+ IS_SUBDIR => [ 0x0388, 0x0398 ],
6642
6663
  0x0004 => { %releaseMode2, Format => 'int32u' },
6643
6664
  0x0050 => { %dynamicRangeOptimizer2010 },
6644
6665
  0x020c => { %releaseMode2010 },
@@ -6709,7 +6730,7 @@ my %isoSetting2010 = (
6709
6730
  Condition => '$$self{Model} !~ /^DSC-/',
6710
6731
  Format => 'int16s[16]',
6711
6732
  },
6712
- # 0x18ec - same as 0x18ee, but has value 3 for LensType>=65, except SAL300F28G2
6733
+ # 0x18ec - same as 0x18ee, but has value 3 for SAL18135, SAL50F14Z, SAL55300, SAL70200G2, SAL70300G2, SAL70400G2
6713
6734
  0x18ed => {
6714
6735
  Name => 'LensFormat',
6715
6736
  Condition => '$$self{Model} !~ /^DSC-/',
@@ -6767,12 +6788,14 @@ my %isoSetting2010 = (
6767
6788
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
6768
6789
  FORMAT => 'int8u',
6769
6790
  NOTES => q{
6770
- Valid for ILCE-6400/7M3/7RM3/9, DSC-RX10M4/RX100M6/RX100M5A/HX99.
6791
+ Valid for ILCE-6400/7M3/7RM3/7RM4/9, DSC-RX0M2/RX10M4/RX100M6/RX100M5A/HX99.
6771
6792
  },
6772
6793
  WRITABLE => 1,
6773
6794
  FIRST_ENTRY => 0,
6774
6795
  PRIORITY => 0,
6775
6796
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
6797
+ DATAMEMBER => [ 0x17f2 ],
6798
+ IS_SUBDIR => [ 0x036d ],
6776
6799
  0x0004 => { %releaseMode2, Format => 'int32u' },
6777
6800
  0x004e => { %dynamicRangeOptimizer2010 },
6778
6801
  0x0204 => { %releaseMode2010 },
@@ -6835,7 +6858,7 @@ my %isoSetting2010 = (
6835
6858
  Condition => '$$self{Model} !~ /^DSC-/',
6836
6859
  Format => 'int16s[16]',
6837
6860
  },
6838
- # 0x17f0 - same as 0x17f2, but has value 3 for LensType>=65, except SAL300F28G2
6861
+ # 0x17f0 - same as 0x17f2, but has value 3 for SAL18135, SAL50F14Z, SAL55300, SAL70200G2, SAL70300G2, SAL70400G2
6839
6862
  0x17f1 => {
6840
6863
  Name => 'LensFormat',
6841
6864
  Condition => '$$self{Model} !~ /^DSC-/',
@@ -7067,8 +7090,8 @@ my %isoSetting2010 = (
7067
7090
  },
7068
7091
  WRITABLE => 1,
7069
7092
  FIRST_ENTRY => 0,
7070
- DATAMEMBER => [ 0x0105 ],
7071
7093
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
7094
+ DATAMEMBER => [ 0x0031, 0x0105 ],
7072
7095
  NOTES => q{
7073
7096
  Data for tags 0x9050, 0x94xx and 0x2010 is encrypted by a simple
7074
7097
  substitution cipher, but the deciphered values are listed below.
@@ -7200,7 +7223,7 @@ my %isoSetting2010 = (
7200
7223
  PrintConv => 'unpack "H*", pack "C*", split " ", $val',
7201
7224
  PrintConvInv => 'join " ", unpack "C*", pack "H*", $val',
7202
7225
  },
7203
- # 0x0104 - same as 0x0105, but has value 3 for 50mm F1.4 ZA, DT 18-135mm and for 70-400mm G II: meaning ??
7226
+ # 0x0104 - same as 0x0105, but has value 3 for SAL18135, SAL50F14Z, SAL55300, SAL70200G2, SAL70300G2, SAL70400G2
7204
7227
  0x0105 => {
7205
7228
  Name => 'LensMount',
7206
7229
  DataMember => 'LensMount',
@@ -7337,13 +7360,13 @@ my %isoSetting2010 = (
7337
7360
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
7338
7361
  FORMAT => 'int8u',
7339
7362
  NOTES => q{
7340
- Valid from July 2015 for ILCE-6300/6400/6500/7M3/7RM2/7RM3/7SM2/9,
7363
+ Valid from July 2015 for ILCE-6300/6400/6500/7M3/7RM2/7RM3/7RM4/7SM2/9,
7341
7364
  ILCA-99M2.
7342
7365
  },
7343
7366
  WRITABLE => 1,
7344
7367
  FIRST_ENTRY => 0,
7345
- DATAMEMBER => [ 0x0105 ],
7346
7368
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
7369
+ DATAMEMBER => [ 0x0039, 0x0105 ],
7347
7370
  0x0000 => {
7348
7371
  Condition => '$$self{Model} =~ /^(ILCA-)/',
7349
7372
  Name => 'SonyMaxAperture', # (at current focal length)
@@ -7375,7 +7398,7 @@ my %isoSetting2010 = (
7375
7398
  },
7376
7399
  #0x002c => {
7377
7400
  # Name => 'Shutter',
7378
- # Condition => '$$self{Model} !~ /^(ILCE-6400)/ and $$self{Software} !~ /^ILCE-9 v5.00/',
7401
+ # Condition => '$$self{Model} !~ /^(ILCE-6400)/ and $$self{Software} !~ /^ILCE-9 v5.0/',
7379
7402
  # PrintConv => {
7380
7403
  # 0 => 'Silent / Electronic',
7381
7404
  # 56 => 'Mechanical',
@@ -7392,6 +7415,7 @@ my %isoSetting2010 = (
7392
7415
  66 => 'Built-in Flash Inhibited', # seen for panorama, HDR, burst mode
7393
7416
  128 => 'External Flash present', # seen for NEX-5N/5T
7394
7417
  129 => 'External Flash Fired', # seen for SLT-A99V, ILCE-7R, NEX-5N/5R
7418
+ # 131 => 'External Flash ???', # seen for ILCE-7RM4
7395
7419
  },
7396
7420
  },
7397
7421
  0x003a => {
@@ -7422,10 +7446,10 @@ my %isoSetting2010 = (
7422
7446
  Name => 'ReleaseMode2',
7423
7447
  %releaseMode2,
7424
7448
  },
7425
- # March 2019: ILCE-9 with v5.00 firmware follows ILCE-6400 in many tags ...
7449
+ # March 2019: ILCE-9 with v5.0x firmware follows ILCE-6400 in many tags ...
7426
7450
  0x0050 => {
7427
7451
  Name => 'ShutterCount2',
7428
- Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} =~ /^(ILCE-6400)/ or $$self{Software} =~ /^ILCE-9 v5.00/)',
7452
+ Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} =~ /^(ILCE-(6400|7RM4))/ or $$self{Software} =~ /^ILCE-9 v5.0/)',
7429
7453
  Format => 'int32u',
7430
7454
  RawConv => '$val & 0x00ffffff',
7431
7455
  },
@@ -7442,13 +7466,13 @@ my %isoSetting2010 = (
7442
7466
  # 0x0058, 0x0061: E-Mount: ShutterCount and dateTime
7443
7467
  0x0058 => { # appears not valid when flash is used ... not for ILCA-99M2
7444
7468
  Name => 'ShutterCount2',
7445
- Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} !~ /^(ILCA-99M2|ILCE-(6400|7M3|7RM3))/) and $$self{Software} !~ /^ILCE-9 v5.00/',
7469
+ Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} !~ /^(ILCA-99M2|ILCE-(6400|7M3|7RM3|7RM4))/) and $$self{Software} !~ /^ILCE-9 v5.0/',
7446
7470
  Format => 'int32u',
7447
7471
  RawConv => '$val & 0x00ffffff',
7448
7472
  },
7449
7473
  0x0061 => { # only minutes-seconds, not for ILCA-99M2, ILCE-9
7450
7474
  Name => 'SonyTimeMinSec',
7451
- Condition => '$$self{Model} !~ /^(ILCA-99M2|ILCE-(6400|7M3|7RM3|9))/',
7475
+ Condition => '$$self{Model} !~ /^(ILCA-99M2|ILCE-(6400|7M3|7RM3|7RM4|9))/',
7452
7476
  Format => 'undef[2]',
7453
7477
  ValueConv => q{
7454
7478
  my @v = unpack('C*', $val);
@@ -7457,7 +7481,7 @@ my %isoSetting2010 = (
7457
7481
  },
7458
7482
  0x006b => {
7459
7483
  Name => 'ReleaseMode2',
7460
- Condition => '$$self{Model} =~ /^(ILCE-6400)/ or $$self{Software} =~ /^ILCE-9 v5.00/',
7484
+ Condition => '$$self{Model} =~ /^(ILCE-(6400|7RM4))/ or $$self{Software} =~ /^ILCE-9 v5.0/',
7461
7485
  %releaseMode2,
7462
7486
  },
7463
7487
  0x006d => {
@@ -7467,7 +7491,7 @@ my %isoSetting2010 = (
7467
7491
  },
7468
7492
  0x0073 => {
7469
7493
  Name => 'ReleaseMode2',
7470
- Condition => '$$self{Model} !~ /^(ILCE-(6400|7M3|7RM3))/ and $$self{Software} !~ /^ILCE-9 v5.00/',
7494
+ Condition => '$$self{Model} !~ /^(ILCE-(6400|7M3|7RM3|7RM4))/ and $$self{Software} !~ /^ILCE-9 v5.0/',
7471
7495
  %releaseMode2,
7472
7496
  },
7473
7497
  0x0088 => {
@@ -7478,7 +7502,7 @@ my %isoSetting2010 = (
7478
7502
 
7479
7503
  ##### same offsets for lens info tags
7480
7504
 
7481
- # 0x0104 - same as 0x0105, but has value 3 for 50mm F1.4 ZA, DT 18-135mm and for 70-400mm G II: meaning ??
7505
+ # 0x0104 - same as 0x0105, but has value 3 for SAL18135, SAL50F14Z, SAL55300, SAL70200G2, SAL70300G2, SAL70400G2
7482
7506
  0x0105 => {
7483
7507
  Name => 'LensMount',
7484
7508
  DataMember => 'LensMount',
@@ -7538,7 +7562,7 @@ my %isoSetting2010 = (
7538
7562
  #
7539
7563
  0x019f => {
7540
7564
  Name => 'ShutterCount3',
7541
- Condition => '$$self{Model} =~ /^(ILCE-(6400|7M3|7RM3|9))/',
7565
+ Condition => '$$self{Model} =~ /^(ILCE-(6400|7M3|7RM3|7RM4|9))/',
7542
7566
  Format => 'int32u',
7543
7567
  RawConv => '$val == 0 ? undef : $val',
7544
7568
  },
@@ -7577,7 +7601,7 @@ my %isoSetting2010 = (
7577
7601
  # },
7578
7602
  0x01ed => {
7579
7603
  Name => 'LensSpecFeatures',
7580
- Condition => '$$self{Software} =~ /^ILCE-9 v5.00/',
7604
+ Condition => '$$self{Model} =~ /^(ILCE-7RM4)/ or $$self{Software} =~ /^ILCE-9 v5.0/',
7581
7605
  Priority => 0,
7582
7606
  Format => 'undef[2]',
7583
7607
  ValueConv => 'join " ", unpack "H2H2", $val',
@@ -7590,7 +7614,7 @@ my %isoSetting2010 = (
7590
7614
  },
7591
7615
  0x01f0 => {
7592
7616
  Name => 'LensSpecFeatures',
7593
- Condition => '$$self{Model} =~ /^(ILCE-(6400|7M3|7RM3|9))/ and $$self{Software} !~ /^ILCE-9 v5.00/',
7617
+ Condition => '$$self{Model} =~ /^(ILCE-(6400|7M3|7RM3|9))/ and $$self{Software} !~ /^ILCE-9 v5.0/',
7594
7618
  Priority => 0,
7595
7619
  Format => 'undef[2]',
7596
7620
  ValueConv => 'join " ", unpack "H2H2", $val',
@@ -7798,14 +7822,14 @@ my %isoSetting2010 = (
7798
7822
  NOTES => q{
7799
7823
  Valid for DSC-HX60V/HX80/HX90V/HX99/HX350/HX400V/QX30/RX0/RX1RM2/RX10/
7800
7824
  RX10M2/RX10M3/RX10M4/RX100M3/RX100M4/RX100M5/RX100M5A/RX100M6/WX220/WX350/
7801
- WX500, ILCE-7/7R/7S/7M2/7M3/7RM2/7RM3/7SM2/9/5000/5100/6000/6300/6400/6500/
7802
- QX1, ILCA-68/77M2/99M2.
7825
+ WX500, ILCE-7/7R/7S/7M2/7M3/7RM2/7RM3/7RM4/7SM2/9/5000/5100/6000/6300/6400/
7826
+ 6500/QX1, ILCA-68/77M2/99M2.
7803
7827
  },
7804
7828
  FIRST_ENTRY => 0,
7805
7829
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
7806
7830
  0x0009 => { %releaseMode2 },
7807
7831
  0x000a => [{
7808
- Condition => '$$self{Model} =~ /^(ILCE-(6400|7M3|7RM3|9)|DSC-(RX10M4|RX100M6|RX100M5A|HX99|RX0M2))\b/',
7832
+ Condition => '$$self{Model} =~ /^(ILCE-(6400|7M3|7RM3|7RM4|9)|DSC-(RX10M4|RX100M6|RX100M5A|HX99|RX0M2))\b/',
7809
7833
  Name => 'ShotNumberSincePowerUp',
7810
7834
  Format => 'int8u',
7811
7835
  },{
@@ -7882,10 +7906,11 @@ my %isoSetting2010 = (
7882
7906
  FIRST_ENTRY => 0,
7883
7907
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
7884
7908
  DATAMEMBER => [ 0 ],
7885
- IS_SUBDIR => [ 0x059d, 0x0634, 0x0636, 0x064c, 0x0653, 0x0678, 0x06b8, 0x06de, 0x06e7 ],
7909
+ IS_SUBDIR => [ 0x0498, 0x04a2, 0x059d, 0x0634, 0x0636, 0x064c, 0x0653, 0x0678, 0x06b8, 0x06de, 0x06e7 ],
7886
7910
  0x0000 => { Name => 'Ver9401', Hidden => 1, RawConv => '$$self{Ver9401} = $val; $$self{OPTIONS}{Unknown}<2 ? undef : $val' },
7887
7911
 
7888
7912
  0x0498 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 148', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
7913
+ 0x04a2 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 152', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
7889
7914
  0x059d => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(144|146)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
7890
7915
  0x0634 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 68', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
7891
7916
  0x0636 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(73|74)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
@@ -8106,8 +8131,8 @@ my %isoSetting2010 = (
8106
8131
  WRITABLE => 1,
8107
8132
  FIRST_ENTRY => 0,
8108
8133
  PRIORITY => 0,
8109
- DATAMEMBER => [ 0x0604 ],
8110
8134
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
8135
+ DATAMEMBER => [ 0x0604 ],
8111
8136
  NOTES => 'Valid for SLT, NEX, ILCE-3000/3500 and several DSC models.',
8112
8137
  0x0600 => {
8113
8138
  Name => 'DistortionCorrParamsPresent',
@@ -8121,7 +8146,7 @@ my %isoSetting2010 = (
8121
8146
  1 => 'Applied',
8122
8147
  },
8123
8148
  },
8124
- # 0x0602 - same as 0x0604, but has value 3 for 50mm F1.4 ZA, DT 18-135mm and for 70-400mm G II: meaning ??
8149
+ # 0x0602 - same as 0x0604, but has value 3 for SAL18135, SAL50F14Z, SAL55300, SAL70200G2, SAL70300G2, SAL70400G2
8125
8150
  0x0603 => {
8126
8151
  Name => 'LensFormat',
8127
8152
  Condition => '$$self{Model} !~ /^(DSC-|Stellar)/',
@@ -8184,12 +8209,13 @@ my %isoSetting2010 = (
8184
8209
  WRITABLE => 1,
8185
8210
  FIRST_ENTRY => 0,
8186
8211
  PRIORITY => 0,
8187
- DATAMEMBER => [ 0x005e ],
8188
8212
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
8213
+ DATAMEMBER => [ 0x005e ],
8189
8214
  NOTES => q{
8190
8215
  Valid for DSC-HX60V/HX80/HX90V/HX99/HX350/HX400V/QX30/RX0/RX10/RX10M2/
8191
8216
  RX10M3/RX10M4/RX100M3/RX100M4/RX100M5/RX100M5A/RX100M6/WX220/WX350, ILCE-7/
8192
- 7M2/7M3/7R/7RM2/7S/7SM2/9/5000/5100/6000/6300/6500/QX1, ILCA-68/77M2/99M2.
8217
+ 7M2/7M3/7R/7RM2/7RM3/7RM4/7S/7SM2/9/5000/5100/6000/6300/6500/QX1, ILCA-68/
8218
+ 77M2/99M2.
8193
8219
  },
8194
8220
  0x0004 => {
8195
8221
  Name => 'SonyISO',
@@ -8299,7 +8325,7 @@ my %isoSetting2010 = (
8299
8325
  1 => 'Applied',
8300
8326
  },
8301
8327
  },
8302
- # 0x005c - same as 0x005e, but has value 3 for 50mm F1.4 ZA, DT 18-135mm and for 70-400mm G II: meaning ??
8328
+ # 0x005c - same as 0x005e, but has value 3 for SAL18135, SAL50F14Z, SAL55300, SAL70200G2, SAL70300G2, SAL70400G2
8303
8329
  0x005d => {
8304
8330
  Name => 'LensFormat',
8305
8331
  Condition => '$$self{Model} !~ /^DSC-/',
@@ -8342,7 +8368,7 @@ my %isoSetting2010 = (
8342
8368
  },
8343
8369
  0x0342 => {
8344
8370
  Name => 'LensZoomPosition',
8345
- Condition => '$$self{Model} !~ /^(ILCA-|ILCE-(7RM2|7M3|7RM3|7SM2|6300|6400|6500|9)|DSC-(HX80|HX90V|HX99|RX0|RX10M2|RX10M3|RX10M4|RX100M4|RX100M5|RX100M5A|RX100M6|WX500))/',
8371
+ Condition => '$$self{Model} !~ /^(ILCA-|ILCE-(7RM2|7M3|7RM3|7RM4|7SM2|6300|6400|6500|9)|DSC-(HX80|HX90V|HX99|RX0|RX10M2|RX10M3|RX10M4|RX100M4|RX100M5|RX100M5A|RX100M6|WX500))/',
8346
8372
  Format => 'int16u',
8347
8373
  PrintConv => 'sprintf("%.0f%%",$val/10.24)',
8348
8374
  PrintConvInv => '$val=~s/ ?%$//; $val * 10.24',
@@ -8359,7 +8385,7 @@ my %isoSetting2010 = (
8359
8385
  },
8360
8386
  0x035c => {
8361
8387
  Name => 'VignettingCorrParams',
8362
- Condition => '$$self{Model} =~ /^(ILCA-99M2|ILCE-(6400|6500|7M3|7RM3|9))/',
8388
+ Condition => '$$self{Model} =~ /^(ILCA-99M2|ILCE-(6400|6500|7M3|7RM3|7RM4|9))/',
8363
8389
  Format => 'int16s[16]',
8364
8390
  },
8365
8391
  0x035a => {
@@ -8396,7 +8422,7 @@ my %isoSetting2010 = (
8396
8422
  },
8397
8423
  0x03b8 => {
8398
8424
  Name => 'ChromaticAberrationCorrParams',
8399
- Condition => '$$self{Model} =~ /^(ILCE-(6400|7M3|7RM3|9))/',
8425
+ Condition => '$$self{Model} =~ /^(ILCE-(6400|7M3|7RM3|7RM4|9))/',
8400
8426
  Format => 'int16s[32]',
8401
8427
  },
8402
8428
  );
@@ -8412,7 +8438,7 @@ my %isoSetting2010 = (
8412
8438
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
8413
8439
  # 0x0000: 1 for SLT-A37/A57/A65/A77, NEX-5N/7/F3/VG20
8414
8440
  # 2 for SLT-A58/99V, NEX-3N/5R/5T/6/VG30/VG900, ILCA-68/77M2, ILCE-3000/3500/7/7M2/7R/7S/5000/6000
8415
- # 3 for ILCA-99M2, ILCE-6300/6500/7M3/7RM2/7RM3/7SM2/9
8441
+ # 3 for ILCA-99M2, ILCE-6300/6400/6500/7M3/7RM2/7RM3/7RM4/7SM2/9
8416
8442
  # 0x0001+0x0002: Int16u, seen 580 - 770: similar to "BatteryUnknown" ??
8417
8443
  # 0x0005: int8u, seen 73 - 117: maybe Fahrenheit? Higher than "AmbientTemperature", but same trend.
8418
8444
  0x0005 => {
@@ -8425,7 +8451,7 @@ my %isoSetting2010 = (
8425
8451
  # 0x0006: usually 0, seen non-zero values only for SLT-A99V, ILCA-77M2/99M2 and ILCE-7/7R/7RM2/9: BatteryLevel Grip ?
8426
8452
  0x0006 => {
8427
8453
  Name => 'BatteryLevelGrip1',
8428
- Condition => '$$valPt !~ /^\x00/', # only valid when not 0
8454
+ RawConv => '$val ? $val : undef', # only valid when not 0
8429
8455
  PrintConv => '"$val%"',
8430
8456
  PrintConvInv => '$val=~s/\s*\%//; $val',
8431
8457
  },
@@ -8440,7 +8466,8 @@ my %isoSetting2010 = (
8440
8466
  # but ILCE-7/7R with grip can have max 2, and as all ILCE-7/7R samples give >100 values, exclude...
8441
8467
  0x0008 => {
8442
8468
  Name => 'BatteryLevelGrip2',
8443
- Condition => '$$valPt !~ /^[\x00\xff]/ and $$self{Model} !~ /^(ILCE-(7|7R)|Lusso)$/', # only when not 0 or 255 and not for ILCE-7/7R
8469
+ Condition => '$$self{Model} !~ /^(ILCE-(7|7R)|Lusso)$/', # not valid for ILCE-7/7R
8470
+ RawConv => '($val and $val != 255) ? $val : undef', # not valid if 0 or 255
8444
8471
  PrintConv => '"$val%"',
8445
8472
  PrintConvInv => '$val=~s/\s*\%//; $val',
8446
8473
  },
@@ -8559,7 +8586,7 @@ my %isoSetting2010 = (
8559
8586
  # ILCE-6000 v1.20-v3.20
8560
8587
  # 1.60: ILCE-6300/6500, ILCE-7RM2 v3.05-v4.00
8561
8588
  # 1.70: ILCE-7M3/7RM3, ILCE-9 v1.00-v4.10
8562
- # 1.80: ILCE-6400, ILCE-9 v5.00
8589
+ # 1.80: ILCE-6400/7RM4, ILCE-9 v5.0x
8563
8590
  },
8564
8591
  0x000d => {
8565
8592
  Name => 'LensE-mountVersion',
@@ -8582,10 +8609,11 @@ my %isoSetting2010 = (
8582
8609
  # 1.41: SELP18105G Ver.02
8583
8610
  # 1.50: SEL28F20, SEL90M28G, Zeiss Batis 18mm/25mm/85mm/135mm, Zeiss Loxia 21mm, Zeiss Loxia 35mm/50mm Ver.02,
8584
8611
  # Tokina FiRIN 20mm
8585
- # 1.60: SEL1224G, SEL1635GM, SELP18110G, SEL18135, SEL2470GM, SEL24105G, SEL50F14Z, SEL50F18F, SEL50M28, SEL70200GM,
8586
- # SEL70300G, SEL85F14GM, SEL85F18, SEL100F28GM, SEL100400GM, SEL135F18GM, Sigma 30mm F1.4 DC DN, Sigma MC-11,
8587
- # Samyang AF 14mm/50mm, Voigtlander 15mm, Sigma 16mm F1.4 DC DN
8588
- # 1.70: LA-EA3 Ver.02, Samyang AF 35mm, Tamron 28-75mm, Voigtlander 10mm/12mm/40mm/65mm, Zeiss Loxia 25mm/85mm
8612
+ # 1.60: SEL1224G, SEL1635GM, SELP18110G, SEL18135, SEL2470GM, SEL24105G, SEL35F18F, SEL50F14Z, SEL50F18F, SEL50M28,
8613
+ # SEL70200GM, SEL70300G, SEL85F14GM, SEL85F18, SEL100F28GM, SEL100400GM, SEL135F18GM, SEL200600G, SEL600F40GM,
8614
+ # Sigma 16F14DCDN/30F14DCDN/35F12DGDN/45F28DGDN, Sigma MC-11, Samyang AF 14mm/50mm, Voigtlander 15mm, Viltrox 85mm MF
8615
+ # 1.70: LA-EA3 Ver.02, Samyang AF 24mm/35mm/85mm, Tamron 17-28mm, 28-75mm, Tokina FiRIN 20mm AF Ver.01, Tokina FiRIN 100mm Macro,
8616
+ # Voigtlander 10mm/12mm/40mm/65mm, Zeiss Loxia 25mm/85mm, Sigma 14-24mm
8589
8617
  # 1.80: Voigtlander 21mm
8590
8618
  },
8591
8619
  # 0x0014 and 0x0015: change together: LensFirmwareVersion
@@ -8618,7 +8646,7 @@ my %isoSetting2010 = (
8618
8646
  PRIORITY => 0,
8619
8647
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8620
8648
  DATAMEMBER => [ 0x02 ],
8621
- IS_SUBDIR => [ 0x11 ],
8649
+ IS_SUBDIR => [ 0x11, 0x7d ],
8622
8650
  NOTES => 'These tags are currently extracted for SLT models only.',
8623
8651
  # first 4 bytes (deciphered) (ref JR):
8624
8652
  # 0 1 1 0 for A37, A57, A58
@@ -8628,7 +8656,7 @@ my %isoSetting2010 = (
8628
8656
  # 1 1 3 0 for ILCA-68/77M2/99M2
8629
8657
  # 0 0 0 0 for NEX and ILCE-3000/3500, also seen for SLT/ILCA with non-AF lens
8630
8658
  # 1 0 0 0 for ILCE-5000/5100/6000/7/7M2/7R/7S/QX1
8631
- # 6 0 0 0 for ILCE-6300/6400/6500/7M3/7RM2/7RM3/7SM2/9
8659
+ # 6 0 0 0 for ILCE-6300/6400/6500/7M3/7RM2/7RM3/7RM4/7SM2/9
8632
8660
  # 0 2 0 0 for NEX/ILCE with LA-EA2/EA4 Phase-AF adapter
8633
8661
  # 2 0 0 0 seen for a few NEX-5N images
8634
8662
  # 2 2 0 0 seen for a few NEX-5N/7 images with LA-EA2 adapter
@@ -8921,12 +8949,12 @@ my %isoSetting2010 = (
8921
8949
  # other NEX/ILCE: 74 blocks of 164 bytes
8922
8950
 
8923
8951
  # 0x1a06 onwards - first seen for ILCE-7RM2: appears to be some kind of metering image
8924
- # but not valid anymore for ILCE-6400, ILCE-9 v5.00
8925
- 0x1a06 => { Name => 'TiffMeteringImageWidth', Condition => '$$self{Model} =~ /^(ILCE-(6300|6500|7M3|7RM2|7RM3|7SM2|9))\b/ and $$self{Software} !~ /^ILCE-9 v5.00/' },
8926
- 0x1a07 => { Name => 'TiffMeteringImageHeight', Condition => '$$self{Model} =~ /^(ILCE-(6300|6500|7M3|7RM2|7RM3|7SM2|9))\b/ and $$self{Software} !~ /^ILCE-9 v5.00/' },
8952
+ # but not valid anymore for ILCE-6400, ILCE-9 v5.0x
8953
+ 0x1a06 => { Name => 'TiffMeteringImageWidth', Condition => '$$self{Model} =~ /^(ILCE-(6300|6500|7M3|7RM2|7RM3|7SM2|9))\b/ and $$self{Software} !~ /^ILCE-9 v5.0/' },
8954
+ 0x1a07 => { Name => 'TiffMeteringImageHeight', Condition => '$$self{Model} =~ /^(ILCE-(6300|6500|7M3|7RM2|7RM3|7SM2|9))\b/ and $$self{Software} !~ /^ILCE-9 v5.0/' },
8927
8955
  0x1a08 => { # (2640 bytes: 1 set of 44x30 int16u values)
8928
8956
  Name => 'TiffMeteringImage',
8929
- Condition => '$$self{Model} =~ /^(ILCE-(6300|6500|7M3|7RM2|7RM3|7SM2|9))\b/ and $$self{Software} !~ /^ILCE-9 v5.00/',
8957
+ Condition => '$$self{Model} =~ /^(ILCE-(6300|6500|7M3|7RM2|7RM3|7SM2|9))\b/ and $$self{Software} !~ /^ILCE-9 v5.0/',
8930
8958
  Format => 'undef[2640]',
8931
8959
  Notes => q{
8932
8960
  13(?)-bit intensity data from 1320 (1200) metering segments, extracted as a