exiftool-vendored.exe 13.17.0 → 13.26.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.
Files changed (49) hide show
  1. package/bin/README.txt +14 -14
  2. package/bin/exiftool.exe +0 -0
  3. package/bin/exiftool_files/exiftool.pl +117 -46
  4. package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +12 -2
  5. package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +2 -2
  6. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +3 -2
  7. package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +1 -1
  8. package/bin/exiftool_files/lib/Image/ExifTool/DJI.pm +190 -29
  9. package/bin/exiftool_files/lib/Image/ExifTool/DarwinCore.pm +22 -11
  10. package/bin/exiftool_files/lib/Image/ExifTool/EXE.pm +2 -9
  11. package/bin/exiftool_files/lib/Image/ExifTool/GM.pm +1 -1
  12. package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +3 -3
  13. package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat +0 -0
  14. package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +86 -48
  15. package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +1 -0
  16. package/bin/exiftool_files/lib/Image/ExifTool/ICO.pm +2 -2
  17. package/bin/exiftool_files/lib/Image/ExifTool/JPEG.pm +5 -1
  18. package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +5 -1
  19. package/bin/exiftool_files/lib/Image/ExifTool/Kodak.pm +3 -2
  20. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +944 -1237
  21. package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +3 -1
  22. package/bin/exiftool_files/lib/Image/ExifTool/PCAP.pm +462 -0
  23. package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +10 -1
  24. package/bin/exiftool_files/lib/Image/ExifTool/PLIST.pm +92 -29
  25. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +7 -1
  26. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +2 -1
  27. package/bin/exiftool_files/lib/Image/ExifTool/Photoshop.pm +2 -2
  28. package/bin/exiftool_files/lib/Image/ExifTool/Plot.pm +713 -0
  29. package/bin/exiftool_files/lib/Image/ExifTool/Protobuf.pm +24 -11
  30. package/bin/exiftool_files/lib/Image/ExifTool/Qualcomm.pm +78 -1
  31. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +371 -324
  32. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +75 -27
  33. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +15 -6
  34. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +33 -14
  35. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +5067 -4967
  36. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +457 -336
  37. package/bin/exiftool_files/lib/Image/ExifTool/Trailer.pm +3 -3
  38. package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +4 -4
  39. package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  40. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +9 -4
  41. package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -1
  42. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +58 -5
  43. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +14 -13
  44. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +55 -20
  45. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +7 -1
  46. package/bin/exiftool_files/lib/Image/ExifTool.pm +63 -29
  47. package/bin/exiftool_files/lib/Image/ExifTool.pod +84 -86
  48. package/bin/exiftool_files/windows_exiftool.txt +96 -72
  49. package/package.json +4 -4
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
29
29
  %jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
30
30
  %static_vars $advFmtSelf);
31
31
 
32
- $VERSION = '13.17';
32
+ $VERSION = '13.26';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -155,9 +155,9 @@ sub ReadValue($$$;$$$);
155
155
  Real::Metafile Red RIFF AIFF ASF WTV DICOM FITS XISF MIE JSON HTML XMP::SVG
156
156
  Palm Palm::MOBI Palm::EXTH Torrent EXE EXE::PEVersion EXE::PEString
157
157
  EXE::DebugRSDS EXE::DebugNB10 EXE::Misc EXE::MachO EXE::PEF EXE::ELF EXE::AR
158
- EXE::CHM LNK Font VCard Text VCard::VCalendar VCard::VNote RSRC Rawzor ZIP
159
- ZIP::GZIP ZIP::RAR ZIP::RAR5 RTF OOXML iWork ISO FLIR::AFF FLIR::FPF MacOS
160
- MacOS::MDItem FlashPix::DocTable
158
+ EXE::CHM LNK PCAP Font VCard Text VCard::VCalendar VCard::VNote RSRC Rawzor
159
+ ZIP ZIP::GZIP ZIP::RAR ZIP::RAR5 RTF OOXML iWork ISO FLIR::AFF FLIR::FPF
160
+ MacOS MacOS::MDItem FlashPix::DocTable
161
161
  );
162
162
 
163
163
  # alphabetical list of current Lang modules
@@ -199,8 +199,8 @@ $defaultLang = 'en'; # default language
199
199
  LFP HTML VRD RTF FITS XISF XCF DSS QTIF FPX PICT ZIP GZIP PLIST
200
200
  RAR 7Z BZ2 CZI TAR EXE EXR HDR CHM LNK WMF AVC DEX DPX RAW Font
201
201
  JUMBF RSRC M2TS MacOS PHP PCX DCX DWF DWG DXF WTV Torrent VCard
202
- LRI R3D AA PDB PFM2 MRC LIF JXL MOI ISO ALIAS JSON MP3 DICOM PCD
203
- NKA ICO TXT AAC);
202
+ LRI R3D AA PDB PFM2 MRC LIF JXL MOI ISO ALIAS PCAP JSON MP3
203
+ DICOM PCD NKA ICO TXT AAC);
204
204
 
