exiftool-vendored.pl 12.49.0 → 12.54.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 (203) hide show
  1. package/bin/Changes +107 -6
  2. package/bin/MANIFEST +5 -0
  3. package/bin/META.json +1 -1
  4. package/bin/META.yml +1 -1
  5. package/bin/README +3 -3
  6. package/bin/exiftool +39 -30
  7. package/bin/lib/File/RandomAccess.pm +1 -1
  8. package/bin/lib/File/RandomAccess.pod +2 -2
  9. package/bin/lib/Image/ExifTool/AES.pm +1 -1
  10. package/bin/lib/Image/ExifTool/AFCP.pm +1 -1
  11. package/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  12. package/bin/lib/Image/ExifTool/APE.pm +1 -1
  13. package/bin/lib/Image/ExifTool/APP12.pm +1 -1
  14. package/bin/lib/Image/ExifTool/ASF.pm +1 -1
  15. package/bin/lib/Image/ExifTool/Apple.pm +197 -27
  16. package/bin/lib/Image/ExifTool/Audible.pm +1 -1
  17. package/bin/lib/Image/ExifTool/BMP.pm +1 -1
  18. package/bin/lib/Image/ExifTool/BPG.pm +1 -1
  19. package/bin/lib/Image/ExifTool/BZZ.pm +1 -1
  20. package/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
  21. package/bin/lib/Image/ExifTool/BuildTagLookup.pm +10 -7
  22. package/bin/lib/Image/ExifTool/CBOR.pm +1 -1
  23. package/bin/lib/Image/ExifTool/Canon.pm +26 -9
  24. package/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
  25. package/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  26. package/bin/lib/Image/ExifTool/CanonVRD.pm +9 -9
  27. package/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
  28. package/bin/lib/Image/ExifTool/Casio.pm +4 -4
  29. package/bin/lib/Image/ExifTool/Charset.pm +1 -1
  30. package/bin/lib/Image/ExifTool/DICOM.pm +1 -1
  31. package/bin/lib/Image/ExifTool/DJI.pm +1 -1
  32. package/bin/lib/Image/ExifTool/DNG.pm +1 -1
  33. package/bin/lib/Image/ExifTool/DPX.pm +1 -1
  34. package/bin/lib/Image/ExifTool/DV.pm +1 -1
  35. package/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
  36. package/bin/lib/Image/ExifTool/DjVu.pm +1 -1
  37. package/bin/lib/Image/ExifTool/EXE.pm +1 -1
  38. package/bin/lib/Image/ExifTool/Exif.pm +11 -21
  39. package/bin/lib/Image/ExifTool/FITS.pm +1 -1
  40. package/bin/lib/Image/ExifTool/FLAC.pm +1 -1
  41. package/bin/lib/Image/ExifTool/FLIF.pm +1 -1
  42. package/bin/lib/Image/ExifTool/FLIR.pm +7 -6
  43. package/bin/lib/Image/ExifTool/Fixup.pm +1 -1
  44. package/bin/lib/Image/ExifTool/Flash.pm +1 -1
  45. package/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
  46. package/bin/lib/Image/ExifTool/Font.pm +1 -1
  47. package/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
  48. package/bin/lib/Image/ExifTool/FujiFilm.pm +20 -13
  49. package/bin/lib/Image/ExifTool/GE.pm +1 -1
  50. package/bin/lib/Image/ExifTool/GIF.pm +1 -1
  51. package/bin/lib/Image/ExifTool/GIMP.pm +1 -1
  52. package/bin/lib/Image/ExifTool/GPS.pm +12 -6
  53. package/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
  54. package/bin/lib/Image/ExifTool/Geotag.pm +14 -6
  55. package/bin/lib/Image/ExifTool/GoPro.pm +1 -1
  56. package/bin/lib/Image/ExifTool/H264.pm +1 -1
  57. package/bin/lib/Image/ExifTool/HP.pm +1 -1
  58. package/bin/lib/Image/ExifTool/HTML.pm +1 -1
  59. package/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
  60. package/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
  61. package/bin/lib/Image/ExifTool/ICO.pm +3 -1
  62. package/bin/lib/Image/ExifTool/ID3.pm +1 -1
  63. package/bin/lib/Image/ExifTool/IPTC.pm +6 -2
  64. package/bin/lib/Image/ExifTool/ISO.pm +1 -1
  65. package/bin/lib/Image/ExifTool/ITC.pm +1 -1
  66. package/bin/lib/Image/ExifTool/Import.pm +1 -1
  67. package/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  68. package/bin/lib/Image/ExifTool/JPEG.pm +2 -1
  69. package/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  70. package/bin/lib/Image/ExifTool/JSON.pm +1 -1
  71. package/bin/lib/Image/ExifTool/JVC.pm +1 -1
  72. package/bin/lib/Image/ExifTool/Jpeg2000.pm +35 -8
  73. package/bin/lib/Image/ExifTool/Kodak.pm +1 -1
  74. package/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  75. package/bin/lib/Image/ExifTool/LIF.pm +1 -1
  76. package/bin/lib/Image/ExifTool/LNK.pm +1 -1
  77. package/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
  78. package/bin/lib/Image/ExifTool/Lang/de.pm +2 -2
  79. package/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  80. package/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  81. package/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  82. package/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
  83. package/bin/lib/Image/ExifTool/Lang/fr.pm +6016 -760
  84. package/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
  85. package/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
  86. package/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
  87. package/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
  88. package/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
  89. package/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
  90. package/bin/lib/Image/ExifTool/Lang/sk.pm +1806 -0
  91. package/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
  92. package/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
  93. package/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  94. package/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  95. package/bin/lib/Image/ExifTool/Leaf.pm +1 -1
  96. package/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  97. package/bin/lib/Image/ExifTool/M2TS.pm +45 -2
  98. package/bin/lib/Image/ExifTool/MIE.pm +1 -1
  99. package/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
  100. package/bin/lib/Image/ExifTool/MIFF.pm +1 -1
  101. package/bin/lib/Image/ExifTool/MISB.pm +2 -2
  102. package/bin/lib/Image/ExifTool/MNG.pm +1 -1
  103. package/bin/lib/Image/ExifTool/MOI.pm +1 -1
  104. package/bin/lib/Image/ExifTool/MPC.pm +1 -1
  105. package/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  106. package/bin/lib/Image/ExifTool/MPF.pm +1 -1
  107. package/bin/lib/Image/ExifTool/MRC.pm +1 -1
  108. package/bin/lib/Image/ExifTool/MWG.pm +1 -1
  109. package/bin/lib/Image/ExifTool/MXF.pm +1 -1
  110. package/bin/lib/Image/ExifTool/MacOS.pm +1 -1
  111. package/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
  112. package/bin/lib/Image/ExifTool/Matroska.pm +262 -46
  113. package/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  114. package/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  115. package/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  116. package/bin/lib/Image/ExifTool/Motorola.pm +1 -1
  117. package/bin/lib/Image/ExifTool/Nikon.pm +845 -355
  118. package/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
  119. package/bin/lib/Image/ExifTool/NikonCustom.pm +140 -107
  120. package/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
  121. package/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
  122. package/bin/lib/Image/ExifTool/OOXML.pm +1 -1
  123. package/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  124. package/bin/lib/Image/ExifTool/Olympus.pm +6 -4
  125. package/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
  126. package/bin/lib/Image/ExifTool/Opus.pm +1 -1
  127. package/bin/lib/Image/ExifTool/Other.pm +1 -1
  128. package/bin/lib/Image/ExifTool/PCX.pm +1 -1
  129. package/bin/lib/Image/ExifTool/PDF.pm +1 -1
  130. package/bin/lib/Image/ExifTool/PGF.pm +1 -1
  131. package/bin/lib/Image/ExifTool/PICT.pm +1 -1
  132. package/bin/lib/Image/ExifTool/PLIST.pm +12 -7
  133. package/bin/lib/Image/ExifTool/PLUS.pm +1 -1
  134. package/bin/lib/Image/ExifTool/PNG.pm +9 -2
  135. package/bin/lib/Image/ExifTool/PPM.pm +1 -1
  136. package/bin/lib/Image/ExifTool/PSP.pm +1 -1
  137. package/bin/lib/Image/ExifTool/Palm.pm +1 -1
  138. package/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
  139. package/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  140. package/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  141. package/bin/lib/Image/ExifTool/Pentax.pm +8 -3
  142. package/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
  143. package/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
  144. package/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  145. package/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
  146. package/bin/lib/Image/ExifTool/PostScript.pm +1 -1
  147. package/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
  148. package/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
  149. package/bin/lib/Image/ExifTool/QuickTime.pm +52 -9
  150. package/bin/lib/Image/ExifTool/QuickTimeStream.pl +95 -14
  151. package/bin/lib/Image/ExifTool/README +6 -1
  152. package/bin/lib/Image/ExifTool/RIFF.pm +1 -1
  153. package/bin/lib/Image/ExifTool/RSRC.pm +1 -1
  154. package/bin/lib/Image/ExifTool/RTF.pm +1 -1
  155. package/bin/lib/Image/ExifTool/Radiance.pm +1 -1
  156. package/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  157. package/bin/lib/Image/ExifTool/Real.pm +1 -1
  158. package/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
  159. package/bin/lib/Image/ExifTool/Red.pm +1 -1
  160. package/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
  161. package/bin/lib/Image/ExifTool/Samsung.pm +3 -1
  162. package/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
  163. package/bin/lib/Image/ExifTool/Scalado.pm +1 -1
  164. package/bin/lib/Image/ExifTool/Shift.pl +1 -1
  165. package/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
  166. package/bin/lib/Image/ExifTool/Sigma.pm +1 -1
  167. package/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  168. package/bin/lib/Image/ExifTool/Sony.pm +35 -20
  169. package/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
  170. package/bin/lib/Image/ExifTool/Stim.pm +1 -1
  171. package/bin/lib/Image/ExifTool/TagInfoXML.pm +15 -8
  172. package/bin/lib/Image/ExifTool/TagLookup.pm +4672 -4568
  173. package/bin/lib/Image/ExifTool/TagNames.pod +357 -46
  174. package/bin/lib/Image/ExifTool/Text.pm +1 -1
  175. package/bin/lib/Image/ExifTool/Theora.pm +1 -1
  176. package/bin/lib/Image/ExifTool/Torrent.pm +1 -1
  177. package/bin/lib/Image/ExifTool/Unknown.pm +1 -1
  178. package/bin/lib/Image/ExifTool/VCard.pm +1 -1
  179. package/bin/lib/Image/ExifTool/Validate.pm +1 -1
  180. package/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
  181. package/bin/lib/Image/ExifTool/WTV.pm +1 -1
  182. package/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  183. package/bin/lib/Image/ExifTool/WriteExif.pl +14 -1
  184. package/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  185. package/bin/lib/Image/ExifTool/WritePDF.pl +5 -1
  186. package/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
  187. package/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  188. package/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
  189. package/bin/lib/Image/ExifTool/WriteQuickTime.pl +30 -14
  190. package/bin/lib/Image/ExifTool/WriteRIFF.pl +1 -1
  191. package/bin/lib/Image/ExifTool/WriteXMP.pl +16 -2
  192. package/bin/lib/Image/ExifTool/Writer.pl +35 -15
  193. package/bin/lib/Image/ExifTool/XMP.pm +25 -4
  194. package/bin/lib/Image/ExifTool/XMP2.pl +29 -2
  195. package/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  196. package/bin/lib/Image/ExifTool/ZIP.pm +20 -8
  197. package/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
  198. package/bin/lib/Image/ExifTool/iWork.pm +1 -1
  199. package/bin/lib/Image/ExifTool.pm +45 -20
  200. package/bin/lib/Image/ExifTool.pod +48 -46
  201. package/bin/perl-Image-ExifTool.spec +1 -1
  202. package/bin/pp_build_exe.args +6 -5
  203. package/package.json +3 -3
