exiftool_vendored 10.58.0 → 10.65.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.

Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +100 -1
  3. data/bin/MANIFEST +2 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +39 -38
  7. data/bin/arg_files/exif2iptc.args +3 -0
  8. data/bin/arg_files/iptc2exif.args +3 -0
  9. data/bin/config_files/example.config +16 -14
  10. data/bin/config_files/photoshop_paths.config +10 -0
  11. data/bin/exiftool +71 -65
  12. data/bin/lib/Image/ExifTool/APE.pm +5 -0
  13. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +31 -15
  14. data/bin/lib/Image/ExifTool/Canon.pm +18 -4
  15. data/bin/lib/Image/ExifTool/CanonCustom.pm +3 -0
  16. data/bin/lib/Image/ExifTool/Charset/DOSLatin1.pm +49 -0
  17. data/bin/lib/Image/ExifTool/Charset/DOSLatinUS.pm +49 -0
  18. data/bin/lib/Image/ExifTool/Charset.pm +8 -5
  19. data/bin/lib/Image/ExifTool/Exif.pm +37 -18
  20. data/bin/lib/Image/ExifTool/FLAC.pm +47 -37
  21. data/bin/lib/Image/ExifTool/FLIR.pm +3 -3
  22. data/bin/lib/Image/ExifTool/FujiFilm.pm +5 -2
  23. data/bin/lib/Image/ExifTool/GPS.pm +6 -6
  24. data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
  25. data/bin/lib/Image/ExifTool/H264.pm +2 -0
  26. data/bin/lib/Image/ExifTool/ID3.pm +8 -3
  27. data/bin/lib/Image/ExifTool/IPTC.pm +1 -1
  28. data/bin/lib/Image/ExifTool/Import.pm +4 -1
  29. data/bin/lib/Image/ExifTool/InDesign.pm +11 -7
  30. data/bin/lib/Image/ExifTool/Kodak.pm +4 -1
  31. data/bin/lib/Image/ExifTool/Lang/de.pm +31 -31
  32. data/bin/lib/Image/ExifTool/MWG.pm +12 -4
  33. data/bin/lib/Image/ExifTool/MakerNotes.pm +3 -3
  34. data/bin/lib/Image/ExifTool/Matroska.pm +2 -1
  35. data/bin/lib/Image/ExifTool/Microsoft.pm +3 -3
  36. data/bin/lib/Image/ExifTool/Minolta.pm +71 -61
  37. data/bin/lib/Image/ExifTool/Nikon.pm +286 -43
  38. data/bin/lib/Image/ExifTool/NikonCustom.pm +1049 -0
  39. data/bin/lib/Image/ExifTool/Olympus.pm +4 -1
  40. data/bin/lib/Image/ExifTool/PNG.pm +4 -7
  41. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +24 -1
  42. data/bin/lib/Image/ExifTool/Pentax.pm +20 -6
  43. data/bin/lib/Image/ExifTool/Photoshop.pm +24 -3
  44. data/bin/lib/Image/ExifTool/QuickTime.pm +545 -14
  45. data/bin/lib/Image/ExifTool/README +16 -9
  46. data/bin/lib/Image/ExifTool/RIFF.pm +8 -1
  47. data/bin/lib/Image/ExifTool/Samsung.pm +5 -4
  48. data/bin/lib/Image/ExifTool/Sigma.pm +9 -1
  49. data/bin/lib/Image/ExifTool/Sony.pm +327 -153
  50. data/bin/lib/Image/ExifTool/TagLookup.pm +3273 -3220
  51. data/bin/lib/Image/ExifTool/TagNames.pod +317 -38
  52. data/bin/lib/Image/ExifTool/Validate.pm +15 -1
  53. data/bin/lib/Image/ExifTool/WriteExif.pl +5 -0
  54. data/bin/lib/Image/ExifTool/WriteIPTC.pl +23 -1
  55. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +8 -2
  56. data/bin/lib/Image/ExifTool/WriteXMP.pl +7 -0
  57. data/bin/lib/Image/ExifTool/Writer.pl +96 -18
  58. data/bin/lib/Image/ExifTool/XMP.pm +20 -11
  59. data/bin/lib/Image/ExifTool/XMP2.pl +634 -583
  60. data/bin/lib/Image/ExifTool.pm +124 -17
  61. data/bin/lib/Image/ExifTool.pod +86 -82
  62. data/bin/perl-Image-ExifTool.spec +38 -37
  63. data/lib/exiftool_vendored/version.rb +1 -1
  64. metadata +4 -2
@@ -31,7 +31,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
31
31
  use Image::ExifTool::Exif;
32
32
  use Image::ExifTool::Minolta;
33
33
 
34
- $VERSION = '2.63';
34
+ $VERSION = '2.68';
35
35
 
36
36
  sub ProcessSRF($$$);
37
37
  sub ProcessSR2($$$);
@@ -45,7 +45,6 @@ sub ConvLensSpec($);
45
45
  sub ConvInvLensSpec($);
46
46
  sub PrintLensSpec($);
47
47
  sub PrintInvLensSpec($;$$);
48
- sub MakeTiffHeader($$$$;$);
49
48
 
50
49
  # (%sonyLensTypes is filled in based on Minolta LensType's)
51
50
 
