exiftool-vendored.pl 12.70.0 → 12.73.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 (206) hide show
  1. package/bin/Changes +53 -1
  2. package/bin/MANIFEST +5 -0
  3. package/bin/META.json +1 -1
  4. package/bin/META.yml +1 -1
  5. package/bin/README +11 -11
  6. package/bin/exiftool +47 -27
  7. package/bin/lib/File/RandomAccess.pm +1 -1
  8. package/bin/lib/File/RandomAccess.pod +2 -2
  9. package/bin/lib/Image/ExifTool/AAC.pm +177 -0
  10. package/bin/lib/Image/ExifTool/AES.pm +1 -1
  11. package/bin/lib/Image/ExifTool/AFCP.pm +1 -1
  12. package/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  13. package/bin/lib/Image/ExifTool/APE.pm +1 -1
  14. package/bin/lib/Image/ExifTool/APP12.pm +1 -1
  15. package/bin/lib/Image/ExifTool/ASF.pm +1 -1
  16. package/bin/lib/Image/ExifTool/Apple.pm +1 -1
  17. package/bin/lib/Image/ExifTool/Audible.pm +1 -1
  18. package/bin/lib/Image/ExifTool/BMP.pm +1 -1
  19. package/bin/lib/Image/ExifTool/BPG.pm +1 -1
  20. package/bin/lib/Image/ExifTool/BZZ.pm +1 -1
  21. package/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
  22. package/bin/lib/Image/ExifTool/BuildTagLookup.pm +4 -3
  23. package/bin/lib/Image/ExifTool/CBOR.pm +1 -1
  24. package/bin/lib/Image/ExifTool/Canon.pm +22 -7
  25. package/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
  26. package/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  27. package/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
  28. package/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
  29. package/bin/lib/Image/ExifTool/Casio.pm +1 -1
  30. package/bin/lib/Image/ExifTool/Charset.pm +1 -1
  31. package/bin/lib/Image/ExifTool/DICOM.pm +1 -1
  32. package/bin/lib/Image/ExifTool/DJI.pm +1 -1
  33. package/bin/lib/Image/ExifTool/DNG.pm +1 -1
  34. package/bin/lib/Image/ExifTool/DPX.pm +1 -1
  35. package/bin/lib/Image/ExifTool/DV.pm +1 -1
  36. package/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
  37. package/bin/lib/Image/ExifTool/DjVu.pm +1 -1
  38. package/bin/lib/Image/ExifTool/EXE.pm +1 -1
  39. package/bin/lib/Image/ExifTool/Exif.pm +31 -10
  40. package/bin/lib/Image/ExifTool/FITS.pm +1 -1
  41. package/bin/lib/Image/ExifTool/FLAC.pm +1 -1
  42. package/bin/lib/Image/ExifTool/FLIF.pm +1 -1
  43. package/bin/lib/Image/ExifTool/FLIR.pm +1 -1
  44. package/bin/lib/Image/ExifTool/Fixup.pm +1 -1
  45. package/bin/lib/Image/ExifTool/Flash.pm +1 -1
  46. package/bin/lib/Image/ExifTool/FlashPix.pm +60 -7
  47. package/bin/lib/Image/ExifTool/Font.pm +1 -1
  48. package/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
  49. package/bin/lib/Image/ExifTool/FujiFilm.pm +6 -3
  50. package/bin/lib/Image/ExifTool/GE.pm +1 -1
  51. package/bin/lib/Image/ExifTool/GIF.pm +1 -1
  52. package/bin/lib/Image/ExifTool/GIMP.pm +1 -1
  53. package/bin/lib/Image/ExifTool/GPS.pm +1 -1
  54. package/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
  55. package/bin/lib/Image/ExifTool/Geotag.pm +1 -1
  56. package/bin/lib/Image/ExifTool/GoPro.pm +17 -2
  57. package/bin/lib/Image/ExifTool/H264.pm +1 -1
  58. package/bin/lib/Image/ExifTool/HP.pm +1 -1
  59. package/bin/lib/Image/ExifTool/HTML.pm +1 -1
  60. package/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
  61. package/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
  62. package/bin/lib/Image/ExifTool/ICO.pm +1 -1
  63. package/bin/lib/Image/ExifTool/ID3.pm +8 -5
  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/InfiRay.pm +1 -1
  70. package/bin/lib/Image/ExifTool/JPEG.pm +5 -2
  71. package/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  72. package/bin/lib/Image/ExifTool/JSON.pm +5 -2
  73. package/bin/lib/Image/ExifTool/JVC.pm +3 -3
  74. package/bin/lib/Image/ExifTool/Jpeg2000.pm +17 -6
  75. package/bin/lib/Image/ExifTool/Kodak.pm +1 -1
  76. package/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  77. package/bin/lib/Image/ExifTool/LIF.pm +1 -1
  78. package/bin/lib/Image/ExifTool/LNK.pm +1 -1
  79. package/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
  80. package/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
  81. package/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  82. package/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  83. package/bin/lib/Image/ExifTool/Lang/es.pm +4 -4
  84. package/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
  85. package/bin/lib/Image/ExifTool/Lang/fr.pm +4 -5
  86. package/bin/lib/Image/ExifTool/Lang/it.pm +3 -3
  87. package/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
  88. package/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
  89. package/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
  90. package/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
  91. package/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
  92. package/bin/lib/Image/ExifTool/Lang/sk.pm +1 -1
  93. package/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
  94. package/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
  95. package/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  96. package/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  97. package/bin/lib/Image/ExifTool/Leaf.pm +3 -3
  98. package/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  99. package/bin/lib/Image/ExifTool/M2TS.pm +22 -17
  100. package/bin/lib/Image/ExifTool/MIE.pm +3 -3
  101. package/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
  102. package/bin/lib/Image/ExifTool/MIFF.pm +1 -1
  103. package/bin/lib/Image/ExifTool/MISB.pm +1 -1
  104. package/bin/lib/Image/ExifTool/MNG.pm +1 -1
  105. package/bin/lib/Image/ExifTool/MOI.pm +1 -1
  106. package/bin/lib/Image/ExifTool/MPC.pm +1 -1
  107. package/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  108. package/bin/lib/Image/ExifTool/MPF.pm +1 -1
  109. package/bin/lib/Image/ExifTool/MRC.pm +1 -1
  110. package/bin/lib/Image/ExifTool/MWG.pm +1 -1
  111. package/bin/lib/Image/ExifTool/MXF.pm +1 -1
  112. package/bin/lib/Image/ExifTool/MacOS.pm +1 -1
  113. package/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
  114. package/bin/lib/Image/ExifTool/Matroska.pm +1 -1
  115. package/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  116. package/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  117. package/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  118. package/bin/lib/Image/ExifTool/Motorola.pm +1 -1
  119. package/bin/lib/Image/ExifTool/Nikon.pm +166 -97
  120. package/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
  121. package/bin/lib/Image/ExifTool/NikonCustom.pm +1 -1
  122. package/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
  123. package/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
  124. package/bin/lib/Image/ExifTool/OOXML.pm +1 -1
  125. package/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  126. package/bin/lib/Image/ExifTool/Olympus.pm +1 -1
  127. package/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
  128. package/bin/lib/Image/ExifTool/Opus.pm +1 -1
  129. package/bin/lib/Image/ExifTool/Other.pm +1 -1
  130. package/bin/lib/Image/ExifTool/PCX.pm +1 -1
  131. package/bin/lib/Image/ExifTool/PDF.pm +1 -1
  132. package/bin/lib/Image/ExifTool/PGF.pm +1 -1
  133. package/bin/lib/Image/ExifTool/PICT.pm +1 -1
  134. package/bin/lib/Image/ExifTool/PLIST.pm +1 -1
  135. package/bin/lib/Image/ExifTool/PLUS.pm +1 -1
  136. package/bin/lib/Image/ExifTool/PNG.pm +24 -2
  137. package/bin/lib/Image/ExifTool/PPM.pm +1 -1
  138. package/bin/lib/Image/ExifTool/PSP.pm +1 -1
  139. package/bin/lib/Image/ExifTool/Palm.pm +1 -1
  140. package/bin/lib/Image/ExifTool/Panasonic.pm +27 -2
  141. package/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  142. package/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  143. package/bin/lib/Image/ExifTool/Pentax.pm +46 -16
  144. package/bin/lib/Image/ExifTool/PhaseOne.pm +4 -4
  145. package/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
  146. package/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  147. package/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
  148. package/bin/lib/Image/ExifTool/PostScript.pm +1 -1
  149. package/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
  150. package/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
  151. package/bin/lib/Image/ExifTool/QuickTime.pm +50 -11
  152. package/bin/lib/Image/ExifTool/QuickTimeStream.pl +148 -12
  153. package/bin/lib/Image/ExifTool/RIFF.pm +1 -1
  154. package/bin/lib/Image/ExifTool/RSRC.pm +1 -1
  155. package/bin/lib/Image/ExifTool/RTF.pm +1 -1
  156. package/bin/lib/Image/ExifTool/Radiance.pm +1 -1
  157. package/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  158. package/bin/lib/Image/ExifTool/Real.pm +1 -1
  159. package/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
  160. package/bin/lib/Image/ExifTool/Red.pm +1 -1
  161. package/bin/lib/Image/ExifTool/Ricoh.pm +111 -3
  162. package/bin/lib/Image/ExifTool/Samsung.pm +4 -3
  163. package/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
  164. package/bin/lib/Image/ExifTool/Scalado.pm +1 -1
  165. package/bin/lib/Image/ExifTool/Shift.pl +1 -1
  166. package/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
  167. package/bin/lib/Image/ExifTool/Sigma.pm +1 -1
  168. package/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  169. package/bin/lib/Image/ExifTool/Sony.pm +85 -6
  170. package/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
  171. package/bin/lib/Image/ExifTool/Stim.pm +1 -1
  172. package/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
  173. package/bin/lib/Image/ExifTool/TagLookup.pm +4878 -4830
  174. package/bin/lib/Image/ExifTool/TagNames.pod +11518 -11379
  175. package/bin/lib/Image/ExifTool/Text.pm +1 -1
  176. package/bin/lib/Image/ExifTool/Theora.pm +1 -1
  177. package/bin/lib/Image/ExifTool/Torrent.pm +1 -1
  178. package/bin/lib/Image/ExifTool/Unknown.pm +1 -1
  179. package/bin/lib/Image/ExifTool/VCard.pm +1 -1
  180. package/bin/lib/Image/ExifTool/Validate.pm +1 -1
  181. package/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
  182. package/bin/lib/Image/ExifTool/WPG.pm +1 -1
  183. package/bin/lib/Image/ExifTool/WTV.pm +1 -1
  184. package/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  185. package/bin/lib/Image/ExifTool/WriteExif.pl +20 -5
  186. package/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  187. package/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
  188. package/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
  189. package/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  190. package/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
  191. package/bin/lib/Image/ExifTool/WriteQuickTime.pl +4 -1
  192. package/bin/lib/Image/ExifTool/WriteRIFF.pl +1 -1
  193. package/bin/lib/Image/ExifTool/WriteXMP.pl +5 -3
  194. package/bin/lib/Image/ExifTool/Writer.pl +87 -15
  195. package/bin/lib/Image/ExifTool/XISF.pm +1 -1
  196. package/bin/lib/Image/ExifTool/XMP.pm +19 -3
  197. package/bin/lib/Image/ExifTool/XMP2.pl +1 -1
  198. package/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  199. package/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  200. package/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
  201. package/bin/lib/Image/ExifTool/iWork.pm +1 -1
  202. package/bin/lib/Image/ExifTool.pm +35 -8
  203. package/bin/lib/Image/ExifTool.pod +29 -16
  204. package/bin/perl-Image-ExifTool.spec +9 -9
  205. package/bin/pp_build_exe.args +6 -5
  206. package/package.json +4 -5