@@ -222,7 +222,7 @@ characteristics of TXT and CSV files.
222
222
 
223
223
  =head1 AUTHOR
224
224
 
225
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
225
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
226
226
 
227
227
  This library is free software; you can redistribute it and/or modify it
228
228
  under the same terms as Perl itself.
@@ -122,7 +122,7 @@ information from Theora video streams.
122
122
 
123
123
  =head1 AUTHOR
124
124
 
125
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
125
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
126
126
 
127
127
  This library is free software; you can redistribute it and/or modify it
128
128
  under the same terms as Perl itself.
@@ -309,7 +309,7 @@ bencoded information from BitTorrent files.
309
309
 
310
310
  =head1 AUTHOR
311
311
 
312
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
312
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
313
313
 
314
314
  This library is free software; you can redistribute it and/or modify it
315
315
  under the same terms as Perl itself.
@@ -53,7 +53,7 @@ unknown manufacturers.
53
53
 
54
54
  =head1 AUTHOR
55
55
 
56
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
56
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
57
57
 
58
58
  This library is free software; you can redistribute it and/or modify it
59
59
  under the same terms as Perl itself.
@@ -416,7 +416,7 @@ information from vCard VCF and iCalendar ICS files.
416
416
 
417
417
  =head1 AUTHOR