205
205
  # file types that we can write (edit)
206
206
  my @writeTypes = qw(JPEG TIFF GIF CRW MRW ORF RAF RAW PNG MIE PSD XMP PPM EPS
@@ -263,6 +263,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
263
263
  BPG => ['BPG', 'Better Portable Graphics'],
264
264
  BTF => ['BTF', 'Big Tagged Image File Format'], #(unofficial)
265
265
  BZ2 => ['BZ2', 'BZIP2 archive'],
266
+ CAP => 'PCAP',
266
267
  C2PA => ['JUMBF','Coalition for Content Provenance and Authenticity'],
267
268
  CHM => ['CHM', 'Microsoft Compiled HTML format'],
268
269
  CIFF => ['CRW', 'Camera Image File Format'],
@@ -454,6 +455,8 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
454
455
  PAC => ['RIFF', 'Lossless Predictive Audio Compression'],
455
456
  PAGES => ['ZIP', 'Apple Pages document'],
456
457
  PBM => ['PPM', 'Portable BitMap'],
458
+ PCAP => ['PCAP', 'Packet Capture'],
459
+ PCAPNG => ['PCAP', 'Packet Capture Next Generation'],
457
460
  PCD => ['PCD', 'Kodak Photo CD Image Pac'],
458
461
  PCT => 'PICT',
459
462
  PCX => ['PCX', 'PC Paintbrush'],
@@ -568,7 +571,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
568
571
  XLTX => [['ZIP','FPX'], 'Office Open XML Spreadsheet Template'],
569
572
  XMP => ['XMP', 'Extensible Metadata Platform'],
570
573
  WOFF => ['Font', 'Web Open Font Format'],
571
- WOFF2=> ['Font', 'Web Open Font Format2'],
574
+ WOFF2=> ['Font', 'Web Open Font Format 2'],
572
575
  WPG => ['WPG', 'WordPerfect Graphics'],
573
576
  WTV => ['WTV', 'Windows recorded TV show'],
574
577
  ZIP => ['ZIP', 'ZIP archive'],
@@ -744,6 +747,7 @@ my %fileDescription = (
744
747
  OTF => 'application/font-otf',
745
748
  PAGES=> 'application/x-iwork-pages-sffpages',
746
749
  PBM => 'image/x-portable-bitmap',
750
+ PCAP => 'application/vnd.tcpdump.pcap',
747
751
  PCD => 'image/x-photo-cd',
748
752
  PCX => 'image/pcx',
749
753
  PDB => 'application/vnd.palm',
@@ -980,6 +984,7 @@ $testLen = 1024; # number of bytes to read when testing for magic number
980
984
  NKA => 'NIKONADJ',
981
985
  OGG => '(OggS|ID3)',
982
986
  ORF => '(II|MM)',
987
+ PCAP => '\xa1\xb2(\xc3\xd4|\x3c\x4d)\0.\0.|(\xd4\xc3|\x4d\x3c)\xb2\xa1.\0.\0|\x0a\x0d\x0d\x0a.{4}(\x1a\x2b\x3c\x4d|\x4d\x3c\x2b\x1a)|GMBU\0\x02',
983
988
  # PCD => signature is at byte 2048
984
989
  PCX => '\x0a[\0-\x05]\x01[\x01\x02\x04\x08].{64}[\0-\x02]',
985
990
  PDB => '.{60}(\.pdfADBE|TEXtREAd|BVokBDIC|DB99DBOS|PNRdPPrs|DataPPrs|vIMGView|PmDBPmDB|InfoINDB|ToGoToGo|SDocSilX|JbDbJBas|JfDbJFil|DATALSdb|Mdb1Mdb1|BOOKMOBI|DataPlkr|DataSprd|SM01SMem|TEXtTlDc|InfoTlIf|DataTlMl|DataTlPt|dataTDBP|TdatTide|ToRaTRPW|zTXTGPlm|BDOCWrdS)',
@@ -1135,6 +1140,7 @@ my @availableOptions = (
1135
1140
  [ 'IgnoreMinorErrors',undef, 'ignore minor errors when reading/writing' ],
1136
1141
  [ 'IgnoreTags', undef, 'list of tags to ignore when extracting' ],
1137
1142
  [ 'ImageHashType', 'MD5', 'image hash algorithm' ],
1143
+ [ 'KeepUTCTime', undef, 'do not convert times stored as UTC' ],
1138
1144
  [ 'Lang', $defaultLang, 'localized language for descriptions etc' ],
1139
1145
  [ 'LargeFileSupport', 1, 'flag indicating support of 64-bit file offsets' ],
1140
1146
  [ 'LimitLongValues', 60, 'length limit for long values' ],
@@ -1152,6 +1158,7 @@ my @availableOptions = (
1152
1158
  [ 'NoPDFList', undef, 'flag to avoid splitting PDF List-type tag values' ],
1153
1159
  [ 'NoWarning', undef, 'regular expression for warnings to suppress' ],
1154
1160
  [ 'Password', undef, 'password for password-protected PDF documents' ],
1161
+ [ 'Plot', undef, 'SVG plot settings' ],
1155
1162
  [ 'PrintCSV', undef, 'flag to print CSV directly (selected metadata types only)' ],
1156
1163
  [ 'PrintConv', 1, 'flag to enable print conversion' ],
1157
1164
  [ 'QuickTimeHandler', 1, 'flag to add mdir Handler to newly created Meta box' ],
@@ -2587,6 +2594,12 @@ sub Options($$;@)
2587
2594
  } else {
2588
2595
  warn("Can't set $param to undef\n");
2589
2596
  }
2597
+ } elsif ($param eq 'Plot') {
2598
+ # add to existing plot settings
2599
+ $newVal = "$oldVal,$newVal" if defined $oldVal and defined $newVal;
2600
+ $$options{$param} = $newVal;
2601
+ } elsif ($param eq 'KeepUTCTime') {
2602
+ $$options{$param} = $static_vars{$param} = $newVal;
2590
2603
  } elsif (lc $param eq 'geodir') {
2591
2604
  $Image::ExifTool::Geolocation::geoDir = $newVal;
2592
2605
  } else {
@@ -4245,7 +4258,7 @@ sub Init($)
4245
4258
  my $self = shift;
4246
4259
  # delete all DataMember variables (lower-case names)
4247
4260
  delete $$self{$_} foreach grep /[a-z]/, keys %$self;
4248
- undef %static_vars; # clear all static variables
4261
+ %static_vars = ( KeepUTCTime => $$self{OPTIONS}{KeepUTCTime} ); # reset static variables
4249
4262
  delete $$self{FOUND_TAGS}; # list of found tags
4250
4263
  delete $$self{EXIF_DATA}; # the EXIF data block
4251
4264
  delete $$self{EXIF_POS}; # EXIF position in file
@@ -6680,12 +6693,15 @@ sub ConvertUnixTime($;$$)
6680
6693
  $time = int($time + 1e-6) if $time != int($time); # avoid round-off errors
6681
6694
  $dec = '';
6682
6695
  }
6683
- if ($toLocal) {
6684
- @tm = localtime($time);
6685
- $tz = TimeZoneString(\@tm, $time);
6686
- } else {
6696
+ if (not $toLocal) {
6687
6697
  @tm = gmtime($time);
6688
6698
  $tz = '';
6699
+ } elsif ($static_vars{KeepUTCTime}) {
6700
+ @tm = gmtime($time);
6701
+ $tz = 'Z';
6702
+ } else {
6703
+ @tm = localtime($time);
6704
+ $tz = TimeZoneString(\@tm, $time);
6689
6705
  }
6690
6706
  my $str = sprintf("%4d:%.2d:%.2d %.2d:%.2d:%.2d$dec%s",
6691
6707
  $tm[5]+1900, $tm[4]+1, $tm[3], $tm[2], $tm[1], $tm[0], $tz);
@@ -6868,10 +6884,10 @@ sub HDump($$$$;$$$)
6868
6884
  # Returns: Trailer info hash (with RAF and DirName set),
6869
6885
  # or undef if no recognized trailer was found
6870
6886
  # Notes: leaves file position unchanged
6871
- sub IdentifyTrailer($;$)
6887
+ sub IdentifyTrailer($$;$)
6872
6888
  {
6873
- my $raf = shift;
6874
- my $offset = shift || 0;
6889
+ my ($self, $raf, $offset) = @_;
6890
+ $offset or $offset = 0;
6875
6891
  my $pos = $raf->Tell();
6876
6892
  my ($buff, $type, $len);
6877
6893
  while ($raf->Seek(-$offset, 2) and ($len = $raf->Tell()) > 0) {
@@ -6900,6 +6916,9 @@ sub IdentifyTrailer($;$)
6900
6916
  $type = 'Vivo';
6901
6917
  } elsif ($buff =~ /jxrs...\0$/s) {
6902
6918
  $type = 'OnePlus';
6919
+ } elsif ($$self{ProcessGoogleTrailer}) {
6920
+ # check for Google trailer information if specific XMP tags exist
6921
+ $type = 'Google';
6903
6922
  }
6904
6923
  last;
6905
6924
  }
@@ -7052,7 +7071,7 @@ sub ProcessTrailers($$)
7052
7071
  $offset += $dirLen;
7053
7072
  last if $dataPos and $$self{TrailerStart} and $dataPos <= $$self{TrailerStart};
7054
7073
  # look for next trailer
7055
- my $nextTrail = IdentifyTrailer($raf, $offset);
7074
+ my $nextTrail = $self->IdentifyTrailer($raf, $offset);
7056
7075
  # process Google trailer after all others if necessary and not done already
7057
7076
  unless ($nextTrail) {
7058
7077
  last unless $$self{ProcessGoogleTrailer};
@@ -7504,11 +7523,7 @@ sub ProcessJPEG($$;$)
7504
7523
  }
7505
7524
  }
7506
7525
  unless ($fast) {
7507
- $trailInfo = IdentifyTrailer($raf);
7508
- # check for Google trailer information if specific XMP tags exist
7509
- if (not $trailInfo and $$self{ProcessGoogleTrailer}) {
7510
- $trailInfo = { DirName => 'Google', RAF => $raf };
7511
- }
7526
+ $trailInfo = $self->IdentifyTrailer($raf);
7512
7527
  # process trailer now unless we are doing verbose dump
7513
7528
  if ($trailInfo and $verbose < 3 and not $htmlDump) {
7514
7529
  # process trailers (keep trailInfo to finish processing later
@@ -7963,6 +7978,12 @@ sub ProcessJPEG($$;$)
7963
7978
  $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7964
7979
  undef $scalado;
7965
7980
  }
7981
+ } elsif ($$segDataPt =~ /^Qualcomm Dual Camera Attributes/) {
7982
+ $dumpType = 'Qualcomm Dual Camera';
7983
+ my $tagTablePtr = GetTagTable('Image::ExifTool::Qualcomm::DualCamera');
7984
+ DirStart(\%dirInfo, 31);
7985
+ $dirInfo{DirName} = 'Qualcomm Dual Camera';
7986
+ $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7966
7987
  } elsif ($$segDataPt =~ /^FPXR\0/) {
7967
7988
  next if $fast > 1; # skip processing for very fast
7968
7989
  $dumpType = 'FPXR';
@@ -8619,7 +8640,7 @@ sub DoProcessTIFF($$;$)
8619
8640
  }
8620
8641
  # process information in recognized trailers
8621
8642
  if ($raf) {
8622
- my $trailInfo = IdentifyTrailer($raf);
8643
+ my $trailInfo = $self->IdentifyTrailer($raf);
8623
8644
  if ($trailInfo) {
8624
8645
  # scan to find AFCP if necessary (Note: we are scanning
8625
8646
  # from a random file position in the TIFF)
@@ -8724,7 +8745,7 @@ sub DoProcessTIFF($$;$)
8724
8745
  for (;;) {
8725
8746
  last unless $extra > 12;
8726
8747
  $raf->Seek($tiffEnd); # seek back to end of image
8727
- $trailInfo = IdentifyTrailer($raf);
8748
+ $trailInfo = $self->IdentifyTrailer($raf);
8728
8749
  last unless $trailInfo;
8729
8750
  my $tbuf = '';
8730
8751
  $$trailInfo{OutFile} = \$tbuf; # rewrite trailer(s)
@@ -8941,7 +8962,7 @@ sub ProcessDirectory($$$;$)
8941
8962
  ($$dirInfo{DirLen} or not defined $$dirInfo{DirLen}))
8942
8963
  {
8943
8964
  my $addr = $$dirInfo{DirStart} + $$dirInfo{DataPos} + ($$dirInfo{Base}||0) + $$self{BASE};
8944
- if ($$self{PROCESSED}{$addr}) {
8965
+ if ($$self{PROCESSED}{$addr} and not $$dirInfo{NotDup}) {
8945
8966
  $self->Warn("$dirName pointer references previous $$self{PROCESSED}{$addr} directory");
8946
8967
  # patch for bug in Windows phone 7.5 O/S that writes incorrect InteropIFD pointer
8947
8968
  return 0 unless $dirName eq 'GPS' and $$self{PROCESSED}{$addr} eq 'InteropIFD';
@@ -9152,10 +9173,11 @@ sub AddTagToTable($$;$$)
9152
9173
  # Handle simple extraction of new tag information
9153
9174
  # Inputs: 0) ExifTool object ref, 1) tag table reference, 2) tagID, 3) value,
9154
9175
  # 4-N) parameters hash: Index, DataPt, DataPos, Base, Start, Size, Parent,
9155
- # TagInfo, ProcessProc, RAF, Format, Count
9176
+ # TagInfo, ProcessProc, RAF, Format, Count, MakeTagInfo
9156
9177
  # Returns: tag key or undef if tag not found
9157
9178
  # Notes: if value is not defined, it is extracted from DataPt using TagInfo
9158
9179
  # Format and Count if provided
9180
+ # - set MakeTagInfo to add tag info for unknown tags with name made from tag ID
9159
9181
  sub HandleTag($$$$;%)
9160
9182
  {
9161
9183
  my ($self, $tagTablePtr, $tag, $val, %parms) = @_;
@@ -9167,6 +9189,15 @@ sub HandleTag($$$$;%)
9167
9189
 
9168
9190
  if ($tagInfo) {
9169
9191
  $subdir = $$tagInfo{SubDirectory};
9192
+ } elsif ($parms{MakeTagInfo}) {
9193
+ $self->VPrint(0, $$self{INDENT}, "[adding $tag]\n") if $verbose;
9194
+ my $name = $tag;
9195
+ $name =~ s/([A-Z]) ([A-Z][ A-Z])/${1}_$2/g; # underline between acronyms
9196
+ $name =~ s/([^A-Za-z])([a-z])/$1\u$2/g; # capitalize words
9197
+ $name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters
9198
+ $name = "Tag$name" if length($name) < 2 or $name =~ /^[-0-9]/;
9199
+ $tagInfo = { Name => ucfirst($name) };
9200
+ AddTagToTable($tagTablePtr, $tag, $tagInfo);
9170
9201
  } else {
9171
9202
  return undef unless $verbose;
9172
9203
  $tagInfo = { Name => "tag $tag" }; # create temporary tagInfo hash
@@ -9224,10 +9255,11 @@ sub HandleTag($$$$;%)
9224
9255
  }
9225
9256
  $self->Warn("RawConv $tag: " . CleanWarning()) if $evalWarning;
9226
9257
  return undef unless defined $val;
9227
- $val = $$val if ref $val eq 'SCALAR';
9228
- $dataPt = \$val;
9258
+ $dataPt = ref $val eq 'SCALAR' ? $val : \$val;
9229
9259
  $subdirStart = 0;
9230
- $subdirLen = length $val;
9260
+ $subdirLen = length $$dataPt;
9261
+ } elsif (not $dataPt) {
9262
+ $dataPt = ref $val eq 'SCALAR' ? $val : \$val;
9231
9263
  }
9232
9264
  if ($$subdir{Start}) {
9233
9265
  my $valuePtr = 0;
@@ -9236,7 +9268,6 @@ sub HandleTag($$$$;%)
9236
9268
  $subdirStart += $off;
9237
9269
  $subdirLen -= $off;
9238
9270
  }
9239
- $dataPt or $dataPt = \$val;
9240
9271
  # process subdirectory information
9241
9272
  my %dirInfo = (
9242
9273
  DirName => $$subdir{DirName} || $$tagInfo{Name},
@@ -9957,6 +9988,7 @@ sub ProcessBinaryData($$$)
9957
9988
  $subdirBase = eval($$subdir{Base}) + $base;
9958
9989
  }
9959
9990
  my $start = $$subdir{Start} || 0;
9991
+ my $notDup;
9960
9992
  if ($start =~ /\$/) {
9961
9993
  # ignore directories with a zero offset (ie. missing Nikon ShotInfo entries)
9962
9994
  next unless $val;
@@ -9967,6 +9999,7 @@ sub ProcessBinaryData($$$)
9967
9999
  $len = $dataLen - $start unless $len and $len <= $dataLen - $start;
9968
10000
  } else {
9969
10001
  $start += $dirStart + $entry;
10002
+ $notDup = 1,
9970
10003
  }
9971
10004
  my %subdirInfo = (
9972
10005
  DataPt => $dataPt,
@@ -9975,6 +10008,7 @@ sub ProcessBinaryData($$$)
9975
10008
  DirStart => $start,
9976
10009
  DirLen => $len,
9977
10010
  Base => $subdirBase,
10011
+ NotDup => $notDup,
9978
10012
  );
9979
10013
  delete $$self{NO_UNKNOWN};
9980
10014
  $self->ProcessDirectory(\%subdirInfo, $subTablePtr, $$subdir{ProcessProc});
@@ -65,50 +65,50 @@ supported by ExifTool (r = read, w = write, c = create):
65
65
 
66
66
  File Types
67
67
  ------------+-------------+-------------+-------------+------------
68
- 360 r/w | DOCX r | ITC r | NUMBERS r | RAW r/w
69
- 3FR r | DPX r | J2C r | NXD r | RIFF r
70
- 3G2 r/w | DR4 r/w/c | JNG r/w | O r | RSRC r
71
- 3GP r/w | DSS r | JP2 r/w | ODP r | RTF r
72
- 7Z r | DV r | JPEG r/w | ODS r | RW2 r/w
73
- A r | DVB r/w | JSON r | ODT r | RWL r/w
74
- AA r | DVR-MS r | JXL r/w | OFR r | RWZ r
75
- AAC r | DYLIB r | K25 r | OGG r | RM r
76
- AAE r | EIP r | KDC r | OGV r | SEQ r
77
- AAX r/w | EPS r/w | KEY r | ONP r | SKETCH r
78
- ACR r | EPUB r | LA r | OPUS r | SO r
79
- AFM r | ERF r/w | LFP r | ORF r/w | SR2 r/w
80
- AI r/w | EXE r | LIF r | ORI r/w | SRF r
81
- AIFF r | EXIF r/w/c | LNK r | OTF r | SRW r/w
82
- APE r | EXR r | LRV r/w | PAC r | SVG r
83
- ARQ r/w | EXV r/w/c | M2TS r | PAGES r | SWF r
84
- ARW r/w | F4A/V r/w | M4A/V r/w | PBM r/w | THM r/w
85
- ASF r | FFF r/w | MACOS r | PCD r | TIFF r/w
86
- AVI r | FITS r | MAX r | PCX r | TORRENT r
87
- AVIF r/w | FLA r | MEF r/w | PDB r | TTC r
88
- AZW r | FLAC r | MIE r/w/c | PDF r/w | TTF r
89
- BMP r | FLIF r/w | MIFF r | PEF r/w | TXT r
90
- BPG r | FLV r | MKA r | PFA r | VCF r
91
- BTF r | FPF r | MKS r | PFB r | VNT r
92
- C2PA r | FPX r | MKV r | PFM r | VRD r/w/c
93
- CHM r | GIF r/w | MNG r/w | PGF r | VSD r
94
- COS r | GLV r/w | MOBI r | PGM r/w | WAV r
95
- CR2 r/w | GPR r/w | MODD r | PLIST r | WDP r/w
96
- CR3 r/w | GZ r | MOI r | PICT r | WEBP r/w
97
- CRM r/w | HDP r/w | MOS r/w | PMP r | WEBM r
98
- CRW r/w | HDR r | MOV r/w | PNG r/w | WMA r
99
- CS1 r/w | HEIC r/w | MP3 r | PPM r/w | WMV r
100
- CSV r | HEIF r/w | MP4 r/w | PPT r | WPG r
101
- CUR r | HTML r | MPC r | PPTX r | WTV r
102
- CZI r | ICC r/w/c | MPG r | PS r/w | WV r
103
- DCM r | ICO r | MPO r/w | PSB r/w | X3F r/w
104
- DCP r/w | ICS r | MQV r/w | PSD r/w | XCF r
105
- DCR r | IDML r | MRC r | PSP r | XISF r
106
- DFONT r | IIQ r/w | MRW r/w | QTIF r/w | XLS r
107
- DIVX r | IND r/w | MXF r | R3D r | XLSX r
108
- DJVU r | INSP r/w | NEF r/w | RA r | XMP r/w/c
109
- DLL r | INSV r | NKA r | RAF r/w | ZIP r
110
- DNG r/w | INX r | NKSC r/w | RAM r |
111
- DOC r | ISO r | NRW r/w | RAR r |
68
+ 360 r/w | DOCX r | ITC r | NUMBERS r | RAM r
69
+ 3FR r | DPX r | J2C r | NXD r | RAR r
70
+ 3G2 r/w | DR4 r/w/c | JNG r/w | O r | RAW r/w
71
+ 3GP r/w | DSS r | JP2 r/w | ODP r | RIFF r
72
+ 7Z r | DV r | JPEG r/w | ODS r | RSRC r
73
+ A r | DVB r/w | JSON r | ODT r | RTF r
74
+ AA r | DVR-MS r | JXL r/w | OFR r | RW2 r/w
75
+ AAC r | DYLIB r | K25 r | OGG r | RWL r/w
76
+ AAE r | EIP r | KDC r | OGV r | RWZ r
77
+ AAX r/w | EPS r/w | KEY r | ONP r | RM r
78
+ ACR r | EPUB r | LA r | OPUS r | SEQ r
79
+ AFM r | ERF r/w | LFP r | ORF r/w | SKETCH r
80
+ AI r/w | EXE r | LIF r | ORI r/w | SO r
81
+ AIFF r | EXIF r/w/c | LNK r | OTF r | SR2 r/w
82
+ APE r | EXR r | LRV r/w | PAC r | SRF r
83
+ ARQ r/w | EXV r/w/c | M2TS r | PAGES r | SRW r/w
84
+ ARW r/w | F4A/V r/w | M4A/V r/w | PBM r/w | SVG r
85
+ ASF r | FFF r/w | MACOS r | PCAP r | SWF r
86
+ AVI r | FITS r | MAX r | PCAPNG r | THM r/w
87
+ AVIF r/w | FLA r | MEF r/w | PCD r | TIFF r/w
88
+ AZW r | FLAC r | MIE r/w/c | PCX r | TORRENT r
89
+ BMP r | FLIF r/w | MIFF r | PDB r | TTC r
90
+ BPG r | FLV r | MKA r | PDF r/w | TTF r
91
+ BTF r | FPF r | MKS r | PEF r/w | TXT r
92
+ C2PA r | FPX r | MKV r | PFA r | VCF r
93
+ CHM r | GIF r/w | MNG r/w | PFB r | VNT r
94
+ COS r | GLV r/w | MOBI r | PFM r | VRD r/w/c
95
+ CR2 r/w | GPR r/w | MODD r | PGF r | VSD r
96
+ CR3 r/w | GZ r | MOI r | PGM r/w | WAV r
97
+ CRM r/w | HDP r/w | MOS r/w | PLIST r | WDP r/w
98
+ CRW r/w | HDR r | MOV r/w | PICT r | WEBP r/w
99
+ CS1 r/w | HEIC r/w | MP3 r | PMP r | WEBM r
100
+ CSV r | HEIF r/w | MP4 r/w | PNG r/w | WMA r
101
+ CUR r | HTML r | MPC r | PPM r/w | WMV r
102
+ CZI r | ICC r/w/c | MPG r | PPT r | WPG r
103
+ DCM r | ICO r | MPO r/w | PPTX r | WTV r
104
+ DCP r/w | ICS r | MQV r/w | PS r/w | WV r
105
+ DCR r | IDML r | MRC r | PSB r/w | X3F r/w
106
+ DFONT r | IIQ r/w | MRW r/w | PSD r/w | XCF r
107
+ DIVX r | IND r/w | MXF r | PSP r | XISF r
108
+ DJVU r | INSP r/w | NEF r/w | QTIF r/w | XLS r
109
+ DLL r | INSV r | NKA r | R3D r | XLSX r
110
+ DNG r/w | INX r | NKSC r/w | RA r | XMP r/w/c
111
+ DOC r | ISO r | NRW r/w | RAF r/w | ZIP r
112
112
 
113
113
  Meta Information
114
114
  ----------------------+----------------------+---------------------
@@ -892,6 +892,12 @@ to undef to clear the previous IgnoreTags list. Default is undef.
892
892
  Sets type of hash algorithm used for the ImageDataHash tag calculation.
893
893
  Supported options are 'MD5', 'SHA256', and 'SHA512'. Default is 'MD5'.
894
894
 
895
+ =item KeepUTCTime
896
+
897
+ Flag to keep UTC times in Zulu time zone instead of converting to local
898
+ time. Affects only times which are stored as seconds since the UTC epoch.
899
+ Default is undef.
900
+
895
901
  =item Lang
896
902
 
897
903
  Localized language for exiftool tag descriptions, etc. Available languages
@@ -904,7 +910,7 @@ set to undef to select the built-in default language. Default is 'en'.
904
910
  Flag to indicate that 64-bit file offsets are supported on this system. If
905
911
  not set, processing is aborted if a chunk larger than 2 GB is encountered.
906
912
  Set to 1 to process large chunks, or 2 to process with a warning. Default
907
- is 2.
913
+ is 1.
908
914
 
909
915
  =item LimitLongValues
910
916
 
@@ -993,6 +999,37 @@ Password for reading/writing password-protected PDF documents. Ignored if a
993
999
  password is not required. Character encoding of the password is determined
994
1000
  by the value of the Charset option at processing time. Default is undef.
995
1001
 
1002
+ =item Plot
1003
+
1004
+ Settings to override defaults for SVG plot feature. Value is a comma
1005
+ delimited string of settings, or undef to revert to default settings.
1006
+ Settings are accumulated if this option is set multiple times. Commas in
1007
+ the settings must be escaped as "&#44;". Valid settings and their default
1008
+ values are:
1009
+
1010
+ "Type=Line" - plot type (Line, Scatter or Histogram)
1011
+ "Style=Line" - data style (Line, Marker and/or Fill)
1012
+ "NBins=20" - number of bins for histogram plot
1013
+ "Size=800 600" - width,height of output image
1014
+ "Margin=60 15 15 30" - left,top,right,bottom margins around plot area
1015
+ "Legend=0 0" - x,y offset to shift plot legend
1016
+ "TxtPad=10 10" - padding between text and x,y scale
1017
+ "LineSpacing=20" - spacing between text lines
1018
+ "Stroke=1" - plot stroke width and marker-size scaling
1019
+ Title, XLabel, YLabel - plot title and x/y axis labels (no default)
1020
+ XMin, XMax - x axis minimum/maximum (autoscaling if not set)
1021
+ YMin, YMax - y axis minimum/maximum
1022
+ Multi - flag to draw multiple plots, one for each dataset
1023
+ Split - flag to split strings of numbers into lists
1024
+ (> 1 to split into lists of N items)
1025
+ "Grid=darkgray" - grid color
1026
+ "Text=black" - color of text and plot border
1027
+ "Bkg=" - background color (default is transparent)
1028
+ "Cols=red green blue black orange gray fuchsia brown turquoise gold"
1029
+ - colors for plot data
1030
+ "Marks=circle square triangle diamond star plus pentagon left down right"
1031
+ - marker-shape names for each dataset
1032
+
996
1033
  =item PrintConv
997
1034
 
998
1035
  Flag to enable automatic print conversion. Also enables inverse
@@ -1283,17 +1320,7 @@ Extract all meta information from an image.
1283
1320
 
1284
1321
  L</ExtractInfo> takes exactly the same arguments as L</ImageInfo>. The only
1285
1322
  difference is that a list of tag keys is not returned if an ARRAY reference
1286
- is given. The following options are effective in the call to
1287
- L</ExtractInfo>:
1288
-
1289
- Binary, Charset, CharsetEXIF, CharsetFileName, CharsetID3, CharsetIPTC,
1290
- CharsetPhotoshop, CharsetQuickTime, CharsetRIFF, Composite, ExtendedXMP,
1291
- ExtractEmbedded, FastScan, FixBase, HtmlDump, HtmlDumpBase, IgnoreGroups,
1292
- IgnoreMinorErrors, IgnoreTags, Lang, LargeFileSupport, MakerNotes,
1293
- MDItemTags, NoPDFList, Password, QuickTimeUTC (enforced 1904 time zero),
1294
- RequestAll, RequestTags, SaveBin, SaveFormat, SavePath, ScanForXMP, Struct,
1295
- TextOut, Unknown, Verbose, WindowsLongPath, WindowsWideFile, XAttrTags and
1296
- XMPAutoConv.
1323
+ is given.
1297
1324
 
1298
1325
  =item Return Value:
1299
1326
 
@@ -1325,11 +1352,7 @@ L</ImageInfo>.
1325
1352
  =item Inputs:
1326
1353
 
1327
1354
  Inputs are the same as L</ExtractInfo> and L</ImageInfo> except that an
1328
- image can not be specified. Options in effect are:
1329
-
1330
- Charset, CoordFormat, DateFormat, Duplicates, Escape, Exclude, Filter,
1331
- Group#, GlobalTimeShift, Lang, ListItem, ListJoin, PrintConv, Sort (if a tag
1332
- list reference is given) and StrictDate.
1355
+ image can not be specified.
1333
1356
 
1334
1357
  =item Return Value:
1335
1358
 
@@ -1337,13 +1360,6 @@ Reference to information hash, the same as with L</ImageInfo>.
1337
1360
 
1338
1361
  =back
1339
1362
 
1340
- The following options are effective in the call to L</GetInfo>:
1341
-
1342
- Charset, CoordFormat, DateFormat, Duplicates, Escape, Exclude, Filter,
1343
- Group#, GlobalTimeShift, Lang, ListItem, ListJoin, PrintConv, QuickTimeUTC
1344
- (conversion to local time), Sort (if a tag list reference is given) and
1345
- StrictDate.
1346
-
1347
1363
  =head2 WriteInfo
1348
1364
 
1349
1365
  Write meta information to a file. The specified source file is rewritten to
@@ -1428,13 +1444,6 @@ called with a source file name.
1428
1444
 
1429
1445
  =back
1430
1446
 
1431
- The following ExifTool options are effective in the call to L</WriteInfo>:
1432
-
1433
- ByteOrder, Charset, CharsetEXIF, CharsetFileName, CharsetIPTC, Compact,
1434
- Compress, FixBase, IgnoreMinorErrors, NoMultiExif, NoPDFList, Password,
1435
- QuickTimeHandler, QuickTimePad, Verbose, WindowsLongPath, WindowsWideFile
1436
- and WriteMode.
1437
-
1438
1447
  =head2 GetTagList
1439
1448
 
1440
1449
  Get a sorted list of tags from the specified information hash or tag list.
@@ -1557,12 +1566,6 @@ optional group specifier), use L</GetInfo> instead.
1557
1566
 
1558
1567
  my @keywords = $exifTool->GetValue('Keywords', 'ValueConv');
1559
1568
 
1560
- The following options are in effect when L</GetValue> is called:
1561
-
1562
- Charset, CoordFormat, DateFormat, Escape, Filter, GlobalTimeShift, Lang,
1563
- ListItem, ListJoin, PrintConv, QuickTimeUTC (conversion to local time),
1564
- StrictDate and TimeZone.
1565
-
1566
1569
  =over 4
1567
1570
 
1568
1571
  =item Inputs:
@@ -1816,11 +1819,6 @@ explicitly, either by group (with 'Adobe:*') or as a block (with 'Adobe').
1816
1819
 
1817
1820
  =back
1818
1821
 
1819
- The following ExifTool options are effective in the call to L</SetNewValue>:
1820
-
1821
- Charset, DateFormat, Escape, IgnoreMinorErrors, Lang, ListJoin, ListSplit,
1822
- PrintConv, QuickTimeUTC, StrictDate, TimeZone, Verbose and WriteMode.
1823
-
1824
1822
  =head2 GetNewValue
1825
1823
 
1826
1824
  Get the new Raw value for a tag. This is the value set by L</SetNewValue>