exiftool_vendored 12.32.0 → 12.36.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +77 -3
  3. data/bin/META.json +1 -1
  4. data/bin/META.yml +1 -1
  5. data/bin/README +2 -2
  6. data/bin/exiftool +57 -39
  7. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -2
  8. data/bin/lib/Image/ExifTool/CBOR.pm +85 -31
  9. data/bin/lib/Image/ExifTool/Canon.pm +28 -3
  10. data/bin/lib/Image/ExifTool/Charset.pm +2 -0
  11. data/bin/lib/Image/ExifTool/Exif.pm +109 -3
  12. data/bin/lib/Image/ExifTool/FLIR.pm +33 -8
  13. data/bin/lib/Image/ExifTool/ICC_Profile.pm +96 -4
  14. data/bin/lib/Image/ExifTool/JSON.pm +4 -2
  15. data/bin/lib/Image/ExifTool/Jpeg2000.pm +111 -12
  16. data/bin/lib/Image/ExifTool/MacOS.pm +2 -2
  17. data/bin/lib/Image/ExifTool/Nikon.pm +637 -16
  18. data/bin/lib/Image/ExifTool/NikonCustom.pm +5 -1
  19. data/bin/lib/Image/ExifTool/NikonSettings.pm +67 -11
  20. data/bin/lib/Image/ExifTool/Olympus.pm +5 -1
  21. data/bin/lib/Image/ExifTool/PDF.pm +5 -3
  22. data/bin/lib/Image/ExifTool/QuickTime.pm +21 -2
  23. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +2 -2
  24. data/bin/lib/Image/ExifTool/README +6 -2
  25. data/bin/lib/Image/ExifTool/Sony.pm +31 -11
  26. data/bin/lib/Image/ExifTool/TagInfoXML.pm +9 -4
  27. data/bin/lib/Image/ExifTool/TagLookup.pm +5054 -4455
  28. data/bin/lib/Image/ExifTool/TagNames.pod +1185 -23
  29. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +10 -0
  30. data/bin/lib/Image/ExifTool/Writer.pl +45 -3
  31. data/bin/lib/Image/ExifTool/XMP.pm +111 -25
  32. data/bin/lib/Image/ExifTool/XMP2.pl +3 -1
  33. data/bin/lib/Image/ExifTool.pm +83 -19
  34. data/bin/lib/Image/ExifTool.pod +9 -1
  35. data/bin/perl-Image-ExifTool.spec +1 -1
  36. data/lib/exiftool_vendored/version.rb +1 -1
  37. metadata +2 -2
@@ -15,7 +15,7 @@ package Image::ExifTool::NikonCustom;
15
15
  use strict;
16
16
  use vars qw($VERSION);
17
17
 
18
- $VERSION = '1.17';
18
+ $VERSION = '1.18';
19
19
 
20
20
  my %offOn = ( 0 => 'Off', 1 => 'On' );
21
21
  my %onOff = ( 0 => 'On', 1 => 'Off' );
@@ -3358,6 +3358,8 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
3358
3358
  47 => 'AF-Area Mode + AF-On (Auto Area AF)',
3359
3359
  49 => 'Sync Release (Master Only)',
3360
3360
  50 => 'Sync Release (Remote Only)',
3361
+ 58 => 'AF-Area Mode + AF-On (Group Area AF - HL)',
3362
+ 59 => 'AF-Area Mode + AF-On (Group Area AF - VL)',
3361
3363
  },
3362
3364
  },
3363
3365
  15.1 => { # CSf1-a
@@ -3401,6 +3403,8 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
3401
3403
  47 => 'AF-Area Mode + AF-On (Auto Area AF)',
3402
3404
  49 => 'Sync Release (Master Only)',
3403
3405
  50 => 'Sync Release (Remote Only)',
3406
+ 58 => 'AF-Area Mode + AF-On (Group Area AF - HL)',
3407
+ 59 => 'AF-Area Mode + AF-On (Group Area AF - VL)',
3404
3408
  },
3405
3409
  },
3406
3410
  16.1 => { # CSf1-p
@@ -17,7 +17,7 @@ use strict;
17
17
  use vars qw($VERSION);
18
18
  use Image::ExifTool qw(:DataAccess :Utils);
19
19
 
20
- $VERSION = '1.04';
20
+ $VERSION = '1.05';
21
21
 
22
22
  sub ProcessNikonSettings($$$);
23
23
 
@@ -545,15 +545,7 @@ my %infoD6 = (
545
545
  %infoZ72,
546
546
  }],
