exiftool_vendored 13.06.0 → 13.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +55 -4
  3. data/bin/MANIFEST +1 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +2 -2
  7. data/bin/exiftool +29 -15
  8. data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  9. data/bin/lib/Image/ExifTool/APE.pm +1 -1
  10. data/bin/lib/Image/ExifTool/ASF.pm +1 -1
  11. data/bin/lib/Image/ExifTool/Apple.pm +9 -7
  12. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +12 -3
  13. data/bin/lib/Image/ExifTool/Canon.pm +19 -1
  14. data/bin/lib/Image/ExifTool/DJI.pm +1 -1
  15. data/bin/lib/Image/ExifTool/Exif.pm +2 -2
  16. data/bin/lib/Image/ExifTool/FITS.pm +2 -2
  17. data/bin/lib/Image/ExifTool/FLIF.pm +2 -2
  18. data/bin/lib/Image/ExifTool/FlashPix.pm +11 -11
  19. data/bin/lib/Image/ExifTool/Font.pm +1 -1
  20. data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  21. data/bin/lib/Image/ExifTool/HP.pm +1 -1
  22. data/bin/lib/Image/ExifTool/ICC_Profile.pm +80 -1
  23. data/bin/lib/Image/ExifTool/ID3.pm +3 -3
  24. data/bin/lib/Image/ExifTool/IPTC.pm +2 -2
  25. data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  26. data/bin/lib/Image/ExifTool/Jpeg2000.pm +8 -7
  27. data/bin/lib/Image/ExifTool/M2TS.pm +39 -9
  28. data/bin/lib/Image/ExifTool/MXF.pm +2 -2
  29. data/bin/lib/Image/ExifTool/Matroska.pm +1 -1
  30. data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  31. data/bin/lib/Image/ExifTool/PDF.pm +15 -15
  32. data/bin/lib/Image/ExifTool/PLIST.pm +3 -3
  33. data/bin/lib/Image/ExifTool/PNG.pm +6 -5
  34. data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
  35. data/bin/lib/Image/ExifTool/PhaseOne.pm +3 -3
  36. data/bin/lib/Image/ExifTool/Photoshop.pm +64 -3
  37. data/bin/lib/Image/ExifTool/Protobuf.pm +4 -4
  38. data/bin/lib/Image/ExifTool/QuickTime.pm +72 -24
  39. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +336 -91
  40. data/bin/lib/Image/ExifTool/README +4 -1
  41. data/bin/lib/Image/ExifTool/RIFF.pm +3 -3
  42. data/bin/lib/Image/ExifTool/RTF.pm +1 -1
  43. data/bin/lib/Image/ExifTool/Ricoh.pm +3 -3
  44. data/bin/lib/Image/ExifTool/Sony.pm +2 -2
  45. data/bin/lib/Image/ExifTool/TagInfoXML.pm +4 -3
  46. data/bin/lib/Image/ExifTool/TagLookup.pm +6982 -6970
  47. data/bin/lib/Image/ExifTool/TagNames.pod +48 -5
  48. data/bin/lib/Image/ExifTool/VCard.pm +2 -2
  49. data/bin/lib/Image/ExifTool/Validate.pm +3 -3
  50. data/bin/lib/Image/ExifTool/WriteExif.pl +2 -2
  51. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +47 -13
  52. data/bin/lib/Image/ExifTool/WriteXMP.pl +2 -2
  53. data/bin/lib/Image/ExifTool/Writer.pl +32 -21
  54. data/bin/lib/Image/ExifTool/XMP.pm +9 -9
  55. data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  56. data/bin/lib/Image/ExifTool.pm +65 -61
  57. data/bin/lib/Image/ExifTool.pod +41 -35
  58. data/bin/perl-Image-ExifTool.spec +1 -1
  59. data/lib/exiftool_vendored/version.rb +1 -1
  60. metadata +2 -2
