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

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' },