exiftool-vendored.exe 12.26.0 → 12.33.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.
Files changed (53) hide show
  1. package/bin/exiftool_files/Changes +119 -4
  2. package/bin/exiftool_files/README +44 -43
  3. package/bin/exiftool_files/arg_files/xmp2exif.args +2 -1
  4. package/bin/exiftool_files/config_files/convert_regions.config +25 -14
  5. package/bin/exiftool_files/config_files/example.config +1 -1
  6. package/bin/exiftool_files/exiftool.pl +79 -66
  7. package/bin/exiftool_files/fmt_files/gpx.fmt +1 -1
  8. package/bin/exiftool_files/fmt_files/gpx_wpt.fmt +1 -1
  9. package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +11 -3
  10. package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +331 -0
  11. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +26 -7
  12. package/bin/exiftool_files/lib/Image/ExifTool/DPX.pm +13 -2
  13. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +98 -4
  14. package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +35 -10
  15. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +1 -0
  16. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +13 -2
  17. package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +16 -1
  18. package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +15 -3
  19. package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +7 -3
  20. package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +60 -26
  21. package/bin/exiftool_files/lib/Image/ExifTool/LIF.pm +153 -0
  22. package/bin/exiftool_files/lib/Image/ExifTool/Lang/nl.pm +60 -59
  23. package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +103 -7
  24. package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +2 -2
  25. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +14 -3
  26. package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +10 -2
  27. package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +9 -2
  28. package/bin/exiftool_files/lib/Image/ExifTool/Other.pm +93 -0
  29. package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +9 -12
  30. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +7 -6
  31. package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +14 -3
  32. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +27 -5
  33. package/bin/exiftool_files/lib/Image/ExifTool/Photoshop.pm +6 -0
  34. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +105 -24
  35. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +203 -121
  36. package/bin/exiftool_files/lib/Image/ExifTool/README +5 -2
  37. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +6 -1
  38. package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +47 -10
  39. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +85 -34
  40. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +65 -5
  41. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +153 -32
  42. package/bin/exiftool_files/lib/Image/ExifTool/Torrent.pm +18 -11
  43. package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -0
  44. package/bin/exiftool_files/lib/Image/ExifTool/WritePNG.pl +2 -0
  45. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +8 -4
  46. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +3 -0
  47. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +21 -4
  48. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +3 -1
  49. package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +3 -1
  50. package/bin/exiftool_files/lib/Image/ExifTool/ZISRAW.pm +121 -2
  51. package/bin/exiftool_files/lib/Image/ExifTool.pm +8867 -8835
  52. package/bin/exiftool_files/lib/Image/ExifTool.pod +58 -56
  53. package/package.json +3 -3
@@ -22,12 +22,13 @@ use vars qw($VERSION %samsungLensTypes);
22
22
  use Image::ExifTool qw(:DataAccess :Utils);
23
23
  use Image::ExifTool::Exif;
24
24
 
25
- $VERSION = '1.49';
25
+ $VERSION = '1.50';
26
26
 
27
27
  sub WriteSTMN($$$);
28
28
  sub ProcessINFO($$$);
29
29
  sub ProcessSamsungMeta($$$);
30
30
  sub ProcessSamsungIFD($$$);
31
+ sub ProcessSamsung($$$);
31
32
 
32
33
  # Samsung LensType lookup