418
418
 
419
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
419
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
420
420
 
421
421
  This library is free software; you can redistribute it and/or modify it
422
422
  under the same terms as Perl itself.
@@ -659,7 +659,7 @@ ExifTool Validate option is enabled.
659
659
 
660
660
  =head1 AUTHOR
661
661
 
662
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
662
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
663
663
 
664
664
  This library is free software; you can redistribute it and/or modify it
665
665
  under the same terms as Perl itself.
@@ -228,7 +228,7 @@ information from Ogg Vorbis audio headers.
228
228
 
229
229
  =head1 AUTHOR
230
230
 
231
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
231
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
232
232
 
233
233
  This library is free software; you can redistribute it and/or modify it
234
234
  under the same terms as Perl itself.
@@ -297,7 +297,7 @@ This module contains definitions required by Image::ExifTool to read WTV
297
297
 
298
298
  =head1 AUTHOR
299
299
 
300
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
300
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
301
301
 
302
302
  This library is free software; you can redistribute it and/or modify it
303
303
  under the same terms as Perl itself.
@@ -630,7 +630,7 @@ JPEG files, and would lead to far fewer problems with corrupted metadata.
630
630
 
631
631
  =head1 AUTHOR
632
632
 
633
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
633
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
634
634
 
635
635
  This library is free software; you can redistribute it and/or modify it
636
636
  under the same terms as Perl itself.
@@ -53,6 +53,19 @@ my %mandatory = (
53
53
  },
54
54
  );
55
55
 
56
+ #------------------------------------------------------------------------------
57
+ # Inverse print conversion for OffsetTime tags
58
+ # Inputs: 0) input time zone or date/time value, 1) ExifTool ref
59
+ # Returns: Time zone string for writing to EXIF
60
+ sub InverseOffsetTime($$)
61
+ {
62
+ my ($val, $et) = @_;
63
+ $val = $et->TimeNow() if lc($val) eq 'now';
64
+ return '+00:00' if $val =~ /Z$/;
65
+ return sprintf('%s%.2d:%.2d',$1,$2,$3) if $val =~ /([-+])(\d{1,2}):?(\d{2})/;
66
+ return undef;
67
+ }
68
+
56
69
  #------------------------------------------------------------------------------
57
70
  # Inverse print conversion for LensInfo
58
71
  # Inputs: 0) lens info string
@@ -2640,7 +2653,7 @@ This file contains routines to write EXIF metadata.
2640
2653
 
2641
2654
  =head1 AUTHOR
2642
2655
 
2643
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
2656
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
2644
2657
 
2645
2658
  This library is free software; you can redistribute it and/or modify it
2646
2659
  under the same terms as Perl itself.
@@ -711,7 +711,7 @@ seldom-used routines.
711
711
 
712
712
  =head1 AUTHOR
713
713
 
714
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
714
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
715
715
 
716
716
  This library is free software; you can redistribute it and/or modify it
717
717
  under the same terms as Perl itself.
@@ -395,6 +395,10 @@ sub WritePDF($$)
395
395
 
396
396
  # must pre-determine Info reference to be used in encryption
397
397
  my $infoRef = $prevInfoRef || \ "$nextObject 0 R";
