exiftool-vendored.exe 13.0.0 → 13.17.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 (208) hide show
  1. package/bin/exiftool.exe +0 -0
  2. package/bin/exiftool_files/exiftool.pl +169 -65
  3. package/bin/exiftool_files/lib/File/RandomAccess.pm +1 -1
  4. package/bin/exiftool_files/lib/File/RandomAccess.pod +2 -2
  5. package/bin/exiftool_files/lib/Image/ExifTool/AAC.pm +1 -1
  6. package/bin/exiftool_files/lib/Image/ExifTool/AES.pm +1 -1
  7. package/bin/exiftool_files/lib/Image/ExifTool/AFCP.pm +6 -6
  8. package/bin/exiftool_files/lib/Image/ExifTool/AIFF.pm +2 -2
  9. package/bin/exiftool_files/lib/Image/ExifTool/APE.pm +2 -2
  10. package/bin/exiftool_files/lib/Image/ExifTool/APP12.pm +1 -1
  11. package/bin/exiftool_files/lib/Image/ExifTool/ASF.pm +2 -2
  12. package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +11 -9
  13. package/bin/exiftool_files/lib/Image/ExifTool/Audible.pm +1 -1
  14. package/bin/exiftool_files/lib/Image/ExifTool/BMP.pm +1 -1
  15. package/bin/exiftool_files/lib/Image/ExifTool/BPG.pm +1 -1
  16. package/bin/exiftool_files/lib/Image/ExifTool/BZZ.pm +1 -1
  17. package/bin/exiftool_files/lib/Image/ExifTool/BigTIFF.pm +1 -1
  18. package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +46 -26
  19. package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +5 -2
  20. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +68 -28
  21. package/bin/exiftool_files/lib/Image/ExifTool/CanonCustom.pm +1 -1
  22. package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +1 -1
  23. package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +1 -1
  24. package/bin/exiftool_files/lib/Image/ExifTool/CaptureOne.pm +1 -1
  25. package/bin/exiftool_files/lib/Image/ExifTool/Casio.pm +1 -1
  26. package/bin/exiftool_files/lib/Image/ExifTool/Charset.pm +1 -1
  27. package/bin/exiftool_files/lib/Image/ExifTool/DICOM.pm +1 -1
  28. package/bin/exiftool_files/lib/Image/ExifTool/DJI.pm +196 -30
  29. package/bin/exiftool_files/lib/Image/ExifTool/DNG.pm +1 -1
  30. package/bin/exiftool_files/lib/Image/ExifTool/DPX.pm +1 -1
  31. package/bin/exiftool_files/lib/Image/ExifTool/DV.pm +1 -1
  32. package/bin/exiftool_files/lib/Image/ExifTool/DarwinCore.pm +1 -1
  33. package/bin/exiftool_files/lib/Image/ExifTool/DjVu.pm +1 -1
  34. package/bin/exiftool_files/lib/Image/ExifTool/EXE.pm +138 -33
  35. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +29 -16
  36. package/bin/exiftool_files/lib/Image/ExifTool/FITS.pm +3 -3
  37. package/bin/exiftool_files/lib/Image/ExifTool/FLAC.pm +1 -1
  38. package/bin/exiftool_files/lib/Image/ExifTool/FLIF.pm +3 -3
  39. package/bin/exiftool_files/lib/Image/ExifTool/FLIR.pm +1 -1
  40. package/bin/exiftool_files/lib/Image/ExifTool/Fixup.pm +1 -1
  41. package/bin/exiftool_files/lib/Image/ExifTool/Flash.pm +1 -1
  42. package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +17 -21
  43. package/bin/exiftool_files/lib/Image/ExifTool/Font.pm +2 -2
  44. package/bin/exiftool_files/lib/Image/ExifTool/FotoStation.pm +1 -1
  45. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +1 -1
  46. package/bin/exiftool_files/lib/Image/ExifTool/GE.pm +1 -1
  47. package/bin/exiftool_files/lib/Image/ExifTool/GIF.pm +144 -93
  48. package/bin/exiftool_files/lib/Image/ExifTool/GIMP.pm +1 -1
  49. package/bin/exiftool_files/lib/Image/ExifTool/GM.pm +1 -1
  50. package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +34 -30
  51. package/bin/exiftool_files/lib/Image/ExifTool/GeoTiff.pm +1 -1
  52. package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat +0 -0
  53. package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.pm +19 -9
  54. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +46 -12
  55. package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +120 -8
  56. package/bin/exiftool_files/lib/Image/ExifTool/H264.pm +1 -1
  57. package/bin/exiftool_files/lib/Image/ExifTool/HP.pm +2 -2
  58. package/bin/exiftool_files/lib/Image/ExifTool/HTML.pm +1 -1
  59. package/bin/exiftool_files/lib/Image/ExifTool/HtmlDump.pm +1 -1
  60. package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +81 -2
  61. package/bin/exiftool_files/lib/Image/ExifTool/ICO.pm +1 -1
  62. package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +8 -8
  63. package/bin/exiftool_files/lib/Image/ExifTool/IPTC.pm +10 -7
  64. package/bin/exiftool_files/lib/Image/ExifTool/ISO.pm +1 -1
  65. package/bin/exiftool_files/lib/Image/ExifTool/ITC.pm +1 -1
  66. package/bin/exiftool_files/lib/Image/ExifTool/Import.pm +5 -4
  67. package/bin/exiftool_files/lib/Image/ExifTool/InDesign.pm +2 -2
  68. package/bin/exiftool_files/lib/Image/ExifTool/InfiRay.pm +1 -1
  69. package/bin/exiftool_files/lib/Image/ExifTool/JPEG.pm +38 -5
  70. package/bin/exiftool_files/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  71. package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +1 -1
  72. package/bin/exiftool_files/lib/Image/ExifTool/JVC.pm +1 -1
  73. package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +10 -9
  74. package/bin/exiftool_files/lib/Image/ExifTool/Kodak.pm +1 -1
  75. package/bin/exiftool_files/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  76. package/bin/exiftool_files/lib/Image/ExifTool/LIF.pm +1 -1
  77. package/bin/exiftool_files/lib/Image/ExifTool/LNK.pm +2 -2
  78. package/bin/exiftool_files/lib/Image/ExifTool/Lang/cs.pm +1 -1
  79. package/bin/exiftool_files/lib/Image/ExifTool/Lang/de.pm +1 -1
  80. package/bin/exiftool_files/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  81. package/bin/exiftool_files/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  82. package/bin/exiftool_files/lib/Image/ExifTool/Lang/es.pm +1 -1
  83. package/bin/exiftool_files/lib/Image/ExifTool/Lang/fi.pm +1 -1
  84. package/bin/exiftool_files/lib/Image/ExifTool/Lang/fr.pm +1 -1
  85. package/bin/exiftool_files/lib/Image/ExifTool/Lang/it.pm +1 -1
  86. package/bin/exiftool_files/lib/Image/ExifTool/Lang/ja.pm +1 -1
  87. package/bin/exiftool_files/lib/Image/ExifTool/Lang/ko.pm +1 -1
  88. package/bin/exiftool_files/lib/Image/ExifTool/Lang/nl.pm +1 -1
  89. package/bin/exiftool_files/lib/Image/ExifTool/Lang/pl.pm +1 -1
  90. package/bin/exiftool_files/lib/Image/ExifTool/Lang/ru.pm +1 -1
  91. package/bin/exiftool_files/lib/Image/ExifTool/Lang/sk.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/LigoGPS.pm +409 -0
  98. package/bin/exiftool_files/lib/Image/ExifTool/Lytro.pm +1 -1
  99. package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +57 -18
  100. package/bin/exiftool_files/lib/Image/ExifTool/MIE.pm +15 -6
  101. package/bin/exiftool_files/lib/Image/ExifTool/MIEUnits.pod +1 -1
  102. package/bin/exiftool_files/lib/Image/ExifTool/MIFF.pm +1 -1
  103. package/bin/exiftool_files/lib/Image/ExifTool/MISB.pm +1 -1
  104. package/bin/exiftool_files/lib/Image/ExifTool/MNG.pm +1 -1
  105. package/bin/exiftool_files/lib/Image/ExifTool/MOI.pm +1 -1
  106. package/bin/exiftool_files/lib/Image/ExifTool/MPC.pm +1 -1
  107. package/bin/exiftool_files/lib/Image/ExifTool/MPEG.pm +1 -1
  108. package/bin/exiftool_files/lib/Image/ExifTool/MPF.pm +1 -1
  109. package/bin/exiftool_files/lib/Image/ExifTool/MRC.pm +1 -1
  110. package/bin/exiftool_files/lib/Image/ExifTool/MWG.pm +1 -1
  111. package/bin/exiftool_files/lib/Image/ExifTool/MXF.pm +3 -3
  112. package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +3 -2
  113. package/bin/exiftool_files/lib/Image/ExifTool/MakerNotes.pm +1 -1
  114. package/bin/exiftool_files/lib/Image/ExifTool/Matroska.pm +22 -6
  115. package/bin/exiftool_files/lib/Image/ExifTool/Microsoft.pm +2 -2
  116. package/bin/exiftool_files/lib/Image/ExifTool/Minolta.pm +1 -1
  117. package/bin/exiftool_files/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  118. package/bin/exiftool_files/lib/Image/ExifTool/Motorola.pm +1 -1
  119. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +457 -103
  120. package/bin/exiftool_files/lib/Image/ExifTool/NikonCapture.pm +1 -1
  121. package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +6 -6
  122. package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +1 -1
  123. package/bin/exiftool_files/lib/Image/ExifTool/Nintendo.pm +1 -1
  124. package/bin/exiftool_files/lib/Image/ExifTool/OOXML.pm +8 -8
  125. package/bin/exiftool_files/lib/Image/ExifTool/Ogg.pm +1 -1
  126. package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +1 -1
  127. package/bin/exiftool_files/lib/Image/ExifTool/OpenEXR.pm +1 -1
  128. package/bin/exiftool_files/lib/Image/ExifTool/Opus.pm +1 -1
  129. package/bin/exiftool_files/lib/Image/ExifTool/Other.pm +1 -1
  130. package/bin/exiftool_files/lib/Image/ExifTool/PCX.pm +1 -1
  131. package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +49 -18
  132. package/bin/exiftool_files/lib/Image/ExifTool/PGF.pm +1 -1
  133. package/bin/exiftool_files/lib/Image/ExifTool/PICT.pm +1 -1
  134. package/bin/exiftool_files/lib/Image/ExifTool/PLIST.pm +4 -4
  135. package/bin/exiftool_files/lib/Image/ExifTool/PLUS.pm +1 -1
  136. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +20 -8
  137. package/bin/exiftool_files/lib/Image/ExifTool/PPM.pm +12 -3
  138. package/bin/exiftool_files/lib/Image/ExifTool/PSP.pm +1 -1
  139. package/bin/exiftool_files/lib/Image/ExifTool/Palm.pm +1 -1
  140. package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +27 -3
  141. package/bin/exiftool_files/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  142. package/bin/exiftool_files/lib/Image/ExifTool/Parrot.pm +1 -1
  143. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +1 -1
  144. package/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm +4 -4
  145. package/bin/exiftool_files/lib/Image/ExifTool/PhotoCD.pm +1 -1
  146. package/bin/exiftool_files/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  147. package/bin/exiftool_files/lib/Image/ExifTool/Photoshop.pm +65 -4
  148. package/bin/exiftool_files/lib/Image/ExifTool/PostScript.pm +1 -1
  149. package/bin/exiftool_files/lib/Image/ExifTool/PrintIM.pm +1 -1
  150. package/bin/exiftool_files/lib/Image/ExifTool/Protobuf.pm +270 -0
  151. package/bin/exiftool_files/lib/Image/ExifTool/Qualcomm.pm +1 -1
  152. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +327 -88
  153. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +199 -195
  154. package/bin/exiftool_files/lib/Image/ExifTool/README +12 -2
  155. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +21 -6
  156. package/bin/exiftool_files/lib/Image/ExifTool/RSRC.pm +1 -1
  157. package/bin/exiftool_files/lib/Image/ExifTool/RTF.pm +2 -2
  158. package/bin/exiftool_files/lib/Image/ExifTool/Radiance.pm +1 -1
  159. package/bin/exiftool_files/lib/Image/ExifTool/Rawzor.pm +1 -1
  160. package/bin/exiftool_files/lib/Image/ExifTool/Real.pm +1 -1
  161. package/bin/exiftool_files/lib/Image/ExifTool/Reconyx.pm +1 -1
  162. package/bin/exiftool_files/lib/Image/ExifTool/Red.pm +1 -1
  163. package/bin/exiftool_files/lib/Image/ExifTool/Ricoh.pm +4 -4
  164. package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +6 -2
  165. package/bin/exiftool_files/lib/Image/ExifTool/Sanyo.pm +1 -1
  166. package/bin/exiftool_files/lib/Image/ExifTool/Scalado.pm +1 -1
  167. package/bin/exiftool_files/lib/Image/ExifTool/Shift.pl +1 -1
  168. package/bin/exiftool_files/lib/Image/ExifTool/Shortcuts.pm +1 -1
  169. package/bin/exiftool_files/lib/Image/ExifTool/Sigma.pm +1 -1
  170. package/bin/exiftool_files/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  171. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +6 -5
  172. package/bin/exiftool_files/lib/Image/ExifTool/SonyIDC.pm +1 -1
  173. package/bin/exiftool_files/lib/Image/ExifTool/Stim.pm +1 -1
  174. package/bin/exiftool_files/lib/Image/ExifTool/TagInfoXML.pm +6 -5
  175. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +7028 -6968
  176. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +12079 -11630
  177. package/bin/exiftool_files/lib/Image/ExifTool/Text.pm +4 -3
  178. package/bin/exiftool_files/lib/Image/ExifTool/Theora.pm +1 -1
  179. package/bin/exiftool_files/lib/Image/ExifTool/Torrent.pm +3 -3
  180. package/bin/exiftool_files/lib/Image/ExifTool/Trailer.pm +318 -0
  181. package/bin/exiftool_files/lib/Image/ExifTool/Unknown.pm +1 -1
  182. package/bin/exiftool_files/lib/Image/ExifTool/VCard.pm +3 -3
  183. package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +6 -6
  184. package/bin/exiftool_files/lib/Image/ExifTool/Vorbis.pm +1 -1
  185. package/bin/exiftool_files/lib/Image/ExifTool/WPG.pm +1 -1
  186. package/bin/exiftool_files/lib/Image/ExifTool/WTV.pm +1 -1
  187. package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  188. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +3 -3
  189. package/bin/exiftool_files/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  190. package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -1
  191. package/bin/exiftool_files/lib/Image/ExifTool/WritePNG.pl +1 -1
  192. package/bin/exiftool_files/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  193. package/bin/exiftool_files/lib/Image/ExifTool/WritePostScript.pl +1 -1
  194. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +170 -79
  195. package/bin/exiftool_files/lib/Image/ExifTool/WriteRIFF.pl +17 -6
  196. package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +3 -3
  197. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +89 -96
  198. package/bin/exiftool_files/lib/Image/ExifTool/XISF.pm +1 -1
  199. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +28 -13
  200. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +106 -3
  201. package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +2 -3
  202. package/bin/exiftool_files/lib/Image/ExifTool/ZIP.pm +2 -2
  203. package/bin/exiftool_files/lib/Image/ExifTool/ZISRAW.pm +1 -1
  204. package/bin/exiftool_files/lib/Image/ExifTool/iWork.pm +1 -1
  205. package/bin/exiftool_files/lib/Image/ExifTool.pm +467 -228
  206. package/bin/exiftool_files/lib/Image/ExifTool.pod +118 -72
  207. package/bin/exiftool_files/windows_exiftool.txt +96 -51
  208. package/package.json +8 -8