33
34
  %samsungLensTypes = (
@@ -940,14 +941,31 @@ my %formatMinMax = (
940
941
  %Image::ExifTool::Samsung::Trailer = (
941
942
  GROUPS => { 0 => 'MakerNotes', 2 => 'Other' },
942
943
  VARS => { NO_ID => 1, HEX_ID => 0 },
944
+ PROCESS_PROC => \&ProcessSamsung,
943
945
  PRIORITY => 0, # (first one takes priority so DepthMapWidth/Height match first DepthMapData)
944
946
  NOTES => q{
945
947
  Tags extracted from the trailer of JPEG images written when using certain
946
948
  features (such as "Sound & Shot" or "Shot & More") from Samsung models such
947
- as the Galaxy S4 and Tab S.
948
- },
949
- '0x0001-name' => 'EmbeddedImageName', # ("DualShot_1","DualShot_2")
950
- '0x0001' => { Name => 'EmbeddedImage', Groups => { 2 => 'Preview' }, Binary => 1 },
949
+ as the Galaxy S4 and Tab S, and from the 'sefd' atom in HEIC images from the
950
+ Samsung S10+.
951
+ },
952
+ '0x0001-name' => {
953
+ Name => 'EmbeddedImageName', # ("DualShot_1","DualShot_2")
954
+ RawConv => '$$self{EmbeddedImageName} = $val',
955
+ },
956
+ '0x0001' => [
957
+ {
958
+ Name => 'EmbeddedImage',
959
+ Condition => '$$self{EmbeddedImageName} eq "DualShot_1"',
960
+ Groups => { 2 => 'Preview' },
961
+ Binary => 1,
962
+ },
963
+ {
964
+ Name => 'EmbeddedImage2',
965
+ Groups => { 2 => 'Preview' },
966
+ Binary => 1,
967
+ },
968
+ ],
951
969
  '0x0100-name' => 'EmbeddedAudioFileName', # ("SoundShot_000")
952
970
  '0x0100' => { Name => 'EmbeddedAudioFile', Groups => { 2 => 'Audio' }, Binary => 1 },
953
971
  '0x0201-name' => 'SurroundShotVideoName', # ("Interactive_Panorama_000")
@@ -977,10 +995,24 @@ my %formatMinMax = (
977
995
  '0x0a30-name' => 'EmbeddedVideoType', # ("MotionPhoto_Data")
978
996
  '0x0a30' => { Name => 'EmbeddedVideoFile', Groups => { 2 => 'Video' }, Binary => 1 }, #forum7161
979
997
  # 0x0aa1-name - seen 'MCC_Data'
980
- # 0x0aa1 - seen '234','222','429'
998
+ # 0x0aa1 - seen '204','222','234','302','429'
999
+ '0x0aa1' => 'MCCData', # (unknown meaning)
981
1000
  # 0x0ab0-name - seen 'DualShot_Meta_Info'
982
- '0x0ab1-name' => 'DepthMapName', # seen 'DualShot_DepthMap_1' (SM-N950U)
983
- '0x0ab1' => { Name => 'DepthMapData', Binary => 1 },
1001
+ '0x0ab1-name' => {
1002
+ Name => 'DepthMapName',
1003
+ # seen 'DualShot_DepthMap_1' (SM-N950U), DualShot_DepthMap_5 (SM-G998W)
1004
+ RawConv => '$$self{DepthMapName} = $val',
1005
+ },
1006
+ '0x0ab1' => [
1007
+ {
1008
+ Name => 'DepthMapData',
1009
+ Condition => '$$self{DepthMapName} eq "DualShot_DepthMap_1"',
1010
+ Binary => 1,
1011
+ },{
1012
+ Name => 'DepthMapData2',
1013
+ Binary => 1,
1014
+ },
1015
+ ],
984
1016
  # 0x0ab3-name - seen 'DualShot_Extra_Info' (SM-N950U)
985
1017
  '0x0ab3' => { # (SM-N950U)
986
1018
  Name => 'DualShotExtra',
@@ -1015,7 +1047,8 @@ my %formatMinMax = (
1015
1047
  Hook => q{
1016
1048
  if ($size >= 96) {
1017
1049
  my $tmp = substr($$dataPt, $pos, 64);
1018
- if ($tmp =~ /\x01\0\xff\xff/g and not pos($tmp) % 4) {
1050
+ # (have seen 0x01,0x03 and 0x07)
1051
+ if ($tmp =~ /[\x01-\x09]\0\xff\xff/g and not pos($tmp) % 4) {
1019
1052
  $$self{DepthMapTagPos} = pos($tmp);
1020
1053
  $varSize += $$self{DepthMapTagPos} - 32;
1021
1054
  }
@@ -1274,6 +1307,10 @@ sub ProcessSamsung($$$)
1274
1307
  my $unknown = $et->Options('Unknown');
1275
1308
  my ($buff, $buf2, $index, $offsetPos, $audioNOff, $audioSize);
1276
1309
 
1310
+ unless ($raf) {
1311
+ $raf = new File::RandomAccess($$dirInfo{DataPt});
1312
+ $et->VerboseDir('SamsungTrailer');
1313
+ }
1277
1314
  return 0 unless $raf->Seek(-6-$offset, 2) and $raf->Read($buff, 6) == 6 and
1278
1315
  ($buff eq 'QDIOBS' or $buff eq "\0\0SEFT");
1279
1316
  my $endPos = $raf->Tell();
@@ -1328,7 +1365,7 @@ SamBlock:
1328
1365
  # save trailer position and length
1329
1366
  my $dataPos = $$dirInfo{DataPos} = $dirPos - $firstBlock;
1330
1367
  my $dirLen = $$dirInfo{DirLen} = $endPos - $dataPos;
1331
- if (($verbose or $$et{HTML_DUMP}) and not $outfile) {
1368
+ if (($verbose or $$et{HTML_DUMP}) and not $outfile and $$dirInfo{RAF}) {
1332
1369
  $et->DumpTrailer($dirInfo);
1333
1370
  return 1 if $$et{HTML_DUMP};
1334
1371
  }
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
34
34
  use Image::ExifTool::Exif;
35
35
  use Image::ExifTool::Minolta;
36
36
 
37
- $VERSION = '3.42';
37
+ $VERSION = '3.46';
38
38
 
39
39
  sub ProcessSRF($$$);
40
40
  sub ProcessSR2($$$);
@@ -154,6 +154,7 @@ sub PrintInvLensSpec($;$$);
154
154
  32866 => 'Sony FE 24mm F2.8 G', #IB
155
155
  32867 => 'Sony FE 40mm F2.5 G', #IB
156
156
  32868 => 'Sony FE 50mm F2.5 G', #IB
157
+ 32874 => 'Sony FE 70-200mm F2.8 GM OSS II', #IB
157
158
 
158
159
  # (comment this out so LensID will report the LensModel, which is more useful)
159
160
  # 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
@@ -194,6 +195,10 @@ sub PrintInvLensSpec($;$$);
194
195
  49463 => 'Tamron 28-200mm F2.8-5.6 Di III RXD', #JR (Model A071)
195
196
  49464 => 'Tamron 70-300mm F4.5-6.3 Di III RXD', #JR (Model A047)
196
197
  49465 => 'Tamron 17-70mm F2.8 Di III-A VC RXD', #JR (Model B070)
198
+ 49466 => 'Tamron 150-500mm F5-6.7 Di III VC VXD', #JR (Model A057)
199
+ 49467 => 'Tamron 11-20mm F2.8 Di III-A RXD', #JR (Model B060)
200
+ 49468 => 'Tamron 18-300mm F3.5-6.3 Di III-A VC VXD', #JR (Model B061)
201
+
197
202
  49473 => 'Tokina atx-m 85mm F1.8 FE or Viltrox lens', #JR
198
203
  49473.1 => 'Viltrox 23mm F1.4 E', #JR
199
204
  49473.2 => 'Viltrox 56mm F1.4 E', #JR
@@ -232,7 +237,10 @@ sub PrintInvLensSpec($;$$);
232
237
  50524 => 'Sigma 35mm F2 DG DN | C', #IB (020)
233
238
  50525 => 'Sigma 24mm F3.5 DG DN | C', #JR (021)
234
239
  50526 => 'Sigma 28-70mm F2.8 DG DN | C', #JR (021)
235
- 50528 => 'Sigma 35mm F1.4 DG DN | A', #IB (021)
240
+ 50527 => 'Sigma 150-600mm F5-6.3 DG DN OS | S', #JR (021)
241
+ 50528 => 'Sigma 35mm F1.4 DG DN | A', #IB/JR (021)
242
+ 50529 => 'Sigma 90mm F2.8 DG DN | C', #JR (021)
243
+ 50530 => 'Sigma 24mm F2 DG DN | C', #JR (021)
236
244
 
237
245
  50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
238
246
  50993 => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB
@@ -246,6 +254,7 @@ sub PrintInvLensSpec($;$$);
246
254
  51001 => 'Voigtlander NOKTON 21mm F1.4 Aspherical', #JR
247
255
  51002 => 'Voigtlander APO-LANTHAR 50mm F2 Aspherical', #JR
248
256
  51003 => 'Voigtlander NOKTON 35mm F1.2 Aspherical SE', #JR
257
+ 51006 => 'Voigtlander APO-LANTHAR 35mm F2 Aspherical', #JR
249
258
 
250
259
  # lenses listed in the Sigma MC-11 list, but not yet seen:
251
260
  # 504xx => 'Sigma 18-200mm F3.5-6.3 DC MACRO OS HSM | C + MC-11', # (014)
@@ -261,7 +270,7 @@ sub PrintInvLensSpec($;$$);
261
270
  51510 => 'Samyang AF 18mm F2.8 or Samyang AF 35mm F1.8', #JR
262
271
  51510.1 => 'Samyang AF 35mm F1.8', #JR
263
272
  51512 => 'Samyang AF 75mm F1.8', #IB/JR
264
- 51514 => 'Samyang AF 24mm F1.8 FE', #IB
273
+ 51514 => 'Samyang AF 24mm F1.8', #IB
265
274
  );
266
275
 
267
276
  # ExposureProgram values (ref PH, mainly decoded from A200)
@@ -1024,7 +1033,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1024
1033
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010h' },
1025
1034
  },{
1026
1035
  Name => 'Tag2010i', # ?
1027
- Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9|9M2)|DSC-(RX10M4|RX100M6|RX100M5A|RX100M7|HX99|RX0M2)|ZV-1)\b/',
1036
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3A?|7RM4A?|9|9M2)|DSC-(RX10M4|RX100M6|RX100M5A|RX100M7|HX99|RX0M2)|ZV-(1|E10))\b/',
1028
1037
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010i' },
1029
1038
  },{
1030
1039
  Name => 'Tag_0x2010',
@@ -1599,14 +1608,14 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1599
1608
  # from mid-2015: ILCE-7RM2/7SM2/6300 and newer models use different offsets
1600
1609
  {
1601
1610
  Name => 'Tag9050a',
1602
- Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(1|6100|6300|6400|6500|6600|7C|7M3|7RM2|7RM3|7RM4|7SM2|7SM3|9|9M2)|ILCA-99M2|ILME-FX3|ZV-)/',
1611
+ Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(1|6100|6300|6400|6500|6600|7C|7M3|7RM2|7RM3A?|7RM4A?|7SM2|7SM3|9|9M2)|ILCA-99M2|ILME-FX3|ZV-)/',
1603
1612
  SubDirectory => {
1604
1613
  TagTable => 'Image::ExifTool::Sony::Tag9050a',
1605
1614
  ByteOrder => 'LittleEndian',
1606
1615
  },
1607
1616
  },{
1608
1617
  Name => 'Tag9050b',
1609
- Condition => '$$self{Model} =~ /^(ILCE-(6100|6300|6400|6500|6600|7C|7M3|7RM2|7RM3|7RM4|7SM2|9|9M2)|ILCA-99M2)/',
1618
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6300|6400|6500|6600|7C|7M3|7RM2|7RM3A?|7RM4A?|7SM2|9|9M2)|ILCA-99M2|ZV-E10)/',
1610
1619
  SubDirectory => {
1611
1620
  TagTable => 'Image::ExifTool::Sony::Tag9050b',
1612
1621
  ByteOrder => 'LittleEndian',
@@ -1632,7 +1641,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1632
1641
  # 0x23 (e) for DSC-RX10/HX60V/HX350/HX400V/WX220/WX350, ILCE-7/7R/5000/6000, ILCA-68/77M2
1633
1642
  # 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
1634
1643
  # 0x26 (e) for ILCE-6100/6400/6600/7M3/7RM3/9, DSC-RX0M2/RX10M4/RX100M5A/RX100M6/HX99
1635
- # 0x28 (e) for ILCE-7RM4/9M2, DSC-RX100M7, ZV-1
1644
+ # 0x28 (e) for ILCE-7RM4/9M2, DSC-RX100M7, ZV-1/E10
1636
1645
  # 0x31 (e) for ILCE-1/7SM3, ILME-FX3
1637
1646
  # first byte decoded: 40, 204, 202, 27, 58, 62, 48, 215, 28, 106 respectively
1638
1647
  {
@@ -1648,7 +1657,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1648
1657
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9400b' },
1649
1658
  },{
1650
1659
  Name => 'Tag9400c',
1651
- Condition => '$$valPt =~ /^[\x23\x24\x26\x28\x31]/',
1660
+ Condition => '$$valPt =~ /^[\x23\x24\x26\x28\x31]/',
1652
1661
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9400c' },
1653
1662
  },{
1654
1663
  Name => 'Sony_0x9400',
@@ -1807,7 +1816,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1807
1816
  # 142 var (0x25 = 37 var enc.) DSC-HX80/HX90V/RX1RM2/RX10M2/RX10M3/RX100M4/WX500, ILCE-6300/7RM2/7SM2
1808
1817
  # 144 var (0xe1 = 225 var enc.) DSC-RX100M5
1809
1818
  # 145 var (0x76 = 118 var enc.) ILCA-99M2, ILCE-6500, DSC-RX0
1810
- # 163 var (0x8b = 139 var enc.) ILCE-6100/6400/6600/7C/7M3/7RM3/7RM4/9/9M2, DSC-RX0M2/RX10M4/RX100M5A/RX100M6/RX100M7/HX99, ZV-1
1819
+ # 163 var (0x8b = 139 var enc.) ILCE-6100/6400/6600/7C/7M3/7RM3/7RM4/9/9M2, DSC-RX0M2/RX10M4/RX100M5A/RX100M6/RX100M7/HX99, ZV-1/E10
1811
1820
  # July 2020: ILCE-7SM3 doesn't write this tag anymore, but writes 0x9416
1812
1821
  0x9405 => [{
1813
1822
  Name => 'Tag9405a',
@@ -1861,7 +1870,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1861
1870
  },
1862
1871
  0x940c => [{
1863
1872
  Name => 'Tag940c',
1864
- Condition => '$$self{Model} =~ /^(NEX-|ILCE-|ILME-|Lunar)\b/',
1873
+ Condition => '$$self{Model} =~ /^(NEX-|ILCE-|ILME-|Lunar|ZV-E10)\b/',
1865
1874
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag940c' },
1866
1875
  },{
1867
1876
  Name => 'Sony_0x940c',
@@ -2017,9 +2026,12 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
2017
2026
  379 => 'ILCE-6100', #IB/JR
2018
2027
  380 => 'ZV-1', #JR
2019
2028
  381 => 'ILCE-7C', #JR
2029
+ 382 => 'ZV-E10', #JR
2020
2030
  383 => 'ILCE-7SM3',
2021
2031
  384 => 'ILCE-1', #PH
2022
2032
  385 => 'ILME-FX3', #JR
2033
+ 386 => 'ILCE-7RM3A', #JR
2034
+ 387 => 'ILCE-7RM4A', #forum12542
2023
2035
  },
2024
2036
  },
2025
2037
  0xb020 => { #2
@@ -6178,7 +6190,7 @@ my %isoSetting2010 = (
6178
6190
  43 => 160000,
6179
6191
  44 => 204800,
6180
6192
  45 => 256000,
6181
- 46 => 320000,
6193
+ 46 => 320000,
6182
6194
  47 => 409600,
6183
6195
  );
6184
6196
 
@@ -7606,13 +7618,13 @@ my %isoSetting2010 = (
7606
7618
  # March 2019: ILCE-9 with v5.0x firmware follows ILCE-6400 in many tags ...
7607
7619
  0x0050 => {
7608
7620
  Name => 'ShutterCount2',
7609
- Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7RM4|9M2))/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/)',
7621
+ Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7RM4A?|9M2)|ZV-E10)/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/)',
7610
7622
  Format => 'int32u',
7611
7623
  RawConv => '$val & 0x00ffffff',
7612
7624
  },
