exiftool-vendored.exe 13.16.0 → 13.25.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 (49) hide show
  1. package/bin/README.txt +14 -14
  2. package/bin/exiftool.exe +0 -0
  3. package/bin/exiftool_files/exiftool.pl +118 -47
  4. package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +12 -2
  5. package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +16 -10
  6. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +3 -2
  7. package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +1 -1
  8. package/bin/exiftool_files/lib/Image/ExifTool/DJI.pm +190 -29
  9. package/bin/exiftool_files/lib/Image/ExifTool/DarwinCore.pm +22 -11
  10. package/bin/exiftool_files/lib/Image/ExifTool/EXE.pm +2 -9
  11. package/bin/exiftool_files/lib/Image/ExifTool/GM.pm +1 -1
  12. package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +3 -3
  13. package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat +0 -0
  14. package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +86 -48
  15. package/bin/exiftool_files/lib/Image/ExifTool/ICO.pm +2 -2
  16. package/bin/exiftool_files/lib/Image/ExifTool/JPEG.pm +12 -2
  17. package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +5 -1
  18. package/bin/exiftool_files/lib/Image/ExifTool/Kodak.pm +3 -2
  19. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +1003 -1399
  20. package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +4 -4
  21. package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +2 -1
  22. package/bin/exiftool_files/lib/Image/ExifTool/PCAP.pm +462 -0
  23. package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +10 -1
  24. package/bin/exiftool_files/lib/Image/ExifTool/PLIST.pm +92 -29
  25. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +7 -1
  26. package/bin/exiftool_files/lib/Image/ExifTool/Photoshop.pm +2 -2
  27. package/bin/exiftool_files/lib/Image/ExifTool/Plot.pm +713 -0
  28. package/bin/exiftool_files/lib/Image/ExifTool/Protobuf.pm +24 -11
  29. package/bin/exiftool_files/lib/Image/ExifTool/Qualcomm.pm +78 -1
  30. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +348 -318
  31. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +75 -27
  32. package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +4 -0
  33. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +34 -15
  34. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +5061 -4967
  35. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +8302 -8160
  36. package/bin/exiftool_files/lib/Image/ExifTool/Trailer.pm +318 -0
  37. package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +4 -4
  38. package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  39. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +9 -4
  40. package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -1
  41. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +62 -5
  42. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +14 -13
  43. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +34 -6
  44. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +5 -2
  45. package/bin/exiftool_files/lib/Image/ExifTool.pm +193 -92
  46. package/bin/exiftool_files/lib/Image/ExifTool.pod +121 -124
  47. package/bin/exiftool_files/windows_exiftool.txt +95 -71
  48. package/package.json +4 -4
  49. package/bin/exiftool_files/lib/Image/ExifTool/Vivo.pm +0 -124
@@ -111,7 +111,7 @@ my %insvLimit = (
111
111
  The tags below are extracted from timed metadata in QuickTime and other
112
112
  formats of video files when the ExtractEmbedded option is used. Although
113
113
  most of these tags are combined into the single table below, ExifTool
114
- currently reads 100 different types of timed GPS metadata from video files.
114
+ currently reads 103 different types of timed GPS metadata from video files.
115
115
  },
116
116
  VARS => { NO_ID => 1 },
117
117
  GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