547
547
  0x00e => { Name => 'MovieISOAutoControlManualMode',PrintConv => \%onOff }, # (D6/Z7_2)
548
- # 0x00f => [{ # this tag should reside here, but unable to confirm
549
- # Name => 'MovieISOAutoManualMode',
550
- # PrintConv => \%iSOAutoHiLimitD6,
551
- # %infoD6,
552
- # },{
553
- # Name => 'MovieISOAutoManualMode',
554
- # PrintConv => \%iSOAutoHiLimitZ7m2,
555
- # %infoZ72,
556
- # }],
548
+ 0x00f => { Name => 'MovieWhiteBalanceSameAsPhoto', PrintConv => \%yesNo }, # (D6/Z7_2)
557
549
  0x01d => [{ # CSa1 (D6)
558
550
  Name => 'AF-CPrioritySel',
559
551
  PrintConv => { # valid for cameras with 4 options for CS1, otherwise 1=Release, 2=Focus
@@ -978,6 +970,26 @@ my %infoD6 = (
978
970
  %infoZ72,
979
971
  }],
980
972
  0x074 => { Name => 'FlickAdvanceDirection', PrintConv => { 1 => 'Right to Left', 2 => 'Left to Right' } }, # CSf12-3 (D6)
973
+ 0x075 => { # Settings menu # (D6,Z7_2)
974
+ Name => 'HDMIOutputResolution',
975
+ PrintConv => {
976
+ 1 => 'Auto',
977
+ 2 => '2160p',
978
+ 3 => '1080p',
979
+ 4 => '1080i)',
980
+ 5 => '720p',
981
+ 6 => '576p',
982
+ 7 => '480p',
983
+ },
984
+ },
985
+ 0x077 => { # Settings menu # (D6,Z7_2)
986
+ Name => 'HDMIOutputRange',
987
+ PrintConv => {
988
+ 1 => 'Auto',
989
+ 2 => 'Limit',
990
+ 3 => 'Full',
991
+ },
992
+ },
981
993
  0x080 => [{
982
994
  Name => 'RemoteFuncButton',
983
995
  PrintConv => {
@@ -1051,6 +1063,7 @@ my %infoD6 = (
1051
1063
  8 => '180',
1052
1064
  },
1053
1065
  },
1066
+ 0x092 => { Name => 'HDMIExternalRecorder', PrintConv => \%onOff }, # Settings Menu/HDMI/Advanced entry (D6 & Z7_2)
1054
1067
  0x093 => { # CSa3-a (D6), CSa3 (Z7_2)
1055
1068
  Name => 'BlockShotAFResponse',
1056
1069
  PrintConv => {
@@ -1549,6 +1562,28 @@ my %infoD6 = (
1549
1562
  0x0fb => { Name => 'SecondarySlotFunction', PrintConv => \%tagSecondarySlotFunction }, # (D6)
1550
1563
  0x0fc => { Name => 'SilentPhotography', PrintConv => \%onOff }, # (D6,Z7_2) # tag is associated with Silent LiveView Photography (as distinguisehed from Silent Interval or Silent Focus Shift)
1551
1564
  0x0fd => { Name => 'ExtendedShutterSpeeds', PrintConv => \%onOff }, # CSd7 (D6), CSd6 (Z7_2)
1565
+ 0x102 => { # (Z7_2)
1566
+ Name => 'HDMIBitDepth',
1567
+ RawConv => '$$self{HDMIBitDepth} = $val',
1568
+ PrintConv => {
1569
+ 1 => '8 Bit',
1570
+ 2 => '10 Bit',
1571
+ },
1572
+ },
1573
+ 0x103 => { # (Z7_2)
1574
+ Name => 'HDMIOutputHDR',
1575
+ Condition => '$$self{HDMIBitDepth} == 2', # HDR(HLC) output option only available only for 10 bit
1576
+ RawConv => '$$self{HDMIOutputHDR} = $val',
1577
+ PrintConv => {
1578
+ 2 => 'On', # unusual decode perhaps due to sharing sub-menu with tag HDMIOutputN-Log?
1579
+ 3 => 'Off',
1580
+ },
1581
+ },
1582
+ 0x104 => { # valid for 10 bit with either N-Log or HDR/HLG selected (Z7_2)
1583
+ Name => 'HDMIViewAssist',
1584
+ Condition => '$$self{HDMIBitDepth} == 2',
1585
+ PrintConv => \%onOff
1586
+ },
1552
1587
  0x109 => { # (D6,Z7_2)
1553
1588
  Name => 'BracketSet',
1554
1589
  RawConv => '$$self{BracketSet} = $val',
@@ -1640,6 +1675,11 @@ my %infoD6 = (
1640
1675
  8 => 'Off, Low, Normal, High, Extra High',
1641
1676
  },
1642
1677
  },
1678
+ 0x10e => { # (D6/Z7_2)
1679
+ Name => 'MonitorBrightness',
1680
+ # settings: -5 to +5
1681
+ ValueConv => '$val - 6',
1682
+ },
1643
1683
  0x116 => { Name => 'GroupAreaC1', PrintConv =>\%groupAreaCustom }, # CSa10-a (new with D6) # (D6)
1644
1684
  0x117 => { Name => 'AutoAreaAFStartingPoint', PrintConv => \%enableDisable }, # CSa12 (D6)
1645
1685
  0x118 => { Name => 'FocusPointPersistence', PrintConv => { 1 => 'Auto', 2 => 'Off' } }, # CSa13 (new with D6) # (D6)
@@ -1823,8 +1863,9 @@ my %infoD6 = (
1823
1863
  },
1824
1864
  },
1825
1865
  0x151 => { Name => 'LensFunc2Button', PrintConv => \%lensFuncButtonZ7m2 }, # CSf2-h (Z7_2)
1866
+ #0x153 => { Name => 'ViewfinderBrightness', } #(Z7_2) # commented out to reduce output volume. Range [-5,+5]. PrintConv matches MonitorBrightness.
1826
1867
  0x158 => { Name => 'USBPowerDelivery', PrintConv => \%enableDisable }, # (Z7_2)
1827
- 0x15b => { Name => 'GroupAreaC2', PrintConv =>\%groupAreaCustom }, # CSa10-b (new with D6) # (D6)
1868
+ 0x159 => { Name => 'EnergySavingMode', PrintConv =>\%onOff }, # (Z7_2)
1828
1869
  0x15c => { Name => 'BracketingBurstOptions',PrintConv => \%enableDisable }, # CSe9 (D6)
1829
1870
  # 0x15d => CSf3-j-2 (D6) 'Same as Multi-Selector with Info(U/D) & Playback(R/L)' and 'Same as Multi-Selector with Info(R/L) & Playback(U/D)' (skipped to reduce volume of output)
1830
1871
  0x15e => { Name => 'PrimarySlot', PrintConv => { 1 => 'CFexpress/XQD Card', 2 => 'SD Card' } }, # (Z7_2)
@@ -1900,10 +1941,12 @@ my %infoD6 = (
1900
1941
  13 => 'None',
1901
1942
  },
1902
1943
  },
1944
+ #0x168 => { Name => 'ControlPanelBrightness', # (Z7_2) #commented to reduce output volume
1903
1945
  0x169 => { Name => 'LimitAF-AreaModeSelAutoPeople', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-h (Z7_2)
1904
1946
  0x16a => { Name => 'LimitAF-AreaModeSelAutoAnimals', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-h (Z7_2)
1905
1947
  0x16b => { Name => 'LimitAF-AreaModeSelWideLPeople', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-e (Z7_2)
1906
1948
  0x16c => { Name => 'LimitAF-AreaModeSelWideLAnimals', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-f (Z7_2)
1949
+ 0x16d => { Name => 'SaveFocus', PrintConv => \%onOff }, # (Z7_2)
1907
1950
  0x16e => { # (Z7_2)
1908
1951
  Name => 'AFAreaMode',
1909
1952
  RawConv => '$$self{AFAreaMode} = $val',
@@ -1919,6 +1962,19 @@ my %infoD6 = (
1919
1962
  10 => 'Auto (Animals)',
1920
1963
  },
1921
1964
  },
1965
+ 0x16f => { # (Z7_2)
1966
+ Name => 'MovieAFAreaMode',
1967
+ PrintConv => {
1968
+ 1 => 'Single-point',
1969
+ 2 => 'Wide (S)',
1970
+ 3 => 'Wide (L)',
1971
+ 4 => 'Wide (L-people)',
1972
+ 5 => 'Wide (L-animals)',
1973
+ 6 => 'Auto',
1974
+ 7 => 'Auto (People)',
1975
+ 8 => 'Auto (Animals)',
1976
+ },
1977
+ },
1922
1978
  0x170 => { Name => 'PreferSubSelectorCenter', PrintConv => \%offOn }, # CSf13 (D6 firmware v1.2.0)
1923
1979
  0x171 => { # CSb8 (D6 firmware v1.3.0)
1924
1980
  Name => 'KeepExposureWithTeleconverter',
@@ -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.74';
43
+ $VERSION = '2.75';
44
44
 
45
45
  sub PrintLensInfo($$$);
46
46
 
@@ -3609,6 +3609,10 @@ my %indexInfo = (
3609
3609
  Format => 'string[24]',
3610
3610
  Groups => { 2 => 'Time' },
3611
3611
  },
3612
+ 0x17f => {
3613
+ Name => 'LensModel',
3614
+ Format => 'string[32]'
3615
+ },
3612
3616
  );
3613
3617
 
3614
3618
  # yet a different "thmb" atom format (PH, E-M5)
@@ -21,7 +21,7 @@ use vars qw($VERSION $AUTOLOAD $lastFetched);
21
21
  use Image::ExifTool qw(:DataAccess :Utils);
22
22
  require Exporter;
23
23
 
24
- $VERSION = '1.53';
24
+ $VERSION = '1.54';
25
25
 
26
26
  sub FetchObject($$$$);
27
27
  sub ExtractObject($$;$$);
@@ -280,10 +280,12 @@ my %supportedFilter = (
280
280
  ConvertToDict => 1,
281
281
  },
282
282
  Cs1 => {
283
- SubDirectory => { TagTable => 'Image::ExifTool::PDF::ICCBased' },
283
+ SubDirectory => { TagTable => 'Image::ExifTool::PDF::DefaultRGB' },
284
+ ConvertToDict => 1, # (just in case)
284
285
  },
285
286
  CS0 => {
286
- SubDirectory => { TagTable => 'Image::ExifTool::PDF::ICCBased' },
287
+ SubDirectory => { TagTable => 'Image::ExifTool::PDF::DefaultRGB' },
288
+ ConvertToDict => 1, # (just in case)
287
289
  },
288
290
  );
289
291
 
@@ -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.69';
50
+ $VERSION = '2.72';
51
51
 
52
52
  sub ProcessMOV($$;$);
53
53
  sub ProcessKeys($$$);
@@ -482,6 +482,17 @@ my %eeBox2 = (
482
482
  # (Pittasoft Blackview dashcam MP4 videos)
483
483
  Condition => '$$valPt =~ /^\0\0..(cprt|sttm|ptnm|ptrh|thum|gps |3gf )/s',
484
484
  SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Pittasoft' },
485
+ },{
486
+ Name => 'ThumbnailImage',
487
+ # (DJI Zenmuse XT2 thermal camera)
488
+ Groups => { 2 => 'Preview' },
489
+ Condition => '$$valPt =~ /^.{4}mdat\xff\xd8\xff/s',
490
+ RawConv => q{
491
+ my $len = unpack('N', $val);
492
+ return undef if $len <= 8 or $len > length($val);
493
+ return substr($val, 8, $len-8);
494
+ },
495
+ Binary => 1,
485
496
  },{
486
497
  Unknown => 1,
487
498
  Binary => 1,
@@ -558,6 +569,7 @@ my %eeBox2 = (
558
569
  # *** this is where ExifTool writes XMP in MP4 videos (as per XMP spec) ***
559
570
  Condition => '$$valPt=~/^\xbe\x7a\xcf\xcb\x97\xa9\x42\xe8\x9c\x71\x99\x94\x91\xe3\xaf\xac/',
560
571
  WriteGroup => 'XMP', # (write main XMP tags here)
572
+ PreservePadding => 1,
561
573
  SubDirectory => {
562
574
  TagTable => 'Image::ExifTool::XMP::Main',
563
575
  Start => 16,
@@ -607,6 +619,7 @@ my %eeBox2 = (
607
619
  Name => 'PreviewImage',
608
620
  Condition => '$$valPt=~/^\xea\xf4\x2b\x5e\x1c\x98\x4b\x88\xb9\xfb\xb7\xdc\x40\x6e\x4d\x16/',
609
621
  Groups => { 2 => 'Preview' },
622
+ PreservePadding => 1,
610
623
  # 0x00 - undef[16]: UUID
611
624
  # 0x10 - int32u[2]: "0 1" (version and/or item count?)
612
625
  # 0x18 - int32u: PRVW atom size
@@ -9113,6 +9126,12 @@ sub ProcessMOV($$;$)
9113
9126
  } else {
9114
9127
  my $t = PrintableTagID($tag,2);
9115
9128
  $et->VPrint(0,"$$et{INDENT}Tag '${t}' extends to end of file");
9129
+ if ($$tagTablePtr{"$tag-size"}) {
9130
+ my $pos = $raf->Tell();
9131
+ $raf->Seek(0, 2);
9132
+ $et->HandleTag($tagTablePtr, "$tag-size", $raf->Tell() - $pos);
9133
+ $et->HandleTag($tagTablePtr, "$tag-offset", $pos) if $$tagTablePtr{"$tag-offset"};
9134
+ }
9116
9135
  }
9117
9136
  last;
9118
9137
  }
@@ -9419,7 +9438,7 @@ ItemID: foreach $id (keys %$items) {
9419
9438
  for (;;) {
9420
9439
  last if $pos + 16 > $size;
9421
9440
  my ($len, $type, $flags, $ctry, $lang) = unpack("x${pos}Na4Nnn", $val);
9422
- last if $pos + $len > $size;
9441
+ last if $pos + $len > $size or not $len;
9423
9442
  my ($value, $langInfo, $oldDir);
9424
9443
  my $format = $$tagInfo{Format};
9425
9444
  if ($type eq 'data' and $len >= 16) {
@@ -99,7 +99,7 @@ my %insvLimit = (
99
99
  The tags below are extracted from timed metadata in QuickTime and other
100
100
  formats of video files when the ExtractEmbedded option is used. Although
101
101
  most of these tags are combined into the single table below, ExifTool
102
- currently reads 57 different formats of timed GPS metadata from video files.
102
+ currently reads 58 different formats of timed GPS metadata from video files.
103
103
  },
104
104
  VARS => { NO_ID => 1 },
105
105
  GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
@@ -107,7 +107,7 @@ my %insvLimit = (
107
107
  GPSAltitude => { PrintConv => '(sprintf("%.4f", $val) + 0) . " m"' }, # round to 4 decimals
108
108
  GPSSpeed => { PrintConv => 'sprintf("%.4f", $val) + 0', Notes => 'in km/h unless GPSSpeedRef says otherwise' },
109
109
  GPSSpeedRef => { PrintConv => { K => 'km/h', M => 'mph', N => 'knots' } },
110
- GPSTrack => { PrintConv => 'sprintf("%.4f", $val) + 0', Notes => 'true north unless GPSTrackRef says otherwise' },
110
+ GPSTrack => { PrintConv => 'sprintf("%.4f", $val) + 0', Notes => 'relative to true north unless GPSTrackRef says otherwise' },
111
111
  GPSTrackRef => { PrintConv => { M => 'Magnetic North', T => 'True North' } },
112
112
  GPSDateTime => {
113
113
  Groups => { 2 => 'Time' },
@@ -450,6 +450,10 @@ numerical, and generated automatically otherwise.
450
450
  may be written if the tag already exists. By default, all
451
451
  MakerNotes tags are permanent unless otherwise specified.
452
452
 
453
+ 'PreservePadding' - [QuickTime only] flag to preserve the
454
+ original size of the QuickTime atom by padding with nulls when
455
+ writing with the QuickTimePad option.
456
+
453
457
  'PrintHex' - specifies that unknown PrintConv values should
454
458
  be printed in hex (eg. 'Unknown (0x1)'). Also causes
455
459
  numerical tag values to be printed in hex in the HTML tag name
@@ -474,9 +478,9 @@ numerical, and generated automatically otherwise.
474
478
  tags in IFD1 of JPEG images which default to priority 0.
475
479
 
476
480
  'Protected' - bit mask to protect tags from writing:
477
- Bit 0x01 indicates an 'unsafe' tag, which is not set via
481
+ Bit 0x01 indicates an 'Unsafe' tag, which is not set via
478
482
  SetNewValuesFromFile() unless specified explicitly.
479
- Bit 0x02 indicates a 'protected' tag, which should not be set
483
+ Bit 0x02 indicates a 'Protected' tag, which should not be set
480
484
  directly by the user.
481
485
 
482
486
  'PutFirst' - [EXIF only] flag to place this value before IFD0
@@ -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.45';
37
+ $VERSION = '3.48';
38
38
 
39
39
  sub ProcessSRF($$$);
40
40
  sub ProcessSR2($$$);
@@ -154,6 +154,7 @@ sub PrintInvLensSpec($;$$);
154
154
  32866 => 'Sony FE 24mm F2.8 G', #IB
155
155
  32867 => 'Sony FE 40mm F2.5 G', #IB
156
156
  32868 => 'Sony FE 50mm F2.5 G', #IB
157
+ 32874 => 'Sony FE 70-200mm F2.8 GM OSS II', #IB
157
158
 
158
159
  # (comment this out so LensID will report the LensModel, which is more useful)
159
160
  # 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
@@ -196,6 +197,9 @@ sub PrintInvLensSpec($;$$);
196
197
  49465 => 'Tamron 17-70mm F2.8 Di III-A VC RXD', #JR (Model B070)
197
198
  49466 => 'Tamron 150-500mm F5-6.7 Di III VC VXD', #JR (Model A057)
198
199
  49467 => 'Tamron 11-20mm F2.8 Di III-A RXD', #JR (Model B060)
200
+ 49468 => 'Tamron 18-300mm F3.5-6.3 Di III-A VC VXD', #JR (Model B061)
201
+ 49469 => 'Tamron 35-150mm F2-F2.8 Di III VXD', #JR (Model A058)
202
+ 49470 => 'Tamron 28-75mm F2.8 Di III VXD G2', #JR (Model A063)
199
203
 
200
204
  49473 => 'Tokina atx-m 85mm F1.8 FE or Viltrox lens', #JR
201
205
  49473.1 => 'Viltrox 23mm F1.4 E', #JR
@@ -239,7 +243,8 @@ sub PrintInvLensSpec($;$$);
239
243
  50528 => 'Sigma 35mm F1.4 DG DN | A', #IB/JR (021)
240
244
  50529 => 'Sigma 90mm F2.8 DG DN | C', #JR (021)
241
245
  50530 => 'Sigma 24mm F2 DG DN | C', #JR (021)
242
-
246
+ 50531 => 'Sigma 18-50mm F2.8 DC DN | C', #IB/JR (021)
247
+
243
248
  50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
244
249
  50993 => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB
245
250
  50994 => 'Voigtlander ULTRA WIDE-HELIAR 12mm F5.6 III', #IB
@@ -1578,6 +1583,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1578
1583
  65535 => 'n/a',
1579
1584
  },
1580
1585
  },
1586
+ # 0x203a - 0x2041: first seen October 2021 for ILCE-7M4
1581
1587
  0x3000 => {
1582
1588
  Name => 'ShotInfo',
1583
1589
  SubDirectory => { TagTable => 'Image::ExifTool::Sony::ShotInfo' },
@@ -1606,7 +1612,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1606
1612
  # from mid-2015: ILCE-7RM2/7SM2/6300 and newer models use different offsets
1607
1613
  {
1608
1614
  Name => 'Tag9050a',
1609
- Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(1|6100|6300|6400|6500|6600|7C|7M3|7RM2|7RM3A?|7RM4A?|7SM2|7SM3|9|9M2)|ILCA-99M2|ILME-FX3|ZV-)/',
1615
+ Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(1|6100|6300|6400|6500|6600|7C|7M3|7M4|7RM2|7RM3A?|7RM4A?|7SM2|7SM3|9|9M2)|ILCA-99M2|ILME-FX3|ZV-)/',
1610
1616
  SubDirectory => {
1611
1617
  TagTable => 'Image::ExifTool::Sony::Tag9050a',
1612
1618
  ByteOrder => 'LittleEndian',
@@ -1620,7 +1626,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
1620
1626
  },
1621
1627
  },{
1622
1628
  Name => 'Tag9050c',
1623
- Condition => '$$self{Model} =~ /^(ILCE-(1|7SM3)|ILME-FX3)/',
1629
+ Condition => '$$self{Model} =~ /^(ILCE-(1|7M4|7SM3)|ILME-FX3)/',
1624
1630
  SubDirectory => {
1625
1631
  TagTable => 'Image::ExifTool::Sony::Tag9050c',
1626
1632
  ByteOrder => 'LittleEndian',
@@ -2030,6 +2036,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
2030
2036
  385 => 'ILME-FX3', #JR
2031
2037
  386 => 'ILCE-7RM3A', #JR
2032
2038
  387 => 'ILCE-7RM4A', #forum12542
2039
+ 388 => 'ILCE-7M4', #IB/JR
2033
2040
  },
2034
2041
  },
2035
2042
  0xb020 => { #2
@@ -7952,7 +7959,7 @@ my %isoSetting2010 = (
7952
7959
  },
7953
7960
  0x0088 => {
7954
7961
  Name => 'InternalSerialNumber', #(NC)
7955
- Condition => '$$self{Model} =~ /^(ILCE-7SM3|ILME-FX3)/',
7962
+ Condition => '$$self{Model} =~ /^(ILCE-(7M4|7SM3)|ILME-FX3)/',
7956
7963
  Format => 'int8u[6]',
7957
7964
  PrintConv => 'unpack "H*", pack "C*", split " ", $val',
7958
7965
  },
@@ -8190,7 +8197,7 @@ my %isoSetting2010 = (
8190
8197
  },
8191
8198
  0x002a => [{
8192
8199
  Name => 'Quality2',
8193
- Condition => '$$self{Model} !~ /^(ILCE-(1|7SM3)|ILME-FX3)\b/',
8200
+ Condition => '$$self{Model} !~ /^(ILCE-(1|7M4|7SM3)|ILME-FX3)\b/',
8194
8201
  PrintConv => {
8195
8202
  0 => 'JPEG',
8196
8203
  1 => 'RAW',
@@ -8199,7 +8206,7 @@ my %isoSetting2010 = (
8199
8206
  },
8200
8207
  },{
8201
8208
  Name => 'Quality2',
8202
- Condition => '$$self{Model} =~ /^(ILCE-(1|7SM3)|ILME-FX3)\b/',
8209
+ Condition => '$$self{Model} =~ /^(ILCE-(1|7M4|7SM3)|ILME-FX3)\b/',
8203
8210
  PrintConv => {
8204
8211
  1 => 'JPEG',
8205
8212
  2 => 'RAW',
@@ -8210,13 +8217,13 @@ my %isoSetting2010 = (
8210
8217
  }],
8211
8218
  0x0047 => {
8212
8219
  Name => 'SonyImageHeight',
8213
- Condition => '$$self{Model} !~ /^(ILCE-(1|7SM3)|ILME-FX3)\b/',
8220
+ Condition => '$$self{Model} !~ /^(ILCE-(1|7M4|7SM3)|ILME-FX3)\b/',
8214
8221
  Format => 'int16u',
8215
8222
  PrintConv => '$val > 0 ? 8*$val : "n.a."',
8216
8223
  },
8217
8224
  0x0053 => {
8218
8225
  Name => 'ModelReleaseYear',
8219
- Condition => '$$self{Model} !~ /^(ILCE-(1|7SM3)|ILME-FX3)\b/',
8226
+ Condition => '$$self{Model} !~ /^(ILCE-(1|7M4|7SM3)|ILME-FX3)\b/',
8220
8227
  Format => 'int8u',
8221
8228
  PrintConv => 'sprintf("20%.2d", $val)',
8222
8229
  },
@@ -8231,10 +8238,11 @@ my %isoSetting2010 = (
8231
8238
  FIRST_ENTRY => 0,
8232
8239
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
8233
8240
  DATAMEMBER => [ 0 ],
8234
- IS_SUBDIR => [ 0x0498, 0x04a1, 0x04a2, 0x059d, 0x0634, 0x0636, 0x064c, 0x0653, 0x0678, 0x06b8, 0x06de, 0x06e7 ],
8241
+ IS_SUBDIR => [ 0x0498, 0x049d, 0x04a1, 0x04a2, 0x059d, 0x0634, 0x0636, 0x064c, 0x0653, 0x0678, 0x06b8, 0x06de, 0x06e7 ],
8235
8242
  0x0000 => { Name => 'Ver9401', Hidden => 1, RawConv => '$$self{Ver9401} = $val; $$self{OPTIONS}{Unknown}<2 ? undef : $val' },
8236
8243
 
8237
8244
  0x0498 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 148', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
8245
+ 0x049d => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 167', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
8238
8246
  0x04a1 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(160|164)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
8239
8247
  0x04a2 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(152|154|155)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
8240
8248
  0x059d => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(144|146)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
@@ -9503,7 +9511,7 @@ my %isoSetting2010 = (
9503
9511
  WRITE_PROC => \&WriteEnciphered,
9504
9512
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
9505
9513
  FORMAT => 'int8u',
9506
- NOTES => 'Valid for the ILCE-1/7SM3, ILME-FX3.',
9514
+ NOTES => 'Valid for the ILCE-1/7M4/7SM3, ILME-FX3.',
9507
9515
  FIRST_ENTRY => 0,
9508
9516
  GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
9509
9517
  0x0000 => { Name => 'Tag9416_0000', PrintConv => 'sprintf("%3d",$val)', RawConv => '$$self{TagVersion} = $val' },
@@ -9630,10 +9638,22 @@ my %isoSetting2010 = (
9630
9638
  },
9631
9639
  0x088f => {
9632
9640
  Name => 'VignettingCorrParams',
9641
+ Condition => '$$self{Model} !~ /^(ILCE-7M4)/',
9642
+ Format => 'int16s[16]',
9643
+ },
9644
+ 0x0891 => {
9645
+ Name => 'VignettingCorrParams',
9646
+ Condition => '$$self{Model} =~ /^(ILCE-7M4)/',
9633
9647
  Format => 'int16s[16]',
9634
9648
  },
9635
9649
  0x0914 => {
9636
9650
  Name => 'ChromaticAberrationCorrParams',
9651
+ Condition => '$$self{Model} !~ /^(ILCE-7M4)/',
9652
+ Format => 'int16s[32]',
9653
+ },
9654
+ 0x0916 => {
9655
+ Name => 'ChromaticAberrationCorrParams',
9656
+ Condition => '$$self{Model} =~ /^(ILCE-7M4)/',
9637
9657
  Format => 'int16s[32]',
9638
9658
  },
9639
9659
  );
@@ -15,7 +15,7 @@ use vars qw($VERSION @ISA $makeMissing);
15
15
  use Image::ExifTool qw(:Utils :Vars);
16
16
  use Image::ExifTool::XMP;
17
17
 
18
- $VERSION = '1.31';
18
+ $VERSION = '1.32';
19
19
  @ISA = qw(Exporter);
20
20
 
21
21
  # set this to a language code to generate Lang module with 'MISSING' entries
@@ -58,6 +58,12 @@ my %translateLang = (
58
58
  my $numbersFirst = 1; # set to -1 to sort numbers last, or 2 to put negative numbers last
59
59
  my $caseInsensitive; # used internally by sort routine
60
60
 
61
+ # write groups that don't represent real family 1 group names
62
+ my %fakeWriteGroup = (
63
+ Comment => 1, # (JPEG Comment)
64
+ colr => 1, # (Jpeg2000 'colr' box)
65
+ );
66
+
61
67
  #------------------------------------------------------------------------------
62
68
  # Utility to print tag information database as an XML list
63
69
  # Inputs: 0) output file name (undef to send to console),
@@ -178,9 +184,8 @@ PTILoop: for ($index=0; $index<@infoArray; ++$index) {
178
184
  }
179
185
  my @groups = $et->GetGroup($tagInfo);
180
186
  my $writeGroup = $$tagInfo{WriteGroup} || $$table{WRITE_GROUP};
181
- if ($writeGroup and $writeGroup ne 'Comment') {
182
- $groups[1] = $writeGroup; # use common write group for group 1
183
- }
187
+ # use common write group for group 1 (unless fake)
188
+ $groups[1] = $writeGroup if $writeGroup and not $fakeWriteGroup{$writeGroup};
184
189
  # add group names if different from table defaults
185
190
  my $grp = '';
186
191
  for ($fam=0; $fam<3; ++$fam) {