exiftool_vendored 11.55.0 → 11.57.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.
@@ -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