@@ -306,7 +306,7 @@ APP12 meta information.
306
306
 
307
307
  =head1 AUTHOR
308
308
 
309
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
309
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
310
310
 
311
311
  This library is free software; you can redistribute it and/or modify it
312
312
  under the same terms as Perl itself.
@@ -781,7 +781,7 @@ sub ProcessASF($$;$)
781
781
  $err = 'Invalid ASF object size';
782
782
  } elsif ($et->Options('LargeFileSupport')) {
783
783
  if ($et->Options('LargeFileSupport') eq '2') {
784
- $et->WarnOnce('Skipping large ASF object (LargeFileSupport is 2)');
784
+ $et->Warn('Skipping large ASF object (LargeFileSupport is 2)');
785
785
  }
786
786
  if ($raf->Seek($size, 1)) {
787
787
  $et->VPrint(0, " Skipped large ASF object ($size bytes)\n");
@@ -879,7 +879,7 @@ Windows Media Audio (WMA) and Windows Media Video (WMV) files.
879
879
 
880
880
  =head1 AUTHOR
881
881
 
882
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
882
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
883
883
 
884
884
  This library is free software; you can redistribute it and/or modify it
885
885
  under the same terms as Perl itself.
@@ -16,7 +16,7 @@ use vars qw($VERSION);
16
16
  use Image::ExifTool::Exif;
17
17
  use Image::ExifTool::PLIST;
18
18
 
19
- $VERSION = '1.12';
19
+ $VERSION = '1.14';
20
20
 
21
21
  sub ConvertPLIST($$);
22
22
 
@@ -99,7 +99,7 @@ sub ConvertPLIST($$);
99
99
  my @a = split ' ', $val;
100
100
  sprintf('%.2f - %.2f m', $a[0] <= $a[1] ? @a : reverse @a);
101
101
  },
102
- PrintConvInv => '$val =~ s/ - //; $val =~ s/ ?m$//; $val',
102
+ PrintConvInv => '$val =~ s/ - / /; $val =~ s/ ?m$//; $val',
103
103
  },