@@ -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.06';
32
+ $VERSION = '13.10';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -1142,6 +1142,7 @@ my @availableOptions = (
1142
1142
  [ 'ListJoin', ', ', 'join lists together with this separator' ],
1143
1143
  [ 'ListSep', ', ', '[deprecated, use ListSplit and ListJoin instead]', 1 ],
1144
1144
  [ 'ListSplit', undef, 'regex for splitting list-type tag values when writing' ],
1145
+ # LigoGPSScale - undocumented scale for unfuzzing LIGO GPS: 1,2,3 for standard scales (1 default), or scale value
1145
1146
  [ 'MakerNotes', undef, 'extract maker notes as a block' ],
1146
1147
  [ 'MDItemTags', undef, 'extract MacOS metadata item tags' ],
1147
1148
  [ 'MissingTagValue', undef, 'value for missing tags when expanded in expressions' ],
@@ -1173,7 +1174,7 @@ my @availableOptions = (
1173
1174
  [ 'UserParam', { }, 'user parameters for additional user-defined tag values' ],
1174
1175
  [ 'Validate', undef, 'perform additional validation' ],
1175
1176
  [ 'Verbose', 0, 'print verbose messages (0-5, higher # = more verbose)' ],
1176
- [ 'WindowsLongPath', undef, 'enable support for long pathnames (enables WindowsWideFile)' ],
1177
+ [ 'WindowsLongPath', 1, 'enable support for long pathnames (enables WindowsWideFile)' ],
1177
1178
  [ 'WindowsWideFile', undef, 'force the use of Windows wide-character file routines' ], # (see forum15208)
1178
1179
  [ 'WriteMode', 'wcg', 'enable all write modes by default' ],
1179
1180
  [ 'XAttrTags', undef, 'extract MacOS extended attribute tags' ],
@@ -1265,7 +1266,9 @@ my %systemTagsNotes = (
1265
1266
  Use the -a or L<Duplicates|../ExifTool.html#Duplicates> option to see all warnings if more than one
1266
1267
  occurred. Minor warnings may be ignored with the -m or L<IgnoreMinorErrors|../ExifTool.html#IgnoreMinorErrors>
1267
1268
  option. Minor warnings with a capital "M" in the "[Minor]" designation
1268
- indicate that the processing is affected by ignoring the warning
1269
+ indicate that the processing is affected by ignoring the warning. Multiple
1270
+ identical warnings are indicated by a count after the warning message, eg.
1271
+ "[x2]" if the same warning occurred twice
1269
1272
  },
1270
1273
  },
1271
1274
  Comment => {
@@ -2661,7 +2664,7 @@ sub ExtractInfo($;@)
2661
2664
  my $fast = $$options{FastScan} || 0;
2662
2665
  my $req = $$self{REQ_TAG_LOOKUP};
2663
2666
  my $reqAll = $$options{RequestAll} || 0;
2664
- my (%saveOptions, $reEntry, $rsize, $zid, $type, @startTime, $saveOrder, $isDir);
2667
+ my (%saveOptions, $reEntry, $rsize, $zid, $type, @startTime, $saveOrder, $isDir, $i);
2665
2668
 
2666
2669
  # check for internal ReEntry option to allow recursive calls to ExtractInfo
2667
2670
  if (ref $_[1] eq 'HASH' and $_[1]{ReEntry} and
@@ -2718,7 +2721,7 @@ sub ExtractInfo($;@)
2718
2721
  if ($$req{processingtime} or $reqAll) {
2719
2722
  eval { require Time::HiRes; @startTime = Time::HiRes::gettimeofday() };
2720
2723
  if (not @startTime and $$req{processingtime}) {
2721
- $self->WarnOnce('Install Time::HiRes to generate ProcessingTime');
2724
+ $self->Warn('Install Time::HiRes to generate ProcessingTime');
2722
2725
  }
2723
2726
  }
2724
2727
 
@@ -2729,12 +2732,12 @@ sub ExtractInfo($;@)
2729
2732
  if (require Digest::SHA) {
2730
2733
  $$self{ImageDataHash} = Digest::SHA->new($1);
2731
2734
  } else {
2732
- $self->WarnOnce("Install Digest::SHA to calculate image data SHA$1");
2735
+ $self->Warn("Install Digest::SHA to calculate image data SHA$1");
2733
2736
  }
2734
2737
  } elsif (require Digest::MD5) {
2735
2738
  $$self{ImageDataHash} = Digest::MD5->new;
2736
2739
  } else {
2737
- $self->WarnOnce('Install Digest::MD5 to calculate image data MD5');
2740
+ $self->Warn('Install Digest::MD5 to calculate image data MD5');
2738
2741
  }
2739
2742
  }
2740
2743
  ++$$self{FILE_SEQUENCE}; # count files read
@@ -2774,7 +2777,7 @@ sub ExtractInfo($;@)
2774
2777
  $path =~ tr/\\/\// if $^O eq 'MSWin32'; # return forward slashes
2775
2778
  $self->FoundTag('FilePath', $path);
2776
2779
  } elsif ($$req{filepath}) {
2777
- $self->WarnOnce('The Perl Cwd module must be installed to use FilePath');
2780
+ $self->Warn('The Perl Cwd module must be installed to use FilePath');
2778
2781
  }