@@ -65,13 +65,13 @@ use Image::ExifTool::Exif;
65
65
  use Image::ExifTool::GPS;
66
66
  use Image::ExifTool::XMP;
67
67
 
68
- $VERSION = '4.27';
68
+ $VERSION = '4.29';
69
69
 
70
70
  sub LensIDConv($$$);
71
71
  sub ProcessNikonAVI($$$);
72
72
  sub ProcessNikonMOV($$$);
73
73
  sub ProcessNikonEncrypted($$$);
74
- sub FormatString($);
74
+ sub FormatString($$);
75
75
  sub ProcessNikonCaptureEditVersions($$$);
76
76
  sub PrintAFPoints($$);
77
77
  sub PrintAFPointsInv($$);
@@ -949,6 +949,15 @@ my %highFrameRateZ9 = (
949
949
  4 => 'C120',
950
950
  );
951
951
 
952
+ my %imageAreaD6 = (
953
+ 0 => 'FX (36x24)',
954
+ 1 => 'DX (24x16)',
955
+ 2 => '5:4 (30x24)',
956
+ 3 => '1.2x (30x20)',
957
+ 4 => '1:1 (24x24)',
958
+ 6 => '16:9',
959
+ );
960
+
952
961
  my %imageAreaZ9 = (
953
962
  0 => 'FX',
954
963
  1 => 'DX',
@@ -1987,7 +1996,7 @@ my %base64coord = (
1987
1996
  },
1988
1997
  0x0044 => { #28
1989
1998
  Name => 'JPGCompression',
1990
- RawConv => '($val) ? $val : undef', # undef for raw files
1999
+ RawConv => '($val) ? $val : undef', # undef for raw files
1991
2000
  PrintConv => {
1992
2001
  1 => 'Size Priority',
1993
2002
  3 => 'Optimal Quality',
@@ -5933,9 +5942,9 @@ my %nikonFocalConversions = (
5933
5942
  0x10 => { #28
5934
5943
  Name => 'ImageArea',
5935
5944
  PrintConv => {
5936
- 0 => 'FX (36.0 x 23.9 mm)',
5937
- 1 => 'DX (23.5 x 15.6 mm)',
5938
- 2 => '5:4 (30.0 x 23.9 mm)',
5945
+ 0 => 'FX (36x24)',
5946
+ 1 => 'DX (24x16)',
5947
+ 2 => '5:4 (30x24)',
5939
5948
  },
5940
5949
  },
5941
5950
  0x25d => {
@@ -7328,6 +7337,10 @@ my %nikonFocalConversions = (
7328
7337
  Format => 'int16u',
7329
7338
  Hidden => 1,
7330
7339
  },
7340
+ 0x2b => {
7341
+ Name => 'ImageArea',
7342
+ PrintConv => \%imageAreaD6,
7343
+ },
7331
7344
  );
7332
7345
 
7333
7346
  %Image::ExifTool::Nikon::IntervalInfoD6 = (
@@ -8319,6 +8332,10 @@ my %nikonFocalConversions = (
8319
8332
  Format => 'int16u',
8320
8333
  Hidden => 1,
8321
8334
  },
8335
+ 0x2b => {
8336
+ Name => 'ImageArea',
8337
+ PrintConv => \%imageAreaD6,
8338
+ },
8322
8339
  );
8323
8340
 
8324
8341
  %Image::ExifTool::Nikon::PortraitInfoZ7II = (
@@ -8519,8 +8536,8 @@ my %nikonFocalConversions = (
8519
8536
  %binaryDataAttrs,
8520
8537
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8521
8538
  DATAMEMBER => [ 0x20, 0x28, 0x2a ],
8522
- #0x0019 => HDRFrame # For JPG 0=> Not HDR; 1=> file is the blended exposure. For raw files: 0=> Not from an HDR capture sequence; otherwise frame number in the HDR capture sequence -- 'Save Individual Pictures (RAW)' must be enabled.
8523
- #0x001A => MultipleExposureFrame # For JPG 0=> Not a multiple exposure; 1=> file is the blended exposure. For raw files: 0=> Not a multiple exposure capture; otherwise frame number in the capture sequence -- 'Save Individual Pictures (RAW)' must be enabled.
8539
+ #0x0019 => HDRFrame # For JPG 0=> Not HDR; 1=> file is the blended exposure. For raw files: 0=> Not from an HDR capture sequence; otherwise frame number in the HDR capture sequence -- 'Save Individual Pictures (RAW)' must be enabled.
8540
+ #0x001A => MultipleExposureFrame # For JPG 0=> Not a multiple exposure; 1=> file is the blended exposure. For raw files: 0=> Not a multiple exposure capture; otherwise frame number in the capture sequence -- 'Save Individual Pictures (RAW)' must be enabled.
8524
8541
  0x0020 => {
8525
8542
  Name => 'FocusShiftShooting',
8526
8543
  Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
@@ -8559,24 +8576,18 @@ my %nikonFocalConversions = (
8559
8576
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8560
8577
  DATAMEMBER => [ 0x0bea, 0x0beb ],
8561
8578
  0x0be8 => {
8562
- Name => 'AFAreaInitialXPosition', #stored as a representation of the horizontal position of the center of the portion of the focus box positioned top left when in Wide Area (L/S/C1/C2) focus modes (before subject detection potentially refines focus)
8563
- Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and defined $$self{AFAreaMode} and $$self{AFAreaMode} < 2 ', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
8579
+ Name => 'AFAreaInitialXPosition', #the horizontal position of the center the focus box prior to any subject detection or tracking. Origin is Top Left.
8580
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8564
8581
  Format => 'int8s',
8565
8582
  PrintConv => q{
8566
- #in FX mode and Single-point, the 29 horizontal focus points are spaced 259 pixels apart starting at pixel 502 and ending at 7754. Spacing is the same for Wide(L/C1/C2) with different start points.
8567
- #in FX mode and Dynamic(L), the 27 horizontal focus points are spaced 259 pixels apart starting at pixel 761 and ending at 7495
8568
- #in FX mode and Dynamic(M), the 29 horizontal focus points are spaced 259 pixels apart starting at pixel 502 and ending at 7754
8569
- #in DX mode and Single-point, the 19 horizontal focus points are spaced 388 pixels apart starting at pixel 636 and ending at 7620. [These correspond to FX positions and match the corresponding values in AFAreaMode tag AFAreaXPosition].
8570
- #in DX mode and Wide(S), the 17 horizontal focus points are spaced 393 pixels apart starting at pixel 591 and ending at 7272.
8571
- #in DX mode and Dynamic(L), the 17 horizontal focus points are spaced 388 pixels apart starting at pixel 1024 and ending at 7232
8572
- #in DX mode and Dynamic(M), the 19 horizontal focus points are spaced 388 pixels apart starting at pixel 636 and ending at 7620
8573
-
8574
- my $areaMode = $$self{VALUE}{PhotoShootingMenuBankImageArea};
8583
+ my $imageArea = $$self{ImageArea};
8575
8584
  my $afAreaMode = $$self{VALUE}{AFAreaMode};
8576
- my $dynamicAFAreaSize = $$self{VALUE}{DynamicAFAreaSize};
8585
+ my $dynamicAFAreaSize = ( defined $$self{DynamicAFAreaSize} ? $$self{DynamicAFAreaSize} : 0 );
8577
8586
 
8578
- my $FX = 0;
8579
- my $DX = 1;
8587
+ my $FX = 0; #image size 8256 x 5504
8588
+ my $DX = 1; #image size 5392 x 3592
8589
+ my $WideScreen = 4; #16:9 image area, image size 8256x4640
8590
+ my $OneToOne = 8; #1:1 image area, image size 5504x5504
8580
8591
 
8581
8592
  my $Single = 1;
8582
8593
  my $Dynamic = 2;
@@ -8590,54 +8601,51 @@ my %nikonFocalConversions = (
8590
8601
  my $DynamicM = 1;
8591
8602
  my $DynamicL = 2;
8592
8603
 
8593
- my $start = 502; #FX - all flavors
8594
- $start = 636 if $areaMode == $DX and ($afAreaMode == $Dynamic or $afAreaMode == $WideL or $afAreaMode == $ThreeD or $afAreaMode == $Auto or $afAreaMode >= $WideC1); #DX Wide(L/C1/C2) + Dynamic (L/M/S) + 3D + Auto
8595
- $start = 591 if $areaMode == $DX and $afAreaMode == $WideS ; #DX Wide(S)
8604
+ my $start = 502; #FX, 16:9 & 1:1 formats
8605
+ my $increment = 259; #FX, & 16:9 formats
8596
8606
 
8597
- my $increment = 259; #FX - all flavors
8598
- $increment = 388 if $areaMode == $DX and ($afAreaMode == $Dynamic or $afAreaMode == $WideL or $afAreaMode == $ThreeD or $afAreaMode == $Auto or $afAreaMode >= $WideC1); #DX Wide(L/C1/C2) + Dynamic (L/M/S) + 3D + Auto
8599
- $increment = 393 if $areaMode == $DX and $afAreaMode == $WideS ; #DX Wide(S)
8607
+ $start = $start + 5 * $increment if $imageArea == $OneToOne; # need to provide additional offset for the cropped horizontal pixels in 1:1 (19 vs 29 horizontal focus positions)
8608
+ $start = $start - $increment if $val < 49 and ($imageArea == $FX or $imageArea == $WideScreen); #calculations for the left side of the frames are offset by 1 position from the right side
8609
+ $start = $start - $increment if $imageArea == $OneToOne and $afAreaMode == $Auto;
8600
8610
 
8601
- my $divisor = 4;
8602
- $divisor = 6 if $areaMode == $DX ;
8611
+ if ($imageArea == $DX) { # DX results are in FX coordinate system to match reporting of ($AFAreaXPosition , $AFAreaYPosition)
8612
+ $start = 636;
8613
+ $increment = 388;
8614
+ if ( $afAreaMode == $WideS ) { #Wide S focus box width is an unusual size
8615
+ $start = 591;
8616
+ $increment = 393;
8617
+ }
8618
+ $start = $start - $increment if $afAreaMode == $Auto ;
8619
+ }
8620
+
8621
+ my $divisor = 3.99; #subtract .01 to ensure $val of 2n+2 rounds up
8622
+ $divisor = 4.01 if $val >= 50; #...but round up on the right side of the frame
8623
+ $divisor = 6 if $imageArea == $DX or $imageArea == $OneToOne;
8603
8624
 
8604
- my $offsetVal = 0;
8605
- $offsetVal = 12 if $areaMode == $FX and $afAreaMode == $Dynamic ; #FX Dynamic (L/M) - force positive values so perl rounding toward zero isn't an issue
8606
- $offsetVal = 18 if $areaMode == $DX and $afAreaMode == $Dynamic ; #DX Dynamic (L/M)
8625
+ my $roundedValOverDivisor = sprintf("%.0f", $val / $divisor); #round to nearest int
8607
8626
 
8608
- my $offsetSum = -1;
8609
- $offsetSum = -4 if $afAreaMode == $Dynamic ; # Dynamic (L/M)
8627
+ my $focusBoxWidth = $$self{AFAreaInitialWidth} ; #wider focus boxes (e.g., DynM, DynL and some Wide C1/C2) will start and end closer to the center of the frame
8628
+ $focusBoxWidth = int($focusBoxWidth * 2 / 3) if $imageArea == $DX or $imageArea == $OneToOne ;
8610
8629
 
8611
- my $ncol = $$self{AFAreaInitialWidth};
8612
- $ncol = int($ncol * 2 / 3) if $areaMode == $DX ; #DX
8630
+ my $skipPositions = int($focusBoxWidth / 2); #jump over half the width of the focus box
8613
8631
 
8614
- #some sample mappings:
8615
- #FX Wide(S/L/C1/C2) [6, 10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, 97, 101, 105, 109, 113, 117] to 502, 761, 1020, 1279, 1538, 1797, 2056, 2315, 2574, 2833, 3092, 3351, 3610, 3869, 4128, 4387, 4646, 4905, 5164, 5423, 5682, 5941, 6200, 6459, 6718, 6977, 7236, 7495, 7754]
8616
- #DX Wide(L/C1/C2) map for Wide(L)/C1/C2 [6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 67, 73, 79, 85, 91, 97, 103, 109, 115] to [636, 1024, 1412, 1800, 2188, 2576, 2964, 3352, 3740, 4128, 4516, 4904, 5292, 5680, 6068, 6456, 6844, 7232, 7620]
8617
- #DX Wide(S) for Wide(S) [6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 67, 73, 79, 85, 91, 97, 103] to [984, 1377, 1770, 2163, 2556, 2949, 3342, 3735, 4128, 4521, 4914, 5307, 5700, 6093, 6486, 6879, 7272]
8618
- #FX Dynamic (L) map [-9, -5, -1, 2, 6, 10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93] to [761, 1020, 1279, 1538, 1797, 2056, 2315, 2574, 2833, 3092, 3351, 3610, 3869, 4128, 4387, 4646, 4905, 5164, 5423, 5682, 5941, 6200, 6459, 6718, 6977, 7236, 7495]
8632
+ my $result = $start + $increment * ($roundedValOverDivisor + $skipPositions - 1 ) ;
8619
8633
 
8620
- return $start + $increment * (int(($val + $offsetVal) / $divisor) + int($ncol / 2) + $offsetSum) ; #do not use simple int() becuase it rounds negative fractions toward zero resulting in duplicate values - instead use the 10xdivisor to force positive values
8634
+ return $result;
8621
8635
  },
8622
8636
  },
8623
8637
  0x0be9 => {
8624
- Name =>'AFAreaInitialYPosition', #stored as a representation of the vertical position of the center of the portion of the focus box positioned top left when in Wide Area (L/S/C1/C2) focus modes (before subject detection potentially refines focus)
8625
- Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and defined $$self{AFAreaMode} and $$self{AFAreaMode} < 2', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
8638
+ Name =>'AFAreaInitialYPosition', #the vertical position of the center the focus box prior to any subject detection or tracking. Origin is Top Left.
8639
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:9
8626
8640
  Format => 'int8s',
8627
8641
  PrintConv => q{
8628
- #in FX mode and Single-point, the 17 vertical focus points are spaced 291 pixels apart starting at pixel 424 and ending at 5080. Spacing is the same for Wide(L/C1/C2)
8629
- #in FX mode and Dynamic(L), the 15 vertical focus points are spaced 291 pixels apart starting at pixel 715 and ending at 4789
8630
- #in FX mode and Dynamic(M), the 17 vertical l focus points are spaced 291 pixels apart starting at pixel 424 and ending at 5080
8631
- #in DX mode and Single-point, the 11 vertical focus points are spaced 436 pixels apart starting at pixel 572 and ending at 4932. [These correspond to FX positions and match the corresponding values in AFAreaMode tag AFAreaYPosition].
8632
- #in DX Mode and Wide(S) the 9 vertical focus points are spaced 442 pixels apart starting at pixel 542 and ending at 4520
8633
- #in DX mode and Dynamic(L), the 9 vertical focus points are spaced 436 pixels apart starting at pixel 1008 and ending at 4496
8634
-
8635
- my $areaMode = $$self{VALUE}{PhotoShootingMenuBankImageArea};
8642
+ my $imageArea = $$self{ImageArea};
8636
8643
  my $afAreaMode = $$self{VALUE}{AFAreaMode};
8637
- my $dynamicAFAreaSize = $$self{VALUE}{DynamicAFAreaSize};
8638
8644
 
8639
- my $FX = 0;
8640
- my $DX = 1;
8645
+ my $FX = 0; #image size 8256 x 5504
8646
+ my $DX = 1; #image size 5392 x 3592
8647
+ my $WideScreen = 4; #16:9 image area, image size 8256x4640
8648
+ my $OneToOne = 8; #1:1 image area, image size 5504x5504
8641
8649
 
8642
8650
  my $Single = 1;
8643
8651
  my $Dynamic = 2;
@@ -8651,49 +8659,42 @@ my %nikonFocalConversions = (
8651
8659
  my $DynamicM = 1;
8652
8660
  my $DynamicL = 2;
8653
8661
 
8654
- my $start = 424; #FX - all flavors
8655
- $start = 572 if $areaMode == $DX and ($afAreaMode == $Dynamic or $afAreaMode == $WideL or $afAreaMode == $ThreeD or $afAreaMode == $Auto or $afAreaMode >= $WideC1); #DX Wide(L/C1/C2) + Dynamic(L/M/S) + 3D + Auto
8656
- $start = 542 if $areaMode == $DX and $afAreaMode == 3 ; #DX Wide(S)
8657
-
8658
- my $increment = 291; #FX - all flavors
8659
- $increment = 436 if $areaMode == $DX and ($afAreaMode == $Dynamic or $afAreaMode == $WideL or $afAreaMode == $ThreeD or $afAreaMode == $Auto or $afAreaMode >= $WideC1); #DX Wide(L/C1/C2) + Dynamic (L/M/S) +3D + Auto
8660
- $increment = 442 if $areaMode == $DX and $afAreaMode == 3 ; #DX Wide(S)
8662
+ my $start = 424; #FX, 16:9 & 1:1 formats
8663
+ my $increment = 291; #FX, & 16:9 formats
8664
+ $start = $start + $increment if $imageArea == $WideScreen and $val > 0;
8661
8665
 
8662
- my $divisor = 7;
8663
- $divisor = 10 if $areaMode == $DX ; #DX
8666
+ if ($imageArea == $DX) { # DX results are in FX coordinate system to match reporting of ($AFAreaXPosition , $AFAreaYPosition)
8667
+ $start = 572;
8668
+ $increment = 436;
8669
+ if ( $afAreaMode == $WideS ) { #Wide S focus box is a strange size
8670
+ $start = 542;
8671
+ $increment = 442;
8672
+ }
8673
+ }
8664
8674
 
8665
- my $offsetVal = -1;
8666
- $offsetVal = 39 if $afAreaMode == $Dynamic and ( $dynamicAFAreaSize == $DynamicL ) ; #Dynamic (L) - force positive values so perl rounding toward zero isn't an issue
8667
- $offsetVal = 40 if $afAreaMode == $Dynamic and $dynamicAFAreaSize == $DynamicM ; #Dynamic (M)
8668
- $offsetVal = 40 if $areaMode == $FX and (($afAreaMode == $Dynamic and $dynamicAFAreaSize == $DynamicS) or $afAreaMode == $ThreeD) ; #FX Dynamic (S) or 3D
8669
- $offsetVal = 38 if $areaMode == $DX and ($afAreaMode == $Dynamic and $dynamicAFAreaSize == $DynamicS ) ; #DX Dynamic (S)or 3D
8675
+ my $divisor = 6.67;
8676
+ $divisor = 10.01 if $imageArea == $DX ; #extra .01 to ensure $val of 10*n+5 rounds down
8677
+ $divisor = 8.01 if $imageArea == $WideScreen ;
8670
8678
 
8671
- my $offsetSum = 0;
8672
- $offsetSum = -6 if $areaMode == $FX and ($afAreaMode == $Dynamic or $afAreaMode == $ThreeD); #FX Dynamic (L/M/S) or 3D
8673
- $offsetSum = -4 if $areaMode == $DX and ($afAreaMode == $Dynamic or $afAreaMode == $ThreeD ); #DX Dynamic (L/M/S) or 3D
8679
+ my $roundedValOverDivisor = sprintf("%.0f", $val / $divisor); #round to nearest int
8674
8680
 
8675
- my $nrow = $$self{AFAreaInitialHeight};
8676
- $nrow = int($nrow * 2 / 3) if $areaMode == $DX; #DX
8681
+ my $focusBoxHeight = $$self{AFAreaInitialHeight} ; #wider focus boxes (e.g., DynM, DynL and some Wide C1/C2) will start and end closer to the center of the frame
8682
+ $focusBoxHeight = int($focusBoxHeight * 2 / 3) if $imageArea == $DX ;
8677
8683
 
8678
- #some sample mappings:
8679
- #FX Wide(S/L/C1/C2) map [7, 13, 20, 27, 33, 40, 47, 53, 60, 67, 74, 80, 87, 94, 100, 107, 114] to [424, 715, 1006, 1297, 1588, 1879, 2170, 2461, 2752, 3043, 3334, 3625, 3916, 4207, 4498, 4789, 5080]
8680
- #DX Wide(L/C1/C2) map [7, 17, 28, 38, 48, 58, 69, 79, 89, 100, 110] to [572, 1008, 1444, 1880, 2316, 2752, 3188, 3624, 4060, 4496, 4932]
8681
- #DX Wide(S) map for Wide(S) [7, 17, 28, 38, 48, 58, 69, 79, 89] to [984, 1426, 1868, 2310, 2752, 3194, 3636, 4078, 4520]
8682
- #FX Dynamic (L) map [-19, -13, -6, 0, 7, 13, 20, 27, 33, 40, 47, 53, 60, 67, 74] to [715, 1006, 1297, 1588, 1879, 2170, 2461, 2752, 3043, 3334, 3625, 3916, 4207, 4498, 4789]
8684
+ my $skipPositions = int($focusBoxHeight / 2); #jump over half the height of the focus box
8683
8685
 
8684
- return $start + $increment * (int(($val + $offsetVal) / $divisor) + int($nrow / 2) + $offsetSum) ;;
8686
+ my $result = $start + $increment * ($roundedValOverDivisor + $skipPositions - 1 ) ;
8687
+ return $result;
8685
8688
  },
8686
8689
  },
8687
8690
  0x0bea => {
8688
8691
  Name => 'AFAreaInitialWidth',
8689
8692
  Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8690
- ValueConv => '$$self{VALUE}{PhotoShootingMenuBankImageArea} eq 0 ? $val : int($val * 2 / 3)', #DX mode requires scaling down TODO: add support ImageAreas 1:1 and 16:9
8691
8693
  RawConv => '$$self{AFAreaInitialWidth} = 1 + int ($val / 4)', #convert from [3, 11, 19, 35, 51, 75] to [1, 3, 5, 9 13, 19] to match camera options for C1/C2 focus modes .. input/output of 11/3 is for Wide(S)
8692
8694
  },
8693
8695
  0x0beb => {
8694
8696
  Name => 'AFAreaInitialHeight',
8695
8697
  Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8696
- ValueConv => '$$self{VALUE}{PhotoShootingMenuBankImageArea} eq 0 ? $val : int($val * 2 / 3)', #DX mode requires scaling down TODO: add support ImageAreas 1:1 and 16:9
8697
8698
  RawConv => '$$self{AFAreaInitialHeight} = 1 + int ($val / 7) ', #convert from [6, 20, 33, 46, 73] to [1, 3, 5, 7, 11] to match camera options for C1/C2 focus modes .. input/output of 33/5 is for Wide(L)
8698
8699
  },
8699
8700
  );
@@ -9384,7 +9385,7 @@ my %nikonFocalConversions = (
9384
9385
  %Image::ExifTool::Nikon::MenuSettingsZ9 = (
9385
9386
  %binaryDataAttrs,
9386
9387
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
9387
- DATAMEMBER => [ 140, 188, 192, 232, 424, 528, 534, 576 ],
9388
+ DATAMEMBER => [ 140, 188, 192, 232, 308, 424, 528, 534, 576 ],
9388
9389
  IS_SUBDIR => [ 799 ],
9389
9390
  NOTES => 'These tags are used by the Z9.',
9390
9391
  #90 ISO
@@ -9429,7 +9430,7 @@ my %nikonFocalConversions = (
9429
9430
  },
9430
9431
  274 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
9431
9432
  276 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, #single tag from both Photo & Video menus
9432
- 308 => { Name => 'PhotoShootingMenuBankImageArea', PrintConv => \%imageAreaZ9 },
9433
+ 308 => { Name => 'PhotoShootingMenuBankImageArea', RawConv => '$$self{ImageArea} = $val', PrintConv => \%imageAreaZ9 },
9433
9434
  #310 ImageQuality
9434
9435
  322 => { Name => 'AutoISO', PrintConv => \%offOn },
9435
9436
  324 => {
@@ -9595,7 +9596,7 @@ my %nikonFocalConversions = (
9595
9596
  %Image::ExifTool::Nikon::MenuSettingsZ9v3 = (
9596
9597
  %binaryDataAttrs,
9597
9598
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
9598
- DATAMEMBER => [ 154, 204, 208, 248, 444, 548, 554, 596 ],
9599
+ DATAMEMBER => [ 154, 204, 208, 248, 328, 444, 548, 554, 596 ],
9599
9600
  IS_SUBDIR => [ 847 ],
9600
9601
  NOTES => 'These tags are used by the Z9 firmware 3.00.',
9601
9602
  72 => {
@@ -9642,7 +9643,7 @@ my %nikonFocalConversions = (
9642
9643
  },
9643
9644
  290 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
9644
9645
  292 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, # single tag from both Photo & Video menus
9645
- 328 => { Name => 'PhotoShootingMenuBankImageArea', PrintConv => \%imageAreaZ9 },
9646
+ 328 => { Name => 'PhotoShootingMenuBankImageArea', RawConv => '$$self{ImageArea} = $val', PrintConv => \%imageAreaZ9 },
9646
9647
  342 => { Name => 'AutoISO', PrintConv => \%offOn },
9647
9648
  344 => {
9648
9649
  Name => 'ISOAutoHiLimit',
@@ -9828,7 +9829,7 @@ my %nikonFocalConversions = (
9828
9829
  %Image::ExifTool::Nikon::MenuSettingsZ9v4 = (
9829
9830
  %binaryDataAttrs,
9830
9831
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
9831
- DATAMEMBER => [ 154, 204, 208, 248, 444, 548, 554, 570, 596 ],
9832
+ DATAMEMBER => [ 154, 204, 208, 248, 328, 444, 548, 554, 570, 596 ],
9832
9833
  IS_SUBDIR => [ 847 ],
9833
9834
  NOTES => 'These tags are used by the Z9 firmware 3.00.',
9834
9835
  72 => {
@@ -9875,7 +9876,7 @@ my %nikonFocalConversions = (
9875
9876
  },
9876
9877
  290 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
9877
9878
  292 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, # single tag from both Photo & Video menus
9878
- 328 => { Name => 'PhotoShootingMenuBankImageArea', PrintConv => \%imageAreaZ9 },
9879
+ 328 => { Name => 'PhotoShootingMenuBankImageArea', RawConv => '$$self{ImageArea} = $val', PrintConv => \%imageAreaZ9 },
9879
9880
  #334 JPGCompression 0 => 'Size Priority', 1 => 'Optimal Quality',
9880
9881
  342 => { Name => 'AutoISO', PrintConv => \%offOn },
9881
9882
  344 => {
@@ -11429,13 +11430,80 @@ my %nikonFocalConversions = (
11429
11430
  # 0x02 - undef[148]
11430
11431
  # 0x03 - undef[284]
11431
11432
  # 0x04 - undef[148,212]
11432
- # 0x05 - undef[84] (barrel distortion params at offsets 0x14,0x1c,0x24, ref 28)
11433
- # 0x06 - undef[116] (vignette correction params at offsets 0x24,0x34,0x44, ref 28)
11433
+ 0x05 => { #28
11434
+ Name => 'DistortionInfo', # Z-series distortion correction information
11435
+ SubDirectory => { TagTable => 'Image::ExifTool::Nikon::DistortionInfo' },
11436
+ },
11437
+ 0x06 => { #28
11438
+ Name => 'VignetteInfo', # Z-series vignette correction information
11439
+ SubDirectory => { TagTable => 'Image::ExifTool::Nikon::VignetteInfo' },
11440
+ },
11434
11441
  # 0x07 - undef[104]
11435
11442
  # 0x08 - undef[24]
11436
11443
  # 0x09 - undef[36]
11437
11444
  );
11438
11445
 
11446
+ # Z-series distortion correction information (correction model is appears to be a cubic polynomial) (ref 28)
11447
+ %Image::ExifTool::Nikon::DistortionInfo = (
11448
+ %binaryDataAttrs,
11449
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
11450
+ 0 => {
11451
+ Name => 'DistortionCorrectionVersion',
11452
+ Format => 'string[4]',
11453
+ },
11454
+ 4 => {
11455
+ Name => 'DistortionCorrection', #used by ACR to determine whether the built-in lens profile is applied
11456
+ Format => 'int8u',
11457
+ PrintConv => {
11458
+ 1 => 'On (Optional)',
11459
+ 2 => 'Off',
11460
+ 3 => 'On (Required)',
11461
+ },
11462
+ },
11463
+ #0x10 Degree of radial distortion correction polynomial? (always 4? - decodes for the first 3 coefficients follow, the 4th at 0x2c/0x30 seems to always be 0)
11464
+ 0x14 => {
11465
+ Name => 'RadialDistortionCoefficient1',
11466
+ Format => 'rational64s',
11467
+ PrintConv => 'sprintf("%.5f",$val)',
11468
+ },
11469
+ 0x1c => {
11470
+ Name => 'RadialDistortionCoefficient2',
11471
+ Format => 'rational64s',
11472
+ PrintConv => 'sprintf("%.5f",$val)',
11473
+ },
11474
+ 0x24 => {
11475
+ Name => 'RadialDistortionCoefficient3',
11476
+ Format => 'rational64s',
11477
+ PrintConv => 'sprintf("%.5f",$val)',
11478
+ },
11479
+ );
11480
+
11481
+ # Z-series vignette correction information (correction model seems to be using a 6th order even polynomial) (ref 28)
11482
+ %Image::ExifTool::Nikon::VignetteInfo = (
11483
+ %binaryDataAttrs,
11484
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
11485
+ 0 => {
11486
+ Name => 'VignetteCorrectionVersion',
11487
+ Format => 'string[4]',
11488
+ },
11489
+ #0x10 Degree of vignette correction polynomial? (always 8? - decodes for the first 3 coefficents follow, the 4th at 0x4c/0x50 seems to always be 0)
11490
+ 0x24 => {
11491
+ Name => 'VignetteCoefficient1',
11492
+ Format => 'rational64s',
11493
+ PrintConv => 'sprintf("%.5f",$val)',
11494
+ },
11495
+ 0x34 => {
11496
+ Name => 'VignetteCoefficient2',
11497
+ Format => 'rational64s',
11498
+ PrintConv => 'sprintf("%.5f",$val)',
11499
+ },
11500
+ 0x44 => {
11501
+ Name => 'VignetteCoefficient3',
11502
+ Format => 'rational64s',
11503
+ PrintConv => 'sprintf("%.5f",$val)',
11504
+ },
11505
+ );
11506
+
11439
11507
  # tags in Nikon QuickTime videos (PH - observations with Coolpix S3)
11440
11508
  # (similar information in Kodak,Minolta,Nikon,Olympus,Pentax and Sanyo videos)
11441
11509
  %Image::ExifTool::Nikon::MOV = (
@@ -12663,15 +12731,16 @@ sub LensIDConv($$$)
12663
12731
 
12664
12732
  #------------------------------------------------------------------------------
12665
12733
  # Clean up formatting of string values
12666
- # Inputs: 0) string value
12734
+ # Inputs: 0) string value, 1) ExifTool ref
12667
12735
  # Returns: formatted string value
12668
12736
  # - removes trailing spaces and changes case to something more sensible
12669
- sub FormatString($)
12737
+ sub FormatString($$)
12670
12738
  {
12671
- my $str = shift;
12739
+ my ($str, $et) = @_;
12672
12740
  # limit string length (can be very long for some unknown tags)
12673
- if (length($str) > 60) {
12674
- $str = substr($str,0,55) . "[...]";
12741
+ my $lim = $et->Options('LimitLongValues');
12742
+ if (length($str) > $lim and $lim >= 5) {
12743
+ $str = substr($str,0,$lim-5) . "[...]";
12675
12744
  } else {
12676
12745
  $str =~ s/\s+$//; # remove trailing white space
12677
12746
  # Don't change case of non-words (no vowels)
@@ -13361,7 +13430,7 @@ Nikon maker notes in EXIF information.
13361
13430
 
13362
13431
  =head1 AUTHOR
13363
13432
 
13364
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
13433
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
13365
13434
 
13366
13435
  This library is free software; you can redistribute it and/or modify it
13367
13436
  under the same terms as Perl itself.
@@ -918,7 +918,7 @@ the maker notes of NEF images.
918
918
 
919
919
  =head1 AUTHOR
920
920
 
921
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
921
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
922
922
 
923
923
  This library is free software; you can redistribute it and/or modify it
924
924
  under the same terms as Perl itself.
@@ -10898,7 +10898,7 @@ this information.
10898
10898
 
10899
10899
  =head1 AUTHOR
10900
10900
 
10901
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
10901
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
10902
10902
 
10903
10903
  This library is free software; you can redistribute it and/or modify it
10904
10904
  under the same terms as Perl itself.
@@ -2077,7 +2077,7 @@ Nikon cameras such as the D6 and Z7mk2.
2077
2077
 
2078
2078
  =head1 AUTHOR
2079
2079
 
2080
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
2080
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
2081
2081
 
2082
2082
  This library is free software; you can redistribute it and/or modify it
2083
2083
  under the same terms as Perl itself.
@@ -107,7 +107,7 @@ interpret Nintendo maker notes EXIF meta information.
107
107
 
108
108
  =head1 AUTHOR
109
109
 
110
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
110
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
111
111
 
112
112
  This library is free software; you can redistribute it and/or modify it
113
113
  under the same terms as Perl itself.
@@ -395,7 +395,7 @@ archives of XML files.
395
395
 
396
396
  =head1 AUTHOR
397
397
 
398
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
398
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
399
399
 
400
400
  This library is free software; you can redistribute it and/or modify it
401
401
  under the same terms as Perl itself.
@@ -214,7 +214,7 @@ information from Ogg bitstream container files.
214
214
 
215
215
  =head1 AUTHOR
216
216
 
217
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
217
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
218
218
 
219
219
  This library is free software; you can redistribute it and/or modify it
220
220
  under the same terms as Perl itself.
@@ -4181,7 +4181,7 @@ Olympus or Epson maker notes in EXIF information.
4181
4181
 
4182
4182
  =head1 AUTHOR
4183
4183
 
4184
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
4184
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
4185
4185
 
4186
4186
  This library is free software; you can redistribute it and/or modify it
4187
4187
  under the same terms as Perl itself.
@@ -321,7 +321,7 @@ information from OpenEXR images.
321
321
 
322
322
  =head1 AUTHOR
323
323
 
324
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
324
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
325
325
 
326
326
  This library is free software; you can redistribute it and/or modify it
327
327
  under the same terms as Perl itself.
@@ -69,7 +69,7 @@ information from Ogg Opus audio files.
69
69
 
70
70
  =head1 AUTHOR
71
71
 
72
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
72
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
73
73
 
74
74
  This library is free software; you can redistribute it and/or modify it
75
75
  under the same terms as Perl itself.
@@ -71,7 +71,7 @@ information from Portable FloatMap (PFM) images.
71
71
 
72
72
  =head1 AUTHOR
73
73
 
74
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
74
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
75
75
 
76
76
  This library is free software; you can redistribute it and/or modify it
77
77
  under the same terms as Perl itself.
@@ -114,7 +114,7 @@ information from PC Paintbrush (PCX) files.
114
114
 
115
115
  =head1 AUTHOR
116
116
 
117
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
117
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
118
118
 
119
119
  This library is free software; you can redistribute it and/or modify it
120
120
  under the same terms as Perl itself.
@@ -2416,7 +2416,7 @@ and AESV3 (AES-256).
2416
2416
 
2417
2417
  =head1 AUTHOR
2418
2418
 
2419
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
2419
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
2420
2420
 
2421
2421
  This library is free software; you can redistribute it and/or modify it
2422
2422
  under the same terms as Perl itself.
@@ -119,7 +119,7 @@ information from Progressive Graphics File (PGF) images.
119
119
 
120
120
  =head1 AUTHOR
121
121
 
122
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
122
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
123
123
 
124
124
  This library is free software; you can redistribute it and/or modify it
125
125
  under the same terms as Perl itself.
@@ -1236,7 +1236,7 @@ Verbose or the Unknown option.
1236
1236
 
1237
1237
  =head1 AUTHOR
1238
1238
 
1239
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
1239
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
1240
1240
 
1241
1241
  This library is free software; you can redistribute it and/or modify it
1242
1242
  under the same terms as Perl itself.
@@ -450,7 +450,7 @@ This module decodes both the binary and XML-based PLIST format.
450
450
 
451
451
  =head1 AUTHOR
452
452
 
453
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
453
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
454
454
 
455
455
  This library is free software; you can redistribute it and/or modify it
456
456
  under the same terms as Perl itself.
@@ -2601,7 +2601,7 @@ Definitions for PLUS (Picture Licensing Universal System) tags.
2601
2601
 
2602
2602
  =head1 AUTHOR
2603
2603
 
2604
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
2604
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
2605
2605
 
2606
2606
  This library is free software; you can redistribute it and/or modify it
2607
2607
  under the same terms as Perl itself.