398
+ unless (ref $infoRef eq 'SCALAR') {
399
+ $et->Error("Info dictionary is not an indirect object");
400
+ return $rtn;
401
+ }
398
402
  $keyExt = $$infoRef;
399
403
 
400
404
  # must encrypt all values in dictionary if they came from an encrypted stream
@@ -750,7 +754,7 @@ C<PDF-update> pseudo group).
750
754
 
751
755
  =head1 AUTHOR
752
756
 
753
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
757
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
754
758
 
755
759
  This library is free software; you can redistribute it and/or modify it
756
760
  under the same terms as Perl itself.
@@ -401,7 +401,7 @@ strings).
401
401
 
402
402
  =head1 AUTHOR
403
403
 
404
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
404
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
405
405
 
406
406
  This library is free software; you can redistribute it and/or modify it
407
407
  under the same terms as Perl itself.
@@ -257,7 +257,7 @@ default resource name, and applied if no appended name is provided.
257
257
 
258
258
  =head1 AUTHOR
259
259
 
260
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
260
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
261
261
 
262
262
  This library is free software; you can redistribute it and/or modify it
263
263
  under the same terms as Perl itself.
@@ -687,7 +687,7 @@ Thanks to Tim Kordick for his help testing the EPS writer.
687
687
 
688
688
  =head1 AUTHOR
689
689
 
690
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
690
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
691
691
 
692
692
  This library is free software; you can redistribute it and/or modify it
693
693
  under the same terms as Perl itself.
@@ -306,14 +306,17 @@ sub CheckQTValue($$$)
306
306
 
307
307
  #------------------------------------------------------------------------------
308
308
  # Format QuickTime value for writing
309
- # Inputs: 0) ExifTool ref, 1) value ref, 2) Format (or undef), 3) Writable (or undef)
310
- # Returns: Flags for QT data type, and reformats value as required
309
+ # Inputs: 0) ExifTool ref, 1) value ref, 2) tagInfo ref, 3) Format (or undef)
310
+ # Returns: Flags for QT data type, and reformats value as required (sets to undef on error)
311
311
  sub FormatQTValue($$;$$)