104
104
  # 0x000d - int32s: 0,1,6,20,24,32,40 (SphereHealthAverageCurrent, ref 2)
105
105
  # 0x000e - int32s: 0,1,4,12 (Orientation? 0=landscape? 4=portrait? ref 1) (SphereMotionDataStatus, ref 2)
@@ -291,12 +291,12 @@ sub ConvertPLIST($$);
291
291
  # 0x0047 - (LeaderFollowerAutoFocusLeaderDepth, ref 2)
292
292
  # 0x0048 - (LeaderFollowerAutoFocusLeaderFocusMethod, ref 2)
293
293
  # 0x0049 - (LeaderFollowerAutoFocusLeaderConfidence, ref 2)
294
- # 0x004A - (LeaderFollowerAutoFocusLeaderROIType, ref 2)
294
+ # 0x004a - (LeaderFollowerAutoFocusLeaderROIType, ref 2)
295
295
  # 0x004a - 2=back normal, 4=back wide angle, 5=front (ref PH)
296
- # 0x004B - (ZeroShutterLagFailureReason, ref 2)
297
- # 0x004C - (TimeOfFlightAssistedAutoFocusEstimatorMSPMeasuredDepth, ref 2)
298
- # 0x004D - (TimeOfFlightAssistedAutoFocusEstimatorMSPSensorConfidence, ref 2)
299
- # 0x004E - (Camera, ref 2)
296
+ # 0x004b - (ZeroShutterLagFailureReason, ref 2)
297
+ # 0x004c - (TimeOfFlightAssistedAutoFocusEstimatorMSPMeasuredDepth, ref 2)
298
+ # 0x004d - (TimeOfFlightAssistedAutoFocusEstimatorMSPSensorConfidence, ref 2)
299
+ # 0x004e - (Camera, ref 2)
300
300
  0x004e => {
301
301
  Name => 'Apple_0x004e',
302
302
  Unknown => 1,
@@ -358,7 +358,8 @@ Image::ExifTool::AddCompositeTags('Image::ExifTool::Apple');
358
358
  sub ConvertPLIST($$)
359
359
  {
360
360
  my ($val, $et) = @_;
361
- my $dirInfo = { DataPt => \$val };
361
+ my $dirInfo = { DataPt => \$val, NoVerboseDir => 1 };
362
+ my $oldOrder = $et->GetByteOrder();
362
363
  require Image::ExifTool::PLIST;
363
364
  Image::ExifTool::PLIST::ProcessBinaryPLIST($et, $dirInfo);
364
365
  $val = $$dirInfo{Value};
@@ -366,6 +367,7 @@ sub ConvertPLIST($$)
366
367
  require 'Image/ExifTool/XMPStruct.pl';
367
368
  $val = Image::ExifTool::XMP::SerializeStruct($et, $val);
368
369
  }
370
+ $et->SetByteOrder($oldOrder);
369
371
  return $val;
370
372
  }