7613
7625
  0x0052 => {
7614
7626
  Name => 'ShutterCount2',
7615
- Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} =~ /^(ILCE-(7M3|7RM3))/)',
7627
+ Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} =~ /^(ILCE-(7M3|7RM3A?))/)',
7616
7628
  Format => 'int32u',
7617
7629
  RawConv => '$val & 0x00ffffff',
7618
7630
  },
@@ -7623,13 +7635,13 @@ my %isoSetting2010 = (
7623
7635
  # 0x0058, 0x0061: E-Mount: ShutterCount and dateTime
7624
7636
  0x0058 => { # appears not valid when flash is used ... not for ILCA-99M2
7625
7637
  Name => 'ShutterCount2',
7626
- Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} !~ /^(ILCA-99M2|ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9M2))/) and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
7638
+ Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} !~ /^(ILCA-99M2|ILCE-(6100|6400|6600|7C|7M3|7RM3A?|7RM4A?|9M2)|ZV-E10)/) and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
7627
7639
  Format => 'int32u',
7628
7640
  RawConv => '$val & 0x00ffffff',
7629
7641
  },
7630
7642
  0x0061 => { # only minutes-seconds, not for ILCA-99M2, ILCE-9
7631
7643
  Name => 'SonyTimeMinSec',
7632
- Condition => '$$self{Model} !~ /^(ILCA-99M2|ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9|9M2))/',
7644
+ Condition => '$$self{Model} !~ /^(ILCA-99M2|ILCE-(6100|6400|6600|7C|7M3|7RM3A?|7RM4A?|9|9M2)|ZV-E10)/',
7633
7645
  Format => 'undef[2]',
7634
7646
  ValueConv => q{
7635
7647
  my @v = unpack('C*', $val);
@@ -7638,17 +7650,17 @@ my %isoSetting2010 = (
7638
7650
  },
7639
7651
  0x006b => {
7640
7652
  Name => 'ReleaseMode2',
7641
- Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7RM4|9M2))/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
7653
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7RM4A?|9M2)|ZV-E10)/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
7642
7654
  %releaseMode2,