2779
2782
  }
2780
2783
  # get size of resource fork on Mac OS
@@ -3113,6 +3116,15 @@ sub ExtractInfo($;@)
3113
3116
  # and as such it can't be used in user-defined Composite tags
3114
3117
  @startTime and $self->FoundTag('ProcessingTime', Time::HiRes::tv_interval(\@startTime));
3115
3118
 
3119
+ # add numbers to warnings with multiple occurrences
3120
+ if (%{$$self{WAS_WARNED}}) {
3121
+ my ($tag, $val) = ( 'Warning', $$self{VALUE} );
3122
+ for ($i=1; $$val{$tag}; ++$i) {
3123
+ my $n = $$self{WAS_WARNED}{$$val{$tag}};
3124
+ $$val{$tag} .= " [x$n]" if $n and $n > 1;
3125
+ $tag = "Warning ($i)";
3126
+ }
3127
+ }
3116
3128
  # restore original options
3117
3129
  %saveOptions and $$self{OPTIONS} = \%saveOptions;
3118
3130
 
@@ -4252,7 +4264,7 @@ sub Init($)
4252
4264
  $$self{PROCESSED} = { }; # hash of processed directory start positions
4253
4265
  $$self{DIR_COUNT} = { }; # count various types of directories
4254
4266
  $$self{DUPL_TAG} = { }; # last-used index for duplicate-tag keys
4255
- $$self{WARNED_ONCE}= { }; # WarnOnce() warnings already issued
4267
+ $$self{WAS_WARNED} = { }; # number of times each warning was issued
4256
4268
  $$self{WRITTEN} = { }; # list of tags written (selected tags only)
4257
4269
  $$self{FORCE_WRITE}= { }; # ForceWrite lookup (set from ForceWrite tag)
4258
4270
  $$self{FOUND_DIR} = { }; # hash of directory names found in file
@@ -4626,13 +4638,14 @@ sub SplitFileName($)
4626
4638
  sub EncodeFileName($$;$)