371
373
 
@@ -388,7 +390,7 @@ Apple maker notes in EXIF information.
388
390
 
389
391
  =head1 AUTHOR
390
392
 
391
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
393
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
392
394
 
393
395
  This library is free software; you can redistribute it and/or modify it
394
396
  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-2024, Phil Harvey (philharvey66 at gmail.com)
294
+ Copyright 2003-2025, 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-2024, Phil Harvey (philharvey66 at gmail.com)
338
+ Copyright 2003-2025, 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-2024, Phil Harvey (philharvey66 at gmail.com)
234
+ Copyright 2003-2025, 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-2024, Phil Harvey (philharvey66 at gmail.com)
448
+ Copyright 2003-2025, 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.
@@ -282,7 +282,7 @@ information in BigTIFF images.
282
282
 
283
283
  =head1 AUTHOR
284
284
 
285
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
285
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
286
286
 
287
287
  This library is free software; you can redistribute it and/or modify it
288
288
  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.58';
38
+ $VERSION = '3.62';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -74,15 +74,21 @@ my %tweakOrder = (
74
74
  DJI => 'Casio',
75
75
  FLIR => 'DJI',
76
76
  FujiFilm => 'FLIR',
77
+ GoPro => 'GE',
77
78
  Kodak => 'JVC',
78
79
  Leaf => 'Kodak',
79
- Minolta => 'Leaf',
80
+ Lytro => 'Leaf',
81
+ Minolta => 'Lytro',
80
82
  Motorola => 'Minolta',
81
83
  Nikon => 'Motorola',
82
- NikonCustom => 'Nikon',
83
- NikonCapture => 'NikonCustom',
84
- Nintendo => 'NikonCapture',
84
+ NikonCapture => 'Nikon',
85
+ NikonCustom => 'NikonCapture',
86
+ NikonSettings => 'NikonCustom',
87
+ Nintendo => 'NikonSettings',
88
+ Panasonic => 'Olympus',
85
89
  Pentax => 'Panasonic',
90
+ Ricoh => 'Reconyx',
91
+ Samsung => 'Ricoh',
86
92
  SonyIDC => 'Sony',
87
93
  Unknown => 'SonyIDC',
88
94
  DNG => 'Unknown',
@@ -91,8 +97,9 @@ my %tweakOrder = (
91
97
  ID3 => 'PostScript',
92
98
  MinoltaRaw => 'KyoceraRaw',
93
99
  KyoceraRaw => 'CanonRaw',
100
+ MinoltaRaw => 'KyoceraRaw',
101
+ PanasonicRaw => 'MinoltaRaw',
94
102
  SigmaRaw => 'PanasonicRaw',
95
- Lytro => 'SigmaRaw',
96
103
  PhotoMechanic => 'FotoStation',
97
104
  Microsoft => 'PhotoMechanic',
98
105
  GIMP => 'Microsoft',
@@ -100,6 +107,8 @@ my %tweakOrder = (
100
107
  MWG => 'Shortcuts',
101
108
  'FujiFilm::RAF' => 'FujiFilm::RAFHeader',
102
109
  'FujiFilm::RAFData' => 'FujiFilm::RAF',
110
+ 'QuickTime::AudioKeys' => 'QuickTime::Keys',
111
+ 'QuickTime::VideoKeys' => 'QuickTime::AudioKeys',
103
112
  );
104
113
 
105
114
  # list of all recognized Format strings
@@ -437,15 +446,16 @@ appropriate table in the config file (see
437
446
  L<example.config|../config.html#PREF> in the full distribution for an
438
447
  example). Note that some tags with the same name but different ID's may
439
448
  exist in the same location, but the family 7 group names may be used to
440
- differentiate these. ExifTool currently writes only top-level metadata in
441
- QuickTime-based files; it extracts other track-specific and timed metadata,
442
- but can not yet edit tags in these locations (with the exception of
443
- track-level date/time tags).
449
+ differentiate these.
444
450
 
445
- Beware that the Keys tags are actually stored inside the ItemList in the
446
- file, so deleting the ItemList group as a block (ie. C<-ItemList:all=>) also
447
- deletes Keys tags. Instead, to preserve Keys tags the ItemList tags may be
448
- deleted individually with C<-QuickTime:ItemList:all=>.
451
+ ExifTool currently writes
452
+ L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
453
+ L<UserData|Image::ExifTool::TagNames/QuickTime UserData Tags> only as
454
+ top-level metadata, but select Keys tags are may be written to the audio or
455
+ video track. See the
456
+ L<AudioKeys|Image::ExifTool::TagNames/QuickTime AudioKeys Tags> and
457
+ L<VideoKeys|Image::ExifTool::TagNames/QuickTime VideoKeys Tags> tags for
458
+ more information.
449
459
 
450
460
  Alternate language tags may be accessed for
451
461
  L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
@@ -457,8 +467,8 @@ L<UserData|Image::ExifTool::TagNames/QuickTime UserData Tags> tags support a
457
467
  language code, but without a country code. If no language code is specified
458
468
  when writing, the default language is written and alternate languages for
459
469
  the tag are deleted. Use the "und" language code to write the default
460
- language without deleting alternate languages. Note that "eng" is treated
461
- as a default language when reading, but not when writing.
470
+ language without deleting alternate languages. Note that when reading,
471
+ "eng" is also treated as the default language if there is no country code.
462
472
 
463
473
  According to the specification, integer-format QuickTime date/time tags
464
474
  should be stored as UTC. Unfortunately, digital cameras often store local
@@ -688,7 +698,7 @@ L<Image::ExifTool::BuildTagLookup|Image::ExifTool::BuildTagLookup>.
688
698
 
689
699
  ~head1 AUTHOR
690
700
 
691
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
701
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
692
702
 
693
703
  This library is free software; you can redistribute it and/or modify it
694
704
  under the same terms as Perl itself.
@@ -866,10 +876,16 @@ sub new
866
876
  }
867
877
  $noID = 1 if $isXMP or $short =~ /^(Shortcuts|ASF.*)$/ or $$vars{NO_ID};
868
878
  $hexID = $$vars{HEX_ID};
879
+ if ($$table{WRITE_PROC} and $$table{WRITE_PROC} eq \&Image::ExifTool::WriteBinaryData
880
+ and not $$table{CHECK_PROC})
881
+ {
882
+ warn("Binary table $tableName doesn't have a CHECK_PROC\n");
883
+ }
869
884
  my $processBinaryData = ($$table{PROCESS_PROC} and (
870
885
  $$table{PROCESS_PROC} eq \&Image::ExifTool::ProcessBinaryData or
871
886
  $$table{PROCESS_PROC} eq \&Image::ExifTool::Nikon::ProcessNikonEncrypted or
872
- $$table{PROCESS_PROC} eq \&Image::ExifTool::Sony::ProcessEnciphered));
887
+ $$table{PROCESS_PROC} eq \&Image::ExifTool::Sony::ProcessEnciphered) or
888
+ $$table{VARS} and $$table{VARS}{IS_BINARY});
873
889
  if ($$vars{ID_LABEL} or $processBinaryData) {
874
890
  my $s = $$table{FORMAT} ? Image::ExifTool::FormatSize($$table{FORMAT}) || 1 : 1;
875
891
  $binaryTable = 1;
@@ -1003,6 +1019,9 @@ TagID: foreach $tagID (@keys) {
1003
1019
  if ($writable and not ($$table{WRITE_PROC} or $tableName =~ /Shortcuts/ or $writable eq '2')) {
1004
1020
  undef $writable;
1005
1021
  }
1022
+ #if ($writable and $$tagInfo{Unknown} and $$table{GROUPS}{0} ne 'MakerNotes') {
1023
+ # warn "Warning: Writable Unknown tag - $short $name\n",
1024
+ #}
1006
1025
  # validate some characteristics of obvious date/time tags
1007
1026
  my @g = $et->GetGroup($tagInfo);
1008
1027
  if ($$tagInfo{List} and $g[2] eq 'Time' and $writable and not $$tagInfo{Protected} and
@@ -1248,7 +1267,7 @@ TagID: foreach $tagID (@keys) {
1248
1267
  }
1249
1268
  } elsif ($$tagInfo{PrintString} or not /^[+-]?(?=\d|\.\d)\d*(\.\d*)?$/) {
1250
1269
  # translate unprintable values
1251
- if ($index =~ s/([\x00-\x1f\x80-\xff])/sprintf("\\x%.2x",ord $1)/eg) {
1270
+ if ($index =~ s/([\x00-\x1f\x7f-\xff])/sprintf("\\x%.2x",ord $1)/eg) {
1252
1271
  $index = qq{"$index"};
1253
1272
  } else {
1254
1273
  $index = qq{'${index}'};
@@ -1331,7 +1350,7 @@ TagID: foreach $tagID (@keys) {
1331
1350
  $writable = 'yes' if $tw and $writable eq '1' or $writable eq '2';
1332
1351
  $writable = '-' . ($tw ? $writable : '');
1333
1352
  $writable .= '!' if $tw and ($$tagInfo{Protected} || 0) & 0x01;
1334
- $writable .= '+' if $$tagInfo{List};
1353
+ $writable .= '+' if $$tagInfo{List} or $$tagInfo{IsList};
1335
1354
  if (defined $$tagInfo{Permanent}) {
1336
1355
  $writable .= '^' unless $$tagInfo{Permanent};
1337
1356
  } elsif (defined $$table{PERMANENT}) {
@@ -1389,7 +1408,7 @@ TagID: foreach $tagID (@keys) {
1389
1408
  }
1390
1409
  $writable = "=struct" if $struct;
1391
1410
  $writable .= '_' if defined $$tagInfo{Flat};
1392
- $writable .= '+' if $$tagInfo{List};
1411
+ $writable .= '+' if $$tagInfo{List} or $$tagInfo{IsList};
1393
1412
  $writable .= ':' if $$tagInfo{Mandatory};
1394
1413
  if (defined $$tagInfo{Permanent}) {
1395
1414
  $writable .= '^' unless $$tagInfo{Permanent};
@@ -1557,7 +1576,7 @@ TagID: foreach $tagID (@keys) {
1557
1576
  $writable = 'string';
1558
1577
  }
1559
1578
  }
1560
- $writable .= '+' if $$tagInfo{List};
1579
+ $writable .= '+' if $$tagInfo{List} or $$tagInfo{IsList};
1561
1580
  push @vals, "($$tagInfo{Notes})" if $$tagInfo{Notes};
1562
1581
  # handle PrintConv lookups in Structure elements
1563
1582
  my $printConv = $$tagInfo{PrintConv};
@@ -1774,9 +1793,10 @@ sub NumbersFirst($$)
1774
1793
  $rtnVal = $numbersFirst;
1775
1794
  } else {
1776
1795
  my ($a2, $b2) = ($a, $b);
1777
- # expand numbers to 3 digits (with restrictions to avoid messing up ascii-hex tags)
1778
- $a2 =~ s/(\d+)/sprintf("%.3d",$1)/eg if $a2 =~ /^(APP|DMC-\w+ )?[.0-9 ]*$/ and length($a2)<16;
1779
- $b2 =~ s/(\d+)/sprintf("%.3d",$1)/eg if $b2 =~ /^(APP|DMC-\w+ )?[.0-9 ]*$/ and length($b2)<16;
1796
+ # expand numbers to 3 digits (with restrictions to avoid messing up
1797
+ # ascii-hex tags -- Nikon LensID's are 23 characters long)
1798
+ $a2 =~ s/(\d+)/sprintf("%.3d",$1)/eg if $a2 =~ /^(APP|DMC-\w+ |dvtm_.*)?[.0-9 ]*$/ and length($a2)<23;
1799
+ $b2 =~ s/(\d+)/sprintf("%.3d",$1)/eg if $b2 =~ /^(APP|DMC-\w+ |dvtm_.*)?[.0-9 ]*$/ and length($b2)<23;
1780
1800
  $caseInsensitive and $rtnVal = (lc($a2) cmp lc($b2));
1781
1801
  $rtnVal or $rtnVal = ($a2 cmp $b2);
1782
1802
  }
@@ -2802,7 +2822,7 @@ Returned list of writable pseudo tags.
2802
2822
 
2803
2823
  =head1 AUTHOR
2804
2824
 
2805
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
2825
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2806
2826
 
2807
2827
  This library is free software; you can redistribute it and/or modify it
2808
2828
  under the same terms as Perl itself.
@@ -16,7 +16,7 @@ use vars qw($VERSION);
16
16
  use Image::ExifTool qw(:DataAccess :Utils);
17
17
  use Image::ExifTool::JSON;
18
18
 
19
- $VERSION = '1.02';
19
+ $VERSION = '1.03';
20
20
 
21
21
  sub ProcessCBOR($$$);
22
22
  sub ReadCBORValue($$$$);
@@ -160,6 +160,7 @@ sub ReadCBORValue($$$$)
160
160
  Start => $dumpStart,
161
161
  DataPos => $$et{cbor_datapos},
162
162
  Prefix => $$et{INDENT},
163
+ Out => $et->Options('TextOut'),
163
164
  ) if $verbose > 2;
164
165
  while ($num) {
165
166
  $$et{cbor_pre} = "$i) ";
@@ -200,6 +201,7 @@ sub ReadCBORValue($$$$)
200
201
  Start => $dumpStart,
201
202
  DataPos => $$et{cbor_datapos},
202
203
  Prefix => $$et{INDENT} . ' ',
204
+ Out => $et->Options('TextOut'),
203
205
  ) if $verbose > 2;
204
206
  }
205
207
  # read next value (note: in the case of multiple tags,
@@ -259,6 +261,7 @@ sub ReadCBORValue($$$$)
259
261
  DataPos => $$et{cbor_datapos},
260
262
  Prefix => $$et{INDENT} . ' ',
261
263
  MaxLen => $verbose < 5 ? ($verbose == 3 ? 96 : 2048) : undef,
264
+ Out => $et->Options('TextOut'),
262
265
  ) if $verbose > 2;
263
266
  return($val, $err, $pos);
264
267
  }
@@ -321,7 +324,7 @@ specification.
321
324
 
322
325
  =head1 AUTHOR
323
326
 
324
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
327
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
325
328
 
326
329
  This library is free software; you can redistribute it and/or modify it
327
330
  under the same terms as Perl itself.
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.82';
91
+ $VERSION = '4.89';
92
92
 
93
93
  # Note: Removed 'USM' from 'L' lenses since it is redundant - PH
94
94
  # (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -527,7 +527,8 @@ $VERSION = '4.82';
527
527
  748 => 'Canon EF 100-400mm f/4.5-5.6L IS II USM + 1.4x or Tamron Lens', #JR (1.4x Mk III)
528
528
  748.1 => 'Tamron 100-400mm f/4.5-6.3 Di VC USD A035E + 1.4x', #IB
529
529
  748.2 => 'Tamron 70-210mm f/4 Di VC USD (A034) + 2x', #IB
530
- 749 => 'Tamron 100-400mm f/4.5-6.3 Di VC USD A035E + 2x', #IB
530
+ 749 => 'Canon EF 100-400mm f/4.5-5.6L IS II USM + 2x or Tamron Lens', #PH
531
+ 749.1 => 'Tamron 100-400mm f/4.5-6.3 Di VC USD A035E + 2x', #IB
531
532
  750 => 'Canon EF 35mm f/1.4L II USM or Tamron Lens', #42
532
533
  750.1 => 'Tamron SP 85mm f/1.8 Di VC USD (F016)', #Exiv2#1072
533
534
  750.2 => 'Tamron SP 45mm f/1.8 Di VC USD (F013)', #PH
@@ -631,6 +632,12 @@ $VERSION = '4.82';
631
632
  '61182.54' => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
632
633
  '61182.55' => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
633
634
  '61182.56' => 'Canon RF 35mm F1.4 L VCM', #42
635
+ '61182.57' => 'Canon RF 70-200mm F2.8 L IS USM Z', #42
636
+ '61182.58' => 'Canon RF 70-200mm F2.8 L IS USM Z + RF1.4x', #42
637
+ '61182.59' => 'Canon RF 70-200mm F2.8 L IS USM Z + RF2x', #42
638
+ '61182.60' => 'Canon RF 16-28mm F2.8 IS STM', #42
639
+ '61182.61' => 'Canon RF 50mm F1.4 L VCM', #42
640
+ '61182.62' => 'Canon RF 24mm F1.4 L VCM', #42
634
641
  65535 => 'n/a',
635
642
  );
636
643
 
@@ -1401,6 +1408,11 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
1401
1408
  Condition => '$$self{Model} =~ /\bEOS R[56]$/',
1402
1409
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoR6' },
1403
1410
  },
