exiftool_vendored 12.14.0 → 12.18.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.

@@ -36,7 +36,7 @@ use strict;
36
36
  use vars qw($VERSION $AUTOLOAD %stdCase);
37
37
  use Image::ExifTool qw(:DataAccess :Utils);
38
38
 
39
- $VERSION = '1.55';
39
+ $VERSION = '1.56';
40
40
 
41
41
  sub ProcessPNG_tEXt($$$);
42
42
  sub ProcessPNG_iTXt($$$);
@@ -1422,8 +1422,16 @@ sub ProcessPNG($$)
1422
1422
  next;
1423
1423
  }
1424
1424
  if ($datChunk) {
1425
- # skip over data chunks if possible
1426
- unless ($verbose or $validate or $outfile) {
1425
+ my $chunkSizeLimit = 10000000; # largest chunk to read into memory
1426
+ if ($outfile) {
1427
+ # avoid loading very large data chunks into memory
1428
+ if ($len > $chunkSizeLimit) {
1429
+ Write($outfile, $hbuf) or $err = 1;
1430
+ Image::ExifTool::CopyBlock($raf, $outfile, $len+4) or $et->Error("Error copying $datChunk");
1431
+ next;
1432
+ }
1433
+ # skip over data chunks if possible/necessary
1434
+ } elsif (not $validate or $len > $chunkSizeLimit) {
1427
1435
  $raf->Seek($len + 4, 1) or $et->Warn('Seek error'), last;
1428
1436
  next;
1429
1437
  }
@@ -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.56';
50
+ $VERSION = '2.58';
51
51
 
52
52
  sub ProcessMOV($$;$);
53
53
  sub ProcessKeys($$$);
@@ -258,11 +258,15 @@ my %unknownInfo = (
258
258
  Unknown => 1,
259
259
  ValueConv => '$val =~ /^([\x20-\x7e]*)\0*$/ ? $1 : \$val',
260
260
  );
261
+
262
+ # multi-language text with 6-byte header
263
+ my %langText = ( IText => 6 );
264
+
261
265
  # parsing for most of the 3gp udta language text boxes
262
- my %langText = (
266
+ my %langText3gp = (
263
267
  Notes => 'used in 3gp videos',
264
- IText => 6,
265
268
  Avoid => 1,
269
+ IText => 6,
266
270
  );
267
271
 
268
272
  # 4-character Vendor ID codes (ref PH)
@@ -424,7 +428,6 @@ my %eeBox = (
424
428
  # (note: vide is only processed if specific atoms exist in the VideoSampleDesc)
425
429
  vide => { %eeStd,
426
430
  JPEG => 'stsd',
427
- # avcC => 'stsd', # (uncomment to parse H264 stream)
428
431
  },
429
432
  text => { %eeStd },
430
433
  meta => { %eeStd },
@@ -434,6 +437,10 @@ my %eeBox = (
434
437
  ctbx => { %eeStd }, # (GM cars)
435
438
  '' => { 'gps ' => 'moov', 'GPS ' => 'main' }, # (no handler -- in top level 'moov' box, and main)
436
439
  );
440
+ # boxes to save when ExtractEmbedded is set to 2 or higher
441
+ my %eeBox2 = (
442
+ vide => { avcC => 'stsd' }, # (parses H264 video stream)
443
+ );
437
444
 
438
445
  # QuickTime atoms
439
446
  %Image::ExifTool::QuickTime::Main = (
@@ -1542,15 +1549,15 @@ my %eeBox = (
1542
1549
  # the following are 3gp tags, references:
1543
1550
  # http://atomicparsley.sourceforge.net
1544
1551
  # http://www.3gpp.org/ftp/tsg_sa/WG4_CODEC/TSGS4_25/Docs/
1545
- # (note that all %langText tags are Avoid => 1)
1546
- cprt => { Name => 'Copyright', %langText, Groups => { 2 => 'Author' } },
1547
- auth => { Name => 'Author', %langText, Groups => { 2 => 'Author' } },
1548
- titl => { Name => 'Title', %langText },
1549
- dscp => { Name => 'Description',%langText },
1550
- perf => { Name => 'Performer', %langText },
1551
- gnre => { Name => 'Genre', %langText },
1552
- albm => { Name => 'Album', %langText },
1553
- coll => { Name => 'CollectionName', %langText }, #17
1552
+ # (note that all %langText3gp tags are Avoid => 1)
1553
+ cprt => { Name => 'Copyright', %langText3gp, Groups => { 2 => 'Author' } },
1554
+ auth => { Name => 'Author', %langText3gp, Groups => { 2 => 'Author' } },
1555
+ titl => { Name => 'Title', %langText3gp },
1556
+ dscp => { Name => 'Description',%langText3gp },
1557
+ perf => { Name => 'Performer', %langText3gp },
1558
+ gnre => { Name => 'Genre', %langText3gp },
1559
+ albm => { Name => 'Album', %langText3gp },
1560
+ coll => { Name => 'CollectionName', %langText3gp }, #17
1554
1561
  rtng => {
1555
1562
  Name => 'Rating',
1556
1563
  # (4-byte flags, 4-char entity, 4-char criteria, 2-byte lang, string)
@@ -1581,8 +1588,11 @@ my %eeBox = (
1581
1588
  },
1582
1589
  kywd => {
1583
1590
  Name => 'Keywords',
1584
- # (4 byte flags, 2-byte lang, 1-byte count, count x pascal strings)
1591
+ # (4 byte flags, 2-byte lang, 1-byte count, count x pascal strings, ref 17)
1592
+ # (but I have also seen a simple string written by iPhone)
1585
1593
  RawConv => q{
1594
+ my $sep = $self->Options('ListSep');
1595
+ return join($sep, split /\0+/, $val) unless $val =~ /^\0/; # (iPhone)
1586
1596
  return '<err>' unless length $val >= 7;
1587
1597
  my $lang = Image::ExifTool::QuickTime::UnpackLang(Get16u(\$val, 4));
1588
1598
  $lang = $lang ? "($lang) " : '';
@@ -1598,7 +1608,6 @@ my %eeBox = (
1598
1608
  push @vals, $v;
1599
1609
  $pos += $len;
1600
1610
  }
1601
- my $sep = $self->Options('ListSep');
1602
1611
  return $lang . join($sep, @vals);
1603
1612
  },
1604
1613
  },
@@ -2034,7 +2043,7 @@ my %eeBox = (
2034
2043
  SubDirectory => { TagTable => 'Image::ExifTool::Olympus::thmb' },
2035
2044
  },{ #17 (format is in bytes 3-7)
2036
2045
  Name => 'ThumbnailImage',
2037
- Condition => '$$valPt =~ /^.{8}\xff\xd8\xff\xdb/s',
2046
+ Condition => '$$valPt =~ /^.{8}\xff\xd8\xff[\xdb\xe0]/s',
2038
2047
  Groups => { 2 => 'Preview' },
2039
2048
  RawConv => 'substr($val, 8)',
2040
2049
  Binary => 1,
@@ -8884,7 +8893,7 @@ sub ProcessMOV($$;$)
8884
8893
  my $dirID = $$dirInfo{DirID} || '';
8885
8894
  my $charsetQuickTime = $et->Options('CharsetQuickTime');
8886
8895
  my ($buff, $tag, $size, $track, $isUserData, %triplet, $doDefaultLang, $index);
8887
- my ($dirEnd, $ee, $unkOpt, %saveOptions, $atomCount);
8896
+ my ($dirEnd, $unkOpt, %saveOptions, $atomCount);
8888
8897
 
8889
8898
  my $topLevel = not $$et{InQuickTime};
8890
8899
  $$et{InQuickTime} = 1;
@@ -8948,8 +8957,8 @@ sub ProcessMOV($$;$)
8948
8957
  }
8949
8958
  $$raf{NoBuffer} = 1 if $et->Options('FastScan'); # disable buffering in FastScan mode
8950
8959
 
8951
- if ($$et{OPTIONS}{ExtractEmbedded}) {
8952
- $ee = 1;
8960
+ my $ee = $$et{OPTIONS}{ExtractEmbedded};
8961
+ if ($ee) {
8953
8962
  $unkOpt = $$et{OPTIONS}{Unknown};
8954
8963
  require 'Image/ExifTool/QuickTimeStream.pl';
8955
8964
  }
@@ -9032,6 +9041,9 @@ sub ProcessMOV($$;$)
9032
9041
  } elsif ($handlerType ne 'vide' and not $$et{OPTIONS}{Validate}) {
9033
9042
  EEWarn($et);
9034
9043
  }
9044
+ } elsif ($ee and $ee > 1 and $eeBox2{$handlerType} and $eeBox2{$handlerType}{$tag}) {
9045
+ $eeTag = 1;
9046
+ $$et{OPTIONS}{Unknown} = 1;
9035
9047
  }
9036
9048
  my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag);
9037
9049
 
@@ -96,7 +96,7 @@ my %insvLimit = (
96
96
  NOTES => q{
97
97
  Timed metadata extracted from QuickTime media data and some AVI videos when
98
98
  the ExtractEmbedded option is used. Although most of these tags are
99
- combined into the single table below, ExifTool currently reads 46 different
99
+ combined into the single table below, ExifTool currently reads 49 different
100
100
  formats of timed GPS metadata from video files.
101
101
  },
102
102
  VARS => { NO_ID => 1 },
@@ -531,7 +531,10 @@ my %insvLimit = (
531
531
  PROCESS_PROC => \&Process_tx3g,
532
532
  GROUPS => { 2 => 'Location' },
533
533
  FIRST_ENTRY => 0,
534
- NOTES => 'Tags extracted from the tx3g sbtl timed metadata of Yuneec drones.',
534
+ NOTES => q{
535
+ Tags extracted from the tx3g sbtl timed metadata of Yuneec drones, and
536
+ subtitle text in some other videos.
537
+ },
535
538
  Lat => {
536
539
  Name => 'GPSLatitude',
537
540
  RawConv => '$$self{FoundGPSLatitude} = 1; $val',
@@ -552,6 +555,11 @@ my %insvLimit = (
552
555
  GimYaw => 'GimbalYaw',
553
556
  GimPitch => 'GimbalPitch',
554
557
  GimRoll => 'GimbalRoll',
558
+ DateTime => { # for date/time-format subtitle text
559
+ Groups => { 2 => 'Time' },
560
+ PrintConv => '$self->ConvertDateTime($val)',
561
+ },
562
+ Text => { Groups => { 2 => 'Other' } },
555
563
  );
556
564
 
557
565
  %Image::ExifTool::QuickTime::INSV_MakerNotes = (
@@ -1195,6 +1203,10 @@ sub ProcessSamples($)
1195
1203
  $pos += $hdrLen + $len;
1196
1204
  last if $pos + $hdrLen >= length($buff);
1197
1205
  }
1206
+ if ($$et{GotNAL06}) {
1207
+ my $eeOpt = $et->Options('ExtractEmbedded');
1208
+ last unless $eeOpt and $eeOpt > 2;
1209
+ }
1198
1210
  next;
1199
1211
  }
1200
1212
  if ($verbose > 1) {
@@ -1981,7 +1993,13 @@ sub Process_tx3g($$$)
1981
1993
  my $dataPt = $$dirInfo{DataPt};
1982
1994
  return 0 if length $$dataPt < 2;
1983
1995
  pos($$dataPt) = 2; # skip 2-byte length word
1984
- $et->HandleTag($tagTablePtr, $1, $2) while $$dataPt =~ /(\w+):([^:]*[^:\s])(\s|$)/sg;
1996
+ $et->VerboseDir('tx3g', undef, length($$dataPt)-2);
1997
+ $et->HandleTag($tagTablePtr, 'Text', substr($$dataPt, 2));
1998
+ if ($$dataPt =~ /^..\w{3} (\d{4})-(\d{2})-(\d{2}) (\d{2}:\d{2}:\d{2}) ?([-+])(\d{2}):?(\d{2})$/s) {
1999
+ $et->HandleTag($tagTablePtr, 'DateTime', "$1:$2:$3 $4$5$6:$7");
2000
+ } else {
2001
+ $et->HandleTag($tagTablePtr, $1, $2) while $$dataPt =~ /(\w+):([^:]*[^:\s])(\s|$)/sg;
2002
+ }
1985
2003
  return 1;
1986
2004
  }
1987
2005
 
@@ -2513,7 +2531,7 @@ sub ProcessInsta360($;$)
2513
2531
  $et->HandleTag($tagTbl, GPSTrack => $a[9]);
2514
2532
  $et->HandleTag($tagTbl, GPSTrackRef => 'T');
2515
2533
  $et->HandleTag($tagTbl, GPSAltitude => $a[10]);
2516
- $et->HandleTag($tagTbl, Unknown02 => "@a[1,2]") if $unknown;
2534
+ $et->HandleTag($tagTbl, Unknown02 => "@a[1,2]") if $unknown; # millisecond counter (https://exiftool.org/forum/index.php?topic=9884.msg65143#msg65143)
2517
2535
  }
2518
2536
  }
2519
2537
  } elsif ($id == 0x101) {
@@ -62,10 +62,11 @@ key:
62
62
  information about the source directory for tags to be copied to the output.
63
63
 
64
64
  CHECK_PROC : Reference to a function which validates Raw values for writing.
65
- The function takes three arguments: 0) ExifTool object reference, 1) tagInfo
66
- reference, 2) value reference, and returns undefined (and possibly modifies
67
- the input value) if successful, or an error message if there was a format
68
- problem. May set ExifTool CHECK_WARN datamember for success with a warning.
65
+ The function takes 3-4 arguments: 0) ExifTool object reference, 1) tagInfo
66
+ reference, 2) value reference, and 3) [optional] conversion type. It returns
67
+ undefined (and possibly modifies the input value) if successful, or an error
68
+ message if there was a format problem. May set ExifTool CHECK_WARN datamember
69
+ for success with a warning.
69
70
 
