exiftool_vendored 12.06.0 → 12.08.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.

@@ -49,7 +49,7 @@ use vars qw($VERSION %minoltaLensTypes %minoltaTeleconverters %minoltaColorMode
49
49
  use Image::ExifTool qw(:DataAccess :Utils);
50
50
  use Image::ExifTool::Exif;
51
51
 
52
- $VERSION = '2.84';
52
+ $VERSION = '2.86';
53
53
 
54
54
  # Full list of product codes for Sony-compatible Minolta lenses
55
55
  # (ref http://www.kb.sony.com/selfservice/documentLink.do?externalId=C1000570)
@@ -602,6 +602,9 @@ $VERSION = '2.84';
602
602
  15 => 'Light', #JR (NC)
603
603
  16 => 'Autumn Leaves', #JR (NC)
604
604
  17 => 'Sepia', #JR
605
+ 18 => 'FL', #JR (7SM3)
606
+ 20 => 'IN', #JR (7SM3)
607
+ 21 => 'SH', #JR (7SM3)
605
608
  100 => 'Neutral', #JD
606
609
  101 => 'Clear', #JD
607
610
  102 => 'Deep', #JD
@@ -62,7 +62,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
62
62
  use Image::ExifTool::Exif;
63
63
  use Image::ExifTool::GPS;
64
64
 
65
- $VERSION = '3.86';
65
+ $VERSION = '3.87';
66
66
 
67
67
  sub LensIDConv($$$);
68
68
  sub ProcessNikonAVI($$$);
@@ -349,6 +349,7 @@ sub GetAFPointGrid($$;$);
349
349
  'FE 47 00 00 24 24 4B 06' => 'Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye', #JD
350
350
  '26 48 11 11 30 30 1C 02' => 'Sigma 8mm F4 EX Circular Fisheye',
351
351
  '79 40 11 11 2C 2C 1C 06' => 'Sigma 8mm F3.5 EX Circular Fisheye', #JD
352
+ 'DB 40 11 11 2C 2C 1C 06' => 'Sigma 8mm F3.5 EX DG Circular Fisheye', #30
352
353
  'DC 48 19 19 24 24 4B 06' => 'Sigma 10mm F2.8 EX DC HSM Fisheye',
353
354
  'C2 4C 24 24 14 14 4B 06' => 'Sigma 14mm F1.8 DG HSM | A', #IB
354
355
  '48 48 24 24 24 24 4B 02' => 'Sigma 14mm F2.8 EX Aspherical HSM',
@@ -4657,6 +4658,11 @@ my %nikonFocalConversions = (
4657
4658
  13 => 'Nikkor Z 24-70mm f/2.8 S',
4658
4659
  14 => 'Nikkor Z 85mm f/1.8 S',
4659
4660
  15 => 'Nikkor Z 24mm f/1.8 S', #IB
4661
+ 16 => 'Nikkor Z 70-200mm f/2.8 VR S', #IB
4662
+ 17 => 'Nikkor Z 20mm f/1.8 S', #IB
4663
+ 18 => 'Nikkor Z 24-200mm f/4-6.3 VR', #IB
4664
+ 21 => 'Nikkor Z 50mm f/1.2 S', #IB
4665
+ 22 => 'Nikkor Z 24-50mm f/4-6.3', #IB
4660
4666
  },
4661
4667
  },
4662
4668
  0x36 => {
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
40
40
  use Image::ExifTool::Exif;
41
41
  use Image::ExifTool::APP12;
42
42
 
43
- $VERSION = '2.68';
43
+ $VERSION = '2.69';
44
44
 
45
45
  sub PrintLensInfo($$$);
46
46
 
@@ -2129,6 +2129,11 @@ my %indexInfo = (
2129
2129
  67 => 'Soft Background Shot', #11
2130
2130
  142 => 'Hand-held Starlight', #PH (SH-21)
2131
2131
  154 => 'HDR', #PH (XZ-2)
2132
+ 197 => 'Panning', #forum11631 (EM5iii)
2133
+ 203 => 'Light Trails', #forum11631 (EM5iii)
2134
+ 204 => 'Backlight HDR', #forum11631 (EM5iii)
2135
+ 205 => 'Silent', #forum11631 (EM5iii)
2136
+ 206 => 'Multi Focus Shot', #forum11631 (EM5iii)
2132
2137
  },
2133
2138
  },