@@ -1446,7 +1446,6 @@ Sample: for ($i=0; ; ) {
1446
1446
  $$et{ee} = $ee; # need ee information for 'keys'
1447
1447
  $et->HandleTag($tagTbl, $metaFormat, undef,
1448
1448
  DataPt => \$buff,
1449
- DataPos => 0,
1450
1449
  Base => $$start[$i], # (Base must be set for CR3 files)
1451
1450
  TagInfo => $tagInfo,
1452
1451
  );
@@ -1494,7 +1493,6 @@ Sample: for ($i=0; ; ) {
1494
1493
  FoundSomething($et, $tagTbl, $time[$i], $dur[$i]);
1495
1494
  $et->HandleTag($tagTbl, $type, undef,
1496
1495
  DataPt => \$buff,
1497
- DataPos => 0,
1498
1496
  Base => $$start[$i], # (Base must be set for CR3 files)
1499
1497
  TagInfo => $tagInfo,
1500
1498
  );
@@ -1571,6 +1569,7 @@ sub ProcessFreeGPS($$$)
1571
1569
  my $debug = $et->Options('Debug');
1572
1570
  my $oldOrder = GetByteOrder();
1573
1571
  SetByteOrder('II');
1572
+ $$et{FoundEmbedded} = 1;
1574
1573
 
1575
1574
  if (substr($$dataPt,18,8) eq "\xaa\xaa\xf2\xe1\xf0\xee\x54\x54") {
1576
1575
 
@@ -2208,7 +2207,7 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
2208
2207
  unpack('x48V6a1a1a1x1V4', $$dataPt);
2209
2208
  if (substr($$dataPt, 16, 3) eq 'IQS') {
2210
2209
  $debug and $et->FoundTag(GPSType => 16);
2211
- # Type 3b (ref PH)
2210
+ # IQS variant (ref PH)
2212
2211
  # header looks like this in my sample:
2213
2212
  # 0000: 00 00 80 00 66 72 65 65 47 50 53 20 4c 00 00 00 [....freeGPS L...]
2214
2213
  # 0010: 49 51 53 5f 41 37 5f 32 30 31 35 30 34 31 37 00 [IQS_A7_20150417.]
@@ -2219,12 +2218,26 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
2219
2218
  $spd = Get32s($dataPt, 0x54) / 100 * $mpsToKph;
2220
2219
  $alt = GetFloat($dataPt, 0x58) / 1000; # (NC)
2221
2220
  } else {
2222
- $debug and $et->FoundTag(GPSType => 17);
2223
2221
  $lat = GetFloat($dataPt, 0x4c);
2224
2222
  $lon = GetFloat($dataPt, 0x50);
2225
2223
  $spd = GetFloat($dataPt, 0x54) * $knotsToKph;
2226
- $trk = GetFloat($dataPt, 0x58);
2227
- # ($trk is not confirmed; may be GPSImageDirection, ref PH)
2224
+ $trk = GetFloat($dataPt, 0x58); # (NC, may be GPSImageDirection)
2225
+ # Rexing V1-4k dashcam scales the lat/lon
2226
+ # (recognize this dashcam by the KodakVersion, "3.01.054" for my sample)
2227
+ # 0000: 00 00 80 00 66 72 65 65 47 50 53 20 4c 00 00 00 [....freeGPS L...]
2228
+ # 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
2229
+ # 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
2230
+ # 0030: 0e 00 00 00 22 00 00 00 28 00 00 00 14 00 00 00 [...."...(.......]
2231
+ # 0040: 02 00 00 00 16 00 00 00 41 4e 57 00 e9 7e 90 43 [........ANW..~.C]
2232
+ # 0050: 48 76 17 45 0c 02 48 42 14 6e 85 43 00 00 00 00 [Hv.E..HB.n.C....]
2233
+ if ($$et{KodakVersion} and $$et{KodakVersion} eq '3.01.054') {
2234
+ $debug and $et->FoundTag(GPSType => '17b');
2235
+ $lat = ($lat - 187.982162849635) / 3;
2236
+ $lon = ($lon - 2199.19873715495) / 2;
2237
+ $ddd = 1;
2238
+ } else {
2239
+ $debug and $et->FoundTag(GPSType => 17);
2240
+ }
2228
2241
  }
2229
2242
  if ($dirLen >= 0xb0) {
2230
2243
  # lat/lon also stored as doubles by Transcend Driver Pro 230 (ref PH)
@@ -3534,50 +3547,85 @@ sub ProcessWolfbox($$$)
3534
3547
  }
3535
3548
 
3536
3549
  #------------------------------------------------------------------------------
3537
- # Scan media data for "freeGPS" metadata if not found already (ref PH)
3550
+ # Scan media data for "freeGPS" and GoPro metadata if not found already (ref PH)
3538
3551
  # Inputs: 0) ExifTool ref
3539
3552
  sub ScanMediaData($)
3540
3553
  {
3541
3554
  my $et = shift;
3542
3555
  my $raf = $$et{RAF} or return;
3543
- my ($tagTbl, $verbose, $buff, $dataLen);
3544
- my ($pos, $buf2) = (0, '');
3556
+ my ($tagTbl, $verbose, $buff, $dataLen, $found);
3545
3557
 
3546
3558
  # don't rescan for freeGPS if we already found embedded metadata
3547
3559
  my $dataPos = $$et{MediaDataOffset};
3548
- if ($dataPos and not $$et{DOC_COUNT}) {
3560
+ return if $$et{FoundEmbedded} or not $dataPos;
3561
+
3562
+ my ($pos, $buf2) = (0, '');
3563
+ my $ee = $et->Options('ExtractEmbedded');
3564
+ if ($ee > 2) { # scan entire file from start of mdat if ExtractEmbedded > 2
3565
+ $raf->Seek(0,2);
3566
+ $dataLen = $raf->Tell() - $$et{MediaDataOffset};
3567
+ } else {
3549
3568
  $dataLen = $$et{MediaDataSize};
3550
- if ($dataLen) {
3551
- if ($raf->Seek($dataPos, 0)) {
3552
- $$et{FreeGPS2} = { }; # initialize variable space for FreeGPS2()
3553
- } else {
3554
- undef $dataLen;
3555
- }
3556
- }
3557
3569
  }
3570
+ return unless $dataLen and $raf->Seek($dataPos);
3558
3571
 
3559
3572
  # loop through 'mdat' media data looking for GPS information
3560
3573
  while ($dataLen) {
3561
- last if $pos + $gpsBlockSize > $dataLen;
3562
- last unless $raf->Read($buff, $gpsBlockSize);
3574
+ my $n = $gpsBlockSize;
3575
+ $n = $dataLen - $pos if $n + $pos > $dataLen;
3576
+ last unless $n > length($buf2) and $raf->Read($buff, $n - length($buf2));
3563
3577
  $buff = $buf2 . $buff if length $buf2;
3564
- last if length $buff < $gpsBlockSize;
3565
- # look for "freeGPS " block
3566
- # (found on an absolute 0x8000-byte boundary in all of my samples,
3578
+ # look for "freeGPS " or GoPro record
3579
+ # (freeGPS found on an absolute 0x8000-byte boundary in all of my samples,
3567
3580
  # but allow for any alignment when searching)
3568
- if ($buff !~ /\0..\0freeGPS /sg) { # (seen ".." = "\0\x80","\x01\0")
3581
+ if ($buff !~ /(\0..\0freeGPS |GP\x06\0\0)/sg) {
3569
3582
  $buf2 = substr($buff,-12);
3570
3583
  $pos += length($buff)-12;
3571
3584
  # in all of my samples the first freeGPS block is within 2 MB of the start
3572
3585
  # of the mdat, so limit the scan to the first 20 MB to be fast and safe
3573
- next if $tagTbl or $pos < 20e6;
3586
+ next if $found or $pos < 20e6 or $ee > 1;
3574
3587
  last;
3575
- } elsif (not $tagTbl) {
3588
+ } elsif ($1 eq "GP\x06\0\0") { # (GoPro GPS record header)
3589
+ # (found in Chigee Aio-5 Lite and some Insta360 videos)
3590
+ my $buffPos = pos($buff);
3591
+ my $filePos = $raf->Tell();
3592
+ my $start = $filePos - length($buff) + $buffPos - length($1);
3593
+ $raf->Seek($start) or last;
3594
+ unless (defined $found) {
3595
+ $et->VPrint(0, "---- Extract Embedded ----\n");
3596
+ $$et{INDENT} .= '| ';
3597
+ $found = 0;
3598
+ }
3599
+ my $maxLen = $dataLen - ($start - $$et{MediaDataOffset});
3600
+ require Image::ExifTool::GoPro;
3601
+ $et->VPrint(0, sprintf("Unreferenced GoPro record at 0x%x\n",$filePos));
3602
+ my $size = Image::ExifTool::GoPro::ProcessGP6($et, { RAF => $raf, DirLen => $maxLen });
3603
+ if ($size) {
3604
+ unless ($found) {
3605
+ # scan entire file if we found a valid GoPro record
3606
+ # (some records may exist in trailer)
3607
+ $raf->Seek(0, 2) and $dataLen = $raf->Tell() - $$et{MediaDataOffset};
3608
+ $found = 2;
3609
+ }
3610
+ $raf->Seek($start + $size) or last;
3611
+ $pos = $start + $size - $$et{MediaDataOffset};
3612
+ $buf2 = '';
3613
+ } else {
3614
+ # (could have been a random match -- continue with search)
3615
+ $raf->Seek($filePos) or last;
3616
+ $buf2 = substr($buff, $buffPos);
3617
+ $pos += $buffPos;
3618
+ }
3619
+ next;
3620
+ }
3621
+ last if length $buff < $gpsBlockSize;
3622
+ if (not $tagTbl) {
3576
3623
  # initialize variables for extracting metadata from this block
3577
3624
  $tagTbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
3578
3625
  $verbose = $$et{OPTIONS}{Verbose};
3579
3626
  $et->VPrint(0, "---- Extract Embedded ----\n");
3580
3627
  $$et{INDENT} .= '| ';
3628
+ $found = 1;
3581
3629
  }
3582
3630
  if (pos($buff) > 12) {
3583
3631
  $pos += pos($buff) - 12;
@@ -3604,7 +3652,7 @@ sub ScanMediaData($)
3604
3652
  $pos += $len;
3605
3653
  $buf2 = substr($buff, $len);
3606
3654
  }
3607
- if ($tagTbl) {
3655
+ if ($found) {
3608
3656
  delete $$et{DOC_NUM}; # reset DOC_NUM after extracting embedded metadata
3609
3657
  $et->VPrint(0, "--------------------------\n");
3610
3658
  $$et{INDENT} = substr $$et{INDENT}, 0, -2;
@@ -1002,6 +1002,10 @@ my %formatMinMax = (
1002
1002
  '0x0a20-name' => 'DualCameraImageName', # ("FlipPhoto_002")
1003
1003
  '0x0a20' => { Name => 'DualCameraImage', Groups => { 2 => 'Preview' }, Binary => 1 },
1004
1004
  '0x0a30-name' => 'EmbeddedVideoType', # ("MotionPhoto_Data")
1005
+ # Note: A duplicate of this video may be extracted as MotionPhotoVideo from
1006
+ # the Google trailer, but keep this copy named as EmbeddedVideoFile
1007
+ # for backward compatibility and to avoid confusion due to extracting
1008
+ # multiple tags with the same name
1005
1009
  '0x0a30' => { Name => 'EmbeddedVideoFile', Groups => { 2 => 'Video' }, Binary => 1 }, #forum7161
1006
1010
  # 0x0a41-name - seen 'BackupRestore_Data' #forum16086
1007
1011
  # 0x0aa1-name - seen 'MCC_Data'
@@ -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.71';
37
+ $VERSION = '3.73';
38
38
 
39
39
  sub ProcessSRF($$$);
40
40
  sub ProcessSR2($$$);
@@ -76,7 +76,9 @@ sub PrintInvLensSpec($;$$);
76
76
  6 => 'Sony LA-EA4 Adapter',
77
77
  7 => 'Sony LA-EA5 Adapter', #JR
78
78
  13 => 'Samyang AF 35-150mm F2-2.8',
79
- # 27 => Venus Optics Laowa 12mm f2.8 Zero-D or 105mm f2 (T3.2) Smooth Trans Focus (ref IB)
79
+ 20 => 'Samyang AF 35mm F1.4 P FE', #JR
80
+ 21 => 'Samyang AF 14-24mm F2.8', #JR
81
+ # 27 => Venus Optics Laowa 12mm f2.8 Zero-D or 105mm f2 (T3.2) Smooth Trans Focus (ref IB)
80
82
  44 => 'Metabones Canon EF Smart Adapter', #JR
81
83
  78 => 'Metabones Canon EF Smart Adapter Mark III or Other Adapter', #PH/JR (also Mark IV, Fotodiox and Viltrox)
82
84
  184 => 'Metabones Canon EF Speed Booster Ultra', #JR ('Green' mode, LensMount reported as A-mount)
@@ -164,6 +166,7 @@ sub PrintInvLensSpec($;$$);
164
166
  32877 => 'Sony E 15mm F1.4 G', #JR
165
167
  32878 => 'Sony FE 20-70mm F4 G', #JR
166
168
  32879 => 'Sony FE 50mm F1.4 GM', #JR
169
+ 32880 => 'Sony FE 16mm F1.8 G', #JR
167
170
  32881 => 'Sony FE 24-50mm F2.8 G', #JR
168
171
  32882 => 'Sony FE 16-25mm F2.8 G', #JR
169
172
  32884 => 'Sony FE 70-200mm F4 Macro G OSS II', #JR
@@ -171,6 +174,8 @@ sub PrintInvLensSpec($;$$);
171
174
  32886 => 'Sony FE 300mm F2.8 GM OSS', #JR
172
175
  32887 => 'Sony E PZ 16-50mm F3.5-5.6 OSS II', #JR
173
176
  32888 => 'Sony FE 85mm F1.4 GM II', #JR
177
+ 32889 => 'Sony FE 28-70mm F2 GM',
178
+ 32890 => 'Sony FE 400-800mm F6.3-8 G OSS', #JR
174
179
 
175
180
  # (comment this out so LensID will report the LensModel, which is more useful)
176
181
  # 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
@@ -193,6 +198,8 @@ sub PrintInvLensSpec($;$$);
193
198
  33088 => 'Sony FE 70-200mm F4 Macro G OSS II + 2X Teleconverter', #JR
194
199
  33089 => 'Sony FE 300mm F2.8 GM OSS + 1.4X Teleconverter', #JR (NC)
195
200
  33090 => 'Sony FE 300mm F2.8 GM OSS + 2X Teleconverter', #JR
201
+ 33091 => 'Sony FE 400-800mm F6.3-8 G OSS + 1.4X Teleconverter', #JR
202
+ 33092 => 'Sony FE 400-800mm F6.3-8 G OSS + 2X Teleconverter', #JR
196
203
 
197
204
  49201 => 'Zeiss Touit 12mm F2.8', #JR (lens firmware Ver.02)
198
205
  49202 => 'Zeiss Touit 32mm F1.8', #JR (lens firmware Ver.02)
@@ -304,6 +311,11 @@ sub PrintInvLensSpec($;$$);
304
311
  50549 => 'Sigma 50mm F1.2 DG DN | A', #JR (024)
305
312
  50550 => 'Sigma 28-105mm F2.8 DG DN | A', #JR (024)
306
313
  50551 => 'Sigma 28-45mm F1.8 DG DN | A', #JR (024)
314
+ 50553 => 'Sigma 300-600mm F4 DG OS | S', #JR (025)
315
+
316
+ # lenses listed in the Sigma MC-11 list, but not yet seen:
317
+ # 504xx => 'Sigma 18-200mm F3.5-6.3 DC MACRO OS HSM | C + MC-11', # (014)
318
+ # 504xx => 'Sigma 30mm F1.4 DC HSM | A + MC-11', # (013)
307
319
 
308
320
  50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
309
321
  50993 => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB
@@ -320,10 +332,10 @@ sub PrintInvLensSpec($;$$);
320
332
  51006 => 'Voigtlander APO-LANTHAR 35mm F2 Aspherical', #JR
321
333
  51007 => 'Voigtlander NOKTON 50mm F1 Aspherical', #JR
322
334
  51008 => 'Voigtlander NOKTON 75mm F1.5 Aspherical', #JR
335
+ 51009 => 'Voigtlander NOKTON 28mm F1.5 Aspherical', #JR
323
336
 
324
- # lenses listed in the Sigma MC-11 list, but not yet seen:
325
- # 504xx => 'Sigma 18-200mm F3.5-6.3 DC MACRO OS HSM | C + MC-11', # (014)
326
- # 504xx => 'Sigma 30mm F1.4 DC HSM | A + MC-11', # (013)
337
+ 51072 => 'ZEISS Otus ML 50mm F1.4', #JR
338
+ 51073 => 'ZEISS Otus ML 85mm F1.4', #JR
327
339
 
328
340
  # Note: For Samyang lenses, the "FE" designation isn't written to
329
341
  # EXIF:LensModel, so it isn't included in these strings either - JR/PH
@@ -343,6 +355,8 @@ sub PrintInvLensSpec($;$$);
343
355
  51518 => 'Samyang AF 135mm F1.8', #JR
344
356
 
345
357
  61569 => 'LAOWA FFII 10mm F2.8 C&D Dreamer', #JR
358
+
359
+ 61761 => 'Viltrox 28mm F4.5 FE', #JR
346
360
  );
347
361
 
348
362
  # ExposureProgram values (ref PH, mainly decoded from A200)
@@ -1226,6 +1240,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1226
1240
  9 => 'Center (LA-EA4)', # seen for ILCE-7RM2 with LA-EA4
1227
1241
  11 => 'Zone',
1228
1242
  12 => 'Expanded Flexible Spot',
1243
+ 13 => 'Custom AF Area', # NC, new AFArea option for ILCE-9M3, ILCE-1M2
1229
1244
  },
1230
1245
  },{
1231
1246
  Name => 'AFAreaModeSetting',
@@ -1719,14 +1734,14 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1719
1734
  },
1720
1735
  },{
1721
1736
  Name => 'Tag9050c',
1722
- Condition => '$$self{Model} =~ /^(ILCE-(1|7M4|7RM5|7SM3)|ILME-FX3)/',
1737
+ Condition => '$$self{Model} =~ /^(ILCE-(1\b|7M4|7RM5|7SM3)|ILME-FX3)/',
1723
1738
  SubDirectory => {
1724
1739
  TagTable => 'Image::ExifTool::Sony::Tag9050c',
1725
1740
  ByteOrder => 'LittleEndian',
1726
1741
  },
1727
1742
  },{
1728
1743
  Name => 'Tag9050d',
1729
- Condition => '$$self{Model} =~ /^(ILCE-(6700|7CM2|7CR)|ZV-(E1|E10M2))\b/',
1744
+ Condition => '$$self{Model} =~ /^(ILCE-(6700|7CM2|7CR)|ZV-(E1|E10M2))\b/ or ($$self{Model} =~ /^(ILCE-1M2)/ and $$valPt =~ /^\x00/)',
1730
1745
  SubDirectory => {
1731
1746
  TagTable => 'Image::ExifTool::Sony::Tag9050d',
1732
1747
  ByteOrder => 'LittleEndian',
@@ -8208,14 +8223,17 @@ my %isoSetting2010 = (
8208
8223
  WRITE_PROC => \&WriteEnciphered,
8209
8224
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
8210
8225
  FORMAT => 'int8u',
8211
- NOTES => 'Valid for ILCE-6700/7CM2/7CR/ZV-E1.',
8226
+ NOTES => q{
8227
+ Valid for ILCE-6700/7CM2/7CR/ZV-E1. Also for ILCE-1M2 when using mechanical
8228
+ shutter.
8229
+ },
8212
8230
  WRITABLE => 1,
8213
8231
  FIRST_ENTRY => 0,
8214
8232
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
8215
8233
  0x000a => {
8216
8234
  Name => 'ShutterCount',
8217
8235
  # number of mechanical shutter actuations, does not increase during electronic shutter / Silent Shooting
8218
- Condition => '$$self{Model} =~ /^(ILCE-(6700|7CM2|7CR))/',
8236
+ Condition => '$$self{Model} =~ /^(ILCE-(1M2|6700|7CM2|7CR))/',
8219
8237
  Format => 'int32u',
8220
8238
  Notes => 'total number of mechanical shutter actuations',
8221
8239
  RawConv => '$val & 0x00ffffff',
@@ -8451,7 +8469,7 @@ my %isoSetting2010 = (
8451
8469
  200 => 'Continuous - Sweep Panorama',
8452
8470
  },
8453
8471
  },
8454
- 0x001a => { %sequenceFileNumber },
8472
+ 0x001a => { %sequenceFileNumber }, # ILCE-9M3/1M2 have sometimes deviating values.
8455
8473
  0x001e => {
8456
8474
  Name => 'SequenceLength',
8457
8475
  PrintConv => {
@@ -8476,7 +8494,7 @@ my %isoSetting2010 = (
8476
8494
  },
8477
8495
  0x002a => [{
8478
8496
  Name => 'Quality2',
8479
- Condition => '$$self{Model} !~ /^(ILCE-(1|6700|7CM2|7CR|7M4|7RM5|7SM3|9M3)|ILME-(FX3|FX30)|ZV-(E1|E10M2))\b/',
8497
+ Condition => '$$self{Model} !~ /^(ILCE-(1|1M2|6700|7CM2|7CR|7M4|7RM5|7SM3|9M3)|ILME-(FX3|FX30)|ZV-(E1|E10M2))\b/',
8480
8498
  PrintConv => {
8481
8499
  0 => 'JPEG',
8482
8500
  1 => 'RAW',
@@ -8544,7 +8562,7 @@ my %isoSetting2010 = (
8544
8562
  0x0000 => { Name => 'Ver9401', Hidden => 1, RawConv => '$$self{Ver9401} = $val; $$self{OPTIONS}{Unknown}<2 ? undef : $val' },
8545
8563
 
8546
8564
  0x03e2 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 181', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
8547
- 0x03f4 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 185', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
8565
+ 0x03f4 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(185|186)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
8548
8566
  0x044e => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 178', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
8549
8567
  0x0498 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 148', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
8550
8568
  0x049d => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 167 and $$self{Software} !~ /^ILCE-7M4 (v2|v3)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
@@ -8619,6 +8637,7 @@ my %isoSetting2010 = (
8619
8637
  10 => 'Selective (for Miniature effect)', # seen for DSC-HX30V,TX30,WX60,WX100
8620
8638
  11 => 'Zone', #JR (ILCE-7 series)
8621
8639
  12 => 'Expanded Flexible Spot', #JR (HX90V, ILCE-7 series)
8640
+ 13 => 'Custom AF Area', # NC, new AFArea option for ILCE-9M3, ILCE-1M2
8622
8641
  14 => 'Tracking',
8623
8642
  15 => 'Face Tracking',
8624
8643
  20 => 'Animal Eye Tracking',
@@ -10034,7 +10053,7 @@ my %isoSetting2010 = (
10034
10053
  },
10035
10054
  0x089d => { # Note: 32 values for these newer models, and 32 non-zero values present for new lenses like SEL2470GM2 and SEL2070G
10036
10055
  Name => 'VignettingCorrParams',
10037
- Condition => '$$self{Model} =~ /^(ILCE-(6700|7CM2|7CR|7RM5)|ILME-FX30|ZV-(E1|E10M2))\b/',
10056
+ Condition => '$$self{Model} =~ /^(ILCE-(1M2|6700|7CM2|7CR|7RM5)|ILME-FX30|ZV-(E1|E10M2))\b/',
10038
10057
  Format => 'int16s[32]',
10039
10058
  },
10040
10059
  0x08b5 => {
@@ -10055,7 +10074,7 @@ my %isoSetting2010 = (
10055
10074
  },
10056
10075
  0x08e5 => {
10057
10076
  Name => 'APS-CSizeCapture',
10058
- Condition => '$$self{Model} =~ /^(ILCE-(7CM2|7CR|7RM5)|ZV-E1)\b/',
10077
+ Condition => '$$self{Model} =~ /^(ILCE-(1M2|7CM2|7CR|7RM5)|ZV-E1)\b/',
10059
10078
  PrintConv => {
10060
10079
  0 => 'Off',
10061
10080
  1 => 'On',
@@ -10073,7 +10092,7 @@ my %isoSetting2010 = (
10073
10092
  },
10074
10093
  0x0945 => {
10075
10094
  Name => 'ChromaticAberrationCorrParams',
10076
- Condition => '$$self{Model} =~ /^(ILCE-(6700|7CM2|7CR|7RM5)|ILME-FX30|ZV-(E1|E10M2))\b/',
10095
+ Condition => '$$self{Model} =~ /^(ILCE-(1M2|6700|7CM2|7CR|7RM5)|ILME-FX30|ZV-(E1|E10M2))\b/',
10077
10096
  Format => 'int16s[32]',
10078
10097
  },
10079
10098
  );