70
71
  INIT_TABLE : Routine called to do any necessary initialization before the
71
72
  first time the table is loaded. Argument is a reference to the table.
@@ -29,7 +29,7 @@ use strict;
29
29
  use vars qw($VERSION);
30
30
  use Image::ExifTool qw(:DataAccess :Utils);
31
31
 
32
- $VERSION = '1.56';
32
+ $VERSION = '1.57';
33
33
 
34
34
  sub ConvertTimecode($);
35
35
  sub ProcessSGLT($$$);
@@ -1261,24 +1261,25 @@ my %code2charset = (
1261
1261
  },
1262
1262
  );
1263
1263
 
1264
- # streamed USER txts written by some dashcam (ref PH)
1264
+ # streamed USER txts written by Momento M6 dashcam (ref PH)
1265
1265
  %Image::ExifTool::RIFF::UserText = (
1266
1266
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
1267
1267
  GROUPS => { 2 => 'Location' },
1268
1268
  NOTES => q{
1269
- Tags decoded from the USER-format txts stream written by an unknown dashcam.
1269
+ Tags decoded from the USER-format txts stream written by Momento M6 dashcam.
1270
1270
  Extracted only if the ExtractEmbedded option is used.
1271
1271
  },
1272
- # 0 - int32u: 0
1272
+ # (little-endian)
1273
+ # 0 - int32u: 32
1273
1274
  # 4 - int32u: sample number (starting from unknown offset)
1274
- # 8 - int8u[4]: "0 x y z" ? (z mostly 5-8)
1275
+ # 8 - int8u[4]: "w x y z" ? (w 0=front cam, 1=rear cam, z mostly 5-8)
1275
1276
  # 12 - int8u[4]: "0 x 1 0" ? (x incrementing once per second)
1276
1277
  # 16 - int8u[4]: "0 32 0 x" ?
1277
1278
  # 20 - int32u: 100-150(mostly), 250-300(once per second)
1278
1279
  # 24 - int8u[4]: "0 x y 0" ?
1279
1280
  28 => { Name => 'GPSAltitude', Format => 'int32u', ValueConv => '$val / 10' }, # (NC)
1280
1281
  # 32 - int32u: 0(mostly), 23(once per second)
1281
- # 36 - int32u: 1
1282
+ # 36 - int32u: 0
1282
1283
  40 => { Name => 'Accelerometer', Format => 'float[3]' },
1283
1284
  # 52 - int32u: 1
1284
1285
  56 => { Name => 'GPSSpeed', Format => 'float' }, # km/h
@@ -1891,7 +1892,7 @@ sub ProcessRIFF($$)
1891
1892
  $$et{DOC_NUM} = ++$$et{DOC_COUNT};
1892
1893
  }
