exiftool-vendored.exe 12.89.0 → 12.96.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.
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.78';
91
+ $VERSION = '4.81';
92
92
 
93
93
  # Note: Removed 'USM' from 'L' lenses since it is redundant - PH
94
94
  # (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -995,6 +995,8 @@ $VERSION = '4.78';
995
995
  0x80000481 => 'EOS R6 Mark II', #42
996
996
  0x80000487 => 'EOS R8', #42
997
997
  0x80000491 => 'PowerShot V10', #25
998
+ 0x80000495 => 'EOS R1', #PH
999
+ 0x80000496 => 'R5 Mark II', #forum16406
998
1000
  0x80000498 => 'EOS R100', #25
999
1001
  0x80000520 => 'EOS D2000C', #IB
1000
1002
  0x80000560 => 'EOS D6000C', #PH (guess)
@@ -1978,6 +1980,11 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
1978
1980
  Name => 'ColorData11',
1979
1981
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData11' },
1980
1982
  },
1983
+ { # (int16u[4528]) - R1/R5mkII ref forum16406
1984
+ Condition => '$count == 4528',
1985
+ Name => 'ColorData12',
1986
+ SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData12' },
1987
+ },
1981
1988
  {
1982
1989
  Name => 'ColorDataUnknown',
1983
1990
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorDataUnknown' },
@@ -6403,6 +6410,8 @@ my %ciMaxFocal = (
6403
6410
  12 => 'Flexizone Multi (9 point)', #PH (750D, 9 points)
6404
6411
  13 => 'Flexizone Single', #PH (EOS M default, live view) (R7 calls this '1-point AF', ref github268)
6405
6412
  14 => 'Large Zone AF', #PH/forum6237 (7DmkII)
6413
+ 16 => 'Large Zone AF (vertical)', #forum16223
6414
+ 17 => 'Large Zone AF (horizontal)', #forum16223
6406
6415
  19 => 'Flexible Zone AF 1', #github268 (R7)
6407
6416
  20 => 'Flexible Zone AF 2', #github268 (R7)
6408
6417
  21 => 'Flexible Zone AF 3', #github268 (R7)
@@ -6921,6 +6930,10 @@ my %ciMaxFocal = (
6921
6930
  Name => 'FlashExposureLock',
6922
6931
  PrintConv => \%offOn,
6923
6932
  },
6933
+ 32 => { #forum16257
6934
+ Name => 'AntiFlicker',
6935
+ PrintConv => \%offOn,
6936
+ },
6924
6937
  0x3d => { #IB
6925
6938
  Name => 'RFLensType',
6926
6939
  Format => 'int16u',
@@ -8607,6 +8620,126 @@ my %ciMaxFocal = (
8607
8620
  },
8608
8621
  );
8609
8622
 
8623
+ # Color data (MakerNotes tag 0x4001, count=4528, ref PH)
8624
+ %Image::ExifTool::Canon::ColorData12 = (
8625
+ %binaryDataAttrs,
8626
+ NOTES => 'These tags are used by the EOS R1 and R5mkII',
8627
+ FORMAT => 'int16s',
8628
+ FIRST_ENTRY => 0,
8629
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8630
+ DATAMEMBER => [ 0 ],
8631
+ IS_SUBDIR => [ 0x140 ],
8632
+ 0x00 => {
8633
+ Name => 'ColorDataVersion',
8634
+ DataMember => 'ColorDataVersion',
8635
+ RawConv => '$$self{ColorDataVersion} = $val',
8636
+ PrintConv => {
8637
+ 64 => '64 (R1, R5 Mark II)',
8638
+ },
8639
+ },
8640
+ 0x69 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' }, # (NC)
8641
+ 0x6d => 'ColorTempAsShot', # (NC)
8642
+ 0x6e => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16s[4]' },
8643
+ 0x72 => 'ColorTempDaylight',
8644
+ 0x73 => { Name => 'WB_RGGBLevelsShade', Format => 'int16s[4]' },
8645
+ 0x77 => 'ColorTempShade',
8646
+ 0x78 => { Name => 'WB_RGGBLevelsCloudy', Format => 'int16s[4]' },
8647
+ 0x7c => 'ColorTempCloudy',
8648
+ 0x7d => { Name => 'WB_RGGBLevelsTungsten', Format => 'int16s[4]' },
8649
+ 0x81 => 'ColorTempTungsten',
8650
+ 0x82 => { Name => 'WB_RGGBLevelsFluorescent',Format=> 'int16s[4]' },
8651
+ 0x86 => 'ColorTempFluorescent' ,
8652
+ 0x87 => { Name => 'WB_RGGBLevelsFlash', Format => 'int16s[4]' },
8653
+ 0x8b => 'ColorTempFlash',
8654
+ 0x8c => { Name => 'WB_RGGBLevelsUnknown2', Format => 'int16s[4]', Unknown => 1 },
8655
+ 0x90 => { Name => 'ColorTempUnknown2', Unknown => 1 },
8656
+ 0x91 => { Name => 'WB_RGGBLevelsUnknown3', Format => 'int16s[4]', Unknown => 1 },
8657
+ 0x95 => { Name => 'ColorTempUnknown3', Unknown => 1 },
8658
+ 0x96 => { Name => 'WB_RGGBLevelsUnknown4', Format => 'int16s[4]', Unknown => 1 },
8659
+ 0x9a => { Name => 'ColorTempUnknown4', Unknown => 1 },
8660
+ 0x9b => { Name => 'WB_RGGBLevelsUnknown5', Format => 'int16s[4]', Unknown => 1 },
8661
+ 0x9f => { Name => 'ColorTempUnknown5', Unknown => 1 },
8662
+ 0xa0 => { Name => 'WB_RGGBLevelsUnknown6', Format => 'int16s[4]', Unknown => 1 },
8663
+ 0xa4 => { Name => 'ColorTempUnknown6', Unknown => 1 },
8664
+ 0xa5 => { Name => 'WB_RGGBLevelsUnknown7', Format => 'int16s[4]', Unknown => 1 },
8665
+ 0xa9 => { Name => 'ColorTempUnknown7', Unknown => 1 },
8666
+ 0xaa => { Name => 'WB_RGGBLevelsUnknown8', Format => 'int16s[4]', Unknown => 1 },
8667
+ 0xae => { Name => 'ColorTempUnknown8', Unknown => 1 },
8668
+ 0xaf => { Name => 'WB_RGGBLevelsUnknown9', Format => 'int16s[4]', Unknown => 1 },
8669
+ 0xb3 => { Name => 'ColorTempUnknown9', Unknown => 1 },
8670
+ 0xb4 => { Name => 'WB_RGGBLevelsUnknown10', Format => 'int16s[4]', Unknown => 1 },
8671
+ 0xb8 => { Name => 'ColorTempUnknown10', Unknown => 1 },
8672
+ 0xb9 => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 },
8673
+ 0xbd => { Name => 'ColorTempUnknown11', Unknown => 1 },
8674
+ 0xbe => { Name => 'WB_RGGBLevelsUnknown12', Format => 'int16s[4]', Unknown => 1 },
8675
+ 0xc2 => { Name => 'ColorTempUnknown12', Unknown => 1 },
8676
+ 0xc3 => { Name => 'WB_RGGBLevelsUnknown13', Format => 'int16s[4]', Unknown => 1 },
8677
+ 0xc7 => { Name => 'ColorTempUnknown13', Unknown => 1 },
8678
+ 0xc8 => { Name => 'WB_RGGBLevelsUnknown14', Format => 'int16s[4]', Unknown => 1 },
8679
+ 0xcc => { Name => 'ColorTempUnknown14', Unknown => 1 },
8680
+ 0xcd => { Name => 'WB_RGGBLevelsUnknown15', Format => 'int16s[4]', Unknown => 1 },
8681
+ 0xd1 => { Name => 'ColorTempUnknown15', Unknown => 1 },
8682
+ 0xd2 => { Name => 'WB_RGGBLevelsUnknown16', Format => 'int16s[4]', Unknown => 1 },
8683
+ 0xd6 => { Name => 'ColorTempUnknown16', Unknown => 1 },
8684
+ 0xd7 => { Name => 'WB_RGGBLevelsUnknown17', Format => 'int16s[4]', Unknown => 1 },
8685
+ 0xdb => { Name => 'ColorTempUnknown17', Unknown => 1 },
8686
+ 0xdc => { Name => 'WB_RGGBLevelsUnknown18', Format => 'int16s[4]', Unknown => 1 },
8687
+ 0xe0 => { Name => 'ColorTempUnknown18', Unknown => 1 },
8688
+ 0xe1 => { Name => 'WB_RGGBLevelsUnknown19', Format => 'int16s[4]', Unknown => 1 },
8689
+ 0xe5 => { Name => 'ColorTempUnknown19', Unknown => 1 },
8690
+ 0xe6 => { Name => 'WB_RGGBLevelsUnknown20', Format => 'int16s[4]', Unknown => 1 },
8691
+ 0xea => { Name => 'ColorTempUnknown20', Unknown => 1 },
8692
+ 0xeb => { Name => 'WB_RGGBLevelsUnknown21', Format => 'int16s[4]', Unknown => 1 },
8693
+ 0xef => { Name => 'ColorTempUnknown21', Unknown => 1 },
8694
+ 0xf0 => { Name => 'WB_RGGBLevelsUnknown22', Format => 'int16s[4]', Unknown => 1 },
8695
+ 0xf4 => { Name => 'ColorTempUnknown22', Unknown => 1 },
8696
+ 0xf5 => { Name => 'WB_RGGBLevelsUnknown23', Format => 'int16s[4]', Unknown => 1 },
8697
+ 0xf9 => { Name => 'ColorTempUnknown23', Unknown => 1 },
8698
+ 0xfa => { Name => 'WB_RGGBLevelsUnknown24', Format => 'int16s[4]', Unknown => 1 },
8699
+ 0xfe => { Name => 'ColorTempUnknown24', Unknown => 1 },
8700
+ 0xff => { Name => 'WB_RGGBLevelsUnknown25', Format => 'int16s[4]', Unknown => 1 },
8701
+ 0x103 => { Name => 'ColorTempUnknown25', Unknown => 1 },
8702
+ 0x104 => { Name => 'WB_RGGBLevelsUnknown26',Format => 'int16s[4]', Unknown => 1 },
8703
+ 0x108 => { Name => 'ColorTempUnknown26', Unknown => 1 },
8704
+ 0x109 => { Name => 'WB_RGGBLevelsUnknown27',Format => 'int16s[4]', Unknown => 1 },
8705
+ 0x10d => { Name => 'ColorTempUnknown27', Unknown => 1 },
8706
+ 0x10e => { Name => 'WB_RGGBLevelsUnknown28',Format => 'int16s[4]', Unknown => 1 },
8707
+ 0x112 => { Name => 'ColorTempUnknown28', Unknown => 1 },
8708
+ 0x113 => { Name => 'WB_RGGBLevelsUnknown29',Format => 'int16s[4]', Unknown => 1 },
8709
+ 0x117 => { Name => 'ColorTempUnknown29', Unknown => 1 },
8710
+ 0x118 => { Name => 'WB_RGGBLevelsUnknown30',Format => 'int16s[4]', Unknown => 1 },
8711
+ 0x11c => { Name => 'ColorTempUnknown30', Unknown => 1 },
8712
+ 0x11d => { Name => 'WB_RGGBLevelsUnknown31',Format => 'int16s[4]', Unknown => 1 },
8713
+ 0x121 => { Name => 'ColorTempUnknown31', Unknown => 1 },
8714
+ 0x122 => { Name => 'WB_RGGBLevelsUnknown32',Format => 'int16s[4]', Unknown => 1 },
8715
+ 0x126 => { Name => 'ColorTempUnknown32', Unknown => 1 },
8716
+ 0x127 => { Name => 'WB_RGGBLevelsUnknown33',Format => 'int16s[4]', Unknown => 1 },
8717
+ 0x12b => { Name => 'ColorTempUnknown33', Unknown => 1 },
8718
+ 0x140 => {
8719
+ Name => 'ColorCalib',
8720
+ Format => 'undef[120]',
8721
+ Unknown => 1,
8722
+ SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCalib' }
8723
+ },
8724
+ 0x17f => {
8725
+ Name => 'PerChannelBlackLevel',
8726
+ Format => 'int16u[4]',
8727
+ },
8728
+ 0x294 => {
8729
+ Name => 'NormalWhiteLevel',
8730
+ Format => 'int16u',
8731
+ RawConv => '$val || undef',
8732
+ },
8733
+ 0x295 => {
8734
+ Name => 'SpecularWhiteLevel',
8735
+ Format => 'int16u',
8736
+ },
8737
+ 0x296 => {
8738
+ Name => 'LinearityUpperMargin',
8739
+ Format => 'int16u',
8740
+ },
8741
+ );
8742
+
8610
8743
  # Unknown color data (MakerNotes tag 0x4001)
8611
8744
  %Image::ExifTool::Canon::ColorDataUnknown = (
8612
8745
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
@@ -9123,19 +9256,19 @@ my %filterConv = (
9123
9256
  2 => 'Disable',
9124
9257
  },
9125
9258
  },
9126
- 18 => { #52
9259
+ 18 => { #52/forum16223
9127
9260
  Name => 'AFStatusViewfinder',
9128
- Condition => '$$self{Model} =~ /1D X/',
9129
- Notes => '1D X only',
9261
+ Condition => '$$self{Model} =~ /EOS-1D X|EOS R/',
9262
+ Notes => '1D X and R models',
9130
9263
  PrintConv => {
9131
9264
  0 => 'Show in Field of View',
9132
9265
  1 => 'Show Outside View',
9133
9266
  },
9134
9267
  },
9135
- 19 => { #52
9268
+ 19 => { #52/forum16223
9136
9269
  Name => 'InitialAFPointInServo',
9137
- Condition => '$$self{Model} =~ /1D X/',
9138
- Notes => '1D X only',
9270
+ Condition => '$$self{Model} =~ /EOS-1D X|EOS R/',
9271
+ Notes => '1D X and R models',
9139
9272
  PrintConv => {
9140
9273
  0 => 'Initial AF Point Selected',
9141
9274
  1 => 'Manual AF Point',
@@ -9193,14 +9326,19 @@ my %filterConv = (
9193
9326
  PrintConvInv => '$val=~s/\s*mm//;$val',
9194
9327
  },
9195
9328
  8 => {
9196
- Name => 'MinFocalLength',
9329
+ Name => 'MinFocalLength2',
9330
+ Notes => q{
9331
+ these seem to be min/max focal length without teleconverter, as opposed to
9332
+ MinFocalLength and MaxFocalLength which include the effect of a
9333
+ teleconverter
9334
+ }, #forum16309
9197
9335
  ValueConv => '$val / 10',
9198
9336
  ValueConvInv => 'int($val * 10 + 0.5)',
9199
9337
  PrintConv => '"$val mm"',
9200
9338
  PrintConvInv => '$val=~s/\s*mm//;$val',
9201
9339
  },
9202
9340
  9 => {
9203
- Name => 'MaxFocalLength',
9341
+ Name => 'MaxFocalLength2',
9204
9342
  ValueConv => '$val / 10',
9205
9343
  ValueConvInv => 'int($val * 10 + 0.5)',
9206
9344
  PrintConv => '"$val mm"',
@@ -19,7 +19,7 @@ use strict;
19
19
  use vars qw($VERSION %ttLang);
20
20
  use Image::ExifTool qw(:DataAccess :Utils);
21
21
 
22
- $VERSION = '1.10';
22
+ $VERSION = '1.11';
23
23
 
24
24
  sub ProcessOTF($$);
25
25
 
@@ -189,6 +189,9 @@ my %ttCharset = (
189
189
  name => {
190
190
  SubDirectory => { TagTable => 'Image::ExifTool::Font::Name' },
191
191
  },
192
+ C2PA => {
193
+ SubDirectory => { TagTable => 'Image::ExifTool::Jpeg2000::Main', Start => 20 },
194
+ },
192
195
  PFM => {
193
196
  Name => 'PFMHeader',
194
197
  SubDirectory => { TagTable => 'Image::ExifTool::Font::PFM' },
@@ -389,10 +392,12 @@ sub ProcessOTF($$)
389
392
  $$et{INDENT} .= '| ';
390
393
  $et->VerboseDir('TrueType', $numTables) if $verbose;
391
394
 
395
+ my %processTag = ( name => 1, C2PA => 1 ); # tags to process (skip all others)
396
+
392
397
  for ($pos=0; $pos<$len; $pos+=16) {
393
- # look for 'name' table
398
+ # look for tags to process
394
399
  my $tag = substr($tbl, $pos, 4);
395
- next unless $tag eq 'name' or $verbose;
400
+ next unless $processTag{$tag} or $verbose;
396
401
  my $offset = Get32u(\$tbl, $pos + 8);
397
402
  my $size = Get32u(\$tbl, $pos + 12);
398
403
  unless ($raf->Seek($offset+$base, 0) and $raf->Read($buff, $size) == $size) {
@@ -405,9 +410,15 @@ sub ProcessOTF($$)
405
410
  $$et{INDENT}, $pos/16, $tag, $offset, $size);
406
411
  $et->VPrint(0, $str);
407
412
  $et->VerboseDump(\$buff, Addr => $offset) if $verbose > 2;
408
- next unless $tag eq 'name';
413
+ next unless $processTag{$tag};
409
414
  }
410
415
  next unless $size >= 8;
416
+ unless ($tag eq 'name') {
417
+ my $tagTablePtr = GetTagTable('Image::ExifTool::Font::Main');
418
+ $et->HandleTag($tagTablePtr, $tag, undef, DataPt => \$buff, Size => length($buff));
419
+ next;
420
+ }
421
+ # process the 'name' tag
411
422
  my $entries = Get16u(\$buff, 2);
412
423
  my $recEnd = 6 + $entries * 12;
413
424
  if ($recEnd > $size) {
@@ -16,6 +16,7 @@
16
16
  # 2020/12/01 - PH Added ability to read DJI CSV log files
17
17
  # 2022/06/21 - PH Added ability to read Google Takeout JSON files
18
18
  # 2024/04/23 - PH Added ability to read more OpenTracks GPS tags
19
+ # 2024/08/28 - PH Added support for new Google Takeout JSON format
19
20
  #
20
21
  # References: 1) http://www.topografix.com/GPX/1/1/
21
22
  # 2) http://www.gpsinformation.org/dale/nmea.htm#GSA
@@ -30,7 +31,7 @@ use vars qw($VERSION);
30
31
  use Image::ExifTool qw(:Public);
31
32
  use Image::ExifTool::GPS;
32
33
 
33
- $VERSION = '1.76';
34
+ $VERSION = '1.78';
34
35
 
35
36
  sub JITTER() { return 2 } # maximum time jitter
36
37
 
@@ -151,7 +152,7 @@ sub LoadTrackLog($$;$)
151
152
  my ($raf, $from, $time, $isDate, $noDate, $noDateChanged, $lastDate, $dateFlarm);
152
153
  my ($nmeaStart, $fixSecs, @fixTimes, $lastFix, %nmea, @csvHeadings, $sortFixes);
153
154
  my ($canCut, $cutPDOP, $cutHDOP, $cutSats, $e0, $e1, @tmp, $trackFile, $trackTime);
154
- my $scaleSpeed;
155
+ my ($scaleSpeed, $startTime);
155
156
 
156
157
  unless (eval { require Time::Local }) {
157
158
  return 'Geotag feature requires Time::Local installed';
@@ -318,10 +319,13 @@ sub LoadTrackLog($$;$)
318
319
  }
319
320
  }
320
321
  next;
321
- } elsif (/"(timelineObjects|placeVisit|activitySegment|latitudeE7)":/) {
322
+ } elsif (/"(timelineObjects|placeVisit|activitySegment|latitudeE7)"\s*:/) {
322
323
  # Google Takeout JSON format
323
324
  $format = 'JSON';
324
325
  $sortFixes = 1; # (fixes are not all in order for this format)
326
+ } elsif (/"(durationMinutesOffsetFromStartTime|startTime)"\s*:/) {
327
+ $format = 'JSON'; # new Google Takeout JSON format (fixes seem to be in order)
328
+ $raf->Seek(0,0); # rewind to start of file
325
329
  } else {
326
330
  # search only first 50 lines of file for a valid fix
327
331
  last if ++$skipped > 50;
@@ -558,14 +562,24 @@ DoneFix: $isDate = 1;
558
562
  next;
559
563
  } elsif ($format eq 'JSON') {
560
564
  # Google Takeout JSON format
561
- if (/"(latitudeE7|longitudeE7|latE7|lngE7|timestamp)":\s*"?(.*?)"?,?\s*[\x0d\x0a]/) {
565
+ if (/"(latitudeE7|longitudeE7|latE7|lngE7|timestamp|startTime|point|durationMinutesOffsetFromStartTime)"\s*:\s*"?(.*?)"?,?\s*[\x0d\x0a]/) {
562
566
  if ($1 eq 'timestamp') {
563
567
  $time = GetTime($2);
564
568
  goto DoneFix if $time and $$fix{lat} and $$fix{lon};
569
+ } elsif ($1 eq 'startTime') { # (new format)
570
+ $startTime = GetTime($2);
565
571
  } elsif ($1 eq 'latitudeE7' or $1 eq 'latE7') {
566
572
  $$fix{lat} = $2 * 1e-7;
567
- } else {
573
+ } elsif ($1 eq 'longitudeE7' or $1 eq 'lngE7') {
568
574
  $$fix{lon} = $2 * 1e-7;
575
+ } elsif ($1 eq 'point') { # (new format)
576
+ my $point = $2;
577
+ my @coords = $point =~ /[-+]?\d+\.\d+/g;
578
+ @$fix{'lat','lon'} = @coords[0,1] if @coords == 2;
579
+ } elsif ($1 eq 'durationMinutesOffsetFromStartTime' and defined $startTime) { # (new format)
580
+ $time = $startTime + $2 * 60;
581
+ # note: this assumes that "point" comes first, which it does in my sample
582
+ goto DoneFix if $time and $$fix{lat} and $$fix{lon};
569
583
  }
570
584
  }
571
585
  next;
@@ -16,7 +16,7 @@ use strict;
16
16
  use vars qw($VERSION);
17
17
  use Image::ExifTool qw(:DataAccess :Utils);
18
18
 
19
- $VERSION = '1.39';
19
+ $VERSION = '1.40';
20
20
 
21
21
  sub ProcessJpeg2000Box($$$);
22
22
  sub ProcessJUMD($$$);
@@ -1442,7 +1442,7 @@ sub ProcessBrotli($$$)
1442
1442
  }
1443
1443
  } elsif ($type eq 'jumb') {
1444
1444
  return undef if $isWriting; # (can't yet write JUMBF)
1445
- Image::ExifTool::ProcessJUMB($et, \%dirInfo, $tagTablePtr); # (untested)
1445
+ Image::ExifTool::Jpeg2000::ProcessJUMB($et, \%dirInfo, $tagTablePtr); # (untested)
1446
1446
  }
1447
1447
  if ($isWriting) {
1448
1448
  return undef unless defined $dat;
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
65
65
  use Image::ExifTool::GPS;
66
66
  use Image::ExifTool::XMP;
67
67
 
68
- $VERSION = '4.35';
68
+ $VERSION = '4.37';
69
69
 
70
70
  sub LensIDConv($$$);
71
71
  sub ProcessNikonAVI($$$);
@@ -367,6 +367,7 @@ sub GetAFPointGrid($$;$);
367
367
  '02 46 37 37 25 25 02 00' => 'Sigma 24mm F2.8 Super Wide II Macro',
368
368
  '7E 54 37 37 0C 0C 4B 06' => 'Sigma 24mm F1.4 DG HSM | A', #30
369
369
  '26 58 3C 3C 14 14 1C 02' => 'Sigma 28mm F1.8 EX DG Aspherical Macro',
370
+ 'BC 54 3C 3C 0C 0C 4B 46' => 'Sigma 28mm F1.4 DG HSM | A', #30
370
371
  '48 54 3E 3E 0C 0C 4B 06' => 'Sigma 30mm F1.4 EX DC HSM',
371
372
  'F8 54 3E 3E 0C 0C 4B 06' => 'Sigma 30mm F1.4 EX DC HSM', #JD
372
373
  '91 54 44 44 0C 0C 4B 06' => 'Sigma 35mm F1.4 DG HSM', #30
@@ -2495,6 +2496,7 @@ my %base64coord = (
2495
2496
  { # D7100=0227
2496
2497
  Condition => '$$valPt =~ /^0[28]/',
2497
2498
  Name => 'ShotInfo02xx',
2499
+ Drop => 50000, # drop if too large (>64k for Z6iii)
2498
2500
  SubDirectory => {
2499
2501
  TagTable => 'Image::ExifTool::Nikon::ShotInfo',
2500
2502
  ProcessProc => \&ProcessNikonEncrypted,
@@ -5635,6 +5637,38 @@ my %nikonFocalConversions = (
5635
5637
  Notes => 'P6000',
5636
5638
  PrintConv => \%offOn,
5637
5639
  },
5640
+ # for Nikon Z6iii JPG and RAW images (version 0809),
5641
+ # the offset table starts at 0x24 and is as follows
5642
+ # JPG Offset Size NEF Offset Size
5643
+ # 0) 0x0000 0 0) 0x009c 21604
5644
+ # 1) 0x0000 0 1) 0x5500 6008
5645
+ # 2) 0x009c 2528 2) 0x6c78 2528
5646
+ # 3) 0x0a7c 200 3) 0x7658 200
5647
+ # 4) 0x0b44 2488 4) 0x7720 2488
5648
+ # 5) 0x14fc 1468 5) 0x80d8 1468
5649
+ # 6) 0x1ab8 1032 6) 0x8694 1032
5650
+ # 7) 0x1ec0 256 7) 0x8a9c 256
5651
+ # 8) 0x1fc0 800 8) 0x8b9c 800
5652
+ # 9) 0x22e0 144 9) 0x8ebc 144
5653
+ # 10) 0x2370 64 10) 0x8f4c 64
5654
+ # 11) 0x0000 0 11) 0x0000 0
5655
+ # 12) 0x23b0 5009 12) 0x8f8c 5009
5656
+ # 13) 0x3741 1536 13) 0xa31d 1536
5657
+ # 14) 0x3d41 11928 14) 0xa91d 11928
5658
+ # 15) 0x6bd9 5937 15) 0xd7b5 5937
5659
+ # 16) 0x830a 500 16) 0xeee6 500
5660
+ # 17) 0x84fe 160 17) 0xf0da 160
5661
+ # 18) 0x859e 464 18) 0xf17a 464
5662
+ # 19) 0x876e 8 19) 0xf34a 8
5663
+ # 20) 0x8776 64 20) 0xf352 64
5664
+ # 21) 0x87b6 6 21) 0xf392 6
5665
+ # 22) 0x87bc 48 22) 0xf398 48
5666
+ # 23) 0x87ec 20 23) 0xf3c8 20
5667
+ # 24) 0x8800 108 24) 0xf3dc 108
5668
+ # 25) 0x886c 8 25) 0xf448 8
5669
+ # 26) 0x8874 2420 26) 0xf450 2420
5670
+ # 27) 0x0000 0 27) 0x0000 0
5671
+ # 28) 0x0000 0 28) 0x0000 0
5638
5672
  0x66 => {
5639
5673
  Name => 'VR_0x66',
5640
5674
  Condition => '$$self{ShotInfoVersion} eq "0204"',
@@ -17,12 +17,57 @@ use strict;
17
17
  use vars qw($VERSION);
18
18
  use Image::ExifTool qw(:DataAccess :Utils);
19
19
 
20
- $VERSION = '1.07';
20
+ $VERSION = '1.08';
21
21
 
22
22
  sub ProcessNikonSettings($$$);
23
23
 
24
24
  my %enableDisable = ( 1 => 'Enable', 2 => 'Disable' );
25
25
 
26
+ my %funcButtonZ6 = ( #forum16316
27
+ 1 => 'AF-On or Subject Tracking', # (bug in 3.xx firmware?)
28
+ 2 => 'AF Lock Only',
29
+ 3 => 'AE Lock (hold)',
30
+ 4 => 'AE Lock (reset on release)',
31
+ 5 => 'AE Lock Only',
32
+ 6 => 'AE/AF Lock',
33
+ 7 => 'FV Lock',
34
+ 8 => 'Flash Disable/Enable',
35
+ 9 => 'Preview',
36
+ 10 => 'Matrix Metering',
37
+ 11 => 'Center-weighted Metering',
38
+ 12 => 'Spot Metering',
39
+ 13 => 'Highlight-weighted Metering',
40
+ 14 => 'Bracketing Burst',
41
+ 15 => 'Synchronized Release (Master)',
42
+ 16 => 'Synchronized Release (Remote)', # no settings map to 17 or 18
43
+ 19 => '+NEF(RAW)',
44
+ 20 => 'Framing Grid Display',
45
+ # 21 - missing
46
+ 22 => 'Zoom On/Off',
47
+ # 23 - missing
48
+ 24 => 'My Menu',
49
+ 25 => 'My Menu Top Item',
50
+ 26 => 'Playback',
51
+ 27 => 'Protect',
52
+ 28 => 'Image Area',
53
+ 29 => 'Image Quality',
54
+ 30 => 'White Balance',
55
+ 31 => 'Picture Control',
56
+ 32 => 'Active D-Lighting',
57
+ 33 => 'Metering',
58
+ 34 => 'Flash Mode',
59
+ 35 => 'Focus Mode',
60
+ 36 => 'Auto Bracketing',
61
+ 37 => 'Multiple Exposure',
62
+ 38 => 'HDR',
63
+ 39 => 'Exposure Delay Mode',
64
+ 40 => 'Shutter/Aperture Lock',
65
+ 41 => 'Focus Peaking',
66
+ 42 => 'Rating',
67
+ 43 => 'Non-CPU Lens',
68
+ 44 => 'None',
69
+ );
70
+
26
71
  my %funcButtonZ7m2 = (
27
72
  1 => 'AF-On',
28
73
  2 => 'AF Lock Only',
@@ -1117,6 +1162,11 @@ my %infoZSeries = (
1117
1162
  Name => 'Func1Button',
1118
1163
  PrintConv => \%previewButtonD6,
1119
1164
  %infoD6,
1165
+ },{ # CSf2-a (Z6)
1166
+ Name => 'Func1Button',
1167
+ Condition => '$$self{Model} =~ /^NIKON Z [67]\b/',
1168
+ Notes => 'Z6 and Z7',
1169
+ PrintConv => \%funcButtonZ6,
1120
1170
  },{ # CSf2-a (Z7_2)
1121
1171
  Name => 'Func1Button',
1122
1172
  PrintConv => \%funcButtonZ7m2,
@@ -1126,6 +1176,11 @@ my %infoZSeries = (
1126
1176
  Name => 'Func2Button',
1127
1177
  PrintConv => \%previewButtonD6,
1128
1178
  %infoD6,
1179
+ },{ # CSf2-b (Z6)
1180
+ Name => 'Func2Button',
1181
+ Condition => '$$self{Model} =~ /^NIKON Z [67]\b/',
1182
+ Notes => 'Z6 and Z7',
1183
+ PrintConv => \%funcButtonZ6,
1129
1184
  },{ # CSf2-b (Z7_2)
1130
1185
  Name => 'Func2Button',
1131
1186
  PrintConv => \%funcButtonZ7m2,
@@ -16,7 +16,7 @@ use vars qw($VERSION);
16
16
  use Image::ExifTool qw(:DataAccess :Utils);
17
17
  use Image::ExifTool::GPS;
18
18
 
19
- $VERSION = '1.06';
19
+ $VERSION = '1.07';
20
20
 
21
21
  # supported EXR value format types (other types are extracted as undef binary data)
22
22
  my %formatType = (
@@ -91,6 +91,8 @@ my %formatType = (
91
91
  5 => 'PXR24',
92
92
  6 => 'B44',
93
93
  7 => 'B44A',
94
+ 8 => 'DWAA', #github276
95
+ 9 => 'DWAB', #github276
94
96
  },
95
97
  },
96
98
  dataWindow => { },
@@ -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.67';
39
+ $VERSION = '1.68';
40
40
 
41
41
  sub ProcessPNG_tEXt($$$);
42
42
  sub ProcessPNG_iTXt($$$);
@@ -1400,7 +1400,7 @@ sub ProcessPNG($$)
1400
1400
  my $fastScan = $et->Options('FastScan');
1401
1401
  my $hash = $$et{ImageDataHash};
1402
1402
  my ($n, $sig, $err, $hbuf, $dbuf, $cbuf);
1403
- my ($wasHdr, $wasEnd, $wasDat, $doTxt, @txtOffset);
1403
+ my ($wasHdr, $wasEnd, $wasDat, $doTxt, @txtOffset, $wasTrailer);
1404
1404
 
1405
1405
  # check to be sure this is a valid PNG/MNG/JNG image
1406
1406
  return 0 unless $raf->Read($sig,8) == 8 and $pngLookup{$sig};
@@ -1461,6 +1461,7 @@ sub ProcessPNG($$)
1461
1461
  if ($wasEnd) {
1462
1462
  last unless $n; # stop now if normal end of PNG
1463
1463
  $et->WarnOnce("Trailer data after $fileType $endChunk chunk", 1);
1464
+ $wasTrailer = 1;
1464
1465
  last if $n < 8;
1465
1466
  $$et{SET_GROUP1} = 'Trailer';
1466
1467
  } elsif ($n != 8) {
@@ -1654,6 +1655,13 @@ sub ProcessPNG($$)
1654
1655
  }
1655
1656
  }
1656
1657
  delete $$et{SET_GROUP1};
1658
+ # read Samsung trailer if it exists
1659
+ if ($wasTrailer and not $outfile and $raf->Seek(-8, 2) and
1660
+ $raf->Read($dbuf,8) and $dbuf =~ /\0\0(QDIOBS|SEFT)$/) # (have only seen SEFT type)
1661
+ {
1662
+ require Image::ExifTool::Samsung;
1663
+ Image::ExifTool::Samsung::ProcessSamsung($et, { DirName => 'Samsung', RAF => $raf });
1664
+ }
1657
1665
  return -1 if $outfile and ($err or not $wasEnd);
1658
1666
  return 1; # this was a valid PNG/MNG/JNG image
1659
1667
  }
@@ -16,7 +16,7 @@ use strict;
16
16
  use vars qw($VERSION $AUTOLOAD);
17
17
  use Image::ExifTool qw(:DataAccess :Utils);
18
18
 
19
- $VERSION = '1.45';
19
+ $VERSION = '1.46';
20
20
 
21
21
  sub WritePS($$);
22
22
  sub ProcessPS($$;$);
@@ -156,15 +156,6 @@ sub AUTOLOAD
156
156
  return Image::ExifTool::DoAutoLoad($AUTOLOAD, @_);
157
157
  }
158
158
 
159
- #------------------------------------------------------------------------------
160
- # Is this a PC system
161
- # Returns: true for PC systems
162
- my %isPC = (MSWin32 => 1, os2 => 1, dos => 1, NetWare => 1, symbian => 1, cygwin => 1);
163
- sub IsPC()
164
- {
165
- return $isPC{$^O};
166
- }
167
-
168
159
  #------------------------------------------------------------------------------
169
160
  # Get image width or height
170
161
  # Inputs: 0) value list ref (ImageData, BoundingBox), 1) true to get height
@@ -284,7 +275,7 @@ sub GetNextLine($$)
284
275
  $$raf{PSEnd} and CheckPSEnd($raf, \$data);
285
276
  # split line if it contains other newline sequences
286
277
  if ($data =~ /$altnl/) {
287
- if (length($data) > 500000 and IsPC()) {
278
+ if (length($data) > 500000 and Image::ExifTool::IsPC()) {
288
279
  # patch for Windows memory problem
289
280
  unless ($changedNL) {
290
281
  $changedNL = $/;
@@ -537,7 +528,7 @@ sub ProcessPS($$;$)
537
528
  $raf->ReadLine($data) or last;
538
529
  # check for alternate newlines as efficiently as possible
539
530
  if ($data =~ /$altnl/) {
540
- if (length($data) > 500000 and IsPC()) {
531
+ if (length($data) > 500000 and Image::ExifTool::IsPC()) {
541
532
  # Windows can't split very long lines due to poor memory handling,
542
533
  # so re-read the file with the other newline character instead
543
534
  # (slower but uses less memory)