312
312
  {
313
- my ($et, $valPt, $format, $writable) = @_;
313
+ my ($et, $valPt, $tagInfo, $format) = @_;
314
+ my $writable = $$tagInfo{Writable};
315
+ my $count = $$tagInfo{Count};
314
316
  my $flags;
317
+ $format or $format = $$tagInfo{Format};
315
318
  if ($format and $format ne 'string' or not $format and $writable and $writable ne 'string') {
316
- $$valPt = WriteValue($$valPt, $format || $writable);
319
+ $$valPt = WriteValue($$valPt, $format || $writable, $count);
317
320
  if ($writable and $qtFormat{$writable}) {
318
321
  $flags = $qtFormat{$writable};
319
322
  } else {
@@ -329,6 +332,7 @@ sub FormatQTValue($$;$$)
329
332
  $flags = 0x01; # UTF8
330
333
  $$valPt = $et->Encode($$valPt, 'UTF8');
331
334
  }
335
+ defined $$valPt or $et->WarnOnce("Error converting value for $$tagInfo{Name}");
332
336
  return $flags;
333
337
  }
334
338
 
@@ -1139,7 +1143,7 @@ sub WriteQuickTime($$$)
1139
1143
  my $newVal = $et->GetNewValue($nvHash);
1140
1144
  next unless defined $newVal;
1141
1145
  my $prVal = $newVal;
1142
- my $flags = FormatQTValue($et, \$newVal, $format, $$tagInfo{Writable});
1146
+ my $flags = FormatQTValue($et, \$newVal, $tagInfo, $format);
1143
1147
  next unless defined $newVal;
1144
1148
  my ($ctry, $lang) = (0, 0);
1145
1149
  if ($$ti{LangCode}) {
@@ -1220,7 +1224,8 @@ sub WriteQuickTime($$$)
1220
1224
  }
1221
1225
  my $prVal = $newVal;
1222
1226
  # format new value for writing (and get new flags)
1223
- $flags = FormatQTValue($et, \$newVal, $format, $$tagInfo{Writable});
1227
+ $flags = FormatQTValue($et, \$newVal, $tagInfo, $format);
1228
+ next unless defined $newVal;
1224
1229
  my $grp = $et->GetGroup($langInfo, 1);
1225
1230
  $et->VerboseValue("- $grp:$$langInfo{Name}", $val);
1226
1231
  $et->VerboseValue("+ $grp:$$langInfo{Name}", $prVal);
@@ -1463,7 +1468,7 @@ sub WriteQuickTime($$$)
1463
1468
  my $newVal = $et->GetNewValue($nvHash);
1464
1469
  next unless defined $newVal;
1465
1470
  my $prVal = $newVal;
1466
- my $flags = FormatQTValue($et, \$newVal, $$tagInfo{Format}, $$tagInfo{Writable});
1471
+ my $flags = FormatQTValue($et, \$newVal, $tagInfo);
1467
1472
  next unless defined $newVal;
1468
1473
  my ($ctry, $lang) = (0, 0);
1469
1474
  # handle alternate languages
@@ -1662,12 +1667,18 @@ sub WriteQuickTime($$$)
1662
1667
  # edit size of mdat in header if necessary
1663
1668
  if ($diff) {
1664
1669
  if (length($$hdrChunk[2]) == 8) {
1665
- my $size = Get32u(\$$hdrChunk[2], 0) + $diff;
1666
- $size > 0xffffffff and $et->Error("Can't yet grow mdat across 4GB boundary"), return $rtnVal;
1667
- Set32u($size, \$$hdrChunk[2], 0);
1670
+ my $size = Get32u(\$$hdrChunk[2], 0);
1671
+ if ($size) { # (0 size = extends to end of file)
1672
+ $size += $diff;
1673
+ $size > 0xffffffff and $et->Error("Can't yet grow mdat across 4GB boundary"), return $rtnVal;
1674
+ Set32u($size, \$$hdrChunk[2], 0);
1675
+ }
1668
1676
  } elsif (length($$hdrChunk[2]) == 16) {
1669
- my $size = Get64u(\$$hdrChunk[2], 8) + $diff;
1670
- Set64u($size, \$$hdrChunk[2], 8);
1677
+ my $size = Get64u(\$$hdrChunk[2], 8);
1678
+ if ($size) {
1679
+ $size += $diff;
1680
+ Set64u($size, \$$hdrChunk[2], 8);
1681
+ }
1671
1682
  } else {
1672
1683
  $et->Error('Internal error. Invalid mdat header');
1673
1684
  return $rtnVal;
@@ -1894,7 +1905,12 @@ sub WriteMOV($$)
1894
1905
  $ftype = 'MOV';
1895
1906
  }
1896
1907
  $et->SetFileType($ftype); # need to set "FileType" tag for a Condition
1897
- $et->InitWriteDirs($dirMap{$ftype}, 'XMP', 'QuickTime');
1908
+ if ($ftype eq 'HEIC') {
1909
+ # EXIF is preferred in HEIC files
1910
+ $et->InitWriteDirs($dirMap{$ftype}, 'EXIF', 'QuickTime');
1911
+ } else {
1912
+ $et->InitWriteDirs($dirMap{$ftype}, 'XMP', 'QuickTime');
1913
+ }
1898
1914
  $$et{DirMap} = $dirMap{$ftype}; # need access to directory map when writing
1899
1915
  # track tags globally to avoid creating multiple tags in the case of duplicate directories
1900
1916
  $$et{DidTag} = { };
@@ -1927,7 +1943,7 @@ QuickTime-based file formats like MOV and MP4.
1927
1943
 
1928
1944
  =head1 AUTHOR
1929
1945
 
1930
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
1946
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
1931
1947
 
1932
1948
  This library is free software; you can redistribute it and/or modify it
1933
1949
  under the same terms as Perl itself.
@@ -338,7 +338,7 @@ Currently writes only WebP files.
338
338
 
339
339
  =head1 AUTHOR
340
340
 
341
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
341
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
342
342
 
343
343
  This library is free software; you can redistribute it and/or modify it
344
344
  under the same terms as Perl itself.
@@ -561,7 +561,21 @@ sub AddStructType($$$$;$)
561
561
  }
562
562
 
563
563
  #------------------------------------------------------------------------------
564
- # Hack to use XMP writer for SphericalVideoXML
564
+ # Process SphericalVideoXML (see XMP-GSpherical tags documentation)
565
+ # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
566
+ # Returns: SphericalVideoXML data
567
+ sub ProcessGSpherical($$$)
568
+ {
569
+ my ($et, $dirInfo, $tagTablePtr) = @_;
570
+ # extract SphericalVideoXML as a block if requested
571
+ if ($$et{REQ_TAG_LOOKUP}{sphericalvideoxml}) {
572
+ $et->FoundTag(SphericalVideoXML => substr(${$$dirInfo{DataPt}}, 16));
573
+ }
574
+ return Image::ExifTool::XMP::ProcessXMP($et, $dirInfo, $tagTablePtr);
575
+ }
576
+
577
+ #------------------------------------------------------------------------------
578
+ # Hack to use XMP writer for SphericalVideoXML (see XMP-GSpherical tags documentation)
565
579
  # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
566
580
  # Returns: SphericalVideoXML data
567
581
  sub WriteGSpherical($$$)
@@ -1621,7 +1635,7 @@ This file contains routines to write XMP metadata.
1621
1635
 
1622
1636
  =head1 AUTHOR
1623
1637
 
1624
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
1638
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
1625
1639
 
1626
1640
  This library is free software; you can redistribute it and/or modify it
1627
1641
  under the same terms as Perl itself.
@@ -242,7 +242,7 @@ my %intRange = (
242
242
  'int64s' => [-9223372036854775808, 9223372036854775807],
243
243
  );
244
244
  # lookup for file types with block-writable EXIF
245
- my %blockExifTypes = map { $_ => 1 } qw(JPEG PNG JP2 MIE EXIF FLIF MOV MP4 RIFF);
245
+ my %blockExifTypes = map { $_ => 1 } qw(JPEG PNG JP2 JXL MIE EXIF FLIF MOV MP4 RIFF);
246
246
 
247
247
  my $maxSegmentLen = 0xfffd; # maximum length of data in a JPEG segment
248
248
  my $maxXMPLen = $maxSegmentLen; # maximum length of XMP data in JPEG
@@ -707,9 +707,13 @@ TAG: foreach $tagInfo (@matchingTags) {
707
707
  $writeGroup or $writeGroup = $group0;
708
708
  # get priority for this group
709
709
  unless ($priority) {
710
- $priority = $$self{WRITE_PRIORITY}{lc($writeGroup)};
711
- unless ($priority) {
712
- $priority = $$self{WRITE_PRIORITY}{lc($group0)} || 0;
710
+ if ($$tagInfo{Avoid} and $$tagInfo{WriteAlso}) {
711
+ $priority = 0;
712
+ } else {
713
+ $priority = $$self{WRITE_PRIORITY}{lc($writeGroup)};
714
+ unless ($priority) {
715
+ $priority = $$self{WRITE_PRIORITY}{lc($group0)} || 0;
716
+ }
713
717
  }
714
718
  }
715
719
  # adjust priority based on Preferred level for this tag
@@ -830,6 +834,8 @@ TAG: foreach $tagInfo (@matchingTags) {
830
834
  $tag = $$tagInfo{Name}; # get tag name for warnings
831
835
  my $lcTag = lc $tag;
832
836
  my $pref = $preferred{$lcTag} || { };
837
+ # don't write Avoid-ed tags with side effect unless preferred
838
+ next if not $$pref{$tagInfo} and $$tagInfo{Avoid} and $$tagInfo{WriteAlso};
833
839
  my $shift = $options{Shift};
834
840
  my $addValue = $options{AddValue};
835
841
  if (defined $shift) {
@@ -971,6 +977,7 @@ TAG: foreach $tagInfo (@matchingTags) {
971
977
  $self->GetNewValueHash($tagInfo, $writeGroup, 'delete', $options{ProtectSaved});
972
978
  # also delete related tag previous new values
973
979
  if ($$tagInfo{WriteAlso}) {
980
+ $$self{INDENT2} = '+';
974
981
  my ($wgrp, $wtag);
975
982
  if ($$tagInfo{WriteGroup} and $$tagInfo{WriteGroup} eq 'All' and $writeGroup) {
976
983
  $wgrp = $writeGroup . ':';
@@ -981,6 +988,7 @@ TAG: foreach $tagInfo (@matchingTags) {
981
988
  my ($n,$e) = $self->SetNewValue($wgrp . $wtag, undef, Replace=>2);
982
989
  $numSet += $n;
983
990
  }
991
+ $$self{INDENT2} = '';
984
992
  }
985
993
  $options{Replace} == 2 and ++$numSet, next;
986
994
  }
@@ -1022,7 +1030,7 @@ TAG: foreach $tagInfo (@matchingTags) {
1022
1030
  require 'Image/ExifTool/XMPStruct.pl';
1023
1031
  $_ = Image::ExifTool::XMP::SerializeStruct($_);
1024
1032
  }
1025
- print $out "$verb $wgrp1:$tag$fromList if value is '${_}'\n";
1033
+ print $out "$$self{INDENT2}$verb $wgrp1:$tag$fromList if value is '${_}'\n";
1026
1034
  }
1027
1035
  }
1028
1036
  }
@@ -1086,15 +1094,25 @@ TAG: foreach $tagInfo (@matchingTags) {
1086
1094
  push @{$$nvHash{Value}}, ref $val eq 'ARRAY' ? @$val : $val;
1087
1095
  }
1088
1096
  if ($verbose > 1) {
1089
- my $ifExists = $$nvHash{IsCreating} ? ( $createOnly ?
1090
- ($$nvHash{IsCreating} == 2 ?
1091
- " if $writeGroup exists and tag doesn't" :
1092
- " if tag doesn't exist") :
1093
- ($$nvHash{IsCreating} == 2 ? " if $writeGroup exists" : '')) :
1097
+ my $ifExists;
1098
+ if ($$tagInfo{IsComposite}) {
1099
+ # (composite tags don't technically exist in the file)
1100
+ if ($$tagInfo{WriteAlso}) {
1101
+ $ifExists = ' (+' . join(',+',sort keys %{$$tagInfo{WriteAlso}}) . '):';
1102
+ } else {
1103
+ $ifExists = '';
1104
+ }
1105
+ } else {
1106
+ $ifExists = $$nvHash{IsCreating} ? ( $createOnly ?
1107
+ ($$nvHash{IsCreating} == 2 ?
1108
+ " if $writeGroup exists and tag doesn't" :
1109
+ " if tag doesn't exist") :
1110
+ ($$nvHash{IsCreating} == 2 ? " if $writeGroup exists" : '')) :
1094
1111
  (($$nvHash{DelValue} and @{$$nvHash{DelValue}}) ?
1095
- ' if tag was deleted' : ' if tag exists');
1112
+ ' if tag was deleted' : ' if tag exists');
1113
+ }
1096
1114
  my $verb = ($shift ? 'Shifting' : ($addValue ? 'Adding' : 'Writing'));
1097
- print $out "$verb $wgrp1:$tag$ifExists\n";
1115
+ print $out "$$self{INDENT2}$verb $wgrp1:$tag$ifExists\n";
1098
1116
  }
1099
1117
  }
1100
1118
  } elsif ($permanent) {
@@ -1109,7 +1127,7 @@ TAG: foreach $tagInfo (@matchingTags) {
1109
1127
  $self->GetNewValueHash($tagInfo, $writeGroup, 'delete');
1110
1128
  my $nvHash = $self->GetNewValueHash($tagInfo, $writeGroup, 'create');
1111
1129
  $$nvHash{WantGroup} = $wantGroup;
1112
- $verbose > 1 and print $out "Deleting $wgrp1:$tag\n";
1130
+ $verbose > 1 and print $out "$$self{INDENT2}Deleting $wgrp1:$tag\n";
1113
1131
  }
1114
1132
  $$setTags{$tagInfo} = 1 if $setTags;
1115
1133
  $prioritySet = 1 if $$pref{$tagInfo};
@@ -1118,6 +1136,7 @@ WriteAlso:
1118
1136
  # also write related tags
1119
1137
  my $writeAlso = $$tagInfo{WriteAlso};
1120
1138
  if ($writeAlso) {
1139
+ $$self{INDENT2} = '+'; # indicate related tag with a leading "+"
1121
1140
  my ($wgrp, $wtag, $n);
1122
1141
  if ($$tagInfo{WriteGroup} and $$tagInfo{WriteGroup} eq 'All' and $writeGroup) {
1123
1142
  $wgrp = $writeGroup . ':';
@@ -1137,7 +1156,7 @@ WriteAlso:
1137
1156
  SetTags => \%alsoWrote, # remember tags already written
1138
1157
  );
1139
1158
  undef $evalWarning;
1140
- #### eval WriteAlso ($val)
1159
+ #### eval WriteAlso ($val,%opts)
1141
1160
  my $v = eval $$writeAlso{$wtag};
1142
1161
  # we wanted to do the eval in case there are side effect, but we
1143
1162
  # don't want to write a value for a tag that is being deleted:
@@ -1159,6 +1178,7 @@ WriteAlso:
1159
1178
  }
1160
1179
  }