1893
1894
  my $tagInfo = $$tagTbl{$tag};
1894
- if ($tagInfo or (($verbose or $unknown) and $tag !~ /^(data|idx1|LIST_movi|RIFF)$/)) {
1895
+ if ($tagInfo or (($verbose or $unknown) and $tag !~ /^(data|idx1|LIST_movi|RIFF|\d{2}(db|dc|wb))$/)) {
1895
1896
  $raf->Read($buff, $len2) == $len2 or $err=1, last;
1896
1897
  my $setGroups;
1897
1898
  if ($tagInfo and ref $tagInfo eq 'HASH' and $$tagInfo{SetGroups}) {
@@ -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.34';
37
+ $VERSION = '3.36';
38
38
 
39
39
  sub ProcessSRF($$$);
40
40
  sub ProcessSR2($$$);
@@ -71,8 +71,8 @@ sub PrintInvLensSpec($;$$);
71
71
  '0.12' => 'Zeiss Loxia 35mm F2', # (firmware Ver.01)
72
72
  1 => 'Sony LA-EA1 or Sigma MC-11 Adapter', # MC-11 with not-supported lenses
73
73
  2 => 'Sony LA-EA2 Adapter',
74
- 3 => 'Sony LA-EA3 Adapter', #(NC) ILCE-7 image with A-mount lens, but also has 0x940e 2nd byte=2
75
- 6 => 'Sony LA-EA4 Adapter', #(NC) ILCE-7R image with A-mount lens and having phase-detect info blocks in 0x940e AFInfo
74
+ 3 => 'Sony LA-EA3 Adapter',
75
+ 6 => 'Sony LA-EA4 Adapter',
76
76
  7 => 'Sony LA-EA5 Adapter', #JR
77
77
  # 27 => Venus Optics Laowa 12mm f2.8 Zero-D or 105mm f2 (T3.2) Smooth Trans Focus (ref IB)
78
78
  44 => 'Metabones Canon EF Smart Adapter', #JR
@@ -80,6 +80,7 @@ sub PrintInvLensSpec($;$$);
80
80
  184 => 'Metabones Canon EF Speed Booster Ultra', #JR ('Green' mode, LensMount reported as A-mount)
81
81
  234 => 'Metabones Canon EF Smart Adapter Mark IV', #JR (LensMount reported as A-mount)
82
82
  239 => 'Metabones Canon EF Speed Booster', #JR
83
+ 24593 => 'LA-EA4r MonsterAdapter',
83
84
  # Sony VX product code: (http://www.mi-fo.de/forum/index.php?s=7df1c8d3b1cd675f2abf4f4442e19cf2&showtopic=35035&view=findpost&p=303746)
84
85
  32784 => 'Sony E 16mm F2.8', # VX9100
85
86
  32785 => 'Sony E 18-55mm F3.5-5.6 OSS', # VX9101
@@ -146,6 +147,7 @@ sub PrintInvLensSpec($;$$);
146
147
  32859 => 'Sony FE 20mm F1.8 G', #IB/JR
147
148
  32860 => 'Sony FE 12-24mm F2.8 GM', #JR/IB
148
149
  32864 => 'Sony FE 28-60mm F4-5.6', #JR
150
+ 32865 => 'Sony FE 35mm F1.4 GM', #IB/JR
149
151
 
150
152
  # (comment this out so LensID will report the LensModel, which is more useful)
151
153
  # 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
@@ -185,6 +187,7 @@ sub PrintInvLensSpec($;$$);
185
187
  49462 => 'Tamron 70-180mm F2.8 Di III VXD', #JR (Model A056)
186
188
  49463 => 'Tamron 28-200mm F2.8-5.6 Di III RXD', #JR (Model A071)
187
189
  49464 => 'Tamron 70-300mm F4.5-6.3 Di III RXD', #JR (Model A047)
190
+ 49465 => 'Tamron 17-70mm F2.8 Di III-A VC RXD', #JR (Model B070)
188
191
  49473 => 'Tokina atx-m 85mm F1.8 FE', #JR
189
192
  49712 => 'Tokina FiRIN 20mm F2 FE AF', # (firmware Ver.01)
190
193
  49713 => 'Tokina FiRIN 100mm F2.8 FE MACRO', # (firmware Ver.01)
@@ -1536,7 +1539,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1536
1539
  # from mid-2015: ILCE-7RM2/7SM2/6300 and newer models use different offsets
1537
1540
  {
1538
1541
  Name => 'Tag9050a',
1539
- Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(6100|6300|6400|6500|6600|7C|7M3|7RM2|7RM3|7RM4|7SM2|7SM3|9|9M2)|ILCA-99M2|ZV-)/',
1542
+ Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(1|6100|6300|6400|6500|6600|7C|7M3|7RM2|7RM3|7RM4|7SM2|7SM3|9|9M2)|ILCA-99M2|ZV-)/',
1540
1543
  SubDirectory => {
1541
1544
  TagTable => 'Image::ExifTool::Sony::Tag9050a',
1542
1545
  ByteOrder => 'LittleEndian',
@@ -1550,7 +1553,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1550
1553
  },
1551
1554
  },{
1552
1555
  Name => 'Tag9050c',
1553
- Condition => '$$self{Model} =~ /^(ILCE-7SM3)/',
1556
+ Condition => '$$self{Model} =~ /^(ILCE-(1|7SM3))/',
1554
1557
  SubDirectory => {
1555
1558
  TagTable => 'Image::ExifTool::Sony::Tag9050c',
1556
1559
  ByteOrder => 'LittleEndian',
@@ -1570,8 +1573,8 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1570
1573
  # 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
1571
1574
  # 0x26 (e) for ILCE-6100/6400/6600/7M3/7RM3/9, DSC-RX0M2/RX10M4/RX100M5A/RX100M6/HX99
1572
1575
  # 0x28 (e) for ILCE-7RM4/9M2, DSC-RX100M7, ZV-1
1573
- # 0x31 (e) for ILCE-7SM3
1574
- # first byte decoded: 40, 204, 202, 27, 58, 62, 48, 215, 28 respectively
1576
+ # 0x31 (e) for ILCE-1, 7SM3
1577
+ # first byte decoded: 40, 204, 202, 27, 58, 62, 48, 215, 28, 106 respectively
1575
1578
  {
1576
1579
  Name => 'Tag9400a',
1577
1580
  Condition => q{
@@ -1955,6 +1958,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1955
1958
  380 => 'ZV-1', #JR
1956
1959
  381 => 'ILCE-7C', #JR
1957
1960
  383 => 'ILCE-7SM3',
1961
+ 384 => 'ILCE-1', #PH
1958
1962
  },
1959
1963
  },
1960
1964
  0xb020 => { #2
@@ -7786,7 +7790,7 @@ my %isoSetting2010 = (
7786
7790
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
7787
7791
  FORMAT => 'int8u',
7788
7792
  NOTES => q{
7789
- Valid from July 2020 for ILCE-7SM3.
7793
+ Valid from July 2020 for ILCE-1/7SM3.
7790
7794
  },
7791
7795
  WRITABLE => 1,
7792
7796
  FIRST_ENTRY => 0,
@@ -7847,13 +7851,12 @@ my %isoSetting2010 = (
7847
7851
  },
7848
7852
  0x0050 => {
7849
7853
  Name => 'ShutterCount2',
7850
- Condition => '(($$self{FlashFired} & 0x01) != 1) and ($$self{Model} =~ /^(ILCE-7SM3)/)',
7854
+ Condition => '($$self{FlashFired} & 0x01) != 1',
7851
7855
  Format => 'int32u',
7852
7856
  RawConv => '$val & 0x00ffffff',
7853
7857
  },
7854
7858
  0x0066 => { # appr. same value as Exif ExposureTime, but not valid in HDR-modes
7855
7859
  Name => 'SonyExposureTime',
7856
- Condition => '$$self{Model} =~ /^(ILCE-7SM3)/',
7857
7860
  Format => 'int16u',
7858
7861
  ValueConv => '$val ? 2 ** (16 - $val/256) : 0',
7859
7862
  ValueConvInv => '$val ? int((16 - log($val) / log(2)) * 256 + 0.5) : 0',
@@ -7862,7 +7865,6 @@ my %isoSetting2010 = (
7862
7865
  },
7863
7866
  0x0068 => { # appr. same value as Exif ExposureTime, but not valid in HDR-modes
7864
7867
  Name => 'SonyFNumber',
7865
- Condition => '$$self{Model} =~ /^(ILCE-7SM3)/',
7866
7868
  Format => 'int16u',
7867
7869
  ValueConv => '2 ** (($val/256 - 16) / 2)',
7868
7870
  ValueConvInv => '(log($val)*2/log(2)+16)*256',
@@ -7871,7 +7873,6 @@ my %isoSetting2010 = (
7871
7873
  },
7872
7874
  0x006b => {
7873
7875
  Name => 'ReleaseMode2',
7874
- Condition => '$$self{Model} =~ /^(ILCE-7SM3)/',
7875
7876
  %releaseMode2,
7876
7877
  },
7877
7878
  0x0088 => {
@@ -8050,7 +8051,7 @@ my %isoSetting2010 = (
8050
8051
  NOTES => q{
8051
8052
  Valid for DSC-HX60V/HX80/HX90V/HX99/HX350/HX400V/QX30/RX0/RX1RM2/RX10/
8052
8053
  RX10M2/RX10M3/RX10M4/RX100M3/RX100M4/RX100M5/RX100M5A/RX100M6/RX100M7/WX220/
8053
- WX350/WX500, ILCE-7/7C/7R/7S/7M2/7M3/7RM2/7RM3/7RM4/7SM2/7SM3/9/9M2/5000/
8054
+ WX350/WX500, ILCE-1/7/7C/7R/7S/7M2/7M3/7RM2/7RM3/7RM4/7SM2/7SM3/9/9M2/5000/
8054
8055
  5100/6000/6100/6300/6400/6500/6600/QX1, ILCA-68/77M2/99M2.
8055
8056
  },
8056
8057
  FIRST_ENTRY => 0,
@@ -8107,7 +8108,7 @@ my %isoSetting2010 = (
8107
8108
  },
8108
8109
  0x002a => {
8109
8110
  Name => 'Quality2',
8110
- Condition => '$$self{Model} !~ /^(ILCE-7SM3)\b/',
8111
+ Condition => '$$self{Model} !~ /^(ILCE-(1|7SM3))\b/',
8111
8112
  PrintConv => {
8112
8113
  0 => 'JPEG',
8113
8114
  1 => 'RAW',
@@ -8117,13 +8118,13 @@ my %isoSetting2010 = (
8117
8118
  },
8118
8119
  0x0047 => {
8119
8120
  Name => 'SonyImageHeight',
8120
- Condition => '$$self{Model} !~ /^(ILCE-7SM3)\b/',
8121
+ Condition => '$$self{Model} !~ /^(ILCE-(1|7SM3))\b/',
8121
8122
  Format => 'int16u',
8122
8123
  PrintConv => '$val > 0 ? 8*$val : "n.a."',
8123
8124
  },
8124
8125
  0x0053 => {
8125
8126
  Name => 'ModelReleaseYear',
8126
- Condition => '$$self{Model} !~ /^(ILCE-7SM3)\b/',
8127
+ Condition => '$$self{Model} !~ /^(ILCE-(1|7SM3))\b/',
8127
8128
  Format => 'int8u',
8128
8129
  PrintConv => 'sprintf("20%.2d", $val)',
8129
8130
  },
@@ -8142,7 +8143,7 @@ my %isoSetting2010 = (
8142
8143
  0x0000 => { Name => 'Ver9401', Hidden => 1, RawConv => '$$self{Ver9401} = $val; $$self{OPTIONS}{Unknown}<2 ? undef : $val' },
8143
8144
 
8144
8145
  0x0498 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 148', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
8145
- 0x04a1 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 160', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
8146
+ 0x04a1 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(160|164)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
8146
8147
  0x04a2 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(152|154|155)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
8147
8148
  0x059d => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(144|146)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
8148
8149
  0x0634 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 68', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
@@ -8900,6 +8901,7 @@ my %isoSetting2010 = (
8900
8901
  # 1 0 0 0 for ILCE-5000/5100/6000/7/7M2/7R/7S/QX1
8901
8902
  # 6 0 0 0 for ILCE-6100/6300/6400/6500/6600/7C/7M3/7RM2/7RM3/7RM4/7SM2/9/9M2
8902
8903
  # 9 . . . for ILCE-7SM3
8904
+ # 11 . . . for ILCE-1
8903
8905
  # 0 2 0 0 for NEX/ILCE with LA-EA2/EA4 Phase-AF adapter
8904
8906
  # 2 0 0 0 seen for a few NEX-5N images
8905
8907
  # 2 2 0 0 seen for a few NEX-5N/7 images with LA-EA2 adapter
@@ -9409,7 +9411,7 @@ my %isoSetting2010 = (
9409
9411
  WRITE_PROC => \&WriteEnciphered,
9410
9412
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
9411
9413
  FORMAT => 'int8u',
9412
- NOTES => 'Valid for the ILCE-7SM3.',
9414
+ NOTES => 'Valid for the ILCE-1/7SM3.',
9413
9415
  FIRST_ENTRY => 0,
9414
9416
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
9415
9417
  0x0000 => { Name => 'Tag9416_0000', PrintConv => 'sprintf("%3d",$val)', RawConv => '$$self{TagVersion} = $val' },