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

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