1161
1180
  }
1181
+ $$self{INDENT2} = '';
1162
1182
  }
1163
1183
  }
1164
1184
  # print warning if we couldn't set our priority tag
@@ -7045,7 +7065,7 @@ used routines.
7045
7065
 
7046
7066
  =head1 AUTHOR
7047
7067
 
7048
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
7068
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
7049
7069
 
7050
7070
  This library is free software; you can redistribute it and/or modify it
7051
7071
  under the same terms as Perl itself.
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
50
50
  use Image::ExifTool::GPS;
51
51
  require Exporter;
52
52
 
53
- $VERSION = '3.54';
53
+ $VERSION = '3.56';
54
54
  @ISA = qw(Exporter);
55
55
  @EXPORT_OK = qw(EscapeXML UnescapeXML);
56
56
 
@@ -87,6 +87,7 @@ my %stdPath = (
87
87
  'MicrosoftPhoto' => 'microsoft',
88
88
  'prismusagerights' => 'pur',
89
89
  'GettyImagesGIFT' => 'getty',
90
+ 'hdr_metadata' => 'hdr',
90
91
  );
91
92
 
92
93
  # translate ExifTool XMP family 1 group names back to standard XMP namespace prefixes
@@ -197,6 +198,7 @@ my %xmpNS = (
197
198
  sdc => 'http://ns.nikon.com/sdc/1.0/',
198
199
  ast => 'http://ns.nikon.com/asteroid/1.0/',
199
200
  nine => 'http://ns.nikon.com/nine/1.0/',
201
+ hdr_metadata => 'http://ns.adobe.com/hdr-metadata/1.0/',
200
202
  );