7643
7655
  },
7644
7656
  0x006d => {
7645
7657
  Name => 'ReleaseMode2',
7646
- Condition => '$$self{Model} =~ /^(ILCE-(7M3|7RM3))/',
7658
+ Condition => '$$self{Model} =~ /^(ILCE-(7M3|7RM3A?))/',
7647
7659
  %releaseMode2,
7648
7660
  },
7649
7661
  0x0073 => {
7650
7662
  Name => 'ReleaseMode2',
7651
- Condition => '$$self{Model} !~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9M2))/ and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
7663
+ Condition => '$$self{Model} !~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3A?|7RM4A?|9M2)|ZV-E10)/ and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
7652
7664
  %releaseMode2,
7653
7665
  },
7654
7666
  0x0088 => {
@@ -7727,7 +7739,7 @@ my %isoSetting2010 = (
7727
7739
  #
7728
7740
  0x019f => {
7729
7741
  Name => 'ShutterCount3',
7730
- Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9|9M2))\b/',
7742
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3A?|7RM4A?|9|9M2)|ZV-E10)\b/',
7731
7743
  Format => 'int32u',
7732
7744
  RawConv => '$val == 0 ? undef : $val',
7733
7745
  },
@@ -7745,7 +7757,7 @@ my %isoSetting2010 = (
7745
7757
  },