2134
2139
  0x50a => { #PH/4/6
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
37
37
  use Image::ExifTool qw(:DataAccess :Utils);
38
38
  use Image::ExifTool::Exif;
39
39
 
40
- $VERSION = '2.13';
40
+ $VERSION = '2.14';
41
41
 
42
42
  sub ProcessLeicaLEIC($$$);
43
43
  sub WhiteBalanceConv($;$$);
@@ -2471,7 +2471,8 @@ my %shootingMode = (
2471
2471
  # AdvancedSceneType=5 for automatic mode iA (ref 19)
2472
2472
  if ($prt) {
2473
2473
  return $prt if $v[1] == 1;
2474
- return "$prt (intelligent auto)" if $v[1] == 5;
2474
+ return "$prt (intelligent auto)" if $v[1] == 5; #forum11523
2475
+ return "$prt (intelligent auto plus)" if $v[1] == 7; #forum11523
2475
2476
  return "$prt ($v[1])";
2476
2477
  }
2477
2478
  return "Unknown ($val)";
@@ -2494,10 +2495,19 @@ my %shootingMode = (
2494
2495
  '9 3' => 'Objects', #(FZ28)
2495
2496
  '9 4' => 'Creative Macro', #(FZ28)
2496
2497
  #'9 5' - ? (GF3)
2498
+ '18 1' => 'High Sensitivity', #forum11523 (TZ5)
2499
+ '20 1' => 'Fireworks', #forum11523 (TZ5)
2497
2500
  '21 2' => 'Illuminations', #(FZ28)
2498
2501
  '21 4' => 'Creative Night Scenery', #(FZ28)
2499
2502
  #'21 5' - ? (LX3)
2503
+ '26 1' => 'High-speed Burst (shot 1)', #forum11523 (TZ5)
2504
+ '27 1' => 'High-speed Burst (shot 2)', #forum11523 (TZ5)
2505
+ '29 1' => 'Snow', #forum11523 (TZ5)
2506
+ '30 1' => 'Starry Sky', #forum11523 (TZ5)
2507
+ '31 1' => 'Beach', #forum11523 (TZ5)
2508
+ '36 1' => 'High-speed Burst (shot 3)', #forum11523 (TZ5)
2500
2509
  #'37 5' - ? (various)
2510
+ '39 1' => 'Aerial Photo / Underwater / Multi-aspect', #forum11523 (TZ5)
2501
2511
  '45 2' => 'Cinema', #(GF2)
2502
2512
  '45 7' => 'Expressive', #(GF1,GF2)
2503
2513
  '45 8' => 'Retro', #(GF1,GF2)
@@ -2542,16 +2552,6 @@ my %shootingMode = (
2542
2552
  'DMC-TZ40 90 10' => 'Toy Effect',
2543
2553
  'DMC-TZ40 90 11' => 'Dynamic Monochrome',
2544
2554
  'DMC-TZ40 90 12' => 'Soft',
2545
- # some TZ5 modes are different (forum11523)
2546
- # (these may be the same for the TZ4, TZ11 and TZ15)
2547
- 'DMC-TZ5 18 1' => 'High Sensitivity',
2548
- 'DMC-TZ5 26 1' => 'High-speed Burst (shot 1)',
2549
- 'DMC-TZ5 27 1' => 'High-speed Burst (shot 2)',
2550
- 'DMC-TZ5 29 1' => 'Snow',
2551
- 'DMC-TZ5 30 1' => 'Starry Sky',
2552
- 'DMC-TZ5 31 1' => 'Beach',
2553
- 'DMC-TZ5 36 1' => 'High-speed Burst (shot 3)',
2554
- 'DMC-TZ5 39 1' => 'Aerial Photo / Underwater / Multi-aspect',
2555
2555
  },
2556
2556
  },
2557
2557
  );
@@ -47,7 +47,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
47
47
  use Image::ExifTool::Exif;
48
48
  use Image::ExifTool::GPS;
49
49
 
50
- $VERSION = '2.52';
50
+ $VERSION = '2.53';
51
51
 
52
52
  sub ProcessMOV($$;$);
53
53
  sub ProcessKeys($$$);
@@ -607,6 +607,11 @@ my %eeBox = (
607
607
  Groups => { 2 => 'Preview' },
608
608
  Binary => 1,
609
609
  },
610
+ 'thm ' => { #PH (70mai A800)
611
+ Name => 'ThumbnailImage',
612
+ Groups => { 2 => 'Preview' },
613
+ Binary => 1,
614
+ },
610
615
  ardt => { #PH
611
616
  Name => 'ARDroneFile',
612
617
  ValueConv => 'length($val) > 4 ? substr($val,4) : $val', # remove length
@@ -1913,7 +1918,7 @@ my %eeBox = (
1913
1918
  # SETT? 12 bytes (Hero4)
1914
1919
  # MUID? 32 bytes (Hero4, starts with serial number hash)
1915
1920
  # HMMT? 404 bytes (Hero4, all zero)
1916
- # BCID? 26 bytes (Hero5, all zero)
1921
+ # BCID? 26 bytes (Hero5, all zero), 36 bytes GoPro Max
1917
1922
  # GUMI? 16 bytes (Hero5)
1918
1923
  "FOV\0" => 'FieldOfView', #forum8938 (Hero2) seen: "Wide"
1919
1924
  GPMF => {
@@ -6861,7 +6866,7 @@ my %eeBox = (
6861
6866
  #
6862
6867
  # AudioFormat Offset Child atoms
6863
6868
  # ----------- ------ ----------------
6864
- # mp4a 52 * wave, chan, esds, SA3D(Insta360 spherical video params?)
6869
+ # mp4a 52 * wave, chan, esds, SA3D(Insta360 spherical video params?,also GoPro Max)
6865
6870
  # in24 52 wave, chan
6866
6871
  # "ms\0\x11" 52 wave
6867
6872
  # sowt 52 chan
@@ -10,6 +10,7 @@
10
10
  # 3) https://forum.flitsservice.nl/dashcam-info/dod-ls460w-gps-data-uit-mov-bestand-lezen-t87926.html
11
11
  # 4) https://developers.google.com/streetview/publish/camm-spec
12
12
  # 5) https://sergei.nz/extracting-gps-data-from-viofo-a119-and-other-novatek-powered-cameras/
13
+ # 6) Thomas Allen https://github.com/exiftool/exiftool/pull/62
13
14
  #------------------------------------------------------------------------------
14
15
  package Image::ExifTool::QuickTime;
15
16
 
@@ -78,7 +79,8 @@ my %processByMetaFormat = (
78
79
  # data lengths for each INSV record type
79
80
  my %insvDataLen = (
80
81
  0x300 => 56, # accelerometer
81
- 0x400 => 16, # unknown
82
+ 0x400 => 16, # exposure (ref 6)
83
+ 0x600 => 8, # timestamps (ref 6)
82
84
  0x700 => 53, # GPS
83
85
  );
84
86
 
@@ -121,6 +123,7 @@ my %insvLimit = (
121
123
  ExposureCompensation => { PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', Groups => { 2 => 'Camera' } },
122
124
  ISO => { Groups => { 2 => 'Camera' } },
123
125
  CameraDateTime=>{ PrintConv => '$self->ConvertDateTime($val)', Groups => { 2 => 'Time' } },
126
+ VideoTimeStamp => { Groups => { 2 => 'Video' } },
124
127
  Accelerometer=> { Notes => '3-axis acceleration in units of g' },
125
128
  AccelerometerData => { },
126
129
  AngularVelocity => { },
@@ -1112,7 +1115,7 @@ sub ProcessSamples($)
1112
1115
  ($startChunk, $samplesPerChunk, $descIdx) = @{shift @$stsc};
1113
1116
  $nextChunk = $$stsc[0][0] if @$stsc;
1114
1117
  }
1115
- @$size < @$start + $samplesPerChunk and $et->WarnOnce('Sample size error'), return;
1118
+ @$size < @$start + $samplesPerChunk and $et->WarnOnce('Sample size error'), last;
1116
1119
  my $sampleStart = $chunkStart;
1117
1120
  for ($i=0; ; ) {
1118
1121
  push @$start, $sampleStart;
@@ -1215,11 +1218,13 @@ sub ProcessSamples($)
1215
1218
  $val =~ tr/\t/ /;
1216
1219
  $et->HandleTag($tagTbl, RawGSensor => $val) if length $val;
1217
1220
  }
1218
- } elsif ($buff =~ /^PNDM/ and length $buff >= 20) {
1221
+ } elsif ($buff =~ /^(\0.{3})?PNDM/s) {
1219
1222
  # Garmin Dashcam format (actually binary, not text)
1220
- $et->HandleTag($tagTbl, GPSLatitude => Get32s(\$buff, 12) * 180/0x80000000);
1221
- $et->HandleTag($tagTbl, GPSLongitude => Get32s(\$buff, 16) * 180/0x80000000);
1222
- $et->HandleTag($tagTbl, GPSSpeed => Get16u(\$buff, 8));
1223
+ my $n = $1 ? 4 : 0; # skip leading 4-byte size word if it exists
1224
+ next if length($buff) < 20 + $n;
1225
+ $et->HandleTag($tagTbl, GPSLatitude => Get32s(\$buff, 12+$n) * 180/0x80000000);
1226
+ $et->HandleTag($tagTbl, GPSLongitude => Get32s(\$buff, 16+$n) * 180/0x80000000);
1227
+ $et->HandleTag($tagTbl, GPSSpeed => Get16u(\$buff, 8+$n));
1223
1228
  $et->HandleTag($tagTbl, GPSSpeedRef => 'M');
1224
1229
  SetGPSDateTime($et, $tagTbl, $time[$i]);
1225
1230
  next; # all done (don't store/process as text)
@@ -2444,11 +2449,16 @@ sub ProcessInsta360($;$)
2444
2449
  $et->HandleTag($tagTbl, Accelerometer => "@a[0..2]"); # (NC)
2445
2450
  $et->HandleTag($tagTbl, AngularVelocity => "@a[3..5]"); # (NC)
2446
2451
  }
2447
- } elsif ($id == 0x400 and $unknown) {
2452
+ } elsif ($id == 0x400) {
2448
2453
  for ($p=0; $p<$len; $p+=$dlen) {
2449
2454
  $$et{DOC_NUM} = ++$$et{DOC_COUNT};
2450
2455
  $et->HandleTag($tagTbl, TimeCode => sprintf('%.3f', Get64u(\$buff, $p) / 1000));
2451
- $et->HandleTag($tagTbl, Unknown01 => GetDouble(\$buff, $p + 8));
2456
+ $et->HandleTag($tagTbl, ExposureTime => GetDouble(\$buff, $p + 8)); #6
2457
+ }
2458
+ } elsif ($id == 0x600) { #6
2459
+ for ($p=0; $p<$len; $p+=$dlen) {
2460
+ $$et{DOC_NUM} = ++$$et{DOC_COUNT};
2461
+ $et->HandleTag($tagTbl, VideoTimeStamp => sprintf('%.3f', Get64u(\$buff, $p) / 1000));
2452
2462
  }
2453
2463
  } elsif ($id == 0x700) {
2454
2464
  for ($p=0; $p<$len; $p+=$dlen) {
@@ -14,19 +14,22 @@ use strict;
14
14
  use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
 
17
- $VERSION = '1.08';
17
+ $VERSION = '1.09';
18
+
19
+ sub ProcessRSRC($$);
18
20
 
19
21
  # Information decoded from Mac OS resources
20
22
  %Image::ExifTool::RSRC::Main = (
21
23
  GROUPS => { 2 => 'Document' },
24
+ PROCESS_PROC => \&ProcessRSRC,
22
25
  NOTES => q{
23
- Tags extracted from Mac OS resource files and DFONT files. These tags may
24
- also be extracted from the resource fork of any file in OS X, either by
25
- adding "/..namedfork/rsrc" to the filename to process the resource fork
26
- alone, or by using the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> (-ee) option to process the resource
27
- fork as a sub-document of the main file. When writing, ExifTool preserves
28
- the Mac OS resource fork by default, but it may deleted with C<-rsrc:all=>
29
- on the command line.
26
+ Tags extracted from Mac OS resource files, DFONT files and "._" sidecar
27
+ files. These tags may also be extracted from the resource fork of any file
28
+ in OS X, either by adding "/..namedfork/rsrc" to the filename to process the
29
+ resource fork alone, or by using the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> (-ee) option to process
30
+ the resource fork as a sub-document of the main file. When writing,
31
+ ExifTool preserves the Mac OS resource fork by default, but it may deleted
32
+ with C<-rsrc:all=> on the command line.
30
33
  },
31
34
  '8BIM' => {
32
35
  Name => 'PhotoshopInfo',
@@ -66,6 +69,9 @@ sub ProcessRSRC($$)
66
69
  my $raf = $$dirInfo{RAF};
67
70
  my ($hdr, $map, $buff, $i, $j);
68
71
 
72
+ # allow access with data reference
73
+ $raf or $raf = new File::RandomAccess($$dirInfo{DataPt});
74
+
69
75
  # attempt to validate the format as thoroughly as practical
70
76
  return 0 unless $raf->Read($hdr, 30) == 30;
71
77
  my ($datOff, $mapOff, $datLen, $mapLen) = unpack('N*', $hdr);
@@ -81,7 +87,7 @@ sub ProcessRSRC($$)
81
87
  SetByteOrder('MM');
82
88
  my $typeOff = Get16u(\$map, 24);
83
89
  my $nameOff = Get16u(\$map, 26);
84
- my $numTypes = Get16u(\$map, 28);
90
+ my $numTypes = (Get16u(\$map, 28) + 1) & 0xffff;
85
91
 
86
92
  # validate offsets in the resource map
87
93
  return 0 if $typeOff < 28 or $nameOff < 30;
@@ -89,10 +95,10 @@ sub ProcessRSRC($$)
89
95
  $et->SetFileType('RSRC') unless $$et{IN_RESOURCE};
90
96
  my $verbose = $et->Options('Verbose');
91
97
  my $tagTablePtr = GetTagTable('Image::ExifTool::RSRC::Main');
92
- $et->VerboseDir('RSRC', $numTypes+1);
98
+ $et->VerboseDir('RSRC', $numTypes);
93
99
 
94
100
  # parse resource type list
95
- for ($i=0; $i<=$numTypes; ++$i) {
101
+ for ($i=0; $i<$numTypes; ++$i) {
96
102
  my $off = $typeOff + 2 + 8 * $i; # offset of entry in type list
97
103
  last if $off + 8 > $mapLen;
98
104
  my $resType = substr($map,$off,4); # resource type
@@ -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.28';
37
+ $VERSION = '3.30';
38
38
 
39
39
  sub ProcessSRF($$$);
40
40
  sub ProcessSR2($$$);
@@ -144,6 +144,7 @@ sub PrintInvLensSpec($;$$);
144
144
  32858 => 'Sony FE 35mm F1.8', #JR/IB
145
145
  32859 => 'Sony FE 20mm F1.8 G', #IB/JR
146
146
  32860 => 'Sony FE 12-24mm F2.8 GM', #JR/IB
147
+ 32864 => 'Sony FE 28-60mm F4-5.6', #JR
147
148
 
148
149
  # (comment this out so LensID will report the LensModel, which is more useful)
149
150
  # 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
@@ -182,7 +183,8 @@ sub PrintInvLensSpec($;$$);
182
183
  49461 => 'Tamron 20mm F2.8 Di III OSD M1:2', #JR (Model F050)
183
184
  49462 => 'Tamron 70-180mm F2.8 Di III VXD', #JR (Model A056)
184
185
  49463 => 'Tamron 28-200mm F2.8-5.6 Di III RXD', #JR (Model A071)
185
-
186
+ 49464 => 'Tamron 70-300mm F4.5-6.3 Di III RXD', #JR (Model A047)
187
+ 49473 => 'Tokina atx-m 85mm F1.8 FE', #JR
186
188
  49712 => 'Tokina FiRIN 20mm F2 FE AF', # (firmware Ver.01)
187
189
  49713 => 'Tokina FiRIN 100mm F2.8 FE MACRO', # (firmware Ver.01)
188
190
 
@@ -213,6 +215,7 @@ sub PrintInvLensSpec($;$$);
213
215
  50517 => 'Sigma 24-70mm F2.8 DG DN | A', #JR (019)
214
216
  50518 => 'Sigma 100-400mm F5-6.3 DG DN OS | C', #JR (020)
215
217
  50521 => 'Sigma 85mm F1.4 DG DN | A', #JR (020)
218
+ 50522 => 'Sigma 105mm F2.8 DG DN MACRO | A', #JR (020)
216
219
 
217
220
  50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
218
221
  50993 => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB
@@ -238,7 +241,8 @@ sub PrintInvLensSpec($;$$);
238
241
  51505.1 => 'Samyang AF 35mm F2.8', #PH (also 32794)
239
242
  51507 => 'Samyang AF 35mm F1.4', #IB
240
243
  51508 => 'Samyang AF 45mm F1.8',
241
- 51510 => 'Samyang AF 18mm F2.8', #JR
244
+ 51510 => 'Samyang AF 18mm F2.8 or Samyang AF 35mm F1.8', #JR
245
+ 51510.1 => 'Samyang AF 35mm F1.8', #JR
242
246
  51512 => 'Samyang AF 75mm F1.8', #IB/JR
243
247
  );
244
248
 
@@ -959,7 +963,8 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
959
963
  # unknown offsets or values for DSC-HX60V/HX350/HX400V/QX10/QX30/QX100/RX10/RX100M2/RX100M3/WX220/WX350,
960
964
  # ILCA-68/77M2, ILCE-5000/5100/6000/7/7M2/7R/7S/QX1, Stellar2, Lusso
961
965
  # unknown offsets or values for DSC-HX80/HX90V/RX0/RX1RM2/RX10M2/RX10M3/RX100M4/RX100M5/WX500, ILCE-6300/6500/7RM2/7SM2, ILCA-99M2
962
- # unknown offsets or values for ILCE-6100/6400/6600/7M3/7RM3/7RM4/9/9M2, DSC-RX0M2/RX10M4/RX100M6/RX100M5A/RX100M7/HX99
966
+ # unknown offsets or values for ILCE-6100/6400/6600/7C/7M3/7RM3/7RM4/9/9M2, DSC-RX0M2/RX10M4/RX100M6/RX100M5A/RX100M7/HX99
967
+ # July 2020: ILCE-7SM3 doesn't write this tag anymore
963
968
  {
964
969
  Name => 'Tag2010a', # ad
965
970
  Condition => '$$self{Model} =~ /^NEX-5N$/',
@@ -1000,7 +1005,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1000
1005
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010h' },
1001
1006
  },{
1002
1007
  Name => 'Tag2010i', # ?
1003
- Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9|9M2)|DSC-(RX10M4|RX100M6|RX100M5A|RX100M7|HX99|RX0M2)|ZV-1)\b/',
1008
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9|9M2)|DSC-(RX10M4|RX100M6|RX100M5A|RX100M7|HX99|RX0M2)|ZV-1)\b/',
1004
1009
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010i' },
1005
1010
  },{
1006
1011
  Name => 'Tag_0x2010',
@@ -1430,7 +1435,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1430
1435
  },
1431
1436
  },
1432
1437
  0x202d => { #JR first seen for ILCA-99M2, ILCE-6500, DSC-RX100M5
1433
- Name => 'ExposureStandardAdjustment', # (NC)
1438
+ Name => 'ExposureStandardAdjustment',
1434
1439
  Writable => 'rational64s',
1435
1440
  PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
1436
1441
  PrintConvInv => '$val',
@@ -1528,14 +1533,14 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1528
1533
  # from mid-2015: ILCE-7RM2/7SM2/6300 and newer models use different offsets
1529
1534
  {
1530
1535
  Name => 'Tag9050a',
1531
- Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(6100|6300|6400|6500|6600|7M3|7RM2|7RM3|7RM4|7SM2|7SM3|9|9M2)|ILCA-99M2|ZV-)/',
1536
+ Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(6100|6300|6400|6500|6600|7C|7M3|7RM2|7RM3|7RM4|7SM2|7SM3|9|9M2)|ILCA-99M2|ZV-)/',
1532
1537
  SubDirectory => {
1533
1538
  TagTable => 'Image::ExifTool::Sony::Tag9050a',
1534
1539
  ByteOrder => 'LittleEndian',
1535
1540
  },
1536
1541
  },{
1537
1542
  Name => 'Tag9050b',
1538
- Condition => '$$self{Model} =~ /^(ILCE-(6100|6300|6400|6500|6600|7M3|7RM2|7RM3|7RM4|7SM2|9|9M2)|ILCA-99M2)/',
1543
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6300|6400|6500|6600|7C|7M3|7RM2|7RM3|7RM4|7SM2|9|9M2)|ILCA-99M2)/',
1539
1544
  SubDirectory => {
1540
1545
  TagTable => 'Image::ExifTool::Sony::Tag9050b',
1541
1546
  ByteOrder => 'LittleEndian',
@@ -1701,7 +1706,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1701
1706
  # 13 0 9 2 2 DSC-QX10/QX100/RX100M2
1702
1707
  # 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
1703
1708
  # 16 0 85 2 2 DSC-HX80/HX90V/WX500
1704
- # 17 0 232 1 2 DSC-RX0/RX0M2/RX1RM2/RX10M2/RX10M3/RX10M4/RX100M4/RX100M5/RX100M5A/RX100M6/RX100M7/HX99, ILCE-6100/6300/6400/6500/6600/7M3/7RM2/7RM3/7RM4/7SM2/9/9M2, ILCA-99M2, ZV-1
1709
+ # 17 0 232 1 2 DSC-RX0/RX0M2/RX1RM2/RX10M2/RX10M3/RX10M4/RX100M4/RX100M5/RX100M5A/RX100M6/RX100M7/HX99, ILCE-6100/6300/6400/6500/6600/7C/7M3/7RM2/7RM3/7RM4/7SM2/9/9M2, ILCA-99M2, ZV-1
1705
1710
  # 18 0 20 0 164 ILCE-7SM3
1706
1711
  # other values for Panorama images and several other models
1707
1712
  0x9404 => [{
@@ -1736,7 +1741,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1736
1741
  # 142 var (0x25 = 37 var enc.) DSC-HX80/HX90V/RX1RM2/RX10M2/RX10M3/RX100M4/WX500, ILCE-6300/7RM2/7SM2
1737
1742
  # 144 var (0xe1 = 225 var enc.) DSC-RX100M5
1738
1743
  # 145 var (0x76 = 118 var enc.) ILCA-99M2, ILCE-6500, DSC-RX0
1739
- # 163 var (0x8b = 139 var enc.) ILCE-6100/6400/6600/7M3/7RM3/7RM4/9/9M2, DSC-RX0M2/RX10M4/RX100M5A/RX100M6/RX100M7/HX99, ZV-1
1744
+ # 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
1740
1745
  # July 2020: ILCE-7SM3 doesn't write this tag anymore, but writes 0x9416
1741
1746
  0x9405 => [{
1742
1747
  Name => 'Tag9405a',
@@ -1945,11 +1950,12 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1945
1950
  378 => 'ILCE-6600', #IB/JR
1946
1951
  379 => 'ILCE-6100', #IB/JR
1947
1952
  380 => 'ZV-1', #JR
1953
+ 381 => 'ILCE-7C', #JR
1948
1954
  383 => 'ILCE-7SM3',
1949
1955
  },
1950
1956
  },
1951
1957
  0xb020 => { #2
1952
- Name => 'CreativeStyle',
1958
+ Name => 'CreativeStyle', # (called CreativeLook by the 7SM3, ref JR)
1953
1959
  Writable => 'string',
1954
1960
  # (all of these values have been observed, ref JR and PH)
1955
1961
  # - this PrintConv is included to make these strings consistent with
@@ -1973,6 +1979,18 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1973
1979
  Light => 'Light',
1974
1980
  Autumnleaves=> 'Autumn Leaves',
1975
1981
  Sepia => 'Sepia',
1982
+ # new for the ILCE-7SM3 (ref JR)
1983
+ ST => 'Standard',
1984
+ PT => 'Portrait',
1985
+ NT => 'Neutral', # (NC)
1986
+ VV => 'Vivid', # (NC)
1987
+ VV2 => 'Vivid 2', # (NC)
1988
+ FL => 'FL', # "moody finish with sharp contrast and calm coloring as well as the impressive sky and colors of the greens"
1989
+ IN => 'IN', # "matte textures by suppressing the contrast and saturation"
1990
+ SH => 'SH', # "bright, transparent, soft, and vivid mood"
1991
+ BW => 'B&W',
1992
+ SE => 'Sepia',
1993
+ # (...also Custom Look 1-6, but don't konw the values)
1976
1994
  },
1977
1995
  },
1978
1996
  0xb021 => { #2
@@ -6054,6 +6072,7 @@ my %pictureProfile2010 = (
6054
6072
  my %isoSetting2010 = (
6055
6073
  0 => 'Auto',
6056
6074
  5 => 25,
6075
+ 7 => 40,
6057
6076
  8 => 50,
6058
6077
  9 => 64,
6059
6078
  10 => 80,
@@ -6091,6 +6110,8 @@ my %isoSetting2010 = (
6091
6110
  42 => 128000,
6092
6111
  43 => 160000,
6093
6112
  44 => 204800,
6113
+ 45 => 256000,
6114
+ 46 => 320000,
6094
6115
  47 => 409600,
6095
6116
  );
6096
6117
 
@@ -6848,7 +6869,7 @@ my %isoSetting2010 = (
6848
6869
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
6849
6870
  FORMAT => 'int8u',
6850
6871
  NOTES => q{
6851
- Valid for ILCE-6100/6400/6600/7M3/7RM3/7RM4/9/9M2, DSC-RX0M2/RX10M4/RX100M6/
6872
+ Valid for ILCE-6100/6400/6600/7C/7M3/7RM3/7RM4/9/9M2, DSC-RX0M2/RX10M4/RX100M6/
6852
6873
  RX100M5A/RX100M7/HX99.
6853
6874
  },
6854
6875
  WRITABLE => 1,
@@ -7429,7 +7450,7 @@ my %isoSetting2010 = (
7429
7450
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
7430
7451
  FORMAT => 'int8u',
7431
7452
  NOTES => q{
7432
- Valid from July 2015 for ILCE-6100/6300/6400/6500/6600/7M3/7RM2/7RM3/7RM4/
7453
+ Valid from July 2015 for ILCE-6100/6300/6400/6500/6600/7C/7M3/7RM2/7RM3/7RM4/
7433
7454
  7SM2/9/9M2, ILCA-99M2.
7434
7455
  },
7435
7456
  WRITABLE => 1,
@@ -7518,7 +7539,7 @@ my %isoSetting2010 = (
7518
7539
  # March 2019: ILCE-9 with v5.0x firmware follows ILCE-6400 in many tags ...
7519
7540
  0x0050 => {
7520
7541
  Name => 'ShutterCount2',
7521
- Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} =~ /^(ILCE-(6100|6400|6600|7RM4|9M2))/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/)',
7542
+ Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7RM4|9M2))/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/)',
7522
7543
  Format => 'int32u',
7523
7544
  RawConv => '$val & 0x00ffffff',
7524
7545
  },
@@ -7535,13 +7556,13 @@ my %isoSetting2010 = (
7535
7556
  # 0x0058, 0x0061: E-Mount: ShutterCount and dateTime
7536
7557
  0x0058 => { # appears not valid when flash is used ... not for ILCA-99M2
7537
7558
  Name => 'ShutterCount2',
7538
- Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} !~ /^(ILCA-99M2|ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9M2))/) and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
7559
+ 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)/',
7539
7560
  Format => 'int32u',
7540
7561
  RawConv => '$val & 0x00ffffff',
7541
7562
  },
7542
7563
  0x0061 => { # only minutes-seconds, not for ILCA-99M2, ILCE-9
7543
7564
  Name => 'SonyTimeMinSec',
7544
- Condition => '$$self{Model} !~ /^(ILCA-99M2|ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9|9M2))/',
7565
+ Condition => '$$self{Model} !~ /^(ILCA-99M2|ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9|9M2))/',
7545
7566
  Format => 'undef[2]',
7546
7567
  ValueConv => q{
7547
7568
  my @v = unpack('C*', $val);
@@ -7550,7 +7571,7 @@ my %isoSetting2010 = (
7550
7571
  },
7551
7572
  0x006b => {
7552
7573
  Name => 'ReleaseMode2',
7553
- Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7RM4|9M2))/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
7574
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7RM4|9M2))/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
7554
7575
  %releaseMode2,
7555
7576
  },
7556
7577
  0x006d => {
@@ -7560,7 +7581,7 @@ my %isoSetting2010 = (
7560
7581
  },
7561
7582
  0x0073 => {
7562
7583
  Name => 'ReleaseMode2',
7563
- Condition => '$$self{Model} !~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9M2))/ and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
7584
+ Condition => '$$self{Model} !~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9M2))/ and $$self{Software} !~ /^ILCE-9 (v5.0|v6.0)/',
7564
7585
  %releaseMode2,
7565
7586
  },
7566
7587
  0x0088 => {
@@ -7639,7 +7660,7 @@ my %isoSetting2010 = (
7639
7660
  #
7640
7661
  0x019f => {
7641
7662
  Name => 'ShutterCount3',
7642
- Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9|9M2))\b/',
7663
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9|9M2))\b/',
7643
7664
  Format => 'int32u',
7644
7665
  RawConv => '$val == 0 ? undef : $val',
7645
7666
  },