201
203
 
202
204
  # build reverse namespace lookup
@@ -895,6 +897,10 @@ my %sRangeMask = (
895
897
  Name => 'nine',
896
898
  SubDirectory => { TagTable => 'Image::ExifTool::Nikon::nine' },
897
899
  },
900
+ hdr => {
901
+ Name => 'hdr',
902
+ SubDirectory => { TagTable => 'Image::ExifTool::XMP::hdr' },
903
+ },
898
904
  );
899
905
 
900
906
  # hack to allow XML containing Dublin Core metadata to be handled like XMP (eg. EPUB - see ZIP.pm)
@@ -1728,6 +1734,14 @@ my %sPantryItem = (
1728
1734
  List => 'Seq',
1729
1735
  },
1730
1736
  RangeMaskMapInfo => { Name => 'RangeMask', Struct => \%sRangeMask, FlatName => 'RangeMask' },
1737
+ # new for ACR 15.1 (not sure if these are integer or real, so just guess)
1738
+ HDREditMode => { Writable => 'integer' },
1739
+ SDRBrightness => { Writable => 'real' },
1740
+ SDRContrast => { Writable => 'real' },
1741
+ SDRHighlights => { Writable => 'real' },
1742
+ SDRShadows => { Writable => 'real' },
1743
+ SDRWhites => { Writable => 'real' },
1744
+ SDRBlend => { Writable => 'real' },
1731
1745
  );
1732
1746
 
1733
1747
  # Tiff namespace properties (tiff)
@@ -2279,7 +2293,13 @@ my %sPantryItem = (
2279
2293
  PrintConvInv => '$val=~s/\s*m$//; $val',
2280
2294
  },
2281
2295
  NativeDigest => { }, #PH
2282
- # new Exif
2296
+ # the following written incorrectly by ACR 15.1
2297
+ # SubSecTime (should not be written according to Exif4XMP 2.32 specification)
2298
+ # SubSecTimeOriginal (should not be written according to Exif4XMP 2.32 specification)
2299
+ # SubSecTimeDigitized (should not be written according to Exif4XMP 2.32 specification)
2300
+ # SerialNumber (should be BodySerialNumber)
2301
+ # Lens (should be XMP-aux)
2302
+ # LensInfo (should be XMP-aux)
2283
2303
  );
2284
2304
 
2285
2305
  # Exif extended properties (exifEX, ref 12)
@@ -2996,8 +3016,9 @@ sub AddFlattenedTags($;$$)
2996
3016
  } else {
2997
3017
  $$flatInfo{Groups}{2} = $tagG2;
2998
3018
  }
2999
- # save reference to top-level structure
3019
+ # save reference to top-level and parent structures
3000
3020
  $$flatInfo{RootTagInfo} = $$tagInfo{RootTagInfo} || $tagInfo;