1411
+ {
1412
+ Name => 'CanonCameraInfoR6m2',
1413
+ Condition => '$$self{Model} =~ /\bEOS R6m2$/',
1414
+ SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoR6m2' },
1415
+ },
1404
1416
  {
1405
1417
  Name => 'CanonCameraInfoG5XII',
1406
1418
  Condition => '$$self{Model} =~ /\bG5 X Mark II$/',
@@ -4749,6 +4761,19 @@ my %ciMaxFocal = (
4749
4761
  # 0x0bb7 - counts down during focus stack (ref forum16111)
4750
4762
  );
4751
4763
 
4764
+ %Image::ExifTool::Canon::CameraInfoR6m2 = (
4765
+ %binaryDataAttrs,
4766
+ FIRST_ENTRY => 0,
4767
+ PRIORITY => 0,
4768
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4769
+ NOTES => 'CameraInfo tags for the EOS R6 Mark II.',
4770
+ 0x0d29 => { #AgostonKapitany
4771
+ Name => 'ShutterCount',
4772
+ Format => 'int32u',
4773
+ Notes => 'includes electronic + mechanical shutter',
4774
+ },
4775
+ );
4776
+
4752
4777
  # ref https://exiftool.org/forum/index.php?topic=15356.0
4753
4778
  %Image::ExifTool::Canon::CameraInfoG5XII = (
4754
4779
  %binaryDataAttrs,
@@ -7001,6 +7026,12 @@ my %ciMaxFocal = (
7001
7026
  316 => 'Canon RF 35mm F1.4 L VCM', #42
7002
7027
  317 => 'Canon RF-S 3.9mm F3.5 STM DUAL FISHEYE', #42
7003
7028
  318 => 'Canon RF 28-70mm F2.8 IS STM', #42
7029
+ 319 => 'Canon RF 70-200mm F2.8 L IS USM Z', #42
7030
+ 320 => 'Canon RF 70-200mm F2.8 L IS USM Z + RF1.4x', #42
7031
+ 321 => 'Canon RF 70-200mm F2.8 L IS USM Z + RF2x', #42
7032
+ 323 => 'Canon RF 16-28mm F2.8 IS STM', #42
7033
+ 325 => 'Canon RF 50mm F1.4 L VCM', #42
7034
+ 326 => 'Canon RF 24mm F1.4 L VCM', #42
7004
7035
  # Note: add new RF lenses to %canonLensTypes with ID 61182
7005
7036
  },
7006
7037
  },
@@ -9830,35 +9861,39 @@ sub LensWithTC($$)
9830
9861
 
9831
9862
  #------------------------------------------------------------------------------
9832
9863
  # Attempt to calculate sensor size for Canon cameras
9833
- # Inputs: 0/1) rational values for FocalPlaneX/YResolution
9864
+ # Inputs: 0) ExifTool ref
9834
9865
  # Returns: Sensor diagonal size in mm, or undef
9835
9866
  # Notes: This algorithm is fairly reliable, but has been found to give incorrect
9836
9867
  # values for some firmware versions of the EOS 20D, A310, SD40 and IXUS 65
9837
9868
  # (ref http://wyw.dcweb.cn/download.asp?path=&file=jhead-2.96-ccdwidth_hack.zip)
9838
- sub CalcSensorDiag($$)
9869
+ sub CalcSensorDiag($)
9839
9870
  {
9840
- my ($xres, $yres) = @_;
9841
- # most Canon cameras store the sensor size in the denominator
9842
- if ($xres and $yres) {
9843
- # assumptions: 1) numerators are image width/height * 1000
9844
- # 2) denominators are sensor width/height in inches * 1000
9845
- my @xres = split /[ \/]/, $xres;
9846
- my @yres = split /[ \/]/, $yres;
9847
- # verify assumptions as best we can:
9848
- # numerators are always divisible by 1000
9849
- if ($xres[0] % 1000 == 0 and $yres[0] % 1000 == 0 and
9850
- # at least 640x480 pixels (DC models - PH)
9851
- $xres[0] >= 640000 and $yres[0] >= 480000 and
9852
- # ... but not too big!
9853
- $xres[0] < 10000000 and $yres[0] < 10000000 and
9854
- # minimum sensor size is 0.061 inches (DC models - PH)
9855
- $xres[1] >= 61 and $xres[1] < 1500 and
9856
- $yres[1] >= 61 and $yres[1] < 1000 and
9857
- # sensor isn't square (may happen if rationals have been reduced)
9858
- $xres[1] != $yres[1])
9859
- {
9860
- return sqrt($xres[1]*$xres[1] + $yres[1]*$yres[1]) * 0.0254;
9861
- }
9871
+ my $et = shift;
9872
+ # calculation is based on the rational value of FocalPlaneX/YResolution
9873
+ # (most Canon cameras store the sensor size in the denominator)
9874
+ return undef unless $$et{TAG_EXTRA}{FocalPlaneXResolution} and
9875
+ $$et{TAG_EXTRA}{FocalPlaneYResolution};
9876
+ my $xres = $$et{TAG_EXTRA}{FocalPlaneXResolution}{Rational};
9877
+ my $yres = $$et{TAG_EXTRA}{FocalPlaneYResolution}{Rational};
9878
+ return undef unless $xres and $yres;
9879
+ # assumptions: 1) numerators are image width/height * 1000
9880
+ # 2) denominators are sensor width/height in inches * 1000
9881
+ my @xres = split /[ \/]/, $xres;
9882
+ my @yres = split /[ \/]/, $yres;
9883
+ # verify assumptions as best we can:
9884
+ # numerators are always divisible by 1000
9885
+ if ($xres[0] % 1000 == 0 and $yres[0] % 1000 == 0 and
9886
+ # at least 640x480 pixels (DC models - PH)
9887
+ $xres[0] >= 640000 and $yres[0] >= 480000 and
9888
+ # ... but not too big!
9889
+ $xres[0] < 10000000 and $yres[0] < 10000000 and
9890
+ # minimum sensor size is 0.061 inches (DC models - PH)
9891
+ $xres[1] >= 61 and $xres[1] < 1500 and
9892
+ $yres[1] >= 61 and $yres[1] < 1000 and
9893
+ # sensor isn't square (may happen if rationals have been reduced)
9894
+ $xres[1] != $yres[1])
9895
+ {
9896
+ return sqrt($xres[1]*$xres[1] + $yres[1]*$yres[1]) * 0.0254;
9862
9897
  }
9863
9898
  return undef;
9864
9899
  }
@@ -10251,7 +10286,11 @@ sub ProcessSerialData($$$)
10251
10286
  $et->ProcessDirectory(\%dirInfo, $subTablePtr);
10252
10287
  } elsif (not $$tagInfo{Unknown} or $unknown) {
10253
10288
  # don't extract zero-length information
10254
- $et->FoundTag($tagInfo, $val) if $count;
10289
+ my $key = $et->FoundTag($tagInfo, $val) if $count;
10290
+ if ($key) {
10291
+ $$et{TAG_EXTRA}{$key}{G6} = $format if $$et{OPTIONS}{SaveFormat};
10292
+ $$et{TAG_EXTRA}{$key}{BinVal} = substr($$dataPt, $pos+$offset, $len) if $$et{OPTIONS}{SaveBin};
10293
+ }
10255
10294
  }
10256
10295
  $pos += $len;
10257
10296
  }
