exiftool-vendored.pl 12.31.0 → 12.39.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 (201) hide show
  1. package/LICENSE +10 -3
  2. package/bin/Changes +130 -4
  3. package/bin/MANIFEST +3 -0
  4. package/bin/META.json +1 -1
  5. package/bin/META.yml +1 -1
  6. package/bin/README +45 -45
  7. package/bin/arg_files/xmp2exif.args +2 -1
  8. package/bin/exiftool +128 -96
  9. package/bin/lib/File/RandomAccess.pm +1 -1
  10. package/bin/lib/File/RandomAccess.pod +2 -2
  11. package/bin/lib/Image/ExifTool/AES.pm +1 -1
  12. package/bin/lib/Image/ExifTool/AFCP.pm +1 -1
  13. package/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  14. package/bin/lib/Image/ExifTool/APE.pm +1 -1
  15. package/bin/lib/Image/ExifTool/APP12.pm +1 -1
  16. package/bin/lib/Image/ExifTool/ASF.pm +1 -1
  17. package/bin/lib/Image/ExifTool/Apple.pm +1 -1
  18. package/bin/lib/Image/ExifTool/Audible.pm +1 -1
  19. package/bin/lib/Image/ExifTool/BMP.pm +1 -1
  20. package/bin/lib/Image/ExifTool/BPG.pm +1 -1
  21. package/bin/lib/Image/ExifTool/BZZ.pm +1 -1
  22. package/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
  23. package/bin/lib/Image/ExifTool/BuildTagLookup.pm +17 -5
  24. package/bin/lib/Image/ExifTool/CBOR.pm +331 -0
  25. package/bin/lib/Image/ExifTool/Canon.pm +171 -13
  26. package/bin/lib/Image/ExifTool/CanonCustom.pm +13 -3
  27. package/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  28. package/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
  29. package/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
  30. package/bin/lib/Image/ExifTool/Casio.pm +1 -1
  31. package/bin/lib/Image/ExifTool/Charset.pm +3 -1
  32. package/bin/lib/Image/ExifTool/DICOM.pm +1 -1
  33. package/bin/lib/Image/ExifTool/DJI.pm +1 -1
  34. package/bin/lib/Image/ExifTool/DNG.pm +1 -1
  35. package/bin/lib/Image/ExifTool/DPX.pm +1 -1
  36. package/bin/lib/Image/ExifTool/DV.pm +1 -1
  37. package/bin/lib/Image/ExifTool/DarwinCore.pm +3 -3
  38. package/bin/lib/Image/ExifTool/DjVu.pm +1 -1
  39. package/bin/lib/Image/ExifTool/EXE.pm +1 -1
  40. package/bin/lib/Image/ExifTool/Exif.pm +118 -4
  41. package/bin/lib/Image/ExifTool/FITS.pm +1 -1
  42. package/bin/lib/Image/ExifTool/FLAC.pm +1 -1
  43. package/bin/lib/Image/ExifTool/FLIF.pm +1 -1
  44. package/bin/lib/Image/ExifTool/FLIR.pm +48 -11
  45. package/bin/lib/Image/ExifTool/Fixup.pm +1 -1
  46. package/bin/lib/Image/ExifTool/Flash.pm +1 -1
  47. package/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
  48. package/bin/lib/Image/ExifTool/Font.pm +1 -1
  49. package/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
  50. package/bin/lib/Image/ExifTool/FujiFilm.pm +1 -1
  51. package/bin/lib/Image/ExifTool/GE.pm +1 -1
  52. package/bin/lib/Image/ExifTool/GIF.pm +6 -2
  53. package/bin/lib/Image/ExifTool/GIMP.pm +1 -1
  54. package/bin/lib/Image/ExifTool/GPS.pm +15 -11
  55. package/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
  56. package/bin/lib/Image/ExifTool/Geotag.pm +14 -3
  57. package/bin/lib/Image/ExifTool/GoPro.pm +1 -1
  58. package/bin/lib/Image/ExifTool/H264.pm +1 -1
  59. package/bin/lib/Image/ExifTool/HP.pm +1 -1
  60. package/bin/lib/Image/ExifTool/HTML.pm +1 -1
  61. package/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
  62. package/bin/lib/Image/ExifTool/ICC_Profile.pm +97 -5
  63. package/bin/lib/Image/ExifTool/ID3.pm +1 -1
  64. package/bin/lib/Image/ExifTool/IPTC.pm +1 -1
  65. package/bin/lib/Image/ExifTool/ISO.pm +1 -1
  66. package/bin/lib/Image/ExifTool/ITC.pm +1 -1
  67. package/bin/lib/Image/ExifTool/Import.pm +1 -1
  68. package/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  69. package/bin/lib/Image/ExifTool/JPEG.pm +6 -2
  70. package/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  71. package/bin/lib/Image/ExifTool/JSON.pm +8 -4
  72. package/bin/lib/Image/ExifTool/JVC.pm +1 -1
  73. package/bin/lib/Image/ExifTool/Jpeg2000.pm +155 -25
  74. package/bin/lib/Image/ExifTool/Kodak.pm +1 -1
  75. package/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  76. package/bin/lib/Image/ExifTool/LIF.pm +1 -1
  77. package/bin/lib/Image/ExifTool/LNK.pm +1 -1
  78. package/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
  79. package/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
  80. package/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  81. package/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  82. package/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  83. package/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
  84. package/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
  85. package/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
  86. package/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
  87. package/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
  88. package/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
  89. package/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
  90. package/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
  91. package/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
  92. package/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
  93. package/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  94. package/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  95. package/bin/lib/Image/ExifTool/Leaf.pm +1 -1
  96. package/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  97. package/bin/lib/Image/ExifTool/M2TS.pm +1 -1
  98. package/bin/lib/Image/ExifTool/MIE.pm +1 -1
  99. package/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
  100. package/bin/lib/Image/ExifTool/MIFF.pm +1 -1
  101. package/bin/lib/Image/ExifTool/MNG.pm +1 -1
  102. package/bin/lib/Image/ExifTool/MOI.pm +1 -1
  103. package/bin/lib/Image/ExifTool/MPC.pm +1 -1
  104. package/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  105. package/bin/lib/Image/ExifTool/MPF.pm +1 -1
  106. package/bin/lib/Image/ExifTool/MRC.pm +1 -1
  107. package/bin/lib/Image/ExifTool/MWG.pm +1 -1
  108. package/bin/lib/Image/ExifTool/MXF.pm +1 -1
  109. package/bin/lib/Image/ExifTool/MacOS.pm +3 -3
  110. package/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
  111. package/bin/lib/Image/ExifTool/Matroska.pm +9 -5
  112. package/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  113. package/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  114. package/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  115. package/bin/lib/Image/ExifTool/Motorola.pm +1 -1
  116. package/bin/lib/Image/ExifTool/Nikon.pm +1895 -74
  117. package/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
  118. package/bin/lib/Image/ExifTool/NikonCustom.pm +523 -6
  119. package/bin/lib/Image/ExifTool/NikonSettings.pm +150 -87
  120. package/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
  121. package/bin/lib/Image/ExifTool/OOXML.pm +1 -1
  122. package/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  123. package/bin/lib/Image/ExifTool/Olympus.pm +6 -2
  124. package/bin/lib/Image/ExifTool/OpenEXR.pm +5 -3
  125. package/bin/lib/Image/ExifTool/Opus.pm +1 -1
  126. package/bin/lib/Image/ExifTool/Other.pm +1 -1
  127. package/bin/lib/Image/ExifTool/PCX.pm +1 -1
  128. package/bin/lib/Image/ExifTool/PDF.pm +6 -4
  129. package/bin/lib/Image/ExifTool/PGF.pm +1 -1
  130. package/bin/lib/Image/ExifTool/PICT.pm +1 -1
  131. package/bin/lib/Image/ExifTool/PLIST.pm +1 -1
  132. package/bin/lib/Image/ExifTool/PLUS.pm +1 -1
  133. package/bin/lib/Image/ExifTool/PNG.pm +29 -8
  134. package/bin/lib/Image/ExifTool/PPM.pm +1 -1
  135. package/bin/lib/Image/ExifTool/PSP.pm +1 -1
  136. package/bin/lib/Image/ExifTool/Palm.pm +1 -1
  137. package/bin/lib/Image/ExifTool/Panasonic.pm +3 -3
  138. package/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  139. package/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  140. package/bin/lib/Image/ExifTool/Pentax.pm +4 -2
  141. package/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
  142. package/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
  143. package/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  144. package/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
  145. package/bin/lib/Image/ExifTool/PostScript.pm +1 -1
  146. package/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
  147. package/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
  148. package/bin/lib/Image/ExifTool/QuickTime.pm +25 -4
  149. package/bin/lib/Image/ExifTool/QuickTimeStream.pl +125 -81
  150. package/bin/lib/Image/ExifTool/README +9 -2
  151. package/bin/lib/Image/ExifTool/RIFF.pm +1 -1
  152. package/bin/lib/Image/ExifTool/RSRC.pm +1 -1
  153. package/bin/lib/Image/ExifTool/RTF.pm +1 -1
  154. package/bin/lib/Image/ExifTool/Radiance.pm +1 -1
  155. package/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  156. package/bin/lib/Image/ExifTool/Real.pm +1 -1
  157. package/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
  158. package/bin/lib/Image/ExifTool/Red.pm +1 -1
  159. package/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
  160. package/bin/lib/Image/ExifTool/Samsung.pm +1 -1
  161. package/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
  162. package/bin/lib/Image/ExifTool/Scalado.pm +1 -1
  163. package/bin/lib/Image/ExifTool/Shift.pl +3 -1
  164. package/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
  165. package/bin/lib/Image/ExifTool/Sigma.pm +1 -1
  166. package/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  167. package/bin/lib/Image/ExifTool/Sony.pm +34 -14
  168. package/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
  169. package/bin/lib/Image/ExifTool/Stim.pm +1 -1
  170. package/bin/lib/Image/ExifTool/TagInfoXML.pm +11 -6
  171. package/bin/lib/Image/ExifTool/TagLookup.pm +6589 -5877
  172. package/bin/lib/Image/ExifTool/TagNames.pod +1681 -65
  173. package/bin/lib/Image/ExifTool/Text.pm +1 -1
  174. package/bin/lib/Image/ExifTool/Theora.pm +1 -1
  175. package/bin/lib/Image/ExifTool/Torrent.pm +1 -1
  176. package/bin/lib/Image/ExifTool/Unknown.pm +1 -1
  177. package/bin/lib/Image/ExifTool/VCard.pm +1 -1
  178. package/bin/lib/Image/ExifTool/Validate.pm +1 -1
  179. package/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
  180. package/bin/lib/Image/ExifTool/WTV.pm +1 -1
  181. package/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  182. package/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  183. package/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  184. package/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
  185. package/bin/lib/Image/ExifTool/WritePNG.pl +30 -10
  186. package/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  187. package/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
  188. package/bin/lib/Image/ExifTool/WriteQuickTime.pl +12 -1
  189. package/bin/lib/Image/ExifTool/WriteXMP.pl +11 -12
  190. package/bin/lib/Image/ExifTool/Writer.pl +56 -10
  191. package/bin/lib/Image/ExifTool/XMP.pm +164 -52
  192. package/bin/lib/Image/ExifTool/XMP2.pl +6 -3
  193. package/bin/lib/Image/ExifTool/XMPStruct.pl +4 -2
  194. package/bin/lib/Image/ExifTool/ZIP.pm +10 -2
  195. package/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
  196. package/bin/lib/Image/ExifTool/iWork.pm +1 -1
  197. package/bin/lib/Image/ExifTool.pm +98 -23
  198. package/bin/lib/Image/ExifTool.pod +76 -67
  199. package/bin/perl-Image-ExifTool.spec +43 -43
  200. package/bin/pp_build_exe.args +6 -5
  201. package/package.json +3 -3
package/bin/exiftool CHANGED
@@ -10,24 +10,26 @@
10
10
  use strict;
11
11
  require 5.004;
12
12
 
13
- my $version = '12.31';
13
+ my $version = '12.39';
14
14
 
15
15
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
16
- my $exeDir;
17
16
  BEGIN {
18
17
  # (undocumented -xpath option added in 11.91, must come before other options)
19
- $Image::ExifTool::exePath = @ARGV && lc($ARGV[0]) eq '-xpath' && shift() ? $^X : $0;
18
+ my $exePath = @ARGV && lc($ARGV[0]) eq '-xpath' && shift() ? $^X : $0;
20
19
  # get exe directory
21
- $exeDir = ($Image::ExifTool::exePath =~ /(.*)[\\\/]/) ? $1 : '.';
20
+ my $exeDir = ($exePath =~ /(.*)[\\\/]/) ? $1 : '.';
21
+ my $incDir = ($0 =~ /(.*)[\\\/]/) ? "$1/lib" : './lib';
22
22
  if (-l $0) {
23
23
  my $lnk = eval { readlink $0 };
24
24
  if (defined $lnk) {
25
25
  my $lnkDir = ($lnk =~ /(.*)[\\\/]/) ? $1 : '.';
26
26
  $exeDir = (($lnk =~ m(^/)) ? '' : $exeDir . '/') . $lnkDir;
27
+ $incDir = "$exeDir/lib";
27
28
  }
28
29
  }
30
+ $Image::ExifTool::exeDir = $exeDir; # use our exeDir for loading config file
29
31
  # add lib directory at start of include path
30
- unshift @INC, ($0 =~ /(.*)[\\\/]/) ? "$1/lib" : './lib';
32
+ unshift @INC, $incDir;
31
33
  # load or disable config file if specified
32
34
  if (@ARGV and lc($ARGV[0]) eq '-config') {
33
35
  shift;
@@ -757,7 +759,7 @@ for (;;) {
757
759
  }
758
760
  my $fp = ($stayOpen == 1 ? \*STAYOPEN : \*ARGFILE);
759
761
  unless ($mt->Open($fp, $argFile)) {
760
- unless ($argFile !~ /^\// and $mt->Open($fp, "$exeDir/$argFile")) {
762
+ unless ($argFile !~ /^\// and $mt->Open($fp, "$Image::ExifTool::exeDir/$argFile")) {
761
763
  Error "Error opening arg file $argFile\n";
762
764
  $badCmd = 1;
763
765
  next
@@ -1235,7 +1237,7 @@ for (;;) {
1235
1237
  $textOverwrite += 2 if $t2 =~ /\+/; # append
1236
1238
  if ($t1 ne 'W' and lc($t1) ne 'tagout') {
1237
1239
  undef $tagOut;
1238
- } elsif ($textOverwrite >= 2 and $textOut !~ /%[-+]?\d*[.:]?\d*[lu]?[tgs]/) {
1240
+ } elsif ($textOverwrite >= 2 and $textOut !~ /%[-+]?\d*[.:]?\d*[lu]?[tgso]/) {
1239
1241
  $tagOut = 0; # append tags to one file
1240
1242
  } else {
1241
1243
  $tagOut = 1; # separate file for each tag
@@ -1619,7 +1621,7 @@ if (@newValues) {
1619
1621
  next;
1620
1622
  }
1621
1623
  my %opts = ( Shift => 0 ); # shift values if possible instead of adding/deleting
1622
- # allow writing of 'unsafe' tags unless specified by wildcard
1624
+ # allow writing of 'Unsafe' tags unless specified by wildcard
1623
1625
  $opts{Protected} = 1 unless $tag =~ /[?*]/;
1624
1626
 
1625
1627
  if ($tag =~ s/<// and defined $newVal) {
@@ -1967,6 +1969,7 @@ sub GetImageInfo($$)
1967
1969
  } else {
1968
1970
  $pipe = qq{bzip2 -dc "$file" |};
1969
1971
  }
1972
+ $$et{TRUST_PIPE} = 1;
1970
1973
  }
1971
1974
  }
1972
1975
  # evaluate -if expression for conditional processing
@@ -2237,12 +2240,13 @@ sub GetImageInfo($$)
2237
2240
  next unless defined $forcePrint;
2238
2241
  $grp0 = $grp1 = 'Unknown';
2239
2242
  }
2243
+ # add groups from structure fields
2244
+ AddGroups($$info{$tag}, $grp0, \%groups, \@groups) if ref $$info{$tag};
2240
2245
  next if $groups{$grp1};
2241
2246
  # include family 0 and 1 groups in URI except for internal tags
2242
2247
  # (this will put internal tags in the "XML" group on readback)
2243
2248
  $groups{$grp1} = $grp0;
2244
2249
  push @groups, $grp1;
2245
- AddGroups($$info{$tag}, $grp0, \%groups, \@groups) if ref $$info{$tag};
2246
2250
  }
2247
2251
  foreach $grp1 (@groups) {
2248
2252
  my $grp = $groups{$grp1};
@@ -2285,7 +2289,7 @@ TAG: foreach $tag (@foundTags) {
2285
2289
  # avoid extracting Protected binary tags (eg. data blocks) [insider information]
2286
2290
  my $lcTag = lc $tag;
2287
2291
  $lcTag =~ s/ .*//;
2288
- next unless $$et{REQ_TAG_LOOKUP}{$lcTag};
2292
+ next unless $$et{REQ_TAG_LOOKUP}{$lcTag} or ($$et{OPTIONS}{RequestAll} || 0) > 2;
2289
2293
  }
2290
2294
  $val = ConvertBinary($val); # convert SCALAR references
2291
2295
  next unless defined $val;
@@ -2365,7 +2369,8 @@ TAG: foreach $tag (@foundTags) {
2365
2369
  }
2366
2370
  my @groups = $et->GetGroup($tag);
2367
2371
  $outfile and close($fp), undef($tmpText); # (shouldn't happen)
2368
- ($fp, $outfile, $append) = OpenOutputFile($orig, $tagName, \@groups, $ext);
2372
+ my $org = $et->GetValue('OriginalRawFileName') || $et->GetValue('OriginalFileName');
2373
+ ($fp, $outfile, $append) = OpenOutputFile($orig, $tagName, \@groups, $ext, $org);
2369
2374
  $fp or ++$countBad, next TAG;
2370
2375
  $tmpText = $outfile unless $append;
2371
2376
  }
@@ -3061,12 +3066,14 @@ sub SetImageInfo($$$)
3061
3066
  # temporarily disable CTRL-C during this critical operation
3062
3067
  $critical = 1;
3063
3068
  undef $tmpFile; # handle deletion of temporary file ourself
3064
- if ($et->Open(\*ORIG_FILE, $file, '>')) {
3069
+ if ($et->Open(\*ORIG_FILE, $file, '+<')) {
3065
3070
  binmode(ORIG_FILE);
3066
3071
  while (read(NEW_FILE, $buff, 65536)) {
3067
3072
  print ORIG_FILE $buff or $err = 1;
3068
3073
  }
3069
3074
  close(NEW_FILE);
3075
+ # Handle files being shorter than the original
3076
+ eval { truncate(ORIG_FILE, tell(ORIG_FILE)) } or $err = 1;
3070
3077
  close(ORIG_FILE) or $err = 1;
3071
3078
  if ($err) {
3072
3079
  Warn "Couldn't overwrite in place - $file\n";
@@ -3250,7 +3257,8 @@ sub FormatXML($$$)
3250
3257
  } elsif (ref $val eq 'HASH') {
3251
3258
  $gt = " rdf:parseType='Resource'>";
3252
3259
  my $val2 = '';
3253
- foreach (sort keys %$val) {
3260
+ my @keys = $$val{_ordered_keys_} ? @{$$val{_ordered_keys_}} : sort keys %$val;
3261
+ foreach (@keys) {
3254
3262
  # (some variable-namespace XML structure fields may have a different group)
3255
3263
  my $tok = /:/ ? $_ : ($grp . ':' . $_);
3256
3264
  $val2 .= "\n$ind <$tok" . FormatXML($$val{$_}, "$ind ", $grp) . "</$tok>";
@@ -3327,7 +3335,8 @@ sub FormatJSON($$$)
3327
3335
  } elsif (ref $val eq 'HASH') {
3328
3336
  my ($bra, $ket, $sep) = $json == 1 ? ('{','}',':') : ('Array(',')',' =>');
3329
3337
  print $fp $bra;
3330
- foreach (sort keys %$val) {
3338
+ my @keys = $$val{_ordered_keys_} ? @{$$val{_ordered_keys_}} : sort keys %$val;
3339
+ foreach (@keys) {
3331
3340
  print $fp ',' if $comma;
3332
3341
  my $key = EscapeJSON($_, 1);
3333
3342
  print $fp qq(\n$ind $key$sep );
@@ -3460,18 +3469,26 @@ sub ConvertBinary($)
3460
3469
  }
3461
3470
 
3462
3471
  #------------------------------------------------------------------------------
3463
- # Compare two tag values to see if they are equal
3472
+ # Compare ValueConv and PrintConv values of a tag to see if they are equal
3464
3473
  # Inputs: 0) value1, 1) value2
3465
3474
  # Returns: true if they are equal
3466
3475
  sub IsEqual($$)
3467
3476
  {
3468
- return 1 if ref $_[0] eq 'SCALAR' or $_[0] eq $_[1];
3469
- return 0 if ref $_[0] ne 'ARRAY' or ref $_[1] ne 'ARRAY' or
3470
- @{$_[0]} ne @{$_[1]};
3471
- # test all elements of an array
3472
- my $i = 0;
3473
- for ($i=0; $i<scalar(@{$_[0]}); ++$i) {
3474
- return 0 if $_[0][$i] ne $_[1][$i];
3477
+ my ($a, $b) = @_;
3478
+ # (scalar values are not print-converted)
3479
+ return 1 if $a eq $b or ref $a eq 'SCALAR';
3480
+ if (ref $a eq 'HASH' and ref $b eq 'HASH') {
3481
+ return 0 if scalar(keys %$a) != scalar(keys %$b);
3482
+ my $key;
3483
+ foreach $key (keys %$a) {
3484
+ return 0 unless IsEqual($$a{$key}, $$b{$key});
3485
+ }
3486
+ } else {
3487
+ return 0 if ref $a ne 'ARRAY' or ref $b ne 'ARRAY' or @$a != @$b;
3488
+ my $i;
3489
+ for ($i=0; $i<scalar(@$a); ++$i) {
3490
+ return 0 unless IsEqual($$a[$i], $$b[$i]);
3491
+ }
3475
3492
  }
3476
3493
  return 1;
3477
3494
  }
@@ -3799,7 +3816,7 @@ sub FindFileWindows($$)
3799
3816
  my $enc = $et->Options('CharsetFileName');
3800
3817
  $wildfile = $et->Decode($wildfile, $enc, undef, 'UTF8') if $enc and $enc ne 'UTF8';
3801
3818
  $wildfile =~ tr/\\/\//; # use forward slashes
3802
- my ($dir, $wildname) = ($wildfile =~ m{(.*/)(.*)}) ? ($1, $2) : ('', $wildfile);
3819
+ my ($dir, $wildname) = ($wildfile =~ m{(.*[:/])(.*)}) ? ($1, $2) : ('', $wildfile);
3803
3820
  if ($dir =~ /[*?]/) {
3804
3821
  Warn "Wildcards don't work in the directory specification\n";
3805
3822
  return ();
@@ -3939,7 +3956,7 @@ sub SuggestedExtension($$$)
3939
3956
  $ext = 'xml';
3940
3957
  } elsif ($$valPt =~ /^RIFF....WAVE/s) {
3941
3958
  $ext = 'wav';
3942
- } elsif ($tag eq 'OriginalRawFileData' and defined($ext = $et->GetValue('OriginalRawFileName'))) {
3959
+ } elsif ($tag eq 'OriginalRawImage' and defined($ext = $et->GetValue('OriginalRawFileName'))) {
3943
3960
  $ext =~ s/^.*\.//s;
3944
3961
  $ext = $ext ? lc($ext) : 'raw';
3945
3962
  } elsif ($tag eq 'EXIF') {
@@ -3991,14 +4008,15 @@ sub LoadPrintFormat($)
3991
4008
  # A sort of sprintf for filenames
3992
4009
  # Inputs: 0) format string (%d=dir, %f=file name, %e=ext),
3993
4010
  # 1) source filename or undef to test format string
3994
- # 2-4) [%t %g %s only] tag name, ref to array of group names, suggested extension
4011
+ # 2-4) [%t %g %s %o only] tag name, ref to array of group names,
4012
+ # suggested extension, original raw file name
3995
4013
  # Returns: new filename or undef on error (or if no file and fmt contains token)
3996
4014
  sub FilenameSPrintf($;$@)
3997
4015
  {
3998
4016
  my ($fmt, $file, @extra) = @_;
3999
4017
  local $_;
4000
4018
  # return format string straight away if no tokens
4001
- return $fmt unless $fmt =~ /%[-+]?\d*[.:]?\d*[lu]?[dDfFeEtgs]/;
4019
+ return $fmt unless $fmt =~ /%[-+]?\d*[.:]?\d*[lu]?[dDfFeEtgso]/;
4002
4020
  return undef unless defined $file;
4003
4021
  CleanFilename($file); # make sure we are using forward slashes
4004
4022
  # split filename into directory, file, extension
@@ -4012,9 +4030,9 @@ sub FilenameSPrintf($;$@)
4012
4030
  }
4013
4031
  $part{F} = $part{f} . $part{E};
4014
4032
  ($part{D} = $part{d}) =~ s{/+$}{};
4015
- @part{qw(t g s)} = @extra;
4033
+ @part{qw(t g s o)} = @extra;
4016
4034
  my ($filename, $pos) = ('', 0);
4017
- while ($fmt =~ /(%([-+]?)(\d*)([.:]?)(\d*)([lu]?)([dDfFeEtgs]))/g) {
4035
+ while ($fmt =~ /(%([-+]?)(\d*)([.:]?)(\d*)([lu]?)([dDfFeEtgso]))/g) {
4018
4036
  $filename .= substr($fmt, $pos, pos($fmt) - $pos - length($1));
4019
4037
  $pos = pos($fmt);
4020
4038
  my ($sign, $wid, $dot, $skip, $mod, $code) = ($2, $3, $4, $5 || 0, $6, $7);
@@ -4177,7 +4195,7 @@ sub OpenOutputFile($;@)
4177
4195
  if ($textOut) {
4178
4196
  $outfile = $file;
4179
4197
  CleanFilename($outfile);
4180
- if ($textOut =~ /%[-+]?\d*[.:]?\d*[lun]?[dDfFeEtgscC]/ or defined $tagOut) {
4198
+ if ($textOut =~ /%[-+]?\d*[.:]?\d*[lun]?[dDfFeEtgsocC]/ or defined $tagOut) {
4181
4199
  # make filename from printf-like $textOut
4182
4200
  $outfile = FilenameSPrintf($textOut, $file, @args);
4183
4201
  return () unless defined $outfile;
@@ -4441,7 +4459,7 @@ B<exiftool> [I<OPTIONS>] -I<TAG>[+-E<lt>]=[I<VALUE>]... I<FILE>...
4441
4459
  =head2 Copying
4442
4460
 
4443
4461
  B<exiftool> [I<OPTIONS>] B<-tagsFromFile> I<SRCFILE>
4444
- [-I<SRCTAG>[E<gt>I<DSTTAG>]...] I<FILE>...
4462
+ [-[I<DSTTAG>E<lt>]I<SRCTAG>...] I<FILE>...
4445
4463
 
4446
4464
  =head2 Other
4447
4465
 
@@ -4481,48 +4499,48 @@ supported by ExifTool (r = read, w = write, c = create):
4481
4499
 
4482
4500
  File Types
4483
4501
  ------------+-------------+-------------+-------------+------------
4484
- 360 r/w | DR4 r/w/c | JNG r/w | ODP r | RIFF r
4485
- 3FR r | DSS r | JP2 r/w | ODS r | RSRC r
4486
- 3G2 r/w | DV r | JPEG r/w | ODT r | RTF r
4487
- 3GP r/w | DVB r/w | JSON r | OFR r | RW2 r/w
4488
- A r | DVR-MS r | JXL r | OGG r | RWL r/w
4489
- AA r | DYLIB r | K25 r | OGV r | RWZ r
4490
- AAE r | EIP r | KDC r | ONP r | RM r
4491
- AAX r/w | EPS r/w | KEY r | OPUS r | SEQ r
4492
- ACR r | EPUB r | LA r | ORF r/w | SKETCH r
4493
- AFM r | ERF r/w | LFP r | ORI r/w | SO r
4494
- AI r/w | EXE r | LIF r | OTF r | SR2 r/w
4495
- AIFF r | EXIF r/w/c | LNK r | PAC r | SRF r
4496
- APE r | EXR r | LRV r/w | PAGES r | SRW r/w
4497
- ARQ r/w | EXV r/w/c | M2TS r | PBM r/w | SVG r
4498
- ARW r/w | F4A/V r/w | M4A/V r/w | PCD r | SWF r
4499
- ASF r | FFF r/w | MACOS r | PCX r | THM r/w
4500
- AVI r | FITS r | MAX r | PDB r | TIFF r/w
4501
- AVIF r/w | FLA r | MEF r/w | PDF r/w | TORRENT r
4502
- AZW r | FLAC r | MIE r/w/ | PEF r/w | TTC r
4503
- BMP r | FLIF r/w | MIFF r c | PFA r | TTF r
4504
- BPG r | FLV r | MKA r | PFB r | TXT r
4505
- BTF r | FPF r | MKS r | PFM r | VCF r
4506
- CHM r | FPX r | MKV r | PGF r | VRD r/w/c
4507
- COS r | GIF r/w | MNG r/w | PGM r/w | VSD r
4508
- CR2 r/w | GPR r/w | MOBI r | PLIST r | WAV r
4509
- CR3 r/w | GZ r | MODD r | PICT r | WDP r/w
4510
- CRM r/w | HDP r/w | MOI r | PMP r | WEBP r
4511
- CRW r/w | HDR r | MOS r/w | PNG r/w | WEBM r
4512
- CS1 r/w | HEIC r/w | MOV r/w | PPM r/w | WMA r
4513
- CSV r | HEIF r/w | MP3 r | PPT r | WMV r
4514
- CZI r | HTML r | MP4 r/w | PPTX r | WTV r
4515
- DCM r | ICC r/w/c | MPC r | PS r/w | WV r
4516
- DCP r/w | ICS r | MPG r | PSB r/w | X3F r/w
4517
- DCR r | IDML r | MPO r/w | PSD r/w | XCF r
4518
- DFONT r | IIQ r/w | MQV r/w | PSP r | XLS r
4519
- DIVX r | IND r/w | MRC r | QTIF r/w | XLSX r
4520
- DJVU r | INSP r/w | MRW r/w | R3D r | XMP r/w/c
4521
- DLL r | INSV r | MXF r | RA r | ZIP r
4522
- DNG r/w | INX r | NEF r/w | RAF r/w |
4523
- DOC r | ISO r | NRW r/w | RAM r |
4524
- DOCX r | ITC r | NUMBERS r | RAR r |
4525
- DPX r | J2C r | O r | RAW r/w |
4502
+ 360 r/w | DR4 r/w/c | JNG r/w | O r | RAW r/w
4503
+ 3FR r | DSS r | JP2 r/w | ODP r | RIFF r
4504
+ 3G2 r/w | DV r | JPEG r/w | ODS r | RSRC r
4505
+ 3GP r/w | DVB r/w | JSON r | ODT r | RTF r
4506
+ A r | DVR-MS r | JXL r | OFR r | RW2 r/w
4507
+ AA r | DYLIB r | K25 r | OGG r | RWL r/w
4508
+ AAE r | EIP r | KDC r | OGV r | RWZ r
4509
+ AAX r/w | EPS r/w | KEY r | ONP r | RM r
4510
+ ACR r | EPUB r | LA r | OPUS r | SEQ r
4511
+ AFM r | ERF r/w | LFP r | ORF r/w | SKETCH r
4512
+ AI r/w | EXE r | LIF r | ORI r/w | SO r
4513
+ AIFF r | EXIF r/w/c | LNK r | OTF r | SR2 r/w
4514
+ APE r | EXR r | LRV r/w | PAC r | SRF r
4515
+ ARQ r/w | EXV r/w/c | M2TS r | PAGES r | SRW r/w
4516
+ ARW r/w | F4A/V r/w | M4A/V r/w | PBM r/w | SVG r
4517
+ ASF r | FFF r/w | MACOS r | PCD r | SWF r
4518
+ AVI r | FITS r | MAX r | PCX r | THM r/w
4519
+ AVIF r/w | FLA r | MEF r/w | PDB r | TIFF r/w
4520
+ AZW r | FLAC r | MIE r/w/ | PDF r/w | TORRENT r
4521
+ BMP r | FLIF r/w | MIFF r c | PEF r/w | TTC r
4522
+ BPG r | FLV r | MKA r | PFA r | TTF r
4523
+ BTF r | FPF r | MKS r | PFB r | TXT r
4524
+ CHM r | FPX r | MKV r | PFM r | VCF r
4525
+ COS r | GIF r/w | MNG r/w | PGF r | VRD r/w/c
4526
+ CR2 r/w | GPR r/w | MOBI r | PGM r/w | VSD r
4527
+ CR3 r/w | GZ r | MODD r | PLIST r | WAV r
4528
+ CRM r/w | HDP r/w | MOI r | PICT r | WDP r/w
4529
+ CRW r/w | HDR r | MOS r/w | PMP r | WEBP r
4530
+ CS1 r/w | HEIC r/w | MOV r/w | PNG r/w | WEBM r
4531
+ CSV r | HEIF r/w | MP3 r | PPM r/w | WMA r
4532
+ CZI r | HTML r | MP4 r/w | PPT r | WMV r
4533
+ DCM r | ICC r/w/c | MPC r | PPTX r | WTV r
4534
+ DCP r/w | ICS r | MPG r | PS r/w | WV r
4535
+ DCR r | IDML r | MPO r/w | PSB r/w | X3F r/w
4536
+ DFONT r | IIQ r/w | MQV r/w | PSD r/w | XCF r
4537
+ DIVX r | IND r/w | MRC r | PSP r | XLS r
4538
+ DJVU r | INSP r/w | MRW r/w | QTIF r/w | XLSX r
4539
+ DLL r | INSV r | MXF r | R3D r | XMP r/w/c
4540
+ DNG r/w | INX r | NEF r/w | RA r | ZIP r
4541
+ DOC r | ISO r | NKSC r/w | RAF r/w |
4542
+ DOCX r | ITC r | NRW r/w | RAM r |
4543
+ DPX r | J2C r | NUMBERS r | RAR r |
4526
4544
 
4527
4545
  Meta Information
4528
4546
  ----------------------+----------------------+---------------------
@@ -4714,6 +4732,14 @@ group delete (unless a family 2 group is specified, see note 4 below).
4714
4732
  Instead, individual tags may be recovered using the B<-tagsFromFile> option
4715
4733
  (eg. C<-all= -tagsfromfile @ -artist>).
4716
4734
 
4735
+ To speed processing when reading XMP, exclusions in XMP groups also bypass
4736
+ processing of the corresponding XMP property and any contained properties.
4737
+ For example, C<--xmp-crs:all> may speed processing significantly in cases
4738
+ where a large number of XMP-crs tags exist. To use this feature to bypass
4739
+ processing of a specific XMP property, the property name must be used
4740
+ instead of the ExifTool tag name (eg. C<--xmp-crs:dabs>). Also, C<XMP-all>
4741
+ may be used to to indicate any XMP namespace (eg. <C--xmp-all:dabs>).
4742
+
4717
4743
  =item B<->I<TAG>[+-^]B<=>[I<VALUE>]
4718
4744
 
4719
4745
  Write a new value for the specified tag (eg. C<-comment=wow>), or delete the
@@ -4724,17 +4750,18 @@ for more details). C<+=> may also be used to increment numerical values (or
4724
4750
  decrement if I<VALUE> is negative), and C<-=> may be used to conditionally
4725
4751
  delete or replace a tag (see L</WRITING EXAMPLES> for examples). C<^=> is
4726
4752
  used to write an empty string instead of deleting the tag when no I<VALUE>
4727
- is given, but otherwise it is equivalent to C<=>.
4753
+ is given, but otherwise it is equivalent to C<=>, but note that the caret
4754
+ must be quoted on the Windows command line.
4728
4755
 
4729
4756
  I<TAG> may contain one or more leading family 0, 1, 2 or 7 group names,
4730
4757
  prefixed by optional family numbers, and separated colons. If no group name
4731
4758
  is specified, the tag is created in the preferred group, and updated in any
4732
4759
  other location where a same-named tag already exists. The preferred group
4733
- is the first group in the following list where I<TAG> is valid: 1) EXIF, 2)
4734
- IPTC, 3) XMP.
4760
+ in JPEG and TIFF-format images is the first group in the following list
4761
+ where I<TAG> is valid: 1) EXIF, 2) IPTC, 3) XMP.
4735
4762
 
4736
4763
  The wildcards C<*> and C<?> may be used in tag names to assign the same
4737
- value to multiple tags. When specified with wildcards, "unsafe" tags are
4764
+ value to multiple tags. When specified with wildcards, "Unsafe" tags are
4738
4765
  not written. A tag name of C<All> is equivalent to C<*> (except that it
4739
4766
  doesn't require quoting, while arguments with wildcards do on systems with
4740
4767
  shell globbing), and is often used when deleting all metadata (ie. C<-All=>)
@@ -4880,10 +4907,10 @@ See L</COPYING EXAMPLES> for examples using B<-tagsFromFile>.
4880
4907
  Notes:
4881
4908
 
4882
4909
  1) Some tags (generally tags which may affect the appearance of the image)
4883
- are considered "unsafe" to write, and are only copied if specified
4910
+ are considered "Unsafe" to write, and are only copied if specified
4884
4911
  explicitly (ie. no wildcards). See the
4885
4912
  L<tag name documentation|Image::ExifTool::TagNames> for more details about
4886
- "unsafe" tags.
4913
+ "Unsafe" tags.
4887
4914
 
4888
4915
  2) Be aware of the difference between excluding a tag from being copied
4889
4916
  (--I<TAG>), and deleting a tag (-I<TAG>=). Excluding a tag prevents it from
@@ -4981,7 +5008,7 @@ intermediate file (C<out.args> in this example):
4981
5008
  exiftool -@ out.args -sep ', ' dst.jpg
4982
5009
 
4983
5010
  Note: Be careful when copying information with this technique since it is
4984
- easy to write tags which are normally considered "unsafe". For instance,
5011
+ easy to write tags which are normally considered "Unsafe". For instance,
4985
5012
  the FileName and Directory tags are excluded in the example above to avoid
4986
5013
  renaming and moving the destination file. Also note that the second command
4987
5014
  above will produce warning messages for any tags which are not writable.
@@ -5001,8 +5028,8 @@ are in the default output. By default, list items are separated by a
5001
5028
  newline when extracted with the B<-b> option, but this may be changed (see
5002
5029
  the B<-sep> option for details). May be combined with B<-j>, B<-php> or
5003
5030
  B<-X> to extract binary data in JSON, PHP or XML format, but note that
5004
- "unsafe" tags must be specified explicitly to be extracted as binary in
5005
- these formats.
5031
+ "Unsafe" tags are not extracted as binary unless they are specified explicitly or
5032
+ the API RequestAll option is set to 3 or higher.
5006
5033
 
5007
5034
  With a leading double dash (B<--b> or B<--binary>), tags which contain
5008
5035
  binary data are suppressed in the output when reading.
@@ -5163,9 +5190,11 @@ various components of a date/time value. The specifics of the I<FMT> syntax
5163
5190
  are system dependent -- consult the C<strftime> man page on your system for
5164
5191
  details. The default format is equivalent to "%Y:%m:%d %H:%M:%S". This
5165
5192
  option has no effect on date-only or time-only tags and ignores timezone
5166
- information if present. Only one B<-d> option may be used per command.
5167
- Requires POSIX::strptime or Time::Piece for the inversion conversion when
5168
- writing.
5193
+ information if present. ExifTool adds a C<%f> format code to represent
5194
+ fractional seconds, and supports an optional width to specify the number of
5195
+ digits after the decimal point (eg. C<%3f> would give something like
5196
+ C<.437>). Only one B<-d> option may be used per command. Requires
5197
+ POSIX::strptime or Time::Piece for the inversion conversion when writing.
5169
5198
 
5170
5199
  =item B<-D> (B<-decimal>)
5171
5200
 
@@ -5203,7 +5232,7 @@ By default the resulting group name is simplified by removing any leading
5203
5232
  C<Main:> and collapsing adjacent identical group names, but this can be
5204
5233
  avoided by placing a colon before the first family number (eg. B<-g:3:1>).
5205
5234
  Use the B<-listg> option to list group names for a specified family. The
5206
- SavePath and SaveFormat API options are automatically enabled if the
5235
+ API SavePath and SaveFormat options are automatically enabled if the
5207
5236
  respective family 5 or 6 group names are requested. See the
5208
5237
  L<API GetGroup documentation|Image::ExifTool/GetGroup> for more information.
5209
5238
 
@@ -5392,7 +5421,8 @@ directory if C<#[SECT]> contains C<$directory>). Lines beginning with
5392
5421
  C<#[BODY]> and lines not beginning with C<#> are output for each processed
5393
5422
  file. Lines beginning with C<#[IF]> are not output, but all BODY lines are
5394
5423
  skipped if any tag on an IF line doesn't exist. Other lines beginning with
5395
- C<#> are ignored. For example, this format file:
5424
+ C<#> are ignored. (To output a line beginning with C<#>, use C<#[BODY]#>.)
5425
+ For example, this format file:
5396
5426
 
5397
5427
  # this is a comment line
5398
5428
  #[HEAD]-- Generated by ExifTool $exifToolVersion --
@@ -5406,7 +5436,7 @@ with this command:
5406
5436
 
5407
5437
  produces output like this:
5408
5438
 
5409
- -- Generated by ExifTool 12.31 --
5439
+ -- Generated by ExifTool 12.39 --
5410
5440
  File: a.jpg - 2003:10:31 15:44:19
5411
5441
  (f/5.6, 1/60s, ISO 100)
5412
5442
  File: b.jpg - 2006:05:23 11:57:38
@@ -5423,7 +5453,7 @@ are effectively processed as separate input files.
5423
5453
  If a specified tag does not exist, a minor warning is issued and the line
5424
5454
  with the missing tag is not printed. However, the B<-f> option may be used
5425
5455
  to set the value of missing tags to '-' (but this may be configured via the
5426
- MissingTagValue API option), or the B<-m> option may be used to ignore minor
5456
+ API MissingTagValue option), or the B<-m> option may be used to ignore minor
5427
5457
  warnings and leave the missing values empty. Alternatively, B<-q -q> may be
5428
5458
  used to simply suppress the warning messages.
5429
5459
 
@@ -5661,12 +5691,14 @@ between B<-W> and B<-w>:
5661
5691
 
5662
5692
  1) With B<-W>, a new output file is created for each extracted tag.
5663
5693
 
5664
- 2) B<-W> supports three additional format codes: %t, %g and %s represent
5665
- the tag name, group name, and suggested extension for the output file (based
5666
- on the format of the data). The %g code may be followed by a single digit
5667
- to specify the group family number (eg. %g1), otherwise family 0 is assumed.
5668
- The substring width/position/case specifiers may be used with these format
5669
- codes in exactly the same way as with %f and %e.
5694
+ 2) B<-W> supports four additional format codes: %t, %g and %s represent the
5695
+ tag name, group name, and suggested extension for the output file (based on
5696
+ the format of the data), and %o represents the value of the
5697
+ OriginalRawFileName or OriginalFileName tag from the input file (including
5698
+ extension). The %g code may be followed by a single digit to specify the
5699
+ group family number (eg. %g1), otherwise family 0 is assumed. The substring
5700
+ width/position/case specifiers may be used with these format codes in
5701
+ exactly the same way as with %f and %e.
5670
5702
 
5671
5703
  3) The argument for B<-W> is interpreted as a file name if it contains no
5672
5704
  format codes. (For B<-w>, this would be a file extension.) This change
@@ -5686,7 +5718,7 @@ example, the following pairs of commands give the same result:
5686
5718
  4) Adding the B<-v> option to B<-W> sends a list of the tags and output file
5687
5719
  names to the console instead of giving a verbose dump of the entire file.
5688
5720
  (Unless appending all output to one file for each source file by using
5689
- B<-W+> with an output file I<FMT> that does not contain %t, $g or %s.)
5721
+ B<-W+> with an output file I<FMT> that does not contain %t, %g, %s or %o.)
5690
5722
 
5691
5723
  5) Individual list items are stored in separate files when B<-W> is combined
5692
5724
  with B<-b>, but note that for separate files to be created %c or %C must be
@@ -7218,7 +7250,7 @@ the commands if B<-execute> was used).
7218
7250
 
7219
7251
  =head1 AUTHOR
7220
7252
 
7221
- Copyright 2003-2021, Phil Harvey
7253
+ Copyright 2003-2022, Phil Harvey
7222
7254
 
7223
7255
  This is free software; you can redistribute it and/or modify it under the
7224
7256
  same terms as Perl itself.
@@ -25,7 +25,7 @@
25
25
  #
26
26
  # May also be used for string i/o (just pass a scalar reference)
27
27
  #
28
- # Legal: Copyright (c) 2003-2021 Phil Harvey (philharvey66 at gmail.com)
28
+ # Legal: Copyright (c) 2003-2022 Phil Harvey (philharvey66 at gmail.com)
29
29
  # This library is free software; you can redistribute it and/or
30
30
  # modify it under the same terms as Perl itself.
31
31
  #------------------------------------------------------------------------------
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # Description: Buffer to support random access reading of sequential file
5
5
  #
6
- # Legal: Copyright (c) 2003-2021 Phil Harvey (philharvey66 at gmail.com)
6
+ # Legal: Copyright (c) 2003-2022 Phil Harvey (philharvey66 at gmail.com)
7
7
  # This library is free software; you can redistribute it and/or
8
8
  # modify it under the same terms as Perl itself.
9
9
  #------------------------------------------------------------------------------
@@ -236,7 +236,7 @@ the end of file is not allowed.
236
236
 
237
237
  =head1 AUTHOR
238
238
 
239
- Copyright 2003-2021 Phil Harvey (philharvey66 at gmail.com)
239
+ Copyright 2003-2022 Phil Harvey (philharvey66 at gmail.com)
240
240
 
241
241
  This library is free software; you can redistribute it and/or modify it
242
242
  under the same terms as Perl itself.
@@ -477,7 +477,7 @@ main purpose of encryption, so this really can't be considered a bug.
477
477
 
478
478
  =head1 AUTHOR
479
479
 
480
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
480
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
481
481
 
482
482
  This library is free software; you can redistribute it and/or modify it
483
483
  under the same terms as Perl itself.
@@ -259,7 +259,7 @@ scanning for AFCP information.
259
259
 
260
260
  =head1 AUTHOR
261
261
 
262
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
262
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
263
263
 
264
264
  This library is free software; you can redistribute it and/or modify it
265
265
  under the same terms as Perl itself.
@@ -287,7 +287,7 @@ information from AIFF (Audio Interchange File Format) audio files.
287
287
 
288
288
  =head1 AUTHOR
289
289
 
290
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
290
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
291
291
 
292
292
  This library is free software; you can redistribute it and/or modify it
293
293
  under the same terms as Perl itself.
@@ -263,7 +263,7 @@ Currently doesn't parse MAC header unless it is at the start of the file.
263
263
 
264
264
  =head1 AUTHOR
265
265
 
266
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
266
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
267
267
 
268
268
  This library is free software; you can redistribute it and/or modify it
269
269
  under the same terms as Perl itself.
@@ -305,7 +305,7 @@ APP12 meta information.
305
305
 
306
306
  =head1 AUTHOR
307
307
 
308
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
308
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
309
309
 
310
310
  This library is free software; you can redistribute it and/or modify it
311
311
  under the same terms as Perl itself.
@@ -876,7 +876,7 @@ Windows Media Audio (WMA) and Windows Media Video (WMV) files.
876
876
 
877
877
  =head1 AUTHOR
878
878
 
879
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
879
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
880
880
 
881
881
  This library is free software; you can redistribute it and/or modify it
882
882
  under the same terms as Perl itself.
@@ -149,7 +149,7 @@ Apple maker notes in EXIF information.
149
149
 
150
150
  =head1 AUTHOR
151
151
 
152
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
152
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
153
153
 
154
154
  This library is free software; you can redistribute it and/or modify it
155
155
  under the same terms as Perl itself.
@@ -291,7 +291,7 @@ information from Audible audio books.
291
291
 
292
292
  =head1 AUTHOR
293
293
 
294
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
294
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
295
295
 
296
296
  This library is free software; you can redistribute it and/or modify it
297
297
  under the same terms as Perl itself.
@@ -335,7 +335,7 @@ This module contains definitions required by Image::ExifTool to read BMP
335
335
 
336
336
  =head1 AUTHOR
337
337
 
338
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
338
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
339
339
 
340
340
  This library is free software; you can redistribute it and/or modify it
341
341
  under the same terms as Perl itself.
@@ -231,7 +231,7 @@ This module contains definitions required by Image::ExifTool to read BPG
231
231
 
232
232
  =head1 AUTHOR
233
233
 
234
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
234
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
235
235
 
236
236
  This library is free software; you can redistribute it and/or modify it
237
237
  under the same terms as Perl itself.
@@ -445,7 +445,7 @@ compression ability).
445
445
 
446
446
  =head1 AUTHOR
447
447
 
448
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
448
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
449
449
  Copyright 2002, Leon Bottou and Yann Le Cun
450
450
  Copyright 2001, AT&T
451
451
  Copyright 1999-2001, LizardTech Inc.
@@ -275,7 +275,7 @@ information in BigTIFF images.
275
275
 
276
276
  =head1 AUTHOR
277
277
 
278
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
278
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
279
279
 
280
280
  This library is free software; you can redistribute it and/or modify it
281
281
  under the same terms as Perl itself.