3021
+ $$flatInfo{ParentTagInfo} = $tagInfo;
3001
3022
  # recursively generate flattened tags for sub-structures
3002
3023
  next unless $$flatInfo{Struct};
3003
3024
  length($flatID) > 250 and warn("Possible deep recursion for tag $flatID\n"), last;
@@ -4391,7 +4412,7 @@ information.
4391
4412
 
4392
4413
  =head1 AUTHOR
4393
4414
 
4394
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
4415
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
4395
4416
 
4396
4417
  This library is free software; you can redistribute it and/or modify it
4397
4418
  under the same terms as Perl itself.
@@ -538,7 +538,7 @@ my %sImageRegion = ( # new in 1.5
538
538
  NAMESPACE => 'Iptc4xmpExt',
539
539
  TABLE_DESC => 'XMP IPTC Extension',
540
540
  NOTES => q{
541
- This table contains tags defined by the IPTC Extension schema version 1.6
541
+ This table contains tags defined by the IPTC Extension schema version 1.7
542
542
  and IPTC Video Metadata version 1.3. The actual namespace prefix is
543
543
  "Iptc4xmpExt", but ExifTool shortens this for the family 1 group name. (See
544
544
  L<http://www.iptc.org/standards/photo-metadata/iptc-standard/> and
@@ -683,6 +683,7 @@ my %sImageRegion = ( # new in 1.5
683
683
  ProductName => { Writable => 'lang-alt' },
684
684
  ProductGTIN => { },
685
685
  ProductDescription => { Writable => 'lang-alt' },
686
+ ProductId => { }, # added in version 2022.1
686
687
  },
687
688
  List => 'Bag',
688
689
  },
@@ -1525,6 +1526,7 @@ my %sSubVersion = (
1525
1526
  ImageHistory => { Avoid => 1, Notes => 'different format from EXIF:ImageHistory' },
1526
1527
  LensCorrectionSettings => { },
1527
1528
  ImageUniqueID => { Avoid => 1 },
1529
+ picasawebGPhotoId => { }, #forum14108
1528
1530
  );
1529
1531
 
1530
1532
  # SWF namespace tags (ref PH)
@@ -1854,6 +1856,11 @@ my %sSubVersion = (
1854
1856
  MicroVideoVersion => { Writable => 'integer' },
1855
1857
  MicroVideoOffset => { Writable => 'integer' },
1856
1858
  MicroVideoPresentationTimestampUs => { Writable => 'integer' },
1859
+ shot_log_data => { #forum14108
1860
+ Name => 'ShotLogData',
1861
+ ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
1862
+ ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)',
1863
+ },
1857
1864
  );
1858
1865
 
1859
1866
  # Google creations namespace (ref PH)
@@ -1863,6 +1870,7 @@ my %sSubVersion = (
1863
1870
  NAMESPACE => 'GCreations',
1864
1871
  NOTES => 'Google creations tags.',
1865
1872
  CameraBurstID => { },
1873
+ Type => { Avoid => 1 },
1866
1874
  );
1867
1875
 
1868
1876
  # Google depth-map Device namespace (ref 13)
@@ -2066,6 +2074,25 @@ my %sSubVersion = (
2066
2074
  },
2067
2075
  );
2068
2076
 
2077
+ # hdr metadata namespace used by ACR 15.1
2078
+ %Image::ExifTool::XMP::hdr = (
2079
+ %xmpTableDefaults,
2080
+ GROUPS => { 1 => 'XMP-hdr', 2 => 'Image' },
2081
+ NAMESPACE => 'hdr_metadata',
2082
+ TABLE_DESC => 'XMP HDR Metadata',
2083
+ NOTES => q{
2084
+ HDR metadata namespace tags written by ACR 15.1. The actual namespace
2085
+ prefix is "hdr_metadata", which is the prefix recorded in the file, but
2086
+ ExifTool shortens this for the family 1 group name.
2087
+ },
2088
+ ccv_primaries_xy => { Name => 'CCVPrimariesXY' }, # (comma-separated string of 6 reals)
2089
+ ccv_white_xy => { Name => 'CCVWhiteXY' }, # (comma-separated string of 2 reals)
2090
+ ccv_min_luminance_nits => { Name => 'CCVMinLuminanceNits', Writable => 'real' },
2091
+ ccv_max_luminance_nits => { Name => 'CCVMaxLuminanceNits', Writable => 'real' },
2092
+ ccv_avg_luminance_nits => { Name => 'CCVAvgLuminanceNits', Writable => 'real' },
2093
+ scene_referred => { Name => 'SceneReferred', Writable => 'boolean' },
2094
+ );
2095
+
2069
2096
  # SVG namespace properties (ref 9)
2070
2097
  %Image::ExifTool::XMP::SVG = (
2071
2098
  GROUPS => { 0 => 'SVG', 1 => 'SVG', 2 => 'Image' },
@@ -2133,7 +2160,7 @@ This file contains definitions for less common XMP namespaces.
2133
2160
 
2134
2161
  =head1 AUTHOR
2135
2162
 
2136
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
2163
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
2137
2164
 
2138
2165
  This library is free software; you can redistribute it and/or modify it
2139
2166
  under the same terms as Perl itself.
@@ -869,7 +869,7 @@ information.
869
869
 
870
870
  =head1 AUTHOR
871
871
 
872
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
872
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
873
873
 
874
874
  This library is free software; you can redistribute it and/or modify it
875
875
  under the same terms as Perl itself.