7746
7758
  0x01eb => {
7747
7759
  Name => 'APS-CSizeCapture',
7748
- Condition => '$$self{Model} =~ /^ILCE-(7RM4|7C|9M2)/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
7760
+ Condition => '$$self{Model} =~ /^ILCE-(7RM4A?|7C|9M2)|ZV-E10/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
7749
7761
  PrintConv => {
7750
7762
  0 => 'Off',
7751
7763
  1 => 'On',
@@ -7753,7 +7765,7 @@ my %isoSetting2010 = (
7753
7765
  },
7754
7766
  0x01ed => {
7755
7767
  Name => 'LensSpecFeatures',
7756
- Condition => '$$self{Model} =~ /^ILCE-(7RM4|7C|9M2)/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
7768
+ Condition => '$$self{Model} =~ /^ILCE-(7RM4A?|7C|9M2)|ZV-E10/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
7757
7769
  Priority => 0,
7758
7770
  Format => 'undef[2]',
7759
7771
  ValueConv => 'join " ", unpack "H2H2", $val',
@@ -7766,7 +7778,7 @@ my %isoSetting2010 = (
7766
7778
  },
7767
7779
  0x01ee => {
7768
7780
  Name => 'APS-CSizeCapture',
7769
- Condition => '$$self{Model} =~ /^(ILCE-(7M3|7RM3|9))\b/ and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
7781
+ Condition => '$$self{Model} =~ /^(ILCE-(7M3|7RM3A?|9))\b/ and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
7770
7782
  PrintConv => {
7771
7783
  0 => 'Off',
7772
7784
  1 => 'On',
@@ -7774,7 +7786,7 @@ my %isoSetting2010 = (
7774
7786
  },
7775
7787
  0x01f0 => {
7776
7788
  Name => 'LensSpecFeatures',
7777
- Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|9))\b/ and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
7789
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3A?|9))\b/ and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
7778
7790
  Priority => 0,
7779
7791
  Format => 'undef[2]',
7780
7792
  ValueConv => 'join " ", unpack "H2H2", $val',
@@ -8363,8 +8375,8 @@ my %isoSetting2010 = (
8363
8375
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
8364
8376
  DATAMEMBER => [ 0x04 ],
8365
8377
  0x04 => {
8366
- # seen values 0,2,3,18,32,49,50,83,148
8367
- # CameraTemperature is valid for all values except 0,148
8378
+ # seen values 0,2,3,18,19,32,49,50,83,130,132,148,213,229,255
8379
+ # CameraTemperature is valid for all values above except ==0 and >=130
8368
8380
  Name => 'TempTest2',
8369
8381
  DataMember => 'TempTest2',
8370
8382
  Hidden => 1,
@@ -8685,7 +8697,7 @@ my %isoSetting2010 = (
8685
8697
  },
8686
8698
  0x0342 => {
8687
8699
  Name => 'LensZoomPosition',
8688
- Condition => '$$self{Model} !~ /^(ILCA-|ILCE-(7RM2|7M3|7RM3|7RM4|7SM2|6100|6300|6400|6500|6600|7C|9|9M2)|DSC-(HX80|HX90V|HX99|RX0|RX10M2|RX10M3|RX10M4|RX100M4|RX100M5|RX100M5A|RX100M6|RX100M7|WX500)|ZV-)/',
8700
+ Condition => '$$self{Model} !~ /^(ILCA-|ILCE-(7RM2|7M3|7RM3A?|7RM4A?|7SM2|6100|6300|6400|6500|6600|7C|9|9M2)|DSC-(HX80|HX90V|HX99|RX0|RX10M2|RX10M3|RX10M4|RX100M4|RX100M5|RX100M5A|RX100M6|RX100M7|WX500)|ZV-)/',
8689
8701
  Format => 'int16u',
8690
8702
  PrintConv => 'sprintf("%.0f%%",$val/10.24)',
8691
8703
  PrintConvInv => '$val=~s/ ?%$//; $val * 10.24',
@@ -8697,7 +8709,7 @@ my %isoSetting2010 = (
8697
8709
  },
8698
8710
  0x034e => {
8699
8711
  Name => 'LensZoomPosition',
8700
- Condition => '$$self{Model} =~ /^(DSC-(RX100M5|RX100M5A|RX100M6|RX100M7|RX10M4|HX99)|ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9M2))/',
8712
+ Condition => '$$self{Model} =~ /^(DSC-(RX100M5|RX100M5A|RX100M6|RX100M7|RX10M4|HX99)|ILCE-(6100|6400|6600|7C|7M3|7RM3A?|7RM4A?|9M2)|ZV-E10)/',
8701
8713
  Format => 'int16u',
8702
8714
  PrintConv => 'sprintf("%.0f%%",$val/10.24)',
8703
8715
  PrintConvInv => '$val=~s/ ?%$//; $val * 10.24',
@@ -8709,7 +8721,7 @@ my %isoSetting2010 = (
8709
8721
  },
8710
8722
  0x035c => {
8711
8723
  Name => 'VignettingCorrParams',
8712
- Condition => '$$self{Model} =~ /^(ILCA-99M2|ILCE-(6100|6400|6500|6600|7C|7M3|7RM3|7RM4|9|9M2))/',
8724
+ Condition => '$$self{Model} =~ /^(ILCA-99M2|ILCE-(6100|6400|6500|6600|7C|7M3|7RM3A?|7RM4A?|9|9M2)|ZV-E10)/',
8713
8725
  Format => 'int16s[16]',
8714
8726
  },
8715
8727
  0x035a => {
@@ -8746,7 +8758,7 @@ my %isoSetting2010 = (
8746
8758
  },
8747
8759
  0x03b8 => {
8748
8760
  Name => 'ChromaticAberrationCorrParams',
8749
- Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9|9M2))/',
8761
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3A?|7RM4A?|9|9M2)|ZV-E10)/',
8750
8762
  Format => 'int16s[32]',
8751
8763
  },
8752
8764
  );
@@ -9277,11 +9289,11 @@ my %isoSetting2010 = (
9277
9289
 
9278
9290
  # 0x1a06 onwards - first seen for ILCE-7RM2: appears to be some kind of metering image
9279
9291
  # but not valid anymore for ILCE-6400, ILCE-9 v5.0x
9280
- 0x1a06 => { Name => 'TiffMeteringImageWidth', Condition => '$$self{Model} =~ /^(ILCE-(6300|6500|7M3|7RM2|7RM3|7SM2|9))\b/ and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/' },
9281
- 0x1a07 => { Name => 'TiffMeteringImageHeight', Condition => '$$self{Model} =~ /^(ILCE-(6300|6500|7M3|7RM2|7RM3|7SM2|9))\b/ and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/' },
9292
+ 0x1a06 => { Name => 'TiffMeteringImageWidth', Condition => '$$self{Model} =~ /^(ILCE-(6300|6500|7M3|7RM2|7RM3A?|7SM2|9))\b/ and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/' },
9293
+ 0x1a07 => { Name => 'TiffMeteringImageHeight', Condition => '$$self{Model} =~ /^(ILCE-(6300|6500|7M3|7RM2|7RM3A?|7SM2|9))\b/ and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/' },
9282
9294
  0x1a08 => { # (2640 bytes: 1 set of 44x30 int16u values)
9283
9295
  Name => 'TiffMeteringImage',
9284
- Condition => '$$self{Model} =~ /^(ILCE-(6300|6500|7M3|7RM2|7RM3|7SM2|9))\b/ and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
9296
+ Condition => '$$self{Model} =~ /^(ILCE-(6300|6500|7M3|7RM2|7RM3A?|7SM2|9))\b/ and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
9285
9297
  Format => 'undef[2640]',
9286
9298
  Notes => q{
9287
9299
  13(?)-bit intensity data from 1320 (1200) metering segments, extracted as a
@@ -10127,10 +10139,16 @@ my %isoSetting2010 = (
10127
10139
  PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
10128
10140
  },
10129
10141
  0x8001 => { Name => 'Sony_rtmd_0x8001', Format => 'int16u', %hidUnk },
10142
+ 0x8004 => { Name => 'Sony_rtmd_0x8004', Format => 'int16u', %hidUnk },
10143
+ 0x8005 => { Name => 'Sony_rtmd_0x8005', Format => 'int16u', %hidUnk },
10144
+ 0x800a => { Name => 'Sony_rtmd_0x800a', Format => 'int16u', %hidUnk },
10145
+ 0x800b => { Name => 'Sony_rtmd_0x800b', Format => 'int16u', %hidUnk },
10130
10146
  # 0x8100 - 16 bytes starting with 0x060e2b340401
10131
10147
  0x8100 => { Name => 'Sony_rtmd_0x8100', Format => 'int8u', %hidUnk },
10132
10148
  0x8101 => { Name => 'Sony_rtmd_0x8101', Format => 'int8u', %hidUnk }, # seen: 0,1
10133
- 0x8106 => { Name => 'Sony_rtmd_0x8106', Format => 'int32u', %hidUnk }, # seen: "25 1"
10149
+ 0x8104 => { Name => 'Sony_rtmd_0x8104', Format => 'int16u', %hidUnk }, # seen: 35616
10150
+ 0x8105 => { Name => 'Sony_rtmd_0x8105', Format => 'int16u', %hidUnk }, # seen: 20092
10151
+ 0x8106 => { Name => 'Sony_rtmd_0x8106', Format => 'int32u', %hidUnk }, # seen: "25 1","24000 1001" frame rate?
10134
10152
  0x8109 => { #forum12218
10135
10153
  Name => 'ExposureTime',
10136
10154
  Format => 'rational64u',
@@ -10226,7 +10244,7 @@ my %isoSetting2010 = (
10226
10244
  },
10227
10245
  0xe000 => { Name => 'Sony_rtmd_0xe000', Format => 'int8u', %hidUnk }, # (16 bytes)
10228
10246
  0xe300 => { Name => 'Sony_rtmd_0xe300', Format => 'int8u', %hidUnk }, # seen: 0,1
10229
- 0xe301 => { Name => 'Sony_rtmd_0xe301', Format => 'int32u', %hidUnk }, # seen: 100,1600
10247
+ 0xe301 => { Name => 'Sony_rtmd_0xe301', Format => 'int32u', %hidUnk }, # seen: 100,1600,12800
10230
10248
  0xe302 => { Name => 'Sony_rtmd_0xe302', Format => 'int8u', %hidUnk }, # seen: 1
10231
10249
  0xe303 => { #forum12218
10232
10250
  Name => 'WhiteBalance',
@@ -10247,6 +10265,19 @@ my %isoSetting2010 = (
10247
10265
  ValueConv => 'my @a=unpack("x1H4H2H2H2H2H2",$val); "$a[0]:$a[1]:$a[2] $a[3]:$a[4]:$a[5]"',
10248
10266
  PrintConv => '$self->ConvertDateTime($val)',
10249
10267
  },
10268
+ 0xe435 => { Name => 'Sony_rtmd_0xe435', Format => 'int32u', %hidUnk }, # seen: 2000
10269
+ 0xe437 => { Name => 'Sony_rtmd_0xe437', Format => 'int32s', %hidUnk }, # seen: -3800 to -3400
10270
+ 0xe43b => {
10271
+ Name => 'PitchRollYaw',
10272
+ Format => 'int16s',
10273
+ RawConv => 'substr($val, 8)',
10274
+ },
10275
+ 0xe445 => { Name => 'Sony_rtmd_0xe445', Format => 'int32u', %hidUnk }, # seen: 2000
10276
+ 0xe44b => {
10277
+ Name => 'Accelerometer', # (NC)
10278
+ Format => 'int16s',
10279
+ RawConv => 'substr($val, 8)',
10280
+ },
10250
10281
  # f010 - 2048 bytes
10251
10282
  # f020 - 543 bytes
10252
10283
  );
@@ -10294,6 +10325,26 @@ my %isoSetting2010 = (
10294
10325
  ValueConv => '"$val[0] $val[1]Z"',
10295
10326
  PrintConv => '$self->ConvertDateTime($val)',
10296
10327
  },
10328
+ GPSLatitude => {
10329
+ SubDoc => 1, # generate for all sub-documents
10330
+ Groups => { 2 => 'Location' },
10331
+ Require => {
10332
+ 0 => 'Sony:GPSLatitude',
10333
+ 1 => 'Sony:GPSLatitudeRef',
10334
+ },
10335
+ ValueConv => '$val[1] =~ /^S/i ? -$val[0] : $val[0]',
10336
+ PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
10337
+ },
10338
+ GPSLongitude => {
10339
+ SubDoc => 1, # generate for all sub-documents
10340
+ Groups => { 2 => 'Location' },
10341
+ Require => {
10342
+ 0 => 'Sony:GPSLongitude',
10343
+ 1 => 'Sony:GPSLongitudeRef',
10344
+ },
10345
+ ValueConv => '$val[1] =~ /^W/i ? -$val[0] : $val[0]',
10346
+ PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
10347
+ },
10297
10348
  );
10298
10349
 
10299
10350
  # add our composite tags