@@ -10448,6 +10487,7 @@ sub ProcessCTMD($$$)
10448
10487
  Start => $pos + 6,
10449
10488
  Addr => $$dirInfo{Base} + $pos + 6,
10450
10489
  Prefix => $$et{INDENT},
10490
+ Out => $et->Options('TextOut'),
10451
10491
  ) if $verbose > 2;
10452
10492
  if ($$tagTablePtr{$type}) {
10453
10493
  $et->HandleTag($tagTablePtr, $type, undef,
@@ -10558,7 +10598,7 @@ Canon maker notes in EXIF information.
10558
10598
 
10559
10599
  =head1 AUTHOR
10560
10600
 
10561
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
10601
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
10562
10602
 
10563
10603
  This library is free software; you can redistribute it and/or modify it
10564
10604
  under the same terms as Perl itself.
@@ -2873,7 +2873,7 @@ Image::ExifTool to read this information.
2873
2873
 
2874
2874
  =head1 AUTHOR
2875
2875
 
2876
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
2876
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2877
2877
 
2878
2878
  This library is free software; you can redistribute it and/or modify it
2879
2879
  under the same terms as Perl itself.
@@ -888,7 +888,7 @@ tags.)
888
888
 
889
889
  =head1 AUTHOR
890
890
 
891
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
891
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
892
892
 
893
893
  This library is free software; you can redistribute it and/or modify it
894
894
  under the same terms as Perl itself.
@@ -2288,7 +2288,7 @@ files, and as a trailer in JPEG, CRW, CR2 and TIFF images.
2288
2288
 
2289
2289
  =head1 AUTHOR
2290
2290
 
2291
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
2291
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2292
2292
 
2293
2293
  This library is free software; you can redistribute it and/or modify it
2294
2294
  under the same terms as Perl itself.
@@ -221,7 +221,7 @@ settings files (COS).
221
221
 
222
222
  =head1 AUTHOR
223
223
 
224
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
224
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
225
225
 
226
226
  This library is free software; you can redistribute it and/or modify it
227
227
  under the same terms as Perl itself.
@@ -2034,7 +2034,7 @@ Casio maker notes in EXIF information.
2034
2034
 
2035
2035
  =head1 AUTHOR
2036
2036
 
2037
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
2037
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2038
2038
 
2039
2039
  This library is free software; you can redistribute it and/or modify it
2040
2040
  under the same terms as Perl itself.
@@ -422,7 +422,7 @@ when decoding certain types of information.
422
422
 
423
423
  =head1 AUTHOR
424
424
 
425
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
425
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
426
426
 
427
427
  This library is free software; you can redistribute it and/or modify it
428
428
  under the same terms as Perl itself.
@@ -3853,7 +3853,7 @@ No translation of special characters sets is done.
3853
3853
 
3854
3854
  =head1 AUTHOR
3855
3855
 
3856
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
3856
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
3857
3857
 
3858
3858
  This library is free software; you can redistribute it and/or modify it
3859
3859
  under the same terms as Perl itself.