@@ -7657,7 +7678,7 @@ my %isoSetting2010 = (
7657
7678
  },
7658
7679
  0x01eb => {
7659
7680
  Name => 'APS-CSizeCapture',
7660
- Condition => '$$self{Model} =~ /^ILCE-(7RM4|9M2)/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
7681
+ Condition => '$$self{Model} =~ /^ILCE-(7RM4|7C|9M2)/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
7661
7682
  PrintConv => {
7662
7683
  0 => 'Off',
7663
7684
  1 => 'On',
@@ -7665,7 +7686,7 @@ my %isoSetting2010 = (
7665
7686
  },
7666
7687
  0x01ed => {
7667
7688
  Name => 'LensSpecFeatures',
7668
- Condition => '$$self{Model} =~ /^ILCE-(7RM4|9M2)/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
7689
+ Condition => '$$self{Model} =~ /^ILCE-(7RM4|7C|9M2)/ or $$self{Software} =~ /^ILCE-9 (v5.0|v6.0)/',
7669
7690
  Priority => 0,
7670
7691
  Format => 'undef[2]',
7671
7692
  ValueConv => 'join " ", unpack "H2H2", $val',
@@ -8031,8 +8052,8 @@ my %isoSetting2010 = (
8031
8052
  NOTES => q{
8032
8053
  Valid for DSC-HX60V/HX80/HX90V/HX99/HX350/HX400V/QX30/RX0/RX1RM2/RX10/
8033
8054
  RX10M2/RX10M3/RX10M4/RX100M3/RX100M4/RX100M5/RX100M5A/RX100M6/RX100M7/WX220/
8034
- WX350/WX500, ILCE-7/7R/7S/7M2/7M3/7RM2/7RM3/7RM4/7SM2/9/9M2/5000/5100/6000/
8035
- 6100/6300/6400/6500/6600/QX1, ILCA-68/77M2/99M2.
8055
+ WX350/WX500, ILCE-7/7C/7R/7S/7M2/7M3/7RM2/7RM3/7RM4/7SM2/9/9M2/5000/5100/
8056
+ 6000/6100/6300/6400/6500/6600/QX1, ILCA-68/77M2/99M2.
8036
8057
  },
8037
8058
  FIRST_ENTRY => 0,
8038
8059
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
@@ -8042,6 +8063,7 @@ my %isoSetting2010 = (
8042
8063
  Name => 'ShotNumberSincePowerUp',
8043
8064
  Format => 'int8u',
8044
8065
  },{
8066
+ Condition => '$$self{Model} !~ /^(ILCE-7C)\b/',
8045
8067
  Name => 'ShotNumberSincePowerUp',
8046
8068
  Format => 'int32u',
8047
8069
  }],
@@ -8582,7 +8604,7 @@ my %isoSetting2010 = (
8582
8604
  },
8583
8605
  0x0342 => {
8584
8606
  Name => 'LensZoomPosition',
8585
- Condition => '$$self{Model} !~ /^(ILCA-|ILCE-(7RM2|7M3|7RM3|7RM4|7SM2|6100|6300|6400|6500|6600|9|9M2)|DSC-(HX80|HX90V|HX99|RX0|RX10M2|RX10M3|RX10M4|RX100M4|RX100M5|RX100M5A|RX100M6|RX100M7|WX500)|ZV-)/',
8607
+ 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-)/',
8586
8608
  Format => 'int16u',
8587
8609
  PrintConv => 'sprintf("%.0f%%",$val/10.24)',
8588
8610
  PrintConvInv => '$val=~s/ ?%$//; $val * 10.24',
@@ -8594,7 +8616,7 @@ my %isoSetting2010 = (
8594
8616
  },
8595
8617
  0x034e => {
8596
8618
  Name => 'LensZoomPosition',
8597
- Condition => '$$self{Model} =~ /^(DSC-(RX100M5|RX100M5A|RX100M6|RX100M7|RX10M4|HX99)|ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9M2))/',
8619
+ Condition => '$$self{Model} =~ /^(DSC-(RX100M5|RX100M5A|RX100M6|RX100M7|RX10M4|HX99)|ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9M2))/',
8598
8620
  Format => 'int16u',
8599
8621
  PrintConv => 'sprintf("%.0f%%",$val/10.24)',
8600
8622
  PrintConvInv => '$val=~s/ ?%$//; $val * 10.24',
@@ -8606,7 +8628,7 @@ my %isoSetting2010 = (
8606
8628
  },
8607
8629
  0x035c => {
8608
8630
  Name => 'VignettingCorrParams',
8609
- Condition => '$$self{Model} =~ /^(ILCA-99M2|ILCE-(6100|6400|6500|6600|7M3|7RM3|7RM4|9|9M2))/',
8631
+ Condition => '$$self{Model} =~ /^(ILCA-99M2|ILCE-(6100|6400|6500|6600|7C|7M3|7RM3|7RM4|9|9M2))/',
8610
8632
  Format => 'int16s[16]',
8611
8633
  },
8612
8634
  0x035a => {
@@ -8643,7 +8665,7 @@ my %isoSetting2010 = (
8643
8665
  },
8644
8666
  0x03b8 => {
8645
8667
  Name => 'ChromaticAberrationCorrParams',
8646
- Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7M3|7RM3|7RM4|9|9M2))/',
8668
+ Condition => '$$self{Model} =~ /^(ILCE-(6100|6400|6600|7C|7M3|7RM3|7RM4|9|9M2))/',
8647
8669
  Format => 'int16s[32]',
8648
8670
  },
8649
8671
  );
@@ -8878,7 +8900,8 @@ my %isoSetting2010 = (
8878
8900
  # 1 1 3 0 for ILCA-68/77M2/99M2
8879
8901
  # 0 0 0 0 for NEX and ILCE-3000/3500, also seen for SLT/ILCA with non-AF lens
8880
8902
  # 1 0 0 0 for ILCE-5000/5100/6000/7/7M2/7R/7S/QX1
8881
- # 6 0 0 0 for ILCE-6100/6300/6400/6500/6600/7M3/7RM2/7RM3/7RM4/7SM2/9/9M2
8903
+ # 6 0 0 0 for ILCE-6100/6300/6400/6500/6600/7C/7M3/7RM2/7RM3/7RM4/7SM2/9/9M2
8904
+ # 9 . . . for ILCE-7SM3
8882
8905
  # 0 2 0 0 for NEX/ILCE with LA-EA2/EA4 Phase-AF adapter
8883
8906
  # 2 0 0 0 seen for a few NEX-5N images
8884
8907
  # 2 2 0 0 seen for a few NEX-5N/7 images with LA-EA2 adapter
@@ -9388,6 +9411,7 @@ my %isoSetting2010 = (
9388
9411
  WRITE_PROC => \&WriteEnciphered,
9389
9412
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
9390
9413
  FORMAT => 'int8u',
9414
+ NOTES => 'Valid for the ILCE-7SM3.',
9391
9415
  FIRST_ENTRY => 0,
9392
9416
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
9393
9417
  0x0000 => { Name => 'Tag9416_0000', PrintConv => 'sprintf("%3d",$val)', RawConv => '$$self{TagVersion} = $val' },