@@ -54,13 +53,14 @@ sub MakeTiffHeader($$$$;$);
54
53
  my %sonyLensTypes2 = (
55
54
  Notes => 'Lens type numbers for Sony E-mount lenses used by NEX models.',
56
55
  0 => 'Unknown E-mount lens or other lens',
57
- 1 => 'Sony LA-EA1 Adapter',
56
+ 1 => 'Sony LA-EA1 or Sigma MC-11 Adapter', # MC-11 with not-supported lenses
58
57
  2 => 'Sony LA-EA2 Adapter',
59
58
  3 => 'Sony LA-EA3 Adapter', #(NC) ILCE-7 image with A-mount lens, but also has 0x940e 2nd byte=2
60
59
  6 => 'Sony LA-EA4 Adapter', #(NC) ILCE-7R image with A-mount lens and having phase-detect info blocks in 0x940e AFInfo
60
+ # 27 => Venus Optics Laowa 12mm f2.8 Zero-D or 105mm f2 (T3.2) Smooth Trans Focus (ref IB)
61
61
  44 => 'Metabones Canon EF Smart Adapter', #JR
62
62
  78 => 'Metabones Canon EF Smart Adapter Mark III or Other Adapter', #PH/JR (also Mark IV, Fotodiox and Viltrox)
63
- 234 => 'Metabones Canon EF Smart Adapter Mark IV', #JR
63
+ 234 => 'Metabones Canon EF Smart Adapter Mark IV', #JR (LensMount reported as A-mount)
64
64
  239 => 'Metabones Canon EF Speed Booster', #JR
65
65
  # Sony VX product code: (http://www.mi-fo.de/forum/index.php?s=7df1c8d3b1cd675f2abf4f4442e19cf2&showtopic=35035&view=findpost&p=303746)
66
66
  32784 => 'Sony E 16mm F2.8', # VX9100
@@ -85,6 +85,7 @@ my %sonyLensTypes2 = (
85
85
  32801 => 'Sony FE 12-24mm F4 G', #JR
86
86
  32802 => 'Sony FE 90mm F2.8 Macro G OSS', # VX?
87
87
  32803 => 'Sony E 18-50mm F4-5.6',
88
+ 32805 => 'Sony FE 24-105mm F4 G OSS', #IB # VX9121
88
89
 
89
90
  32807 => 'Sony E PZ 18-200mm F3.5-6.3 OSS', # VX9123
90
91
  32808 => 'Sony FE 55mm F1.8 ZA', # VX9124
@@ -112,11 +113,14 @@ my %sonyLensTypes2 = (
112
113
  32830 => 'Sony FE 70-200mm F2.8 GM OSS', #JR
113
114
  32831 => 'Sony FE 16-35mm F2.8 GM', #JR
114
115
 
115
- 33002 => 'Sigma 85mm F1.4 DG HSM | A 016 (+ Metabones Ver.50)', #PH/JR
116
+ # (comment this out so LensID will report the LensModel, which is more useful)
117
+ # 33002 => 'Metabones Canon EF Smart Adapter with Ver.5x', #PH/JR (corresponds to 234, but LensMount reported as E-mount)
116
118
 
117
119
  33072 => 'Sony FE 70-200mm F2.8 GM OSS + 1.4X Teleconverter', #JR
118
120
  33073 => 'Sony FE 70-200mm F2.8 GM OSS + 2X Teleconverter', #JR
119
121
  33076 => 'Sony FE 100mm F2.8 STF GM OSS (macro mode)', #JR (with macro switching ring set to "0.57m - 1.0m")
122
+ 33077 => 'Sony FE 100-400mm F4.5-5.6 GM OSS + 1.4X Teleconverter', #JR
123
+ 33078 => 'Sony FE 100-400mm F4.5-5.6 GM OSS + 2X Teleconverter', #JR
120
124
 
121
125
  49201 => 'Zeiss Touit 12mm F2.8', #JR (lens firmware Ver.02)
122
126
  49202 => 'Zeiss Touit 32mm F1.8', #JR (lens firmware Ver.02)
@@ -130,29 +134,30 @@ my %sonyLensTypes2 = (
130
134
  49234 => 'Zeiss Loxia 21mm F2.8', #PH
131
135
  49235 => 'Zeiss Loxia 85mm F2.4', #JR
132
136
 
133
- 50480 => 'Sigma 30mm F1.4 DC DN | C 016', #IB/JR
134
- 50481 => 'Sigma 50mm F1.4 DG HSM | A 014 + MC-11', #JR
135
- 50482 => 'Sigma 18-300mm F3.5-6.3 DC MACRO OS HSM | C 014 + MC-11', #JR
136
- 50483 => 'Sigma 18-35mm F1.8 DC HSM | A 013 + MC-11', #JR
137
- 50484 => 'Sigma 24-35mm F2 DG HSM | A 015 + MC-11', #JR
138
- 50486 => 'Sigma 150-600mm F5-6.3 DG OS HSM | C 015 + MC-11', #JR
139
- 50487 => 'Sigma 20mm F1.4 DG HSM | A 015 + MC-11', #JR
140
- 50488 => 'Sigma 35mm F1.4 DG HSM | A 012 + MC-11', #JR
141
- 50489 => 'Sigma 150-600mm F5-6.3 DG OS HSM | S 014 + MC-11', #JR
142
- 50490 => 'Sigma 120-300mm F2.8 DG OS HSM | S 013 + MC-11', #JR
143
- 50492 => 'Sigma 24-105mm F4 DG OS HSM | A 013 + MC-11', #JR
144
- 50493 => 'Sigma 17-70mm F2.8-4 DC MACRO OS HSM | C 013 + MC-11', #JR
145
- 50495 => 'Sigma 50-100mm F1.8 DC HSM | A 016 + MC-11', #JR
137
+ 50480 => 'Sigma 30mm F1.4 DC DN | C', #IB/JR (016)
138
+ 50481 => 'Sigma 50mm F1.4 DG HSM | A + MC-11', #JR (014)
139
+ 50482 => 'Sigma 18-300mm F3.5-6.3 DC MACRO OS HSM | C + MC-11', #JR (014)
140
+ 50483 => 'Sigma 18-35mm F1.8 DC HSM | A + MC-11', #JR (013)
141
+ 50484 => 'Sigma 24-35mm F2 DG HSM | A + MC-11', #JR (015)
142
+ 50486 => 'Sigma 150-600mm F5-6.3 DG OS HSM | C + MC-11', #JR (015)
143
+ 50487 => 'Sigma 20mm F1.4 DG HSM | A + MC-11', #JR (015)
144
+ 50488 => 'Sigma 35mm F1.4 DG HSM | A + MC-11', #JR (012)
145
+ 50489 => 'Sigma 150-600mm F5-6.3 DG OS HSM | S + MC-11', #JR (014)
146
+ 50490 => 'Sigma 120-300mm F2.8 DG OS HSM | S + MC-11', #JR (013)
147
+ 50492 => 'Sigma 24-105mm F4 DG OS HSM | A + MC-11', #JR (013)
148
+ 50493 => 'Sigma 17-70mm F2.8-4 DC MACRO OS HSM | C + MC-11', #JR (013)
149
+ 50495 => 'Sigma 50-100mm F1.8 DC HSM | A + MC-11', #JR (016)
146
150
 
147
151
  50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
148
152
  50993 => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB
149
153
  50994 => 'Voigtlander ULTRA WIDE-HELIAR 12mm F5.6 III', #IB
154
+ 50995 => 'Voigtlander MACRO APO-LANTHAR 65mm F2 Aspherical', #JR
150
155
  50996 => 'Voigtlander NOKTON 40mm F1.2 Aspherical', #JR
151
156
 
152
157
  # lenses listed in the Sigma MC-11 list, but not yet seen:
153
- # 504xx => 'Sigma 18-200mm F3.5-6.3 DC MACRO OS HSM | C 014 + MC-11',
154
- # 504xx => 'Sigma 24mm F1.4 DG HSM | A 015 + MC-11',
155
- # 504xx => 'Sigma 30mm F1.4 DC HSM | A 013 + MC-11',
158
+ # 504xx => 'Sigma 18-200mm F3.5-6.3 DC MACRO OS HSM | C + MC-11', # (014)
159
+ # 504xx => 'Sigma 24mm F1.4 DG HSM | A + MC-11', # (015)
160
+ # 504xx => 'Sigma 30mm F1.4 DC HSM | A + MC-11', # (013)
156
161
 
157
162
  51505 => 'Samyang AF 14mm F2.8 FE or Samyang AF 35mm F2.8 FE', #forum3833
158
163
  51505.1 => 'Samyang AF 35mm F2.8 FE', #PH
@@ -398,6 +403,24 @@ my %afPoints79_940e = (
398
403
  94=>'E6 Center F2.8',
399
404
  );
400
405
 
406
+ # ILCA-99M2 has dedicated 79 point Phase Detection AF sensor with similar layout as ILCA-68 and ILCA-77M2.
407
+ # ILCA-99M2 has also 399 Focal Plane Phase-Detection AF Points in 19 rows of 21 points, same as ILCE-7RM2.
408
+ # Of these 399 points, 323 points are selectable: 19 rows of 17 points (2 left-most and right-most columns not selectable).
409
+ # The 79 Focal Plane points that overlap with the 79 points of the dedicated sensor provide for Hybrid Phase AF Points.
410
+ # Tag 0x201e gives value 162 for the Center AF point, and 162 is exactly the center of 323 points...
411
+ # The below table lists the selectable AF points that correspond to the 79 points of the dedicated sensor. (ref JR)
412
+ my %afPoints99M2 = (
413
+ 93=>'A5 (93)', 94=>'A6 (94)', 95=>'A7 (95)',
414
+ 106=>'B2 (106)', 107=>'B3 (107)', 108=>'B4 (108)', 110=>'B5 (110)', 111=>'B6 (111)', 112=>'B7 (112)', 114=>'B8 (114)', 115=>'B9 (115)', 116=>'B10 (116)',
415
+ 122=>'C1 (122)', 123=>'C2 (123)', 124=>'C3 (124)', 125=>'C4 (125)', 127=>'C5 (127)', 128=>'C6 (128)', 129=>'C7 (129)', 131=>'C8 (131)', 132=>'C9 (132)', 133=>'C10 (133)', 134=>'C11 (134)',
416
+ 139=>'D1 (139)', 140=>'D2 (140)', 141=>'D3 (141)', 142=>'D4 (142)', 144=>'D5 (144)', 145=>'D6 (145)', 146=>'D7 (146)', 148=>'D8 (148)', 149=>'D9 (149)', 150=>'D10 (150)', 151=>'D11 (151)',
417
+ 156=>'E1 (156)', 157=>'E2 (157)', 158=>'E3 (158)', 159=>'E4 (159)', 161=>'E5 (161)', 162=>'E6 (162)', 163=>'E7 (163)', 165=>'E8 (165)', 166=>'E9 (166)', 167=>'E10 (167)', 168=>'E11 (168)',
418
+ 173=>'F1 (173)', 174=>'F2 (174)', 175=>'F3 (175)', 176=>'F4 (176)', 178=>'F5 (178)', 179=>'F6 (179)', 180=>'F7 (180)', 182=>'F8 (182)', 183=>'F9 (183)', 184=>'F10 (184)', 185=>'F11 (185)',
419
+ 190=>'G1 (190)', 191=>'G2 (191)', 192=>'G3 (192)', 193=>'G4 (193)', 195=>'G5 (195)', 196=>'G6 (196)', 197=>'G7 (197)', 199=>'G8 (199)', 200=>'G9 (200)', 201=>'G10 (201)', 202=>'G11 (202)',
420
+ 208=>'H2 (208)', 209=>'H3 (209)', 210=>'H4 (210)', 212=>'H5 (212)', 213=>'H6 (213)', 214=>'H7 (214)', 216=>'H8 (216)', 217=>'H9 (217)', 218=>'H10 (218)',
421
+ 229=>'I5 (229)', 230=>'I6 (230)', 231=>'I7 (231)',
422
+ );
423
+
401
424
  my %binaryDataAttrs = (
402
425
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
403
426
  WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
@@ -425,6 +448,16 @@ my %meterInfo2 = (
425
448
  PrintConv => 'sprintf("%3d %4d %6d" . " %3d %4d %6d" x 10, split(" ",$val))',
426
449
  PrintConvInv => '$val',
427
450
  );
451
+ my %meterInfo1b = (
452
+ Format => 'undef[90]',
453
+ ValueConv => \&ConvMeter1,
454
+ PrintConv => 'sprintf("%19d %4d %6d" . " %3d %4d %6d" x 8, split(" ",$val))',
455
+ );
456
+ my %meterInfo2b = (
457
+ Format => 'undef[110]',
458
+ ValueConv => \&ConvMeter2,
459
+ PrintConv => 'sprintf("%3d %4d %6d" . " %3d %4d %6d" x 10, split(" ",$val))',
460
+ );
428
461
 
429
462
  # Sony maker notes tags (some elements in common with %Image::ExifTool::Minolta::Main)
430
463
  %Image::ExifTool::Sony::Main = (
@@ -815,6 +848,7 @@ my %meterInfo2 = (
815
848
  3 => 'High',
816
849
  # 0x10001 - seen (ref JR)
817
850
  # 0x10002 - seen for landscape and portrait flash (ref JR)
851
+ # 0x10003 - seen (ref JR)
818
852
  0xffffffff => 'n/a', # (A35)
819
853
  },
820
854
  },
@@ -841,10 +875,10 @@ my %meterInfo2 = (
841
875
  # a3 c3 - NEX-6, DSC-HX300, HX50V
842
876
  # a4 c3 - NEX-3N/5R/5T, ILCE-3000/3500
843
877
  # unknown offsets or values for DSC-TX20/TX55/WX30
844
- # unknown offsets or values for DSC-HX60V/HX400V/QX10/QX30/QX100/RX10/RX100M2/RX100M3/WX220/WX350,
878
+ # unknown offsets or values for DSC-HX60V/HX350/HX400V/QX10/QX30/QX100/RX10/RX100M2/RX100M3/WX220/WX350,
845
879
  # ILCA-68/77M2, ILCE-5000/5100/6000/7/7M2/7R/7S/QX1
846
- # unknown offsets or values for DSC-HX90V/RX1RM2/RX10M2/RX10M3/RX100M4/RX100M5/WX500, ILCE-6300/6500/7RM2/7SM2, ILCA-99M2
847
- # unknown offsets or values for ILCE-9
880
+ # unknown offsets or values for DSC-HX90V/RX0/RX1RM2/RX10M2/RX10M3/RX100M4/RX100M5/WX500, ILCE-6300/6500/7RM2/7SM2, ILCA-99M2
881
+ # unknown offsets or values for ILCE-7RM3/9, DSC-RX10M4
848
882
  {
849
883
  Name => 'Tag2010a', # ad
850
884
  Condition => '$$self{Model} =~ /^NEX-5N$/',
@@ -877,15 +911,15 @@ my %meterInfo2 = (
877
911
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010f' },
878
912
  },{
879
913
  Name => 'Tag2010g', # ?
880
- Condition => '$$self{Model} =~ /^(DSC-(QX30|RX10|RX100M3|HX60V|HX400V|WX220|WX350)|ILCE-(7(R|S|M2)?|[56]000|5100|QX1)|ILCA-(68|77M2))\b/',
914
+ Condition => '$$self{Model} =~ /^(DSC-(QX30|RX10|RX100M3|HX60V|HX350|HX400V|WX220|WX350)|ILCE-(7(R|S|M2)?|[56]000|5100|QX1)|ILCA-(68|77M2))\b/',
881
915
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010g' },
882
916
  },{
883
917
  Name => 'Tag2010h', # ?
884
- Condition => '$$self{Model} =~ /^(DSC-(RX1RM2|RX10M2|RX10M3|RX100M4|RX100M5|HX90V?|WX500)|ILCE-(6300|6500|7RM2|7SM2)|ILCA-99M2)\b/',
918
+ Condition => '$$self{Model} =~ /^(DSC-(RX0|RX1RM2|RX10M2|RX10M3|RX100M4|RX100M5|HX90V?|WX500)|ILCE-(6300|6500|7RM2|7SM2)|ILCA-99M2)\b/',
885
919
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010h' },
886
920
  },{
887
921
  Name => 'Tag2010i', # ?
888
- Condition => '$$self{Model} =~ /^ILCE-9\b/',
922
+ Condition => '$$self{Model} =~ /^(ILCE-(7RM3|9)|DSC-RX10M4)\b/',
889
923
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010i' },
890
924
  },{
891
925
  Name => 'Tag_0x2010',
@@ -947,6 +981,14 @@ my %meterInfo2 = (
947
981
  # 0x2018 - something with external flash: seen 1 only when 0x2017 = 2
948
982
  # 0x2019 - 0 or 1 (seen 1 for ILCA-77M2, ILCE-7M2/7RM2)
949
983
  # 0x201a - 0 or 1
984
+ 0x201a => { #JR
985
+ Name => 'ElectronicFrontCurtainShutter',
986
+ Writable => 'int32u',
987
+ PrintConv => {
988
+ 0 => 'Off',
989
+ 1 => 'On',
990
+ },
991
+ },
950
992
  0x201b => { #PH
951
993
  # FocusMode for SLT/HV/ILCA and NEX/ILCE; doesn't seem to apply to DSC models (always 0)
952
994
  Name => 'FocusMode',
@@ -966,8 +1008,7 @@ my %meterInfo2 = (
966
1008
  # AFAreaModeSetting for SLT/HV/ILCA and NEX/ILCE; doesn't seem to apply to DSC models (always 0)
967
1009
  # all DSLR/SLT/HV Wide Zone Spot Local
968
1010
  # all NEX and ILCE-3000 Multi Center FlexibleSpot
969
- # ILCE-7 and newer Wide Zone Center FlexibleSpot
970
- # ILCA-77M2 and newer Wide Zone Center FlexibleSpot
1011
+ # all ILCE and ILCA Wide Zone Center FlexibleSpot ExpandedFlexibleSpot
971
1012
  # (actual AFAreaMode used may be different as camera can override this under certain conditions)
972
1013
  {
973
1014
  Name => 'AFAreaModeSetting',
@@ -984,9 +1025,11 @@ my %meterInfo2 = (
984
1025
  Name => 'AFAreaModeSetting',
985
1026
  Condition => '$$self{Model} =~ /^(NEX-|ILCE-)/',
986
1027
  Notes => 'NEX and ILCE models',
1028
+ RawConv => '$$self{AFAreaILCE} = $val',
1029
+ DataMember => 'AFAreaILCE',
987
1030
  Writable => 'int8u',
988
1031
  PrintConv => {
989
- 0 => 'Multi', # all NEX and ILCE-3000/3500; all other ILCE use the name 'Wide'
1032
+ 0 => 'Wide', # all NEX and ILCE-3000/3500 use the name 'Multi'
990
1033
  1 => 'Center',
991
1034
  3 => 'Flexible Spot',
992
1035
  4 => 'Flexible Spot (LA-EA4)', # seen for ILCE-7RM2 with LA-EA4
@@ -998,6 +1041,8 @@ my %meterInfo2 = (
998
1041
  Name => 'AFAreaModeSetting',
999
1042
  Condition => '$$self{Model} =~ /^ILCA-/',
1000
1043
  Notes => 'ILCA models',
1044
+ RawConv => '$$self{AFAreaILCA} = $val',
1045
+ DataMember => 'AFAreaILCA',
1001
1046
  Writable => 'int8u',
1002
1047
  PrintConv => {
1003
1048
  0 => 'Wide',
@@ -1022,13 +1067,16 @@ my %meterInfo2 = (
1022
1067
  },
1023
1068
  },
1024
1069
  0x201e => [{ #PH (A99)
1025
- # AFPointSelected for SLT/HV/ILCA, non-zero only when AFAreaMode = 'Local' or 'Zone'
1026
- # AFZoneSelected for NEX/ILCE, non-zero only when AFAreaMode = 'Zone',
1027
- # but also with Expanded Flexible Spot for ILCE-7RM2/7SM2 ...
1070
+ # Selected AF Point for SLT/HV/ILCA or ILCE with LA-EA2/EA4
1071
+ # Selected AF Zone for NEX/ILCE/ILCA when AFAreaMode = 'Zone',
1072
+ # but also with Expanded Flexible Spot for ILCE-7RM2/7SM2/9 ...
1028
1073
  # doesn't seem to apply to DSC models (always 0)
1029
1074
  Name => 'AFPointSelected',
1030
- Condition => '$$self{Model} =~ /^(SLT-|HV)/',
1031
- Notes => 'SLT models',
1075
+ Condition => q{
1076
+ ($$self{Model} =~ /^(SLT-|HV)/) or ($$self{Model} =~ /^ILCE-/ and
1077
+ defined $$self{AFAreaILCE} and $$self{AFAreaILCE} == 4)
1078
+ },
1079
+ Notes => 'SLT models or ILCE with LA-EA2/EA4',
1032
1080
  Writable => 'int8u',
1033
1081
  PrintConvColumns => 2,
1034
1082
  PrintConv => {
@@ -1055,12 +1103,12 @@ my %meterInfo2 = (
1055
1103
  },
1056
1104
  },{
1057
1105
  Name => 'AFPointSelected',
1058
- Condition => '$$self{Model} =~ /^ILCA-(68|77M2)/',
1106
+ Condition => '$$self{Model} =~ /^ILCA-(68|77M2)/ and defined $$self{AFAreaILCA} and $$self{AFAreaILCA} != 8',
1059
1107
  Notes => 'ILCA-68 and ILCA-77M2',
1060
1108
  Writable => 'int8u',
1061
1109
  ValueConv => '$val - 1', # to get the same numbers as from the BITMASK in 0x2020
1062
1110
  ValueConvInv => '$val + 1',
1063
- PrintConvColumns => 3,
1111
+ PrintConvColumns => 5,
1064
1112
  PrintConv => {
1065
1113
  -1 => 'Auto',
1066
1114
  %afPoints79,
@@ -1068,31 +1116,55 @@ my %meterInfo2 = (
1068
1116
  },
1069
1117
  },{
1070
1118
  Name => 'AFPointSelected',
1071
- Condition => '$$self{Model} =~ /^ILCA-99M2/',
1072
- Notes => 'ILCA-99M2, appears to indicate the number of the selectable Focal Plane AF Point',
1119
+ Condition => '($$self{Model} =~ /^ILCA-99M2/ and defined $$self{AFAreaILCA} and $$self{AFAreaILCA} != 8)',
1120
+ Notes => 'ILCA-99M2 when AFAreaModeSetting is not Zone',
1121
+ # (appears to indicate the number of the selectable Focal Plane AF Point)
1073
1122
  Writable => 'int8u',
1123
+ PrintConvColumns => 4,
1074
1124
  PrintConv => {
1075
- 0 => 'Auto',
1076
- 162 => '162 = E6 (Center)',
1077
- OTHER => sub { shift }, # pass other values straight through
1125
+ 0 => 'Auto', # seen for AFAreaModeSetting = Center, Wide
1126
+ %afPoints99M2, # for selected AFPoints corresponding to the 79 dedicated AF points
1127
+ 162 => 'E6 (162, Center)', # add " (Center)" to central point
1128
+ OTHER => sub { shift }, # pass other values straight through
1129
+ },
1130
+ },{
1131
+ Name => 'AFPointSelected',
1132
+ Condition => '($$self{Model} =~ /^ILCA-/ and defined $$self{AFAreaILCA} and $$self{AFAreaILCA} == 8)',
1133
+ Notes => 'ICLA models when AFAreaModeSetting is set to Zone',
1134
+ # ILCA-68 and 77M2 have 9 Zones: numbers/locations verified for ILCA-77M2
1135
+ # ILCA-99M2 has 15 Zones in Hybrid-AF and 9 Zones in dedicated Phase AF Area, so may not be valid for ILCA-99M2...
1136
+ Writable => 'int8u',
1137
+ PrintConv => {
1138
+ 0 => 'n/a',
1139
+ 1 => 'Top Left Zone',
1140
+ 2 => 'Top Zone',
1141
+ 3 => 'Top Right Zone',
1142
+ 4 => 'Left Zone',
1143
+ 5 => 'Center Zone',
1144
+ 6 => 'Right Zone',
1145
+ 7 => 'Bottom Left Zone',
1146
+ 8 => 'Bottom Zone',
1147
+ 9 => 'Bottom Right Zone',
1148
+ #14 => ' ??? ', # seen for ILCA-99M2
1078
1149
  },
1079
1150
  },{
1080
- Name => 'AFZoneSelected', # each Zone has 3x3 AF Areas --> 9 positions within 5x5 total Contrast AF Areas
1151
+ Name => 'AFPointSelected',
1081
1152
  # non-zero only when AFAreaMode is 'Zone', and 'Expanded-Flexible-Spot' for ILCE-6300/7RM2/7SM2
1153
+ # each Zone has 3x3 AF Areas --> 9 positions within 5x5 total Contrast AF Areas
1082
1154
  Condition => '$$self{Model} =~ /^(NEX-|ILCE-)/',
1083
1155
  Notes => 'NEX and ILCE models',
1084
1156
  Writable => 'int8u',
1085
1157
  PrintConv => {
1086
1158
  0 => 'n/a',
1087
- 1 => 'Center',
1088
- 2 => 'Top',
1089
- 3 => 'Right',
1090
- 4 => 'Left',
1091
- 5 => 'Bottom',
1092
- 6 => 'Bottom Right',
1093
- 7 => 'Bottom Left',
1094
- 8 => 'Top Left',
1095
- 9 => 'Top Right',
1159
+ 1 => 'Center Zone',
1160
+ 2 => 'Top Zone',
1161
+ 3 => 'Right Zone',
1162
+ 4 => 'Left Zone',
1163
+ 5 => 'Bottom Zone',
1164
+ 6 => 'Bottom Right Zone',
1165
+ 7 => 'Bottom Left Zone',
1166
+ 8 => 'Top Left Zone',
1167
+ 9 => 'Top Right Zone',
1096
1168
  },
1097
1169
  }],
1098
1170
  # 0x201f - 0 0 0 0 for SLT and DSC; 4 values for NEX/ILCE with 4th value always 0:
@@ -1105,7 +1177,6 @@ my %meterInfo2 = (
1105
1177
  Notes => 'SLT models, or NEX/ILCE with A-mount lenses',
1106
1178
  BitsPerWord => 8,
1107
1179
  BitsTotal => 80,
1108
- Notes => 'SLT models only',
1109
1180
  PrintConvColumns => 2,
1110
1181
  PrintConv => {
1111
1182
  0 => '(none)',
@@ -1133,16 +1204,27 @@ my %meterInfo2 = (
1133
1204
  },
1134
1205
  },{
1135
1206
  Name => 'AFPointsUsed',
1136
- Condition => '$$self{Model} =~ /^ILCA-/',
1207
+ Condition => '$$self{Model} =~ /^ILCA-(68|77M2)/',
1137
1208
  Notes => 'ILCA models',
1138
1209
  BitsPerWord => 8,
1139
1210
  BitsTotal => 80,
1211
+ PrintConvColumns => 4,
1140
1212
  PrintConv => {
1141
1213
  0 => '(none)',
1142
1214
  BITMASK => { %afPoints79 },
1143
1215
  },
1144
1216
  }],
1145
1217
  # 0x2021 - 0 for DSC; 0, 1 or 2 for SLT/ILCA and NEX/ILCE: 1=Face, 2=object-tracking ?
1218
+ 0x2021 => { #JR
1219
+ Name => 'AFTracking',
1220
+ Condition => '$$self{Model} !~ /^DSC-/', # (doesn't seem to apply to DSC-models)
1221
+ Writable => 'int8u',
1222
+ PrintConv => {
1223
+ 0 => 'Off',
1224
+ 1 => 'Face tracking',
1225
+ 2 => 'Lock On AF',
1226
+ },
1227
+ },
1146
1228
  # 0x2022 - 13 bytes (104 bits) for SLT-A58/A99V, NEX-3N/5R/5T/6/VG30E/VG900, ILCE-3000/3500/5000/7/7R
1147
1229
  # 26 bytes (208 bits) for ILCA-77M2, ILCE-5100/6000/7M2/7S/QX1 (7M2 has 117, 5100/6000 have 179 PhaseAFPoints)
1148
1230
  # 52 bytes (416 bits) for ILCE-7RM2 (which has 399 PhaseAFPoints) and ILCE-7SM2
@@ -1170,7 +1252,14 @@ my %meterInfo2 = (
1170
1252
  BITMASK => { },
1171
1253
  },
1172
1254
  }],
1173
- # 0x2023 - 0
1255
+ 0x2023 => { #JR
1256
+ Name => 'MultiFrameNREffect',
1257
+ Writable => 'int32u',
1258
+ PrintConv => {
1259
+ 0 => 'Normal',
1260
+ 1 => 'High', # seen this only for ILCA-77M2 MFNR-12 images
1261
+ },
1262
+ },
1174
1263
  # 0x2024 - 96 byte data block, very similar to 0x3000 ShotInfo, seen in Xperia Z5
1175
1264
  # 0x2025 - n1 n2 0 0 DSC-RX100M3/RX100M4/RX10M2/HX90V/WX500, ILCA-77M2, ILCE-5100/7M2/7RM2/7S/QX1
1176
1265
  # seen n1=0,2,4,5,7 and n2=0,1,3, very often: 7 3 0 0
@@ -1222,7 +1311,7 @@ my %meterInfo2 = (
1222
1311
  # 0x202a - first seen for ILCE-6300: 66 bytes
1223
1312
  # possibly a 'replacement' for Tag2022 FocalPlaneAFPointsUsed,
1224
1313
  # but now indicating locations in a 640x428 grid (3:2 part of LCD ?)
1225
- # first byte value 1 for ILCE-6300/6500, ILCA-99M2
1314
+ # first byte value 1 for ILCE-6300/6500/9, ILCA-99M2
1226
1315
  # values 110,137, ... for DSC-RX10M3, therefore limit to first byte = 1 for now
1227
1316
  0x202a => {
1228
1317
  Name => 'Tag202a',
@@ -1237,13 +1326,23 @@ my %meterInfo2 = (
1237
1326
  PrintConv => {
1238
1327
  0x100 => 'Multi-segment',
1239
1328
  0x200 => 'Center-weighted average',
1240
- # 0x300 => 'Spot', # not yet seen; 768/769 being std/large is educated guess
1241
- 0x301 => 'Spot (large)',# seen for ILCA-99M2 with Exif indicating "Spot"
1242
- 0x400 => 'Average', # (NC) seen for ILCA-99M2 with Exif indicating "Average"
1243
- 0x500 => 'Highlight', # (NC) seen for ILCA-99M2 with Exif indicating "Other"
1244
- },
1329
+ # 0x300 => 'Spot', # not yet seen
1330
+ # (there is one other setting that might also be encoded here:
1331
+ # the Spot Metering Point can be set to "Center", to meter in the
1332
+ # center of the image, or to "Focus Point Link", to meter at the focus point.
1333
+ # This could also be the meaning of 0x301 and 0x302 - JR)
1334
+ 0x301 => 'Spot (Standard)', # (NC) seen for ILCA-99M2 with Exif indicating "Spot"
1335
+ 0x302 => 'Spot (Large)', # (NC) seen for ILCE-9 with Exif indicating "Spot"
1336
+ 0x400 => 'Average', # (NC) seen for ILCA-99M2 with Exif indicating "Average"
1337
+ 0x500 => 'Highlight', # (NC) seen for ILCA-99M2 with Exif indicating "Other"
1338
+ },
1339
+ },
1340
+ 0x202d => { #JR first seen for ILCA-99M2, ILCE-6500, DSC-RX100M5
1341
+ Name => 'ExposureStandardAdjustment', # (NC)
1342
+ Writable => 'rational64s',
1343
+ PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
1344
+ PrintConvInv => '$val',
1245
1345
  },
1246
- # 0x202d - rational64s - 0/6 first seen for ILCA-99M2, ILCE-6500, DSC-RX100M5
1247
1346
  0x3000 => {
1248
1347
  Name => 'ShotInfo',
1249
1348
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::ShotInfo' },
@@ -1272,14 +1371,14 @@ my %meterInfo2 = (
1272
1371
  # from mid-2015: ILCE-7RM2/7SM2/6300 and newer models use different offsets
1273
1372
  {
1274
1373
  Name => 'Tag9050a',
1275
- Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(6300|6500|7RM2|7SM2|9)|ILCA-99M2)/',
1374
+ Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(6300|6500|7RM2|7RM3|7SM2|9)|ILCA-99M2)/',
1276
1375
  SubDirectory => {
1277
1376
  TagTable => 'Image::ExifTool::Sony::Tag9050a',
1278
1377
  ByteOrder => 'LittleEndian',
1279
1378
  },
1280
1379
  },{
1281
1380
  Name => 'Tag9050b',
1282
- Condition => '$$self{Model} =~ /^(ILCE-(6300|6500|7RM2|7SM2|9)|ILCA-99M2)/',
1381
+ Condition => '$$self{Model} =~ /^(ILCE-(6300|6500|7RM2|7RM3|7SM2|9)|ILCA-99M2)/',
1283
1382
  SubDirectory => {
1284
1383
  TagTable => 'Image::ExifTool::Sony::Tag9050b',
1285
1384
  ByteOrder => 'LittleEndian',
@@ -1295,10 +1394,10 @@ my %meterInfo2 = (
1295
1394
  # 0x0a (e) for SLT-A37/A57/A65V/A77V/A99V, NEX-F3/5N/5R/5T/6/7/VG20E, DSC-RX100/RX1/RX1R/HX10V/HX20V/HX30V/HX200V/TX200V/TX300V/TX66/WX50/WX100/WX150, Lunar/Stellar/HV
1296
1395
  # 0x0c (e) for ILCE-3000/3500, NEX-3N, SLT-A58, DSC-HX50V/HX300/RX100M2/TX30/WX60/WX80/WX200/WX300, DSC-QX10/QX100
1297
1396
  # 0xd0 (e) H90, W650, W690: tag9400 decoding appears not valid/different
1298
- # 0x23 (e) for DSC-RX10/HX60V/HX400V/WX220/WX350, ILCE-7/7R/5000/6000, ILCA-68/77M2
1299
- # 0x24 (e) for ILCA-99M2,ILCE-5100/6300/6500/7M2/7RM2/7S/7SM2/QX1, DSC-HX90V/QX30/RX100M3/RX100M4/RX100M5/RX10M2/RX10M3/RX1RM2/WX500
1300
- # 0x26 (e) for ILCE-9
1301
- # first byte decoded: 40, 204, 202, 27, 58, 62, 48 respectively
1397
+ # 0x23 (e) for DSC-RX10/HX60V/HX350/HX400V/WX220/WX350, ILCE-7/7R/5000/6000, ILCA-68/77M2
1398
+ # 0x24 (e) for ILCA-99M2,ILCE-5100/6300/6500/7M2/7RM2/7S/7SM2/QX1, DSC-HX90V/QX30/RX0/RX100M3/RX100M4/RX100M5/RX10M2/RX10M3/RX1RM2/WX500
1399
+ # 0x26 (e) for ILCE-7RM3/9, DSC-RX10M4
1400
+ # first byte decoded: 40, 204, 202, 27, 58, 62, 48, 215 respectively
1302
1401
  {
1303
1402
  Name => 'Tag9400a',
1304
1403
  Condition => q{
@@ -1347,24 +1446,26 @@ my %meterInfo2 = (
1347
1446
  # 43 00 66 0e 0x0a1b (n) ILCE-7/7R v0.xx/v1.00/v1.01, ILCE-5000, DSC-RX10
1348
1447
  # 43 10 66 0e 0x0a1b (n) ILCE-7/7R v1.02/v1.10
1349
1448
  # 43 30 6c 0e 0x0a1b (n) ILCE-7/7R v1.20-v3.20
1350
- # 44 00 9c 0e 0x0a39 (o) ILCE-6000 v1.00/v1.10, DSC-HX60V/HX400V/WX220/WX350 (also DSC-QX30 samples from sony.net)
1449
+ # 44 00 9c 0e 0x0a39 (o) ILCE-6000 v1.00/v1.10, DSC-HX60V/HX350/HX400V/WX220/WX350 (also DSC-QX30 samples from sony.net)
1351
1450
  # 44 10 a2 0e 0x0a39 (o) ILCE-6000 v1.20/v1.21
1352
1451
  # 44 20 a2 0e 0x0a39 (o) ILCE-6000 v2.00-v3.20
1353
1452
  # 49 00 b0 0e 0x0a3b (p) ILCA-68 v1.00, ILCA-77M2 V1.00/v1.01/v2.00 (also DSC-RX100M3 samples from sony.net)
1354
1453
  # 4a 00 b3 0e 0x0a3d (q) ILCE-7S v1.00, ILCE-5100 v1.00/v1.10, ILCE-QX1, DSC-QX30/RX100M3
1355
1454
  # 4a 20 b9 0e 0x0a3d (q) ILCE-7S v1.20-v3.10
1356
1455
  # 4e 10 d0 0e 0x0a5a (r) ILCE-7M2 v1.00/v1.10
1357
- # 4e 30 d6 0e 0x0a5a (r) ILCE-7M2 v1.20-v3.30
1456
+ # 4e 30 d6 0e 0x0a5a (r) ILCE-7M2 v1.20-v4.00
1358
1457
  # 5a 00 14 0f 0x0a85 (s) DSC-HX90V/WX500
1359
1458
  # 5d 00 56 0f 0x0ac7 (t) DSC-RX10M2/RX100M4, ILCE-7RM2/7SM2 v1.00-v2.20 (also DSC-RX1RM2 samples from Sony)
1360
- # 5d 1d 58 0f 0x0ac7 (t) ILCE-7RM2 v3.00-v3.30
1459
+ # 5d 1d 58 0f 0x0ac7 (t) ILCE-7RM2 v3.00-v4.00
1361
1460
  # 5d 1e 57 0f 0x0ac7 (t) DSC-RX1RM2 v1.00
1362
1461
  # 5d 10 56 0f 0x0ac7 (t) ILCE-6300 v1.00 (samples from Sony)
1363
1462
  # 5d 20 58 0f 0x0ac7 (t) ILCE-6300 v1.00/v1.10
1364
1463
  # 5e 00 56 0f 0x0ac7 (t) DSC-RX10M3 v1.00
1365
1464
  # 64 00 a8 0f 0x0b15 (u) DSC-RX100M5 v1.00
1366
- # 67 00 f9 0f 0x0b66 (v) ILCA-99M2 v1.00, ILCE-6500 v1.00
1367
- # 7c 00 fe 0f 0x0adb (w) ILCE-9 v0.01/v1.00
1465
+ # 67 00 f9 0f 0x0b66 (v) ILCA-99M2 v1.00, ILCE-6500 v1.00/v1.03, DSC-RX0 v1.00
1466
+ # 7c 00 fe 0f 0x0adb (w) ILCE-9 v0.01/v1.00/v1.01/v1.10
1467
+ # 7f 00 fa 0f 0x0add (x) DSC-RX10M4 v1.00
1468
+ # 80 00 fa 0f ILCE-7RM3 v0.01
1368
1469
  #
1369
1470
  # 0x0004 - (RX100: 0 or 1. subsequent data valid only if 1 - PH)
1370
1471
  # 0x0007 => {
@@ -1395,13 +1496,19 @@ my %meterInfo2 = (
1395
1496
  # 0x13 0x01 ILCE-5000/7/7R, DSC-RX10, but also seen:
1396
1497
  # 0x12 0x01 for ILCE-7/7R and DSC-RX10 samples from Sony.net ...
1397
1498
  # 0x15 0x01 for a few ILCE-7/7R ...
1398
- # 0x14 0x01 ILCE-6000, DSC-HX60V/HX400V/WX220/WX350
1499
+ # 0x14 0x01 ILCE-6000, DSC-HX60V/HX350/HX400V/WX220/WX350
1399
1500
  # 0x17 0x01 ILCE-7S/7M2/5100/QX1, DSC-QX30/RX100M3
1400
1501
  # 0x19 0x01 DSC-HX90V/RX1RM2/RX10M2/RX100M4/WX500, ILCE-6300/7RM2/7SM2
1401
- # 0x1a 0x01 DSC-RX10M3/RX100M5, ILCE-6500
1502
+ # 0x1a 0x01 DSC-RX0/RX10M3/RX100M5, ILCE-6500
1503
+ # 0x1c 0x01 ILCE-9
1504
+ # 0x1d 0x01 DSC-RX10M4
1505
+ # 0x1e 0x01 ILCE-7RM3
1402
1506
  # var var SLT-A58/A99V, HV, ILCA-68/77M2/99M2
1403
- # only valid when first byte 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x17, 0x19, 0x1a (enciphered 0x8a, 0x70, 0xb6, 0x69, 0x88, 0x20, 0x30, 0xd7, 0xbb, 0x92)
1404
- 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]\x01/',
1507
+ # 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)
1508
+ # 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/',
1509
+ # alternative simpler Condition:
1510
+ # not valid for SLT/HV/ILCA models, and not valid for first byte 0x0e or 0xff (enciphered 0x05 or 0xff)
1511
+ Condition => '$$self{Model} !~ /^(SLT-|HV|ILCA-)/ and $$valPt !~ /^[\x05\xff]/',
1405
1512
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9402' },
1406
1513
  },{
1407
1514
  Name => 'Sony_0x9402',
@@ -1417,9 +1524,9 @@ my %meterInfo2 = (
1417
1524
  # 9 0 38 2 2 SLT-A37/A57/A99V, NEX-5R/5T/6/F3/VG30E/VG900, DSC-RX1/RX1R/RX100, Stellar
1418
1525
  # 12 0 8 2 2 SLT-A58, NEX-3N, ILCE-3000/3500, DSC-HX300/HX50V/WX60/WX80/WX300/TX30...
1419
1526
  # 13 0 9 2 2 DSC-QX10/QX100/RX100M2
1420
- # 15 0 35 2 2 ILCA-68/77M2, ILCE-5000/5100/6000/7/7R/7S/7M2/QX1, DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350
1527
+ # 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
1421
1528
  # 16 0 85 2 2 DSC-HX90V/WX500
1422
- # 17 0 232 1 2 DSC-RX1RM2/RX10M2/RX10M3/RX100M4/RX100M5, ILCE-6300/6500/7RM2/7SM2/9, ILCA-99M2
1529
+ # 17 0 232 1 2 DSC-RX0/RX1RM2/RX10M2/RX10M3/RX10M4/RX100M4/RX100M5, ILCE-6300/6500/7RM2/7RM3/7SM2/9, ILCA-99M2
1423
1530
  # other values for Panorama images and several other models
1424
1531
  0x9404 => [{
1425
1532
  Name => 'Tag9404a',
@@ -1431,6 +1538,11 @@ my %meterInfo2 = (
1431
1538
  # first byte must be 9 or 12 or 13 or 15 or 16 and 4th byte must be 2 (deciphered)
1432
1539
  Condition => '$$valPt =~ /^[\xe7\xea\xcd\x8a\x70]..\x08/',
1433
1540
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9404b' },
1541
+ },{
1542
+ Name => 'Tag9404c',
1543
+ # first byte must be 17 and 4th byte must be 1 (deciphered)
1544
+ Condition => '$$valPt =~ /^\xb6..\x01/',
1545
+ SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9404c' },
1434
1546
  },{
1435
1547
  Name => 'Sony_0x9404',
1436
1548
  %unknownCipherData,
@@ -1441,14 +1553,14 @@ my %meterInfo2 = (
1441
1553
  # 3 0 (0x1b = 27 0 enc.) SLT, NEX, ILCE-3000/3500, DSC-RX100/RX1 + other DSC of same generation, also QX10 and QX100
1442
1554
  # 4 0 (0x40 = 64 0 enc.) DSC-RX1R
1443
1555
  # 5 0 (0x7d = 125 0 enc.) DSC-RX100M2
1444
- # 136 var (0x3a = 58 var enc.) ILCE-7/7R/5000/6000, DSC-HX400V/HX60V/RX10/WX220/WX350
1556
+ # 136 var (0x3a = 58 var enc.) ILCE-7/7R/5000/6000, DSC-HX60V/HX350/HX400V/RX10/WX220/WX350
1445
1557
  # 137 var (0xb3 = 179 var enc.) ILCA-68/77M2, DSC-RX100M3 - appears to go with 136
1446
1558
  # 138 var (0x7e = 126 var enc.) ILCE-7S/5100/QX1, DSC-QX30 - appears to go with 136
1447
1559
  # 139 var (0x9a = 154 var enc.) ILCE-7M2
1448
1560
  # 142 var (0x25 = 37 var enc.) DSC-HX90V/RX1RM2/RX10M2/RX10M3/RX100M4/WX500, ILCE-6300/7RM2/7SM2
1449
1561
  # 144 var (0xe1 = 225 var enc.) DSC-RX100M5
1450
- # 145 var (0x76 = 118 var enc.) ILCA-99M2, ILCE-6500
1451
- # 163 var (0x8b = 139 var enc.) ILCE-9
1562
+ # 145 var (0x76 = 118 var enc.) ILCA-99M2, ILCE-6500, DSC-RX0
1563
+ # 163 var (0x8b = 139 var enc.) ILCE-7RM3/9, DSC-RX10M4
1452
1564
  0x9405 => [{
1453
1565
  Name => 'Tag9405a',
1454
1566
  # first byte must be 0x1b or 0x40 or 0x7d
@@ -1456,7 +1568,7 @@ my %meterInfo2 = (
1456
1568
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9405a' },
1457
1569
  },{
1458
1570
  Name => 'Tag9405b',
1459
- # first byte must be 0x3a, 0xb3, 0x7e, 0x9a or 0x25 or 0xe1 or 0x76
1571
+ # first byte must be 0x3a, 0xb3, 0x7e, 0x9a, 0x25, 0xe1, 0x76 or 0x8b
1460
1572
  Condition => '$$valPt =~ /^[\x3a\xb3\x7e\x9a\x25\xe1\x76\x8b]/',
1461
1573
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9405b' },
1462
1574
  },{
@@ -1633,6 +1745,9 @@ my %meterInfo2 = (
1633
1745
  357 => 'ILCE-6300', #IB
1634
1746
  358 => 'ILCE-9', #JR
1635
1747
  360 => 'ILCE-6500', #JR
1748
+ 362 => 'ILCE-7RM3', #IB
1749
+ 364 => 'DSC-RX0', #PH
1750
+ 365 => 'DSC-RX10M4', #JR
1636
1751
  },
1637
1752
  },
1638
1753
  0xb020 => { #2
@@ -2715,7 +2830,7 @@ my %meterInfo2 = (
2715
2830
  return \ "Binary data 7404 bytes" unless $et->Options('Binary');
2716
2831
  my @dat = unpack('n*', $val);
2717
2832
  # TIFF header for a 16-bit RGB 10dpi 40x30 image
2718
- $val = MakeTiffHeader(40,30,3,16,10);
2833
+ $val = Image::ExifTool::MakeTiffHeader(40,30,3,16,10);
2719
2834
  # re-order data to RGB pixels
2720
2835
  my ($i, @val);
2721
2836
  for ($i=0; $i<40*30; ++$i) {
@@ -2775,7 +2890,7 @@ my %meterInfo2 = (
2775
2890
  return \ "Binary data 7404 bytes" unless $et->Options('Binary');
2776
2891
  my @dat = unpack('v*', $val);
2777
2892
  # TIFF header for a 16-bit RGB 10dpi 40x30 image
2778
- $val = MakeTiffHeader(40,30,3,16,10);
2893
+ $val = Image::ExifTool::MakeTiffHeader(40,30,3,16,10);
2779
2894
  # re-order data to RGB pixels
2780
2895
  my ($i, @val);
2781
2896
  for ($i=0; $i<40*30; ++$i) {
@@ -5559,7 +5674,7 @@ my %releaseMode2 = ( #JR
5559
5674
  28 => 'Smile Shutter', #PH (RX100)
5560
5675
  29 => 'Continuous - Tele-zoom Advance Priority',
5561
5676
  # 30 - seen quite often for single-shot images ... SLT-A58, ILCE-5100/6000
5562
- # 33 - Continuous first seen for DSC-RX100M5
5677
+ # 33 - Continuous - seen for DSC-RX100M5, RX10M4, maybe 24 fps mode ???
5563
5678
  146 => 'Single Frame - Movie Capture', #PH (seen in Tag2010 ReleaseMode2 values)
5564
5679
  },
5565
5680
  );
@@ -5590,7 +5705,7 @@ my %releaseMode2010 = (
5590
5705
  # 3 => 'Remote Commander', (NC) (seen this when other ReleaseMode and ReleaseMode2 are 'Normal' - PH, A77)
5591
5706
  4 => 'Continuous - Burst', # seen for DSC-WX500 with burst of 10 shots
5592
5707
  5 => 'Continuous - Speed/Advance Priority',
5593
- # 6 => '???', # seen for ILCE-6300
5708
+ 6 => 'Normal - Self-timer', # seen for ILCE-6300/6500/9, ILCA-99M2
5594
5709
  },
5595
5710
  );
5596
5711
  my %selfTimer2010 = (
@@ -6222,7 +6337,7 @@ my %pictureProfile2010 = (
6222
6337
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
6223
6338
  FORMAT => 'int8u',
6224
6339
  NOTES => q{
6225
- Valid for DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350,
6340
+ Valid for DSC-HX60V/HX350/HX400V/QX30/RX10/RX100M3/WX220/WX350,
6226
6341
  ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-68/77M2.
6227
6342
  },
6228
6343
  WRITABLE => 1,
@@ -6349,7 +6464,7 @@ my %pictureProfile2010 = (
6349
6464
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
6350
6465
  FORMAT => 'int8u',
6351
6466
  NOTES => q{
6352
- Valid for DSC-HX90V/RX1RM2/RX10M2/RX10M3/RX100M4/RX100M5/WX500,
6467
+ Valid for DSC-HX90V/RX0/RX1RM2/RX10M2/RX10M3/RX100M4/RX100M5/WX500,
6353
6468
  ILCE-6300/6500/7RM2/7SM2, ILCA-99M2.
6354
6469
  },
6355
6470
  WRITABLE => 1,
@@ -6410,14 +6525,14 @@ my %pictureProfile2010 = (
6410
6525
  0x0388 => {
6411
6526
  Name => 'MeterInfo',
6412
6527
  Format => 'int32u[486]',
6413
- Condition => '$$self{Model} !~ /^(ILCA-99M2|ILCE-6500|DSC-RX100M5)/',
6528
+ Condition => '$$self{Model} !~ /^(ILCA-99M2|ILCE-6500|DSC-(RX0|RX100M5))/',
6414
6529
  Unknown => 1,
6415
6530
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::MeterInfo' },
6416
6531
  },
6417
6532
  0x0398 => {
6418
6533
  Name => 'MeterInfo',
6419
6534
  Format => 'int32u[486]',
6420
- Condition => '$$self{Model} =~ /^(ILCA-99M2|ILCE-6500|DSC-RX100M5)/',
6535
+ Condition => '$$self{Model} =~ /^(ILCA-99M2|ILCE-6500|DSC-(RX0|RX100M5))/',
6421
6536
  Unknown => 1,
6422
6537
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::MeterInfo' },
6423
6538
  },
@@ -6484,7 +6599,7 @@ my %pictureProfile2010 = (
6484
6599
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
6485
6600
  FORMAT => 'int8u',
6486
6601
  NOTES => q{
6487
- Valid for ILCE-9.
6602
+ Valid for ILCE-7RM3/9, DSC-RX10M4.
6488
6603
  },
6489
6604
  WRITABLE => 1,
6490
6605
  FIRST_ENTRY => 0,
@@ -6541,6 +6656,12 @@ my %pictureProfile2010 = (
6541
6656
  PrintConv => 'sprintf("%.0f",$val)',
6542
6657
  PrintConvInv => '$val',
6543
6658
  },
6659
+ 0x036d => { # different format from all previous cameras: now each triple is int16u-int32u-int32u
6660
+ Name => 'MeterInfo',
6661
+ Format => 'undef[1620]',
6662
+ Unknown => 1,
6663
+ SubDirectory => { TagTable => 'Image::ExifTool::Sony::MeterInfo9' },
6664
+ },
6544
6665
  0x17d0 => {
6545
6666
  Name => 'DistortionCorrParams',
6546
6667
  Condition => '$$self{Model} !~ /^DSC-/',
@@ -6705,6 +6826,37 @@ my %pictureProfile2010 = (
6705
6826
  0x0714 => { Name => 'MeterInfo2Row9', %meterInfo2 },
6706
6827
  );
6707
6828
 
6829
+ # possible metering information (ref JR)
6830
+ %Image::ExifTool::Sony::MeterInfo9 = (
6831
+ %binaryDataAttrs,
6832
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
6833
+ NOTES => q{
6834
+ Information possibly related to metering. Extracted only if the Unknown
6835
+ option is used.
6836
+ },
6837
+ # new format for ILCE-9:
6838
+ # 162 'triplets' of (int16u int32u int32u) numbers: (k,n1,n2)
6839
+ # Set 1: 7 rows of 9
6840
+ # Set 2: 9 rows of 11
6841
+ 0x0000 => { Name => 'MeterInfo1Row1', %meterInfo1b },
6842
+ 0x005a => { Name => 'MeterInfo1Row2', %meterInfo1b },
6843
+ 0x00b4 => { Name => 'MeterInfo1Row3', %meterInfo1b },
6844
+ 0x010e => { Name => 'MeterInfo1Row4', %meterInfo1b },
6845
+ 0x0168 => { Name => 'MeterInfo1Row5', %meterInfo1b },
6846
+ 0x01c2 => { Name => 'MeterInfo1Row6', %meterInfo1b },
6847
+ 0x021c => { Name => 'MeterInfo1Row7', %meterInfo1b },
6848
+
6849
+ 0x0276 => { Name => 'MeterInfo2Row1', %meterInfo2b },
6850
+ 0x02e4 => { Name => 'MeterInfo2Row2', %meterInfo2b },
6851
+ 0x0352 => { Name => 'MeterInfo2Row3', %meterInfo2b },
6852
+ 0x03c0 => { Name => 'MeterInfo2Row4', %meterInfo2b },
6853
+ 0x042e => { Name => 'MeterInfo2Row5', %meterInfo2b },
6854
+ 0x049c => { Name => 'MeterInfo2Row6', %meterInfo2b },
6855
+ 0x050a => { Name => 'MeterInfo2Row7', %meterInfo2b },
6856
+ 0x0578 => { Name => 'MeterInfo2Row8', %meterInfo2b },
6857
+ 0x05e6 => { Name => 'MeterInfo2Row9', %meterInfo2b },
6858
+ );
6859
+
6708
6860
  %Image::ExifTool::Sony::Tag900b = ( #JR
6709
6861
  PROCESS_PROC => \&ProcessEnciphered,
6710
6862
  WRITE_PROC => \&WriteEnciphered,
@@ -6820,6 +6972,11 @@ my %pictureProfile2010 = (
6820
6972
  Name => 'ReleaseMode2',
6821
6973
  %releaseMode2,
6822
6974
  },
6975
+ # 0x004c - 0x005b: A-Mount: 16 values, only non-zero data for lenses giving "A-mount (3)" in 0x0104 below.
6976
+ # e.g for SAL70400G2: 9 5 5 64 69 74 79 84 89 94 98 104 255 105 89 80
6977
+ # where 9 means 9 focal lengths: 64 ... 104,
6978
+ # corresponding to 70-400mm via FocalLength = 4.375*2**($val/16)
6979
+ # 0x004c, 0x0051: E-Mount: ImageCount and dateTime
6823
6980
  0x004c => { # only ILCE-7/7R/7S/7M2/5000/5100/6000/QX1 - but appears not valid when flash is used ...
6824
6981
  Name => 'ImageCount2',
6825
6982
  Condition => '($$self{Model} =~ /^(ILCE-(7(R|S|M2)?|[56]000|5100|QX1))\b/) and (($$self{FlashFired} & 0x01) != 1)',
@@ -7000,7 +7157,7 @@ my %pictureProfile2010 = (
7000
7157
  WRITE_PROC => \&WriteEnciphered,
7001
7158
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
7002
7159
  FORMAT => 'int8u',
7003
- NOTES => 'Valid from July 2015 for ILCE-6300/6500/7RM2/7SM2, ILCA-99M2.',
7160
+ NOTES => 'Valid from July 2015 for ILCE-6300/6500/7RM2/7RM3/7SM2/9, ILCA-99M2.',
7004
7161
  WRITABLE => 1,
7005
7162
  FIRST_ENTRY => 0,
7006
7163
  DATAMEMBER => [ 0x0105 ],
@@ -7064,15 +7221,27 @@ my %pictureProfile2010 = (
7064
7221
  Name => 'ReleaseMode2',
7065
7222
  %releaseMode2,
7066
7223
  },
7224
+ 0x0052 => {
7225
+ Name => 'ImageCount2',
7226
+ Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} =~ /^(ILCE-7RM3)/)',
7227
+ Format => 'int32u',
7228
+ RawConv => '$val & 0x00ffffff',
7229
+ PrintConv => 'sprintf("%6d",$val)',
7230
+ },
7231
+ # 0x0058 - 0x0067: A-Mount: 16 values, only non-zero data for lenses giving "A-mount (3)" in 0x0104 below.
7232
+ # e.g for SAL70400G2: 9 5 5 64 69 74 79 84 89 94 98 104 255 105 89 80
7233
+ # where 9 means 9 focal lengths: 64 ... 104,
7234
+ # corresponding to 70-400mm via FocalLength = 4.375*2**($val/16)
7235
+ # 0x0058, 0x0061: E-Mount: ImageCount and dateTime
7067
7236
  0x0058 => { # appears not valid when flash is used ... not for ILCA-99M2
7068
7237
  Name => 'ImageCount2',
7069
- Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} !~ /^(ILCA-99M2)/)',
7238
+ Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} !~ /^(ILCA-99M2|ILCE-7RM3)/)',
7070
7239
  Format => 'int32u',
7071
7240
  RawConv => '$val & 0x00ffffff',
7072
7241
  },
7073
7242
  0x0061 => { # only minutes-seconds, not for ILCA-99M2, ILCE-9
7074
7243
  Name => 'SonyTimeMinSec',
7075
- Condition => '$$self{Model} !~ /^(ILCA-99M2|ILCE-9)/',
7244
+ Condition => '$$self{Model} !~ /^(ILCA-99M2|ILCE-(7RM3|9))/',
7076
7245
  Format => 'undef[2]',
7077
7246
  ValueConv => q{
7078
7247
  my @v = unpack('C*', $val);
@@ -7081,6 +7250,7 @@ my %pictureProfile2010 = (
7081
7250
  },
7082
7251
  0x0073 => {
7083
7252
  Name => 'ReleaseMode2',
7253
+ Condition => '$$self{Model} !~ /^(ILCE-7RM3)/',
7084
7254
  %releaseMode2,
7085
7255
  },
7086
7256
  0x0088 => {
@@ -7151,7 +7321,7 @@ my %pictureProfile2010 = (
7151
7321
  #
7152
7322
  0x019f => {
7153
7323
  Name => 'ImageCount3',
7154
- Condition => '$$self{Model} =~ /^(ILCE-9)/',
7324
+ Condition => '$$self{Model} =~ /^(ILCE-(7RM3|9))/',
7155
7325
  Format => 'int32u',
7156
7326
  RawConv => '$val == 0 ? undef : $val',
7157
7327
  },
@@ -7383,15 +7553,15 @@ my %pictureProfile2010 = (
7383
7553
  FORMAT => 'int8u',
7384
7554
  WRITABLE => 1,
7385
7555
  NOTES => q{
7386
- Valid for DSC-HX400V/HX60V/HX90V/QX30/RX1RM2/RX10/RX10M2/RX10M3/RX100M3/
7387
- RX100M4/RX100M5/WX220/WX350/WX500, ILCE-7/7R/7S/7M2/7RM2/7SM2/5000/5100/
7388
- 6000/6300/6500/QX1, ILCA-68/77M2/99M2.
7556
+ Valid for DSC-HX60V/HX90V/HX350/HX400V/QX30/RX0/RX1RM2/RX10/RX10M2/RX10M3/
7557
+ RX10M4/RX100M3/RX100M4/RX100M5/WX220/WX350/WX500, ILCE-7/7R/7S/7M2/7RM2/
7558
+ 7RM3/7SM2/9/5000/5100/6000/6300/6500/QX1, ILCA-68/77M2/99M2.
7389
7559
  },
7390
7560
  FIRST_ENTRY => 0,
7391
7561
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
7392
7562
  0x0009 => { %releaseMode2 },
7393
7563
  0x000a => [{
7394
- Condition => '$$self{Model} =~ /^ILCE-9\b/',
7564
+ Condition => '$$self{Model} =~ /^(ILCE-(7RM3|9)|DSC-RX10M4)\b/',
7395
7565
  Name => 'ShotNumberSincePowerUp',
7396
7566
  Format => 'int8u',
7397
7567
  },{
@@ -7411,6 +7581,7 @@ my %pictureProfile2010 = (
7411
7581
  6 => '6 shots',
7412
7582
  9 => '9 shots', # ILCE-7RM2 9-shot bracketing
7413
7583
  10 => '10 shots',
7584
+ 12 => '12 shots', # ILCA-77M2 12-shot MFNR-mode
7414
7585
  100 => 'Continuous - iSweep Panorama',
7415
7586
  200 => 'Continuous - Sweep Panorama',
7416
7587
  },
@@ -7599,6 +7770,8 @@ my %pictureProfile2010 = (
7599
7770
  WRITABLE => 1,
7600
7771
  FIRST_ENTRY => 0,
7601
7772
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
7773
+ 0x000b => { %exposureProgram2010 },
7774
+ 0x000d => { Name => 'IntelligentAuto', PrintConv => { 0 => 'Off', 1 => 'On'} },
7602
7775
  0x0019 => {
7603
7776
  Name => 'LensZoomPosition',
7604
7777
  Format => 'int16u',
@@ -7608,6 +7781,7 @@ my %pictureProfile2010 = (
7608
7781
  },
7609
7782
  );
7610
7783
 
7784
+ # Tag9404 (ref JR)
7611
7785
  %Image::ExifTool::Sony::Tag9404b= (
7612
7786
  PROCESS_PROC => \&ProcessEnciphered,
7613
7787
  WRITE_PROC => \&WriteEnciphered,
@@ -7616,6 +7790,8 @@ my %pictureProfile2010 = (
7616
7790
  WRITABLE => 1,
7617
7791
  FIRST_ENTRY => 0,
7618
7792
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
7793
+ 0x000c => { %exposureProgram2010 },
7794
+ 0x000e => { Name => 'IntelligentAuto', PrintConv => { 0 => 'Off', 1 => 'On'} },
7619
7795
  0x001e => {
7620
7796
  Name => 'LensZoomPosition',
7621
7797
  Format => 'int16u',
@@ -7630,6 +7806,19 @@ my %pictureProfile2010 = (
7630
7806
  },
7631
7807
  );
7632
7808
 
7809
+ # Tag9404 (ref JR)
7810
+ %Image::ExifTool::Sony::Tag9404c= (
7811
+ PROCESS_PROC => \&ProcessEnciphered,
7812
+ WRITE_PROC => \&WriteEnciphered,
7813
+ CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
7814
+ FORMAT => 'int8u',
7815
+ WRITABLE => 1,
7816
+ FIRST_ENTRY => 0,
7817
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
7818
+ 0x000b => { %exposureProgram2010 },
7819
+ 0x000d => { Name => 'IntelligentAuto', PrintConv => { 0 => 'Off', 1 => 'On'} },
7820
+ );
7821
+
7633
7822
  # Tag9405 (ref JR)
7634
7823
  %Image::ExifTool::Sony::Tag9405a = (
7635
7824
  PROCESS_PROC => \&ProcessEnciphered,
@@ -7720,9 +7909,9 @@ my %pictureProfile2010 = (
7720
7909
  DATAMEMBER => [ 0x005e ],
7721
7910
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
7722
7911
  NOTES => q{
7723
- Valid for DSC-HX400V/HX60V/QX30/RX10/RX10M2/RX10M3/RX100M3/RX100M4/RX100M5/
7724
- WX220/WX350, ILCE-7/7M2/7R/7RM2/7S/7SM2/5000/5100/6000/6300/6500/QX1,
7725
- ILCA-68/77M2/99M2.
7912
+ Valid for DSC-HX60V/HX350/HX400V/QX30/RX0/RX10/RX10M2/RX10M3/RX10M4/RX100M3/
7913
+ RX100M4/RX100M5/WX220/WX350, ILCE-7/7M2/7R/7RM2/7S/7SM2/9/5000/5100/6000/
7914
+ 6300/6500/QX1, ILCA-68/77M2/99M2.
7726
7915
  },
7727
7916
  0x0004 => {
7728
7917
  Name => 'SonyISO',
@@ -7875,7 +8064,7 @@ my %pictureProfile2010 = (
7875
8064
  },
7876
8065
  0x0342 => {
7877
8066
  Name => 'LensZoomPosition',
7878
- Condition => '$$self{Model} !~ /^(ILCA-|ILCE-(7RM2|7SM2|6500|9)|DSC-(HX90V|RX10M2|RX10M3|RX100M4|RX100M5|WX500))/',
8067
+ Condition => '$$self{Model} !~ /^(ILCA-|ILCE-(7RM2|7RM3|7SM2|6500|9)|DSC-(HX90V|RX0|RX10M2|RX10M3|RX10M4|RX100M4|RX100M5|WX500))/',
7879
8068
  Format => 'int16u',
7880
8069
  PrintConv => 'sprintf("%.0f%%",$val/10.24)',
7881
8070
  PrintConvInv => '$val=~s/ ?%$//; $val * 10.24',
@@ -7892,7 +8081,7 @@ my %pictureProfile2010 = (
7892
8081
  },
7893
8082
  0x035c => {
7894
8083
  Name => 'VignettingCorrParams',
7895
- Condition => '$$self{Model} =~ /^(ILCA-99M2|ILCE-6500|ILCE-9)/',
8084
+ Condition => '$$self{Model} =~ /^(ILCA-99M2|ILCE-(6500|7RM3|9))/',
7896
8085
  Format => 'int16s[16]',
7897
8086
  },
7898
8087
  0x035a => {
@@ -7929,7 +8118,7 @@ my %pictureProfile2010 = (
7929
8118
  },
7930
8119
  0x03b8 => {
7931
8120
  Name => 'ChromaticAberrationCorrParams',
7932
- Condition => '$$self{Model} =~ /^(ILCE-9)/',
8121
+ Condition => '$$self{Model} =~ /^(ILCE-(7RM3|9))/',
7933
8122
  Format => 'int16s[32]',
7934
8123
  },
7935
8124
  );
@@ -7943,8 +8132,9 @@ my %pictureProfile2010 = (
7943
8132
  WRITABLE => 1,
7944
8133
  FIRST_ENTRY => 0,
7945
8134
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
7946
- # 0x0000: 1 for A37, A57, A65, A77, NEX-5N, 7, F3, VG20
7947
- # 2 for A58/99V, NEX-3N/5R/5T/6/VG30/VG900, ILCE-3000/7/7R/5000/6000
8135
+ # 0x0000: 1 for SLT-A37/A57/A65/A77, NEX-5N/7/F3/VG20
8136
+ # 2 for SLT-A58/99V, NEX-3N/5R/5T/6/VG30/VG900, ILCA-68/77M2, ILCE-3000/3500/7/7M2/7R/7S/5000/6000
8137
+ # 3 for ILCA-99M2, ILCE-6300/6500/7RM2/7SM2/9
7948
8138
  # 0x0001+0x0002: Int16u, seen 580 - 770: similar to "BatteryUnknown" ??
7949
8139
  # 0x0005: int8u, seen 73 - 117: maybe Fahrenheit? Higher than "AmbientTemperature", but same trend.
7950
8140
  0x0005 => {
@@ -7954,7 +8144,7 @@ my %pictureProfile2010 = (
7954
8144
  PrintConv => 'sprintf("%.1f C",$val)',
7955
8145
  PrintConvInv => '$val=~s/\s*C//; $val',
7956
8146
  },
7957
- # 0x0006: usually 0, seen non-zero values only for A99V and ILCE-7/7R: BatteryLevel Grip ?
8147
+ # 0x0006: usually 0, seen non-zero values only for SLT-A99V, ILCA-77M2/99M2 and ILCE-7/7R/7RM2/9: BatteryLevel Grip ?
7958
8148
  0x0006 => {
7959
8149
  Name => 'BatteryLevelGrip1',
7960
8150
  Condition => '$$valPt !~ /^\x00/', # only valid when not 0
@@ -8079,17 +8269,17 @@ my %pictureProfile2010 = (
8079
8269
  Format => 'int16u',
8080
8270
  PrintConv => 'sprintf("%x.%.2x",$val>>8,$val&0xff)',
8081
8271
  PrintConvInv => 'my @a=split(/\./,$val);(hex($a[0])<<8)|hex($a[1])',
8082
- # camera Firmware versions:
8083
- # 1.00 - 1.04: seen in CameraSettings3 0x03f3 for NEX-3/5/5C/C3/VG10E
8272
+ # E-mount versions seen for various cameras / camera-firmware versions:
8273
+ # - : info not present in CameraSettings3 for NEX-3/5/5C/C3/VG10E
8084
8274
  # 1.14: NEX-5N/5R/6/7/F3/VG20E/VG30E/VG900 v1.00, NEX-5N v1.01, NEX-3N v0.90
8085
8275
  # 1.20: NEX-3N v1.00, NEX-6 v1.01, NEX-7 v1.02, ILCE-3000 v1.00, ILCE-3500 v1.01
8086
8276
  # 1.30: NEX-5T v1.00, NEX-6 v1.02/v1.03, NEX-7 v1.03
8087
8277
  # 1.31: ILCE-7/7R v0.95/v1.00/v1.01, ILCE-5000
8088
8278
  # 1.40: ILCE-7/7R v1.02/v1.10, ILCE-7S v1.00, ILCE-6000 v1.00/v1.10, ILCE-5100/QX1
8089
- # 1.50: ILCE-7/7R/7S v1.20-v3.20, ILCE-7M2 v1.00-v3.10, ILCE-7RM2 v1.00-v3.00, ILCE-7SM2 v1.00-v2.10,
8279
+ # 1.50: ILCE-7/7R/7S v1.20-v3.20, ILCE-7M2 v1.00-v4.00, ILCE-7RM2 v1.00-v3.00, ILCE-7SM2 v1.00-v2.10,
8090
8280
  # ILCE-6000 v1.20-v3.20
8091
- # 1.60: ILCE-6300 v1.00-v1.10, ILCE-6500 v1.00, ILCE-7RM2 v3.05-v3.30
8092
- # 1.70: ILCE-9
8281
+ # 1.60: ILCE-6300 v1.00-v1.10, ILCE-6500 v1.00, ILCE-7RM2 v3.05-v4.00
8282
+ # 1.70: ILCE-7RM3/9
8093
8283
  },
8094
8284
  0x000d => {
8095
8285
  Name => 'LensE-mountVersion',
@@ -8097,7 +8287,7 @@ my %pictureProfile2010 = (
8097
8287
  Format => 'int16u',
8098
8288
  PrintConv => 'sprintf("%x.%.2x",$val>>8,$val&0xff)',
8099
8289
  PrintConvInv => 'my @a=split(/\./,$val);(hex($a[0])<<8)|hex($a[1])',
8100
- # lens models:
8290
+ # E-mount versions seen for various lens models:
8101
8291
  # 0.00: Unknown lenses/adapters
8102
8292
  # 1.00: SEL18200LE, Sigma DN, Tamron Di III, Zeiss Touit
8103
8293
  # 1.07: (Ver.01) original E-lenses (SEL16F28, SEL18200, SEL1855, SEL24F18Z, SEL30M35, SEL50F18, SEL55210) and LA-EA1
@@ -8112,9 +8302,10 @@ my %pictureProfile2010 = (
8112
8302
  # 1.41: SELP18105G Ver.02
8113
8303
  # 1.50: SEL28F20, SEL90M28G, Zeiss Batis 18mm/25mm/85mm/135mm, Zeiss Loxia 21mm, Zeiss Loxia 35mm/50mm Ver.02,
8114
8304
  # Tokina Firin 20mm
8115
- # 1.60: SEL1224G, SEL1635GM, SEL2470GM, SEL50F14Z, SEL50F18F, SEL50M28, SEL70200GM, SEL70300G, SEL85F14GM, SEL85F18,
8116
- # SEL100F28GM, SEL100400GM, Sigma 30mm F1.4 DC DN, Sigma MC-11, Samyang AF 14mm/50mm, Voigtlander 15mm
8117
- # 1.70: LA-EA3 Ver.02, Voigtlander 10mm/12mm/40mm, Zeiss Loxia 85mm
8305
+ # 1.60: SEL1224G, SEL1635GM, SELP18110G, SEL2470GM, SEL24105G, SEL50F14Z, SEL50F18F, SEL50M28, SEL70200GM, SEL70300G,
8306
+ # SEL85F14GM, SEL85F18, SEL100F28GM, SEL100400GM, Sigma 30mm F1.4 DC DN, Sigma MC-11, Samyang AF 14mm/50mm,
8307
+ # Voigtlander 15mm
8308
+ # 1.70: LA-EA3 Ver.02, Samyang AF 35mm, Voigtlander 10mm/12mm/40mm/65mm, Zeiss Loxia 85mm
8118
8309
  },
8119
8310
  0x0015 => {
8120
8311
  Name => 'LensFirmwareVersion',
@@ -8467,7 +8658,7 @@ my %pictureProfile2010 = (
8467
8658
  return \ "Binary data 2640 bytes" unless $et->Options('Binary');
8468
8659
  my @dat = unpack('v*', $val);
8469
8660
  # TIFF header for a 16-bit RGB 10dpi 44x30 image
8470
- $val = MakeTiffHeader(44,30,3,16,10);
8661
+ $val = Image::ExifTool::MakeTiffHeader(44,30,3,16,10);
8471
8662
  # re-order data to RGB pixels - use same value for R, G and B
8472
8663
  my ($i, @val);
8473
8664
  for ($i=0; $i<44*30; ++$i) {
@@ -9268,41 +9459,22 @@ sub ProcessSonyPIC($$$)
9268
9459
  }
9269
9460
 
9270
9461
  #------------------------------------------------------------------------------
9271
- # Make TIFF header for raw data
9272
- # Inputs: 0) width, 1) height, 2) num colour components, 3) bits, 4) resolution
9273
- # Returns: TIFF header
9274
- # Notes: Multi-byte data must be little-endian
9275
- sub MakeTiffHeader($$$$;$)
9462
+ # MeterInfo value conversions
9463
+ # Inputs: 0) value
9464
+ # Returns: converted value
9465
+ sub ConvMeter1($)
9466
+ {
9467
+ my $val = shift;
9468
+ return \$val unless length($val) == 90;
9469
+ my @a = unpack("SLLSLLSLLSLLSLLSLLSLLSLLSLL",$val);
9470
+ return join ' ', @a;
9471
+ }
9472
+ sub ConvMeter2($)
9276
9473
  {
9277
- my ($w, $h, $cols, $bits, $res) = @_;
9278
- $res or $res = 72;
9279
- my $saveOrder = GetByteOrder();
9280
- SetByteOrder('II');
9281
- my $hdr =
9282
- "\x49\x49\x2a\0\x08\0\0\0\x0e\0" . # 0x00 14 menu entries:
9283
- "\xfe\x00\x04\0\x01\0\0\0\x00\0\0\0" . # 0x0a SubfileType = 0
9284
- "\x00\x01\x04\0\x01\0\0\0" . Set32u($w) . # 0x16 ImageWidth
9285
- "\x01\x01\x04\0\x01\0\0\0" . Set32u($h) . # 0x22 ImageHeight
9286
- "\x02\x01\x03\0" . Set32u($cols) . # 0x2e BitsPerSample
9287
- Set32u($cols == 1 ? $bits : 0xb6) .
9288
- "\x03\x01\x03\0\x01\0\0\0\x01\0\0\0" . # 0x3a Compression = 1
9289
- "\x06\x01\x03\0\x01\0\0\0" . # 0x46 PhotometricInterpretation
9290
- Set32u($cols == 1 ? 1 : 2) .
9291
- "\x11\x01\x04\0\x01\0\0\0\xcc\0\0\0" . # 0x52 StripOffsets = 0xcc
9292
- "\x15\x01\x03\0\x01\0\0\0" . Set32u($cols) .# 0x5e SamplesPerPixel
9293
- "\x16\x01\x04\0\x01\0\0\0" . Set32u($h) . # 0x6a RowsPerStrip
9294
- "\x17\x01\x04\0\x01\0\0\0" . # 0x76 StripByteCounts
9295
- Set32u($w * $h * $cols * int(($bits+7)/8)) .
9296
- "\x1a\x01\x05\0\x01\0\0\0\xbc\0\0\0" . # 0x82 XResolution
9297
- "\x1b\x01\x05\0\x01\0\0\0\xc4\0\0\0" . # 0x8e YResolution
9298
- "\x1c\x01\x03\0\x01\0\0\0\x01\0\0\0" . # 0x9a PlanarConfiguration = 1
9299
- "\x28\x01\x03\0\x01\0\0\0\x02\0\0\0" . # 0xa6 ResolutionUnit = 2
9300
- "\0\0\0\0" . # 0xb2 (no IFD1)
9301
- (Set16u($bits) x 3) . # 0xb6 BitsPerSample value
9302
- Set32u($res) . "\x01\0\0\0" . # 0xbc XResolution = 72
9303
- Set32u($res) . "\x01\0\0\0"; # 0xc4 YResolution = 72
9304
- SetByteOrder($saveOrder); # 0xcc (data goes here)
9305
- return $hdr;
9474
+ my $val = shift;
9475
+ return \$val unless length($val) == 110;
9476
+ my @a = unpack("SLLSLLSLLSLLSLLSLLSLLSLLSLLSLLSLL",$val);
9477
+ return join ' ', @a;
9306
9478
  }
9307
9479
 
9308
9480
  #------------------------------------------------------------------------------
@@ -9316,6 +9488,7 @@ sub ConvLensSpec($)
9316
9488
  return \$val unless length($val) == 8;
9317
9489
  my @a = unpack("H2H4H4H2H2H2",$val);
9318
9490
  $a[1] += 0; $a[2] += 0; # remove leading zeros from focal lengths
9491
+ s/([a-f])/hex($1)/e foreach @a[3,4]; # convert hex digits (ie. "b0" = f11)
9319
9492
  $a[3] /= 10; $a[4] /= 10; # divide f-numbers by 10
9320
9493
  return join ' ', @a;
9321
9494
  }
@@ -9325,6 +9498,7 @@ sub ConvInvLensSpec($)
9325
9498
  my @a=split(" ", $val);
9326
9499
  return $val unless @a == 6;
9327
9500
  $a[3] *= 10; $a[4] *= 10; # f-numbers are multiplied by 10
9501
+ s/^(\d{2})0$/sprintf('%x0',$1)/e foreach @a[3,4];
9328
9502
  $_ = hex foreach @a; # convert from hex
9329
9503
  return pack 'CnnCCC', @a;
9330
9504
  }