4627
4639
  {
4628
4640
  my ($self, $file, $force) = @_;
4641
+ return 0 if $file eq '-'; # special case for stdin pipe
4629
4642
  my $enc = $$self{OPTIONS}{CharsetFileName};
4630
4643
  my $hasSpecialChars;
4631
4644
  if ($file =~ /[\x80-\xff]/) {
4632
4645
  $hasSpecialChars = 1;
4633
4646
  if (not $enc and $^O eq 'MSWin32') {
4634
4647
  if (IsUTF8(\$file) < 0) {
4635
- $self->WarnOnce('FileName encoding must be specified') if not defined $enc;
4648
+ $self->Warn('FileName encoding must be specified') if not defined $enc;
4636
4649
  return 0;
4637
4650
  } else {
4638
4651
  $enc = 'UTF8'; # assume UTF8
@@ -4649,7 +4662,7 @@ sub EncodeFileName($$;$)
4649
4662
  $_[1] = $self->Decode($file, $enc, undef, 'UTF16', 'II') . "\0\0";
4650
4663
  return 1;
4651
4664
  }
4652
- $self->WarnOnce('Install Win32API::File for Windows wide/long file name support');
4665
+ $self->Warn('Install Win32API::File for Windows wide/long file name support');
4653
4666
  } elsif ($enc ne 'UTF8') {
4654
4667
  # recode as UTF-8 for other platforms if necessary
4655
4668
  $_[1] = $self->Decode($file, $enc, undef, 'UTF8');
@@ -4697,13 +4710,13 @@ sub WindowsLongPath($$)
4697
4710
  $debug and print $out "WindowsLongPath input : $path$suffix\n";
4698
4711
 
4699
4712
  for (;;) { # (cheap goto)
4700
- ($longPath = $path) =~ tr(/)(\\); # convert slashes to backslashes
4713
+ ($longPath = $path) =~ tr(/)(\\); # convert slashes to backslashes
4701
4714
  last if $longPath =~ /^\\\\\?\\/; # already a device path in the format we want
4702
-
4715
+
4703
4716
  unless ($k32GetFullPathName) { # need to import (once) GetFullPathNameW
4704
4717
  last if defined $k32GetFullPathName;
4705
4718
  unless (eval { require Win32::API }) {
4706
- $self->WarnOnce('Install Win32::API to use WindowsLongPath option');
4719
+ $self->Warn('Install Win32::API to use WindowsLongPath option');
4707
4720
  last;
4708
4721
  }
4709
4722
  $k32GetFullPathName = Win32::API->new('KERNEL32', 'GetFullPathNameW', 'PNPP', 'I');
@@ -4713,13 +4726,13 @@ sub WindowsLongPath($$)
4713
4726
  last;
4714
4727
  }
4715
4728
  }
4716
- my $enc = $$self{OPTIONS}{CharsetFileName};
4717
- my $encPath = $self->Encode($longPath, 'UTF16', 'II', $enc);# need to encode to UTF16
4729
+ my $enc = $$self{OPTIONS}{CharsetFileName} || 'UTF8';
4730
+ my $encPath = $self->Decode($longPath, $enc, undef, 'UTF16', 'II');# need to encode to UTF16
4718
4731
  my $lenReq = $k32GetFullPathName->Call($encPath,0,0,0) + 1; # first pass gets length required, +1 for safety (null?)
4719
4732
  my $fullPath = "\0" x $lenReq x 2; # create buffer to hold full path
4720
4733
  $k32GetFullPathName->Call($encPath, $lenReq, $fullPath, 0); # fullPath is UTF16 now
4721
4734
  $longPath = $self->Decode($fullPath, 'UTF16', 'II', $enc);
4722
-
4735
+
4723
4736
  last if length($longPath) <= 247 - length($suffix);
4724
4737
 
4725
4738
  if ($longPath =~ /^\\\\/) {
@@ -4916,9 +4929,9 @@ sub GetFileTime($$)
4916
4929
  # on Windows, try to work around incorrect file times when daylight saving time is in effect
4917
4930
  if ($^O eq 'MSWin32') {
4918
4931
  if (not eval { require Win32::API }) {
4919
- $self->WarnOnce('Install Win32::API for proper handling of Windows file times', 1);
4932
+ $self->Warn('Install Win32::API for proper handling of Windows file times', 1);
4920
4933
  } elsif (not eval { require Win32API::File }) {
4921
- $self->WarnOnce('Install Win32API::File for proper handling of Windows file times', 1);
4934
+ $self->Warn('Install Win32API::File for proper handling of Windows file times', 1);
4922
4935
  } else {
4923
4936
  # get Win32 handle, needed for GetFileTime
4924
4937
  my $win32Handle = eval { Win32API::File::GetOsFHandle($file) };
@@ -5494,28 +5507,21 @@ sub AddCleanup($)
5494
5507
  sub Warn($$;$)
5495
5508
  {
5496
5509
  my ($self, $str, $ignorable) = @_;
5497
- my $noWarn = $self->Options('NoWarning');
5510
+ my $noWarn = $$self{OPTIONS}{NoWarning};
5498
5511
  if ($ignorable) {
5499
5512
  return 0 if $$self{OPTIONS}{IgnoreMinorErrors};
5500
5513
  return 0 if $ignorable eq '3' and $$self{OPTIONS}{Validate};
5501
5514
  return 1 if defined $noWarn and eval { $str =~ /$noWarn/ };
5502
5515
  $str = $ignorable eq '2' ? "[Minor] $str" : "[minor] $str";
5503
5516
  }
5504
- $self->FoundTag('Warning', $str) unless defined $noWarn and eval { $str =~ /$noWarn/ };
5505
- return 1;
5506
- }
5507
-
5508
- #------------------------------------------------------------------------------
5509
- # Add warning tag only once per processed file
5510
- # Inputs: 0) ExifTool object reference, 1) warning message, 2) true if minor
5511
- # Returns: true if warning tag was added
5512
- sub WarnOnce($$;$)
5513
- {
5514
- my ($self, $str, $ignorable) = @_;
5515
- return 0 if $ignorable and $$self{OPTIONS}{IgnoreMinorErrors};
5516
- unless ($$self{WARNED_ONCE}{$str}) {
5517
- $self->Warn($str, $ignorable);
5518
- $$self{WARNED_ONCE}{$str} = 1;
5517
+ unless (defined $noWarn and eval { $str =~ /$noWarn/ }) {
5518
+ # add each warning only once but count number of occurrences
5519
+ if ($$self{WAS_WARNED}{$str}) {
5520
+ ++$$self{WAS_WARNED}{$str};
5521
+ } else {
5522
+ $self->FoundTag('Warning', $str);
5523
+ $$self{WAS_WARNED}{$str} = 1;
5524
+ }
5519
5525
  }
5520
5526
  return 1;
5521
5527
  }
@@ -6246,7 +6252,7 @@ sub Decode($$$;$$$)
6246
6252
  }
6247
6253
 
6248
6254
  #------------------------------------------------------------------------------
6249
- # Encode string with specified encoding
6255
+ # Encode string (in Charset encoding) to specified encoding
6250
6256
  # Inputs: 0) ExifTool object ref, 1) string, 2) destination character set name,
6251
6257
  # 3) optional destination byte order (2-byte and 4-byte fixed-width sets only)
6252
6258
  # Returns: string in specified encoding
@@ -6545,11 +6551,13 @@ sub ConvertDateTime($$)
6545
6551
  $fmt =~ s/(^|[^%])((%%)*)%-?\.?\d*f/$1$2$frac/g;
6546
6552
  }
6547
6553
  # parse %z and %s ourself (to handle time zones properly)
6548
- if ($fmt =~ /%[sz]/) {
6554
+ if ($fmt =~ /%:?[sz]/) {
6549
6555
  # use system time zone unless otherwise specified
6550
6556
  $tz = TimeZoneString(\@a, TimeLocal(@a)) if not $tz and eval { require Time::Local };
6551
6557
  # remove colon, setting to UTC if time zone is not numeric
6552
- $tz = ($tz and $tz=~/^([-+]\d{2}):(\d{2})$/) ? "$1$2" : '+0000';
6558
+ $tz = '+00:00' unless $tz and $tz=~/^[-+]\d{2}:\d{2}$/;
6559
+ $fmt =~ s/(^|[^%])((%%)*)%:z/$1$2$tz/g; # convert '%:z' format codes
6560
+ $tz =~ s/://;
6553
6561
  $fmt =~ s/(^|[^%])((%%)*)%z/$1$2$tz/g; # convert '%z' format codes
6554
6562
  if ($fmt =~ /%s/ and eval { require Time::Local }) {
6555
6563
  # calculate seconds since the Epoch, UTC
@@ -7590,13 +7598,13 @@ sub ProcessJPEG($$;$)
7590
7598
  my ($size, $off) = unpack('x67N2', $$segDataPt);
7591
7599
  my $guid = substr($$segDataPt, 35, 32);
7592
7600
  if ($guid =~ /[^A-Za-z0-9]/) { # (technically, should be uppercase)
7593
- $self->WarnOnce($tip = 'Invalid extended XMP GUID');
7601
+ $self->Warn($tip = 'Invalid extended XMP GUID');
7594
7602
  } else {
7595
7603
  my $extXMP = $extendedXMP{$guid};
7596
7604
  if (not $extXMP) {
7597
7605
  $extXMP = $extendedXMP{$guid} = { };
7598
7606
  } elsif ($size != $$extXMP{Size}) {
7599
- $self->WarnOnce('Inconsistent extended XMP size');
7607
+ $self->Warn('Inconsistent extended XMP size');
7600
7608
  }
7601
7609
  $$extXMP{Size} = $size;
7602
7610
  $$extXMP{$off} = substr($$segDataPt, 75);
@@ -7605,7 +7613,7 @@ sub ProcessJPEG($$;$)
7605
7613
  # (delay processing extended XMP until after reading all segments)
7606
7614
  }
7607
7615
  } else {
7608
- $self->WarnOnce($tip = 'Invalid extended XMP segment');
7616
+ $self->Warn($tip = 'Invalid extended XMP segment');
7609
7617
  }
7610
7618
  } elsif ($$segDataPt =~ /^QVCI\0/) {
7611
7619
  $dumpType = 'QVCI';
@@ -7628,7 +7636,7 @@ sub ProcessJPEG($$;$)
7628
7636
  }
7629
7637
  if (defined $flirCount) {
7630
7638
  if (defined $flirChunk[$chunkNum]) {
7631
- $self->WarnOnce('Duplicate FLIR chunk number(s)');
7639
+ $self->Warn('Duplicate FLIR chunk number(s)');
7632
7640
  $flirChunk[$chunkNum] .= substr($$segDataPt, 8);
7633
7641
  } else {
7634
7642
  $flirChunk[$chunkNum] = substr($$segDataPt, 8);
@@ -7648,7 +7656,7 @@ sub ProcessJPEG($$;$)
7648
7656
  undef $flirCount; # prevent reprocessing
7649
7657
  }
7650
7658
  } else {
7651
- $self->WarnOnce('Invalid or extraneous FLIR chunk(s)');
7659
+ $self->Warn('Invalid or extraneous FLIR chunk(s)');
7652
7660
  }
7653
7661
  } elsif ($$segDataPt =~ /^PARROT\0(II\x2a\0|MM\0\x2a)/) {
7654
7662
  # (don't know if this could span multiple segments)
@@ -7693,7 +7701,7 @@ sub ProcessJPEG($$;$)
7693
7701
  }
7694
7702
  if (defined $iccChunkCount) {
7695
7703
  if (defined $iccChunk[$chunkNum]) {
7696
- $self->WarnOnce('Duplicate ICC_Profile chunk number(s)');
7704
+ $self->Warn('Duplicate ICC_Profile chunk number(s)');
7697
7705
  $iccChunk[$chunkNum] .= substr($$segDataPt, 14);
7698
7706
  } else {
7699
7707
  $iccChunk[$chunkNum] = substr($$segDataPt, 14);
@@ -7716,7 +7724,7 @@ sub ProcessJPEG($$;$)
7716
7724
  undef $iccChunkCount; # prevent reprocessing
7717
7725
  }
7718
7726
  } else {
7719
- $self->WarnOnce('Invalid or extraneous ICC_Profile chunk(s)');
7727
+ $self->Warn('Invalid or extraneous ICC_Profile chunk(s)');
7720
7728
  }
7721
7729
  } elsif ($$segDataPt =~ /^FPXR\0/) {
7722
7730
  next if $fast > 1; # skip processing for very fast
@@ -8060,7 +8068,7 @@ sub ProcessJPEG($$;$)
8060
8068
  my $type = substr($$segDataPt, 12, 4);
8061
8069
  # a Microsoft bug writes $len and $type incorrectly as little-endian
8062
8070
  if ($type eq 'bmuj') {
8063
- $self->WarnOnce('Wrong byte order in C2PA APP11 JUMBF header');
8071
+ $self->Warn('Wrong byte order in C2PA APP11 JUMBF header');
8064
8072
  $type = 'jumb';
8065
8073
  $len = unpack('x8V', $$segDataPt);
8066
8074
  # fix the header
@@ -8737,23 +8745,18 @@ sub GetTagTable($)
8737
8745
  # try to load module for this table
8738
8746
  if ($tableName =~ /(.*)::/) {
8739
8747
  my $module = $1;
8740
- if (eval "require $module") {
8748
+ if (not eval "require $module") {
8749
+ $@ and warn $@;
8750
+ } elsif (not %$tableName) {
8741
8751
  # load additional modules if required
8742
- if (not %$tableName) {
8743
- if ($module eq 'Image::ExifTool::XMP') {
8744
- require 'Image/ExifTool/XMP2.pl';
8745
- } elsif ($tableName eq 'Image::ExifTool::QuickTime::Stream') {
8746
- require 'Image/ExifTool/QuickTimeStream.pl';
8747
- }
8752
+ if ($module eq 'Image::ExifTool::XMP') {
8753
+ require 'Image/ExifTool/XMP2.pl';
8754
+ } elsif ($tableName eq 'Image::ExifTool::QuickTime::Stream') {
8755
+ require 'Image/ExifTool/QuickTimeStream.pl';
8748
8756
  }
8749
- } else {
8750
- $@ and warn $@;
8751
8757
  }
8752
8758
  }
8753
- unless (%$tableName) {
8754
- warn "Can't find table $tableName\n";
8755
- return undef;
8756
- }
8759
+ %$tableName or warn("Can't find table $tableName\n"), return undef;
8757
8760
  }
8758
8761
  no strict 'refs';
8759
8762
  $table = \%$tableName;
@@ -8960,8 +8963,9 @@ sub GetTagInfo($$$;$$$)
8960
8963
  next;
8961
8964
  }
8962
8965
  }
8963
- # don't return Unknown tags unless that option is set (also see forum13716)
8964
- if ($$tagInfo{Unknown} and not $$options{Unknown} and not
8966
+ # don't return Unknown tags unless that option is set or we are writing (also see forum13716)
8967
+ if ($$tagInfo{Unknown} and not $$options{Unknown} and
8968
+ (not $$self{IsWriting} or $$tagInfo{AddedUnknown}) and not
8965
8969
  ($$options{Verbose} or $$self{HTML_DUMP} or
8966
8970
  ($$options{Validate} and not $$tagInfo{AddedUnknown})))
8967
8971
  {
@@ -613,8 +613,10 @@ different when copying tags with L</SetNewValuesFromFile>.
613
613
  Format for printing date/time values. See C<strftime> in the L<POSIX>
614
614
  package and L<https://exiftool.org/filename.html#codes> for details about
615
615
  the format string. If the date can not be converted, the value is left
616
- unchanged unless the StrictDate option is set. Timezones are ignored. The
617
- inverse conversion (ie. when calling L</SetNewValue>) is performed only if
616
+ unchanged unless the StrictDate option is set. ExifTool adds a few
617
+ additional format specifiers (C<%f>, C<%s> and C<%z>), see
618
+ L<https://exiftool.org/filename.html#codes> for more details. The inverse
619
+ conversion (ie. when calling L</SetNewValue>) is performed only if
618
620
  POSIX::strptime or Time::Piece is installed. The default setting of undef
619
621
  causes date/time values to remain in standard EXIF format (similar to a
620
622
  DateFormat of "%Y:%m:%d %H:%M:%S").
@@ -2559,39 +2561,39 @@ Ducky, EPPIM, EXE, EXIF, ExifIFD, ExifTool, FITS, FLAC, FLIR, File, Flash,
2559
2561
  FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF, GIMP, GM, GPS,
2560
2562
  GSpherical, Garmin, GeoTiff, GlobParamIFD, GoPro, GraphConv, H264, HP, HTC,
2561
2563
  HTML, HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-equiv,
2562
- ICC-chrm, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view, ICC_Profile,
2563
- ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2, ID3v2_3, ID3v2_4, IFD0, IFD1,
2564
- IPTC, IPTC#, ISO, ITC, InfiRay, Insta360, InteropIFD, ItemList, JFIF, JFXX,
2565
- JPEG, JPEG-HDR, JPS, JSON, JUMBF, JVC, Jpeg2000, KDC_IFD, Keys, Kodak,
2566
- KodakBordersIFD, KodakEffectsIFD, KodakIFD, KyoceraRaw, LNK, Leaf,
2567
- LeafSubIFD, Leica, Lyrics3, Lytro, M-RAW, M2TS, MAC, MIE-Audio, MIE-Camera,
2568
- MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS, MIE-Geo, MIE-Image,
2569
- MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient, MIE-Preview,
2570
- MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MISB, MNG, MOBI, MOI,
2571
- MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS, MakerNotes, MakerUnknown,
2572
- Matroska, MediaJukebox, Meta, MetaIFD, Microsoft, Minolta, MinoltaRaw,
2573
- Motorola, NITF, Nextbase, Nikon, NikonCapture, NikonCustom, NikonScan,
2574
- NikonSettings, NineEdits, Nintendo, Ocad, Ogg, Olympus, OpenEXR, Opus, PDF,
2575
- PICT, PNG, PNG-cICP, PNG-pHYs, PSP, Palm, Panasonic, PanasonicRaw, Parrot,
2576
- Pentax, PhaseOne, PhotoCD, PhotoMechanic, Photoshop, PictureInfo,
2577
- PostScript, PreviewIFD, PrintIM, ProfileIFD, Qualcomm, QuickTime, RAF, RAF2,
2578
- RIFF, RMETA, RSRC, RTF, Radiance, Rawzor, Real, Real-CONT, Real-MDPR,
2579
- Real-PROP, Real-RA3, Real-RA4, Real-RA5, Real-RJMD, Reconyx, Red, Ricoh,
2580
- SEAL, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG, Samsung, Sanyo, Scalado,
2581
- Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD, System, Theora, Torrent,
2582
- Track#, UserData, VCalendar, VCard, VNote, Version0, Vorbis, WTV, XML, XMP,
2583
- XMP-DICOM, XMP-Device, XMP-GAudio, XMP-GCamera, XMP-GContainer,
2584
- XMP-GCreations, XMP-GDepth, XMP-GFocus, XMP-GImage, XMP-GPano,
2585
- XMP-GSpherical, XMP-LImage, XMP-MP, XMP-MP1, XMP-PixelLive, XMP-aas,
2586
- XMP-acdsee, XMP-acdsee-rs, XMP-album, XMP-apple-fi, XMP-ast, XMP-aux,
2587
- XMP-cc, XMP-cell, XMP-crd, XMP-creatorAtom, XMP-crs, XMP-dc, XMP-dex,
2588
- XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-et, XMP-exif, XMP-exifEX,
2589
- XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-hdr, XMP-hdrgm,
2590
- XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro, XMP-microsoft,
2591
- XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-nine, XMP-panorama, XMP-pdf,
2592
- XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-pmi, XMP-prism,
2593
- XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-sdc, XMP-swf, XMP-tiff, XMP-x,
2594
- XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpDSA, XMP-xmpMM, XMP-xmpNote,
2564
+ ICC-chrm, ICC-cicp, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view,
2565
+ ICC_Profile, ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2, ID3v2_3, ID3v2_4,
2566
+ IFD0, IFD1, IPTC, IPTC#, ISO, ITC, InfiRay, Insta360, InteropIFD, ItemList,
2567
+ JFIF, JFXX, JPEG, JPEG-HDR, JPS, JSON, JUMBF, JVC, Jpeg2000, KDC_IFD, Keys,
2568
+ Kodak, KodakBordersIFD, KodakEffectsIFD, KodakIFD, KyoceraRaw, LIGO, LNK,
2569
+ Leaf, LeafSubIFD, Leica, Lyrics3, Lytro, M-RAW, M2TS, MAC, MIE-Audio,
2570
+ MIE-Camera, MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS, MIE-Geo,
2571
+ MIE-Image, MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient,
2572
+ MIE-Preview, MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MISB,
2573
+ MNG, MOBI, MOI, MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS, MakerNotes,
2574
+ MakerUnknown, Matroska, MediaJukebox, Meta, MetaIFD, Microsoft, Minolta,
2575
+ MinoltaRaw, Motorola, NITF, Nextbase, Nikon, NikonCapture, NikonCustom,
2576
+ NikonScan, NikonSettings, NineEdits, Nintendo, Ocad, Ogg, Olympus, OpenEXR,
2577
+ Opus, PDF, PICT, PNG, PNG-cICP, PNG-pHYs, PSP, Palm, Panasonic,
2578
+ PanasonicRaw, Parrot, Pentax, PhaseOne, PhotoCD, PhotoMechanic, Photoshop,
2579
+ PictureInfo, PostScript, PreviewIFD, PrintIM, ProfileIFD, Qualcomm,
2580
+ QuickTime, RAF, RAF2, RIFF, RMETA, RSRC, RTF, Radiance, Rawzor, Real,
2581
+ Real-CONT, Real-MDPR, Real-PROP, Real-RA3, Real-RA4, Real-RA5, Real-RJMD,
2582
+ Reconyx, Red, Ricoh, SEAL, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG,
2583
+ Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD,
2584
+ System, Theora, Torrent, Track#, UserData, VCalendar, VCard, VNote,
2585
+ Version0, Vorbis, WTV, XML, XMP, XMP-DICOM, XMP-Device, XMP-GAudio,
2586
+ XMP-GCamera, XMP-GContainer, XMP-GCreations, XMP-GDepth, XMP-GFocus,
2587
+ XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP, XMP-MP1,
2588
+ XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-acdsee-rs, XMP-album, XMP-apple-fi,
2589
+ XMP-ast, XMP-aux, XMP-cc, XMP-cell, XMP-crd, XMP-creatorAtom, XMP-crs,
2590
+ XMP-dc, XMP-dex, XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-et, XMP-exif,
2591
+ XMP-exifEX, XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-hdr,
2592
+ XMP-hdrgm, XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro,
2593
+ XMP-microsoft, XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-nine, XMP-panorama,
2594
+ XMP-pdf, XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-pmi,
2595
+ XMP-prism, XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-sdc, XMP-swf, XMP-tiff,
2596
+ XMP-x, XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpDSA, XMP-xmpMM, XMP-xmpNote,
2595
2597
  XMP-xmpPLUS, XMP-xmpRights, XMP-xmpTPg, ZIP, iTunes
2596
2598
 
2597
2599
  =item Family 2 (Category):
@@ -2832,6 +2834,10 @@ for the system. In Windows this also has the effect of activating Unicode
2832
2834
  filename support via the special Windows wide-character i/o routines if
2833
2835
  Win32API::File is available.
2834
2836
 
2837
+ Note that setting the L</WindowsWideFile> or L</WindowsLongPath> option
2838
+ causes L</CharsetFileName> to default to 'UTF8' in Windows if not defined,
2839
+ and L</WindowsLongPath> is set by default in ExifTool 13.07 and later.
2840
+
2835
2841
  =item Internal Character Sets:
2836
2842
 
2837
2843
  The encodings used to store strings in the various metadata formats. These
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 13.06
3
+ Version: 13.10
4
4
  Release: 1
5
5
  License: Artistic/GPL
6
6
  Group: Development/Libraries/Perl
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExiftoolVendored
4
- VERSION = Gem::Version.new('13.06.0')
4
+ VERSION = Gem::Version.new('13.10.0')
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exiftool_vendored
3
3
  version: !ruby/object:Gem::Version
4
- version: 13.06.0
4
+ version: 13.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-12-05 00:00:00.000000000 Z
12
+ date: 2024-12-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool