exiftool-vendored.exe 12.33.0 → 12.40.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 (200) hide show
  1. package/LICENSE +254 -247
  2. package/bin/exiftool_files/Changes +116 -0
  3. package/bin/exiftool_files/README +45 -45
  4. package/bin/exiftool_files/config_files/acdsee.config +6 -6
  5. package/bin/exiftool_files/config_files/photoshop_paths.config +30 -7
  6. package/bin/exiftool_files/config_files/picasa_faces.config +1 -1
  7. package/bin/exiftool_files/config_files/pix4d.config +2 -2
  8. package/bin/exiftool_files/config_files/tiff_version.config +2 -2
  9. package/bin/exiftool_files/exiftool.pl +112 -82
  10. package/bin/exiftool_files/lib/File/RandomAccess.pm +1 -1
  11. package/bin/exiftool_files/lib/File/RandomAccess.pod +2 -2
  12. package/bin/exiftool_files/lib/Image/ExifTool/AES.pm +1 -1
  13. package/bin/exiftool_files/lib/Image/ExifTool/AFCP.pm +1 -1
  14. package/bin/exiftool_files/lib/Image/ExifTool/AIFF.pm +1 -1
  15. package/bin/exiftool_files/lib/Image/ExifTool/APE.pm +1 -1
  16. package/bin/exiftool_files/lib/Image/ExifTool/APP12.pm +1 -1
  17. package/bin/exiftool_files/lib/Image/ExifTool/ASF.pm +1 -1
  18. package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +1 -1
  19. package/bin/exiftool_files/lib/Image/ExifTool/Audible.pm +1 -1
  20. package/bin/exiftool_files/lib/Image/ExifTool/BMP.pm +1 -1
  21. package/bin/exiftool_files/lib/Image/ExifTool/BPG.pm +1 -1
  22. package/bin/exiftool_files/lib/Image/ExifTool/BZZ.pm +1 -1
  23. package/bin/exiftool_files/lib/Image/ExifTool/BigTIFF.pm +1 -1
  24. package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +15 -4
  25. package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +1 -1
  26. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +225 -13
  27. package/bin/exiftool_files/lib/Image/ExifTool/CanonCustom.pm +13 -3
  28. package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +1 -1
  29. package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +1 -1
  30. package/bin/exiftool_files/lib/Image/ExifTool/CaptureOne.pm +1 -1
  31. package/bin/exiftool_files/lib/Image/ExifTool/Casio.pm +1 -1
  32. package/bin/exiftool_files/lib/Image/ExifTool/Charset.pm +3 -1
  33. package/bin/exiftool_files/lib/Image/ExifTool/DICOM.pm +1 -1
  34. package/bin/exiftool_files/lib/Image/ExifTool/DJI.pm +1 -1
  35. package/bin/exiftool_files/lib/Image/ExifTool/DNG.pm +1 -1
  36. package/bin/exiftool_files/lib/Image/ExifTool/DPX.pm +1 -1
  37. package/bin/exiftool_files/lib/Image/ExifTool/DV.pm +1 -1
  38. package/bin/exiftool_files/lib/Image/ExifTool/DarwinCore.pm +3 -3
  39. package/bin/exiftool_files/lib/Image/ExifTool/DjVu.pm +1 -1
  40. package/bin/exiftool_files/lib/Image/ExifTool/EXE.pm +1 -1
  41. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +64 -20
  42. package/bin/exiftool_files/lib/Image/ExifTool/FITS.pm +1 -1
  43. package/bin/exiftool_files/lib/Image/ExifTool/FLAC.pm +1 -1
  44. package/bin/exiftool_files/lib/Image/ExifTool/FLIF.pm +1 -1
  45. package/bin/exiftool_files/lib/Image/ExifTool/FLIR.pm +48 -11
  46. package/bin/exiftool_files/lib/Image/ExifTool/Fixup.pm +1 -1
  47. package/bin/exiftool_files/lib/Image/ExifTool/Flash.pm +1 -1
  48. package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +1 -1
  49. package/bin/exiftool_files/lib/Image/ExifTool/Font.pm +1 -1
  50. package/bin/exiftool_files/lib/Image/ExifTool/FotoStation.pm +1 -1
  51. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +1 -1
  52. package/bin/exiftool_files/lib/Image/ExifTool/GE.pm +1 -1
  53. package/bin/exiftool_files/lib/Image/ExifTool/GIF.pm +6 -2
  54. package/bin/exiftool_files/lib/Image/ExifTool/GIMP.pm +1 -1
  55. package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +15 -11
  56. package/bin/exiftool_files/lib/Image/ExifTool/GeoTiff.pm +1 -1
  57. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +4 -3
  58. package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +1 -1
  59. package/bin/exiftool_files/lib/Image/ExifTool/H264.pm +1 -1
  60. package/bin/exiftool_files/lib/Image/ExifTool/HP.pm +1 -1
  61. package/bin/exiftool_files/lib/Image/ExifTool/HTML.pm +1 -1
  62. package/bin/exiftool_files/lib/Image/ExifTool/HtmlDump.pm +1 -1
  63. package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +97 -5
  64. package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +1 -1
  65. package/bin/exiftool_files/lib/Image/ExifTool/IPTC.pm +1 -1
  66. package/bin/exiftool_files/lib/Image/ExifTool/ISO.pm +1 -1
  67. package/bin/exiftool_files/lib/Image/ExifTool/ITC.pm +1 -1
  68. package/bin/exiftool_files/lib/Image/ExifTool/Import.pm +1 -1
  69. package/bin/exiftool_files/lib/Image/ExifTool/InDesign.pm +1 -1
  70. package/bin/exiftool_files/lib/Image/ExifTool/JPEG.pm +6 -2
  71. package/bin/exiftool_files/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  72. package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +1 -1
  73. package/bin/exiftool_files/lib/Image/ExifTool/JVC.pm +1 -1
  74. package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +109 -12
  75. package/bin/exiftool_files/lib/Image/ExifTool/Kodak.pm +1 -1
  76. package/bin/exiftool_files/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  77. package/bin/exiftool_files/lib/Image/ExifTool/LIF.pm +1 -1
  78. package/bin/exiftool_files/lib/Image/ExifTool/LNK.pm +1 -1
  79. package/bin/exiftool_files/lib/Image/ExifTool/Lang/cs.pm +1 -1
  80. package/bin/exiftool_files/lib/Image/ExifTool/Lang/de.pm +1 -1
  81. package/bin/exiftool_files/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  82. package/bin/exiftool_files/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  83. package/bin/exiftool_files/lib/Image/ExifTool/Lang/es.pm +1 -1
  84. package/bin/exiftool_files/lib/Image/ExifTool/Lang/fi.pm +1 -1
  85. package/bin/exiftool_files/lib/Image/ExifTool/Lang/fr.pm +1 -1
  86. package/bin/exiftool_files/lib/Image/ExifTool/Lang/it.pm +1 -1
  87. package/bin/exiftool_files/lib/Image/ExifTool/Lang/ja.pm +1 -1
  88. package/bin/exiftool_files/lib/Image/ExifTool/Lang/ko.pm +1 -1
  89. package/bin/exiftool_files/lib/Image/ExifTool/Lang/nl.pm +1 -1
  90. package/bin/exiftool_files/lib/Image/ExifTool/Lang/pl.pm +1 -1
  91. package/bin/exiftool_files/lib/Image/ExifTool/Lang/ru.pm +1 -1
  92. package/bin/exiftool_files/lib/Image/ExifTool/Lang/sv.pm +1 -1
  93. package/bin/exiftool_files/lib/Image/ExifTool/Lang/tr.pm +1 -1
  94. package/bin/exiftool_files/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  95. package/bin/exiftool_files/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  96. package/bin/exiftool_files/lib/Image/ExifTool/Leaf.pm +1 -1
  97. package/bin/exiftool_files/lib/Image/ExifTool/Lytro.pm +1 -1
  98. package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +1 -1
  99. package/bin/exiftool_files/lib/Image/ExifTool/MIE.pm +1 -1
  100. package/bin/exiftool_files/lib/Image/ExifTool/MIEUnits.pod +1 -1
  101. package/bin/exiftool_files/lib/Image/ExifTool/MIFF.pm +1 -1
  102. package/bin/exiftool_files/lib/Image/ExifTool/MNG.pm +1 -1
  103. package/bin/exiftool_files/lib/Image/ExifTool/MOI.pm +1 -1
  104. package/bin/exiftool_files/lib/Image/ExifTool/MPC.pm +1 -1
  105. package/bin/exiftool_files/lib/Image/ExifTool/MPEG.pm +1 -1
  106. package/bin/exiftool_files/lib/Image/ExifTool/MPF.pm +1 -1
  107. package/bin/exiftool_files/lib/Image/ExifTool/MRC.pm +1 -1
  108. package/bin/exiftool_files/lib/Image/ExifTool/MWG.pm +1 -1
  109. package/bin/exiftool_files/lib/Image/ExifTool/MXF.pm +1 -1
  110. package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +1 -1
  111. package/bin/exiftool_files/lib/Image/ExifTool/MakerNotes.pm +1 -1
  112. package/bin/exiftool_files/lib/Image/ExifTool/Matroska.pm +9 -5
  113. package/bin/exiftool_files/lib/Image/ExifTool/Microsoft.pm +1 -1
  114. package/bin/exiftool_files/lib/Image/ExifTool/Minolta.pm +1 -1
  115. package/bin/exiftool_files/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  116. package/bin/exiftool_files/lib/Image/ExifTool/Motorola.pm +1 -1
  117. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +1918 -72
  118. package/bin/exiftool_files/lib/Image/ExifTool/NikonCapture.pm +1 -1
  119. package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +523 -6
  120. package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +150 -87
  121. package/bin/exiftool_files/lib/Image/ExifTool/Nintendo.pm +1 -1
  122. package/bin/exiftool_files/lib/Image/ExifTool/OOXML.pm +1 -1
  123. package/bin/exiftool_files/lib/Image/ExifTool/Ogg.pm +1 -1
  124. package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +7 -7
  125. package/bin/exiftool_files/lib/Image/ExifTool/OpenEXR.pm +5 -3
  126. package/bin/exiftool_files/lib/Image/ExifTool/Opus.pm +1 -1
  127. package/bin/exiftool_files/lib/Image/ExifTool/Other.pm +1 -1
  128. package/bin/exiftool_files/lib/Image/ExifTool/PCX.pm +1 -1
  129. package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +6 -4
  130. package/bin/exiftool_files/lib/Image/ExifTool/PGF.pm +1 -1
  131. package/bin/exiftool_files/lib/Image/ExifTool/PICT.pm +1 -1
  132. package/bin/exiftool_files/lib/Image/ExifTool/PLIST.pm +1 -1
  133. package/bin/exiftool_files/lib/Image/ExifTool/PLUS.pm +1 -1
  134. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +29 -8
  135. package/bin/exiftool_files/lib/Image/ExifTool/PPM.pm +1 -1
  136. package/bin/exiftool_files/lib/Image/ExifTool/PSP.pm +1 -1
  137. package/bin/exiftool_files/lib/Image/ExifTool/Palm.pm +1 -1
  138. package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +1 -1
  139. package/bin/exiftool_files/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  140. package/bin/exiftool_files/lib/Image/ExifTool/Parrot.pm +1 -1
  141. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +3 -2
  142. package/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm +1 -1
  143. package/bin/exiftool_files/lib/Image/ExifTool/PhotoCD.pm +1 -1
  144. package/bin/exiftool_files/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  145. package/bin/exiftool_files/lib/Image/ExifTool/Photoshop.pm +1 -1
  146. package/bin/exiftool_files/lib/Image/ExifTool/PostScript.pm +1 -1
  147. package/bin/exiftool_files/lib/Image/ExifTool/PrintIM.pm +1 -1
  148. package/bin/exiftool_files/lib/Image/ExifTool/Qualcomm.pm +1 -1
  149. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +25 -7
  150. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +40 -4
  151. package/bin/exiftool_files/lib/Image/ExifTool/README +4 -0
  152. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +1 -1
  153. package/bin/exiftool_files/lib/Image/ExifTool/RSRC.pm +1 -1
  154. package/bin/exiftool_files/lib/Image/ExifTool/RTF.pm +1 -1
  155. package/bin/exiftool_files/lib/Image/ExifTool/Radiance.pm +1 -1
  156. package/bin/exiftool_files/lib/Image/ExifTool/Rawzor.pm +1 -1
  157. package/bin/exiftool_files/lib/Image/ExifTool/Real.pm +1 -1
  158. package/bin/exiftool_files/lib/Image/ExifTool/Reconyx.pm +1 -1
  159. package/bin/exiftool_files/lib/Image/ExifTool/Red.pm +1 -1
  160. package/bin/exiftool_files/lib/Image/ExifTool/Ricoh.pm +1 -1
  161. package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +6 -2
  162. package/bin/exiftool_files/lib/Image/ExifTool/Sanyo.pm +1 -1
  163. package/bin/exiftool_files/lib/Image/ExifTool/Scalado.pm +1 -1
  164. package/bin/exiftool_files/lib/Image/ExifTool/Shift.pl +3 -1
  165. package/bin/exiftool_files/lib/Image/ExifTool/Shortcuts.pm +1 -1
  166. package/bin/exiftool_files/lib/Image/ExifTool/Sigma.pm +1 -1
  167. package/bin/exiftool_files/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  168. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +34 -12
  169. package/bin/exiftool_files/lib/Image/ExifTool/SonyIDC.pm +1 -1
  170. package/bin/exiftool_files/lib/Image/ExifTool/Stim.pm +1 -1
  171. package/bin/exiftool_files/lib/Image/ExifTool/TagInfoXML.pm +11 -6
  172. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +6581 -5893
  173. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +1641 -59
  174. package/bin/exiftool_files/lib/Image/ExifTool/Text.pm +1 -1
  175. package/bin/exiftool_files/lib/Image/ExifTool/Theora.pm +1 -1
  176. package/bin/exiftool_files/lib/Image/ExifTool/Torrent.pm +1 -1
  177. package/bin/exiftool_files/lib/Image/ExifTool/Unknown.pm +1 -1
  178. package/bin/exiftool_files/lib/Image/ExifTool/VCard.pm +1 -1
  179. package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +1 -1
  180. package/bin/exiftool_files/lib/Image/ExifTool/Vorbis.pm +1 -1
  181. package/bin/exiftool_files/lib/Image/ExifTool/WTV.pm +1 -1
  182. package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  183. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +1 -1
  184. package/bin/exiftool_files/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  185. package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -1
  186. package/bin/exiftool_files/lib/Image/ExifTool/WritePNG.pl +30 -10
  187. package/bin/exiftool_files/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  188. package/bin/exiftool_files/lib/Image/ExifTool/WritePostScript.pl +1 -1
  189. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +19 -4
  190. package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +13 -12
  191. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +56 -10
  192. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +169 -54
  193. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +6 -4
  194. package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +22 -8
  195. package/bin/exiftool_files/lib/Image/ExifTool/ZIP.pm +10 -2
  196. package/bin/exiftool_files/lib/Image/ExifTool/ZISRAW.pm +1 -1
  197. package/bin/exiftool_files/lib/Image/ExifTool/iWork.pm +1 -1
  198. package/bin/exiftool_files/lib/Image/ExifTool.pm +93 -13
  199. package/bin/exiftool_files/lib/Image/ExifTool.pod +80 -70
  200. package/package.json +3 -3
@@ -10,15 +10,15 @@
10
10
  use strict;
11
11
  require 5.004;
12
12
 
13
- my $version = '12.33';
13
+ my $version = '12.40';
14
14
 
15
15
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
16
- my $exeDir;
16
+ my $exePath;
17
17
  BEGIN {
18
18
  # (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;
19
+ $exePath = @ARGV && lc($ARGV[0]) eq '-xpath' && shift() ? $^X : $0;
20
20
  # get exe directory
21
- $exeDir = ($Image::ExifTool::exePath =~ /(.*)[\\\/]/) ? $1 : '.';
21
+ $Image::ExifTool::exeDir = ($exePath =~ /(.*)[\\\/]/) ? $1 : '.';
22
22
  # (no link following for Windows exe version)
23
23
  # add lib directory at start of include path
24
24
  unshift @INC, ($0 =~ /(.*)[\\\/]/) ? "$1/lib" : './lib';
@@ -350,7 +350,7 @@ sub Cleanup() {
350
350
  #
351
351
 
352
352
  # add arguments embedded in filename (Windows .exe version only)
353
- if ($Image::ExifTool::exePath =~ /\(([^\\\/]+)\)(.exe|.pl)?$/i) {
353
+ if ($exePath =~ /\(([^\\\/]+)\)(.exe|.pl)?$/i) {
354
354
  my $argstr = $1;
355
355
  # divide into separate quoted or whitespace-delineated arguments
356
356
  my (@args, $arg, $quote);
@@ -773,7 +773,7 @@ for (;;) {
773
773
  }
774
774
  my $fp = ($stayOpen == 1 ? \*STAYOPEN : \*ARGFILE);
775
775
  unless ($mt->Open($fp, $argFile)) {
776
- unless ($argFile !~ /^\// and $mt->Open($fp, "$exeDir/$argFile")) {
776
+ unless ($argFile !~ /^\// and $mt->Open($fp, "$Image::ExifTool::exeDir/$argFile")) {
777
777
  Error "Error opening arg file $argFile\n";
778
778
  $badCmd = 1;
779
779
  next
@@ -1251,7 +1251,7 @@ for (;;) {
1251
1251
  $textOverwrite += 2 if $t2 =~ /\+/; # append
1252
1252
  if ($t1 ne 'W' and lc($t1) ne 'tagout') {
1253
1253
  undef $tagOut;
1254
- } elsif ($textOverwrite >= 2 and $textOut !~ /%[-+]?\d*[.:]?\d*[lu]?[tgs]/) {
1254
+ } elsif ($textOverwrite >= 2 and $textOut !~ /%[-+]?\d*[.:]?\d*[lu]?[tgso]/) {
1255
1255
  $tagOut = 0; # append tags to one file
1256
1256
  } else {
1257
1257
  $tagOut = 1; # separate file for each tag
@@ -1967,6 +1967,7 @@ sub GetImageInfo($$)
1967
1967
  } else {
1968
1968
  $pipe = qq{bzip2 -dc "$file" |};
1969
1969
  }
1970
+ $$et{TRUST_PIPE} = 1;
1970
1971
  }
1971
1972
  }
1972
1973
  # evaluate -if expression for conditional processing
@@ -2237,12 +2238,13 @@ sub GetImageInfo($$)
2237
2238
  next unless defined $forcePrint;
2238
2239
  $grp0 = $grp1 = 'Unknown';
2239
2240
  }
2241
+ # add groups from structure fields
2242
+ AddGroups($$info{$tag}, $grp0, \%groups, \@groups) if ref $$info{$tag};
2240
2243
  next if $groups{$grp1};
2241
2244
  # include family 0 and 1 groups in URI except for internal tags
2242
2245
  # (this will put internal tags in the "XML" group on readback)
2243
2246
  $groups{$grp1} = $grp0;
2244
2247
  push @groups, $grp1;
2245
- AddGroups($$info{$tag}, $grp0, \%groups, \@groups) if ref $$info{$tag};
2246
2248
  }
2247
2249
  foreach $grp1 (@groups) {
2248
2250
  my $grp = $groups{$grp1};
@@ -2365,7 +2367,8 @@ TAG: foreach $tag (@foundTags) {
2365
2367
  }
2366
2368
  my @groups = $et->GetGroup($tag);
2367
2369
  $outfile and close($fp), undef($tmpText); # (shouldn't happen)
2368
- ($fp, $outfile, $append) = OpenOutputFile($orig, $tagName, \@groups, $ext);
2370
+ my $org = $et->GetValue('OriginalRawFileName') || $et->GetValue('OriginalFileName');
2371
+ ($fp, $outfile, $append) = OpenOutputFile($orig, $tagName, \@groups, $ext, $org);
2369
2372
  $fp or ++$countBad, next TAG;
2370
2373
  $tmpText = $outfile unless $append;
2371
2374
  }
@@ -3061,12 +3064,14 @@ sub SetImageInfo($$$)
3061
3064
  # temporarily disable CTRL-C during this critical operation
3062
3065
  $critical = 1;
3063
3066
  undef $tmpFile; # handle deletion of temporary file ourself
3064
- if ($et->Open(\*ORIG_FILE, $file, '>')) {
3067
+ if ($et->Open(\*ORIG_FILE, $file, '+<')) {
3065
3068
  binmode(ORIG_FILE);
3066
3069
  while (read(NEW_FILE, $buff, 65536)) {
3067
3070
  print ORIG_FILE $buff or $err = 1;
3068
3071
  }
3069
3072
  close(NEW_FILE);
3073
+ # Handle files being shorter than the original
3074
+ eval { truncate(ORIG_FILE, tell(ORIG_FILE)) } or $err = 1;
3070
3075
  close(ORIG_FILE) or $err = 1;
3071
3076
  if ($err) {
3072
3077
  Warn "Couldn't overwrite in place - $file\n";
@@ -3462,18 +3467,26 @@ sub ConvertBinary($)
3462
3467
  }
3463
3468
 
3464
3469
  #------------------------------------------------------------------------------
3465
- # Compare two tag values to see if they are equal
3470
+ # Compare ValueConv and PrintConv values of a tag to see if they are equal
3466
3471
  # Inputs: 0) value1, 1) value2
3467
3472
  # Returns: true if they are equal
3468
3473
  sub IsEqual($$)
3469
3474
  {
3470
- return 1 if ref $_[0] eq 'SCALAR' or $_[0] eq $_[1];
3471
- return 0 if ref $_[0] ne 'ARRAY' or ref $_[1] ne 'ARRAY' or
3472
- @{$_[0]} ne @{$_[1]};
3473
- # test all elements of an array
3474
- my $i = 0;
3475
- for ($i=0; $i<scalar(@{$_[0]}); ++$i) {
3476
- return 0 if $_[0][$i] ne $_[1][$i];
3475
+ my ($a, $b) = @_;
3476
+ # (scalar values are not print-converted)
3477
+ return 1 if $a eq $b or ref $a eq 'SCALAR';
3478
+ if (ref $a eq 'HASH' and ref $b eq 'HASH') {
3479
+ return 0 if scalar(keys %$a) != scalar(keys %$b);
3480
+ my $key;
3481
+ foreach $key (keys %$a) {
3482
+ return 0 unless IsEqual($$a{$key}, $$b{$key});
3483
+ }
3484
+ } else {
3485
+ return 0 if ref $a ne 'ARRAY' or ref $b ne 'ARRAY' or @$a != @$b;
3486
+ my $i;
3487
+ for ($i=0; $i<scalar(@$a); ++$i) {
3488
+ return 0 unless IsEqual($$a[$i], $$b[$i]);
3489
+ }
3477
3490
  }
3478
3491
  return 1;
3479
3492
  }
@@ -3801,7 +3814,7 @@ sub FindFileWindows($$)
3801
3814
  my $enc = $et->Options('CharsetFileName');
3802
3815
  $wildfile = $et->Decode($wildfile, $enc, undef, 'UTF8') if $enc and $enc ne 'UTF8';
3803
3816
  $wildfile =~ tr/\\/\//; # use forward slashes
3804
- my ($dir, $wildname) = ($wildfile =~ m{(.*/)(.*)}) ? ($1, $2) : ('', $wildfile);
3817
+ my ($dir, $wildname) = ($wildfile =~ m{(.*[:/])(.*)}) ? ($1, $2) : ('', $wildfile);
3805
3818
  if ($dir =~ /[*?]/) {
3806
3819
  Warn "Wildcards don't work in the directory specification\n";
3807
3820
  return ();
@@ -3941,7 +3954,7 @@ sub SuggestedExtension($$$)
3941
3954
  $ext = 'xml';
3942
3955
  } elsif ($$valPt =~ /^RIFF....WAVE/s) {
3943
3956
  $ext = 'wav';
3944
- } elsif ($tag eq 'OriginalRawFileData' and defined($ext = $et->GetValue('OriginalRawFileName'))) {
3957
+ } elsif ($tag eq 'OriginalRawImage' and defined($ext = $et->GetValue('OriginalRawFileName'))) {
3945
3958
  $ext =~ s/^.*\.//s;
3946
3959
  $ext = $ext ? lc($ext) : 'raw';
3947
3960
  } elsif ($tag eq 'EXIF') {
@@ -3993,14 +4006,15 @@ sub LoadPrintFormat($)
3993
4006
  # A sort of sprintf for filenames
3994
4007
  # Inputs: 0) format string (%d=dir, %f=file name, %e=ext),
3995
4008
  # 1) source filename or undef to test format string
3996
- # 2-4) [%t %g %s only] tag name, ref to array of group names, suggested extension
4009
+ # 2-4) [%t %g %s %o only] tag name, ref to array of group names,
4010
+ # suggested extension, original raw file name
3997
4011
  # Returns: new filename or undef on error (or if no file and fmt contains token)
3998
4012
  sub FilenameSPrintf($;$@)
3999
4013
  {
4000
4014
  my ($fmt, $file, @extra) = @_;
4001
4015
  local $_;
4002
4016
  # return format string straight away if no tokens
4003
- return $fmt unless $fmt =~ /%[-+]?\d*[.:]?\d*[lu]?[dDfFeEtgs]/;
4017
+ return $fmt unless $fmt =~ /%[-+]?\d*[.:]?\d*[lu]?[dDfFeEtgso]/;
4004
4018
  return undef unless defined $file;
4005
4019
  CleanFilename($file); # make sure we are using forward slashes
4006
4020
  # split filename into directory, file, extension
@@ -4014,9 +4028,9 @@ sub FilenameSPrintf($;$@)
4014
4028
  }
4015
4029
  $part{F} = $part{f} . $part{E};
4016
4030
  ($part{D} = $part{d}) =~ s{/+$}{};
4017
- @part{qw(t g s)} = @extra;
4031
+ @part{qw(t g s o)} = @extra;
4018
4032
  my ($filename, $pos) = ('', 0);
4019
- while ($fmt =~ /(%([-+]?)(\d*)([.:]?)(\d*)([lu]?)([dDfFeEtgs]))/g) {
4033
+ while ($fmt =~ /(%([-+]?)(\d*)([.:]?)(\d*)([lu]?)([dDfFeEtgso]))/g) {
4020
4034
  $filename .= substr($fmt, $pos, pos($fmt) - $pos - length($1));
4021
4035
  $pos = pos($fmt);
4022
4036
  my ($sign, $wid, $dot, $skip, $mod, $code) = ($2, $3, $4, $5 || 0, $6, $7);
@@ -4179,7 +4193,7 @@ sub OpenOutputFile($;@)
4179
4193
  if ($textOut) {
4180
4194
  $outfile = $file;
4181
4195
  CleanFilename($outfile);
4182
- if ($textOut =~ /%[-+]?\d*[.:]?\d*[lun]?[dDfFeEtgscC]/ or defined $tagOut) {
4196
+ if ($textOut =~ /%[-+]?\d*[.:]?\d*[lun]?[dDfFeEtgsocC]/ or defined $tagOut) {
4183
4197
  # make filename from printf-like $textOut
4184
4198
  $outfile = FilenameSPrintf($textOut, $file, @args);
4185
4199
  return () unless defined $outfile;
@@ -4455,7 +4469,7 @@ SYNOPSIS
4455
4469
  exiftool [*OPTIONS*] -*TAG*[+-<]=[*VALUE*]... *FILE*...
4456
4470
 
4457
4471
  Copying
4458
- exiftool [*OPTIONS*] -tagsFromFile *SRCFILE* [-*SRCTAG*[>*DSTTAG*]...]
4472
+ exiftool [*OPTIONS*] -tagsFromFile *SRCFILE* [-[*DSTTAG*<]*SRCTAG*...]
4459
4473
  *FILE*...
4460
4474
 
4461
4475
  Other
@@ -4494,48 +4508,48 @@ DESCRIPTION
4494
4508
 
4495
4509
  File Types
4496
4510
  ------------+-------------+-------------+-------------+------------
4497
- 360 r/w | DR4 r/w/c | JNG r/w | ODP r | RIFF r
4498
- 3FR r | DSS r | JP2 r/w | ODS r | RSRC r
4499
- 3G2 r/w | DV r | JPEG r/w | ODT r | RTF r
4500
- 3GP r/w | DVB r/w | JSON r | OFR r | RW2 r/w
4501
- A r | DVR-MS r | JXL r | OGG r | RWL r/w
4502
- AA r | DYLIB r | K25 r | OGV r | RWZ r
4503
- AAE r | EIP r | KDC r | ONP r | RM r
4504
- AAX r/w | EPS r/w | KEY r | OPUS r | SEQ r
4505
- ACR r | EPUB r | LA r | ORF r/w | SKETCH r
4506
- AFM r | ERF r/w | LFP r | ORI r/w | SO r
4507
- AI r/w | EXE r | LIF r | OTF r | SR2 r/w
4508
- AIFF r | EXIF r/w/c | LNK r | PAC r | SRF r
4509
- APE r | EXR r | LRV r/w | PAGES r | SRW r/w
4510
- ARQ r/w | EXV r/w/c | M2TS r | PBM r/w | SVG r
4511
- ARW r/w | F4A/V r/w | M4A/V r/w | PCD r | SWF r
4512
- ASF r | FFF r/w | MACOS r | PCX r | THM r/w
4513
- AVI r | FITS r | MAX r | PDB r | TIFF r/w
4514
- AVIF r/w | FLA r | MEF r/w | PDF r/w | TORRENT r
4515
- AZW r | FLAC r | MIE r/w/ | PEF r/w | TTC r
4516
- BMP r | FLIF r/w | MIFF r c | PFA r | TTF r
4517
- BPG r | FLV r | MKA r | PFB r | TXT r
4518
- BTF r | FPF r | MKS r | PFM r | VCF r
4519
- CHM r | FPX r | MKV r | PGF r | VRD r/w/c
4520
- COS r | GIF r/w | MNG r/w | PGM r/w | VSD r
4521
- CR2 r/w | GPR r/w | MOBI r | PLIST r | WAV r
4522
- CR3 r/w | GZ r | MODD r | PICT r | WDP r/w
4523
- CRM r/w | HDP r/w | MOI r | PMP r | WEBP r
4524
- CRW r/w | HDR r | MOS r/w | PNG r/w | WEBM r
4525
- CS1 r/w | HEIC r/w | MOV r/w | PPM r/w | WMA r
4526
- CSV r | HEIF r/w | MP3 r | PPT r | WMV r
4527
- CZI r | HTML r | MP4 r/w | PPTX r | WTV r
4528
- DCM r | ICC r/w/c | MPC r | PS r/w | WV r
4529
- DCP r/w | ICS r | MPG r | PSB r/w | X3F r/w
4530
- DCR r | IDML r | MPO r/w | PSD r/w | XCF r
4531
- DFONT r | IIQ r/w | MQV r/w | PSP r | XLS r
4532
- DIVX r | IND r/w | MRC r | QTIF r/w | XLSX r
4533
- DJVU r | INSP r/w | MRW r/w | R3D r | XMP r/w/c
4534
- DLL r | INSV r | MXF r | RA r | ZIP r
4535
- DNG r/w | INX r | NEF r/w | RAF r/w |
4536
- DOC r | ISO r | NRW r/w | RAM r |
4537
- DOCX r | ITC r | NUMBERS r | RAR r |
4538
- DPX r | J2C r | O r | RAW r/w |
4511
+ 360 r/w | DR4 r/w/c | JNG r/w | O r | RAW r/w
4512
+ 3FR r | DSS r | JP2 r/w | ODP r | RIFF r
4513
+ 3G2 r/w | DV r | JPEG r/w | ODS r | RSRC r
4514
+ 3GP r/w | DVB r/w | JSON r | ODT r | RTF r
4515
+ A r | DVR-MS r | JXL r | OFR r | RW2 r/w
4516
+ AA r | DYLIB r | K25 r | OGG r | RWL r/w
4517
+ AAE r | EIP r | KDC r | OGV r | RWZ r
4518
+ AAX r/w | EPS r/w | KEY r | ONP r | RM r
4519
+ ACR r | EPUB r | LA r | OPUS r | SEQ r
4520
+ AFM r | ERF r/w | LFP r | ORF r/w | SKETCH r
4521
+ AI r/w | EXE r | LIF r | ORI r/w | SO r
4522
+ AIFF r | EXIF r/w/c | LNK r | OTF r | SR2 r/w
4523
+ APE r | EXR r | LRV r/w | PAC r | SRF r
4524
+ ARQ r/w | EXV r/w/c | M2TS r | PAGES r | SRW r/w
4525
+ ARW r/w | F4A/V r/w | M4A/V r/w | PBM r/w | SVG r
4526
+ ASF r | FFF r/w | MACOS r | PCD r | SWF r
4527
+ AVI r | FITS r | MAX r | PCX r | THM r/w
4528
+ AVIF r/w | FLA r | MEF r/w | PDB r | TIFF r/w
4529
+ AZW r | FLAC r | MIE r/w/ | PDF r/w | TORRENT r
4530
+ BMP r | FLIF r/w | MIFF r c | PEF r/w | TTC r
4531
+ BPG r | FLV r | MKA r | PFA r | TTF r
4532
+ BTF r | FPF r | MKS r | PFB r | TXT r
4533
+ CHM r | FPX r | MKV r | PFM r | VCF r
4534
+ COS r | GIF r/w | MNG r/w | PGF r | VRD r/w/c
4535
+ CR2 r/w | GPR r/w | MOBI r | PGM r/w | VSD r
4536
+ CR3 r/w | GZ r | MODD r | PLIST r | WAV r
4537
+ CRM r/w | HDP r/w | MOI r | PICT r | WDP r/w
4538
+ CRW r/w | HDR r | MOS r/w | PMP r | WEBP r
4539
+ CS1 r/w | HEIC r/w | MOV r/w | PNG r/w | WEBM r
4540
+ CSV r | HEIF r/w | MP3 r | PPM r/w | WMA r
4541
+ CZI r | HTML r | MP4 r/w | PPT r | WMV r
4542
+ DCM r | ICC r/w/c | MPC r | PPTX r | WTV r
4543
+ DCP r/w | ICS r | MPG r | PS r/w | WV r
4544
+ DCR r | IDML r | MPO r/w | PSB r/w | X3F r/w
4545
+ DFONT r | IIQ r/w | MQV r/w | PSD r/w | XCF r
4546
+ DIVX r | IND r/w | MRC r | PSP r | XLS r
4547
+ DJVU r | INSP r/w | MRW r/w | QTIF r/w | XLSX r
4548
+ DLL r | INSV r | MXF r | R3D r | XMP r/w/c
4549
+ DNG r/w | INX r | NEF r/w | RA r | ZIP r
4550
+ DOC r | ISO r | NKSC r/w | RAF r/w |
4551
+ DOCX r | ITC r | NRW r/w | RAM r |
4552
+ DPX r | J2C r | NUMBERS r | RAR r |
4539
4553
 
4540
4554
  Meta Information
4541
4555
  ----------------------+----------------------+---------------------
@@ -4724,6 +4738,15 @@ OPTIONS
4724
4738
  4 below). Instead, individual tags may be recovered using the
4725
4739
  -tagsFromFile option (eg. "-all= -tagsfromfile @ -artist").
4726
4740
 
4741
+ To speed processing when reading XMP, exclusions in XMP groups also
4742
+ bypass processing of the corresponding XMP property and any
4743
+ contained properties. For example, "--xmp-crs:all" may speed
4744
+ processing significantly in cases where a large number of XMP-crs
4745
+ tags exist. To use this feature to bypass processing of a specific
4746
+ XMP property, the property name must be used instead of the
4747
+ ExifTool tag name (eg. "--xmp-crs:dabs"). Also, "XMP-all" may be
4748
+ used to to indicate any XMP namespace (eg. <C--xmp-all:dabs>).
4749
+
4727
4750
  -*TAG*[+-^]=[*VALUE*]
4728
4751
  Write a new value for the specified tag (eg. "-comment=wow"), or
4729
4752
  delete the tag if no *VALUE* is given (eg. "-comment="). "+=" and
@@ -4734,7 +4757,8 @@ OPTIONS
4734
4757
  may be used to conditionally delete or replace a tag (see "WRITING
4735
4758
  EXAMPLES" for examples). "^=" is used to write an empty string
4736
4759
  instead of deleting the tag when no *VALUE* is given, but otherwise
4737
- it is equivalent to "=".
4760
+ it is equivalent to "=", but note that the caret must be quoted on
4761
+ the Windows command line.
4738
4762
 
4739
4763
  *TAG* may contain one or more leading family 0, 1, 2 or 7 group
4740
4764
  names, prefixed by optional family numbers, and separated colons.
@@ -5190,7 +5214,10 @@ OPTIONS
5190
5214
  "strftime" man page on your system for details. The default format
5191
5215
  is equivalent to "%Y:%m:%d %H:%M:%S". This option has no effect on
5192
5216
  date-only or time-only tags and ignores timezone information if
5193
- present. Only one -d option may be used per command. Requires
5217
+ present. ExifTool adds a %f format code to represent fractional
5218
+ seconds, and supports an optional width to specify the number of
5219
+ digits after the decimal point (eg. %3f would give something like
5220
+ .437). Only one -d option may be used per command. Requires
5194
5221
  POSIX::strptime or Time::Piece for the inversion conversion when
5195
5222
  writing.
5196
5223
 
@@ -5419,7 +5446,8 @@ OPTIONS
5419
5446
  beginning with "#" are output for each processed file. Lines
5420
5447
  beginning with "#[IF]" are not output, but all BODY lines are
5421
5448
  skipped if any tag on an IF line doesn't exist. Other lines
5422
- beginning with "#" are ignored. For example, this format file:
5449
+ beginning with "#" are ignored. (To output a line beginning with
5450
+ "#", use "#[BODY]#".) For example, this format file:
5423
5451
 
5424
5452
  # this is a comment line
5425
5453
  #[HEAD]-- Generated by ExifTool $exifToolVersion --
@@ -5433,7 +5461,7 @@ OPTIONS
5433
5461
 
5434
5462
  produces output like this:
5435
5463
 
5436
- -- Generated by ExifTool 12.33 --
5464
+ -- Generated by ExifTool 12.40 --
5437
5465
  File: a.jpg - 2003:10:31 15:44:19
5438
5466
  (f/5.6, 1/60s, ISO 100)
5439
5467
  File: b.jpg - 2006:05:23 11:57:38
@@ -5690,13 +5718,15 @@ OPTIONS
5690
5718
 
5691
5719
  1) With -W, a new output file is created for each extracted tag.
5692
5720
 
5693
- 2) -W supports three additional format codes: %t, %g and %s
5721
+ 2) -W supports four additional format codes: %t, %g and %s
5694
5722
  represent the tag name, group name, and suggested extension for the
5695
- output file (based on the format of the data). The %g code may be
5696
- followed by a single digit to specify the group family number (eg.
5697
- %g1), otherwise family 0 is assumed. The substring
5698
- width/position/case specifiers may be used with these format codes
5699
- in exactly the same way as with %f and %e.
5723
+ output file (based on the format of the data), and %o represents
5724
+ the value of the OriginalRawFileName or OriginalFileName tag from
5725
+ the input file (including extension). The %g code may be followed
5726
+ by a single digit to specify the group family number (eg. %g1),
5727
+ otherwise family 0 is assumed. The substring width/position/case
5728
+ specifiers may be used with these format codes in exactly the same
5729
+ way as with %f and %e.
5700
5730
 
5701
5731
  3) The argument for -W is interpreted as a file name if it contains
5702
5732
  no format codes. (For -w, this would be a file extension.) This
@@ -5718,7 +5748,7 @@ OPTIONS
5718
5748
  file names to the console instead of giving a verbose dump of the
5719
5749
  entire file. (Unless appending all output to one file for each
5720
5750
  source file by using -W+ with an output file *FMT* that does not
5721
- contain %t, $g or %s.)
5751
+ contain %t, %g, %s or %o.)
5722
5752
 
5723
5753
  5) Individual list items are stored in separate files when -W is
5724
5754
  combined with -b, but note that for separate files to be created %c
@@ -7114,7 +7144,7 @@ EXIT STATUS
7114
7144
  the commands if -execute was used).
7115
7145
 
7116
7146
  AUTHOR
7117
- Copyright 2003-2021, Phil Harvey
7147
+ Copyright 2003-2022, Phil Harvey
7118
7148
 
7119
7149
  This is free software; you can redistribute it and/or modify it under
7120
7150
  the same terms as Perl itself.
@@ -7127,9 +7157,9 @@ __HELP__
7127
7157
 
7128
7158
  my $dir = $ENV{PAR_GLOBAL_TEMP} || $ENV{PAR_TEMP} || $ENV{TMP} || $ENV{TEMP} || '/tmp';
7129
7159
  my $docFile = "$dir/exiftool_${version}_doc.txt";
7160
+ # try backslashes first if it seems we may be running in cmd.exe
7161
+ $docFile =~ tr/\//\\/ if $ENV{ComSpec} or $docFile =~ /\\/;
7130
7162
  unless (-e $docFile) {
7131
- # try backslashes first if it seems we may be running in cmd.exe
7132
- $docFile =~ tr/\//\\/ if $ENV{ComSpec} or $docFile =~ /\\/;
7133
7163
  unless (open(TEMP, ">$docFile") or
7134
7164
  ($docFile =~ tr/\/\\/\\\// and open(TEMP, ">$docFile")) or # try forward slash
7135
7165
  (CreateDirectory($docFile) and open(TEMP, ">$docFile"))) # try creating dir
@@ -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.
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
35
35
  use Image::ExifTool::Validate;
36
36
  use Image::ExifTool::MacOS;
37
37
 
38
- $VERSION = '3.45';
38
+ $VERSION = '3.47';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -469,6 +469,11 @@ the PrintConv option is enabled and no time zone is specified. This is
469
469
  because Apple software may display crazy values if the time zone is missing
470
470
  for some tags.
471
471
 
472
+ By default ExifTool will remove null padding from some QuickTime containers
473
+ in Canon CR3 files when writing, but the
474
+ L<QuickTimePad|../ExifTool.html#QuickTimePad> option may be used to preserve
475
+ the original size by padding with nulls if necessary.
476
+
472
477
  See
473
478
  L<https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/>
474
479
  for the official specification.
@@ -664,7 +669,7 @@ L<Image::ExifTool::BuildTagLookup|Image::ExifTool::BuildTagLookup>.
664
669
 
665
670
  ~head1 AUTHOR
666
671
 
667
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
672
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
668
673
 
669
674
  This library is free software; you can redistribute it and/or modify it
670
675
  under the same terms as Perl itself.
@@ -752,7 +757,7 @@ sub new
752
757
  my (%tagNameInfo, %id, %longID, %longName, %shortName, %tableNum,
753
758
  %tagLookup, %tagExists, %noLookup, %tableWritable, %sepTable, %case,
754
759
  %structs, %compositeModules, %isPlugin, %flattened, %structLookup,
755
- @writePseudo);
760
+ @writePseudo, %dupXmpTag);
756
761
  $self->{TAG_NAME_INFO} = \%tagNameInfo;
757
762
  $self->{ID_LOOKUP} = \%id;
758
763
  $self->{LONG_ID} = \%longID;
@@ -900,6 +905,12 @@ TagID: foreach $tagID (@keys) {
900
905
  foreach (@grps) {
901
906
  warn "Group name starts with 'ID-' for $short $name\n" if /^ID-/i;
902
907
  }
908
+ if ($isXMP and not $$tagInfo{Avoid} and not $$tagInfo{Struct} and
909
+ ($$tagInfo{Writable} or $$table{WRITABLE}))
910
+ {
911
+ $dupXmpTag{$name} and warn "Duplicate writable XMP tag $name\n";
912
+ $dupXmpTag{$name} = 1;
913
+ }
903
914
  # validate Name (must not start with a digit or else XML output will not be valid;
904
915
  # must not start with a dash or exiftool command line may get confused)
905
916
  if ($name !~ /^[_A-Za-z][-\w]+$/ and
@@ -2751,7 +2762,7 @@ Returned list of writable pseudo tags.
2751
2762
 
2752
2763
  =head1 AUTHOR
2753
2764
 
2754
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
2765
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
2755
2766
 
2756
2767
  This library is free software; you can redistribute it and/or modify it
2757
2768
  under the same terms as Perl itself.
@@ -307,7 +307,7 @@ specification.
307
307
 
308
308
  =head1 AUTHOR
309
309
 
310
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
310
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
311
311
 
312
312
  This library is free software; you can redistribute it and/or modify it
313
313
  under the same terms as Perl itself.