exiftool_vendored 12.67.0 → 12.70.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +79 -10
  3. data/bin/MANIFEST +5 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +7 -7
  7. data/bin/exiftool +32 -27
  8. data/bin/lib/Image/ExifTool/CBOR.pm +18 -2
  9. data/bin/lib/Image/ExifTool/Canon.pm +87 -16
  10. data/bin/lib/Image/ExifTool/DJI.pm +3 -2
  11. data/bin/lib/Image/ExifTool/DNG.pm +25 -2
  12. data/bin/lib/Image/ExifTool/EXE.pm +54 -6
  13. data/bin/lib/Image/ExifTool/Exif.pm +175 -14
  14. data/bin/lib/Image/ExifTool/FujiFilm.pm +158 -20
  15. data/bin/lib/Image/ExifTool/GIF.pm +5 -1
  16. data/bin/lib/Image/ExifTool/Geotag.pm +16 -11
  17. data/bin/lib/Image/ExifTool/ID3.pm +70 -7
  18. data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  19. data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
  20. data/bin/lib/Image/ExifTool/Jpeg2000.pm +30 -15
  21. data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
  22. data/bin/lib/Image/ExifTool/Nikon.pm +82 -22
  23. data/bin/lib/Image/ExifTool/Olympus.pm +7 -1
  24. data/bin/lib/Image/ExifTool/PNG.pm +3 -1
  25. data/bin/lib/Image/ExifTool/Panasonic.pm +22 -9
  26. data/bin/lib/Image/ExifTool/Pentax.pm +6 -1
  27. data/bin/lib/Image/ExifTool/PhotoMechanic.pm +2 -1
  28. data/bin/lib/Image/ExifTool/QuickTime.pm +92 -55
  29. data/bin/lib/Image/ExifTool/README +14 -5
  30. data/bin/lib/Image/ExifTool/RIFF.pm +60 -10
  31. data/bin/lib/Image/ExifTool/Sony.pm +152 -46
  32. data/bin/lib/Image/ExifTool/TagLookup.pm +6955 -6713
  33. data/bin/lib/Image/ExifTool/TagNames.pod +878 -334
  34. data/bin/lib/Image/ExifTool/Text.pm +4 -5
  35. data/bin/lib/Image/ExifTool/Validate.pm +23 -20
  36. data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
  37. data/bin/lib/Image/ExifTool/WriteExif.pl +14 -4
  38. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +3 -0
  39. data/bin/lib/Image/ExifTool/WriteRIFF.pl +31 -6
  40. data/bin/lib/Image/ExifTool/Writer.pl +40 -14
  41. data/bin/lib/Image/ExifTool/XISF.pm +185 -0
  42. data/bin/lib/Image/ExifTool/XMP.pm +67 -2
  43. data/bin/lib/Image/ExifTool/XMP2.pl +35 -0
  44. data/bin/lib/Image/ExifTool.pm +92 -45
  45. data/bin/lib/Image/ExifTool.pod +14 -8
  46. data/bin/perl-Image-ExifTool.spec +6 -6
  47. data/lib/exiftool_vendored/version.rb +1 -1
  48. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7a6389f7140433c97eea74b3a6b428d8c5d940dc4d295741a9a69027ee561079
4
- data.tar.gz: b28eb642d02cf914b516e1e5e2a40588548b7ab77158a1cf78ee6b76334ad682
3
+ metadata.gz: 8660bdc38a746e24a73d1b5a0b167250bce83398c78d24f4a2ef736b9bb7a5a4
4
+ data.tar.gz: 8fc11e9218cf70d7ab1bf608b39bcd12693aea6c20bdaf3d31907a95ff21b626
5
5
  SHA512:
6
- metadata.gz: 0b6f0e36a66b21a6e6d9635484cba7d0ad9f94aabfede322548a0f7e31e100aa0c75766f4c0248fba3be575e734ef698b270086b5a35ba3c5164118090cc02f6
7
- data.tar.gz: 15859db49991094833a0e8cb4ac64604b8235abc48fdb0baea28f4d4c6a1260c9b241be4e4b4ceabc4ca840eb4da9386546f843913702488109ab2393fb1465f
6
+ metadata.gz: 77b2a89162d45e272bb27aa0481c57ea95fae1e677081aad86976accda1492f622e46d789c39818e4de31b1e1fa8fb951c4687a20ecfe7d5435a98df30b73a19
7
+ data.tar.gz: 9d59b5179a8b89b99456845bc087b643290efe2bcfddffbed73eb224b7fb7f669a43f1e5c29f60ae60bf3d00ac3142372cee21932c65d321e1868f35fa5e567e
data/bin/Changes CHANGED
@@ -4,9 +4,80 @@ ExifTool Version History
4
4
 
5
5
  RSS feed: https://exiftool.org/rss.xml
6
6
 
7
- Note: The most recent production release is Version 12.60. (Other versions are
7
+ Note: The most recent production release is Version 12.70. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Nov. 19, 2023 - Version 12.70 (production release)
11
+
12
+ - This marks the 20th anniversary of the initial ExifTool release!
13
+ - Added ability to read/delete C2PA CAI JUMBF metadata from TIFF-based images
14
+ (eg. DNG), QuickTime-based files (eg. MP4) and WebP images, and read JUMBF
15
+ from other RIFF-based files (eg. WAV, AVI), GIF images and ID3v2 metadata
16
+ - Added read/write support for JPH images
17
+ - Added ability to read Leica Q3 maker notes
18
+ - Added ability to recognize and write FujiFilm M-RAW RAF images (multiple raw
19
+ images in a single file) and the ability to read preview-less RAF images
20
+ - Added support for reading a number of obscure Microsoft EXIF tags
21
+ - Added a few new Sony lenses and support for the ILCE-9M3 (thanks Jos Roost)
22
+ - Added a couple of new Panasonic Leica lenses
23
+ - Added a couple of new Canon RF lenses (thanks Norbert Wasser)
24
+ - Added a number of new CPUType values for ELF executables
25
+ - Added some new Olympus CameraType values
26
+ - Decode a few more ID3v2.2 tags (github #142)
27
+ - Decode a few new Canon G5X Mark II tags (thanks Martin B.)
28
+ - Decode WB_RGGBLevels for a few more Nikon cameras
29
+ - Extract information from FujiFilm M-RAW header
30
+ - Improved decoding of a few Nikon Z tags (thanks Warren Hatch)
31
+ - Marked misspelt XMP-drone-dji:GPSLongtitude tag to Avoid when writing
32
+ - Changed RIFF MaxDataRate conversion to use SI prefixes by default
33
+ - Fixed decoding of unknown ColorBalance information for some Nikon models
34
+ - Fixed an incorrect Nikon Z LensID
35
+ - API Changes:
36
+ - Added ByteUnit option
37
+
38
+ Oct. 26, 2023 - Version 12.69
39
+
40
+ - Added support for DNG version 1.7.0.0
41
+ - Added a new XMP-GCamera tag
42
+ - Added a number of new Nikon Z lenses (thanks Warren Hatch and Stefan)
43
+ - Added a number of new XMP-crs tags
44
+ - Extract XML metadata from some Hasselblad images
45
+ - Tweaked -fast2 option to read metadata from inside mdat atom of HEIC images
46
+ - Patched FFF reader to be more tolerant of the mess made by incompetent
47
+ Hasselblad programmers (wrong IFD count for some values)
48
+ - Patched WebP reader to be more tolerant of the mess made by incompetent
49
+ Google programmers (EXIF with wrong header and XMP with wrong ID)
50
+ - Fixed writing of MakerNotes as a block to CR3 images (now properly stored in
51
+ the CMT3 chunk instead of the ExifIFD) and added ability to delete them from
52
+ the ExifIFD of CR3 images
53
+ - Fixed problem which could cause runtime error when copying MakerNotes from a
54
+ file that contains multiple maker note blocks
55
+ - Fixed problem which could cause "use of uninitialized variable" warnings
56
+ when reading images from some Nikon cameras
57
+ - Fixed List type for new XMP-photomech:CreatorIdentity tag
58
+
59
+ Oct. 16, 2023 - Version 12.68
60
+
61
+ - Added preliminary read support for XISF images
62
+ - Added the ability to delete CAI JUMBF metadata from PNG images
63
+ - Added support for writing Canon burst-roll CR3 images
64
+ - Added a new Nikon Z9 SubjectDetection value, and improved Zf support (thanks
65
+ Warren Hatch)
66
+ - Added a couple of new PentaxModelID values
67
+ - Added a few couple of new tag values for the Pentax K-3 Mark III Monochrome (github #226)
68
+ - Added a new XMP-photomech tag
69
+ - Added a new QuickTime ItemList tag
70
+ - Added a new Nikon LensID
71
+ - Added a new Canon LensType
72
+ - Support decimal values for FujiFilm ShadowTone and HighlightTone tags
73
+ - Decode some new Sony tags (thanks Jos Roost)
74
+ - Decode ShutterCount for Canon EOS R6 (thanks Martin B.)
75
+ - Decode QuickTime VideoFullRangeFlag
76
+ - Decode JPGCompression for the Nikon D3S
77
+ - Enhanced -geotag feature to allow writing QuickTime:GPSCoordinates
78
+ - Renamed Panasonic HDRShot tag to MergedImages (forum 15298)
79
+ - Fixed problem where some NEF files were misidentified as NRW
80
+
10
81
  Sept. 19, 2023 - Version 12.67
11
82
 
12
83
  - Added a new Pentax LensType (thanks dmont)
@@ -284,7 +355,7 @@ Dec. 6, 2022 - Version 12.52
284
355
  Nov. 21, 2022 - Version 12.51
285
356
 
286
357
  - Added a new Olympus LensType (thanks Herb)
287
- - Extract C2PA JUMBF metadata from PNG images and extract C2PA Salt values
358
+ - Extract C2PA CAI JUMBF metadata from PNG images and extract C2PA Salt values
288
359
  - Decode NikonSettings for Z9 firmware 3.0 (thanks Warren Hatch)
289
360
  - Decode additional camm metadata from Insta360 Pro2 MP4 videos
290
361
  - Improved Verbose output when writing Composite tags to add a "+" sign to
@@ -343,8 +414,6 @@ Nov. 8, 2022 - Version 12.50 (production release)
343
414
  - Fixed inconsistent year and time zone for Kenwood dashcam timed GPS in MP4
344
415
  videos
345
416
 
346
- History of older versions (back to Nov. 19, 2003 - Version 1.00) -->
347
-
348
417
  Oct. 19, 2022 - Version 12.49
349
418
 
350
419
  - Added read support for Windows ICO and CUR files
@@ -669,8 +738,8 @@ Oct. 16, 2021 - Version 12.33
669
738
 
670
739
  Sept. 30, 2021 - Version 12.32
671
740
 
672
- - Added support for CBOR-format metadata in JUMBF (note that JUMBF support is
673
- still experimental)
741
+ - Added support for CBOR-format metadata in CAI JUMBF (note that JUMBF support
742
+ is still experimental)
674
743
  - Added a new Nikon LensID
675
744
  - Added a new Pentax LensType
676
745
  - Decode timed GPS for two more dashcam formats
@@ -729,7 +798,7 @@ July 9, 2021 - Version 12.29
729
798
  - Improved a QuickTime "File format error" message to be more meaningful, and
730
799
  made it a minor error
731
800
  - Changed PNG writer to add EXIF before IDAT
732
- - Some changes the way JUMBF metadata is handled
801
+ - Some changes the way CAI JUMBF metadata is handled
733
802
  - Patched to read timed GPS from a different type of INSV videos
734
803
  - Patched a security issue
735
804
  - Fixed problem where ExifTool could hang when processing mebx timed metadata
@@ -805,7 +874,7 @@ Apr. 13, 2021 - Version 12.24
805
874
  - Decode a few new Panasonic and FujiFilm tags (thanks LibRaw and Greybeard)
806
875
  - Updated acdsee.config in distribution (thanks StarGeek)
807
876
  - Recognize AutoCAD DXF files
808
- - More work on experimental JUMBF read support
877
+ - More work on experimental CAI JUMBF read support
809
878
  - More work on experimental JPEG XL read/write support
810
879
  - Patched security vulnerability in DjVu reader
811
880
 
@@ -813,8 +882,8 @@ Apr. 1, 2021 - Version 12.23
813
882
 
814
883
  - Added support for Olympus ORI files
815
884
  - Added experimental read/write support for JPEG XL images
816
- - Added experimental read support for JUMBF metadata in JPEG and Jpeg2000
817
- images
885
+ - Added experimental read support for CAI (Content Authenticity Initiative)
886
+ JUMBF-format metadata in JPEG and Jpeg2000 images
818
887
  - Added built-in support for parsing GPS track from Denver ACG-8050 videos
819
888
  with the -ee option
820
889
  - Added a some new Sony lenses (thanks Jos Roost and LibRaw)
data/bin/MANIFEST CHANGED
@@ -179,6 +179,7 @@ html/TagNames/VCard.html
179
179
  html/TagNames/Vorbis.html
180
180
  html/TagNames/WPG.html
181
181
  html/TagNames/WTV.html
182
+ html/TagNames/XISF.html
182
183
  html/TagNames/XMP.html
183
184
  html/TagNames/ZIP.html
184
185
  html/TagNames/ZISRAW.html
@@ -432,6 +433,7 @@ lib/Image/ExifTool/WriteQuickTime.pl
432
433
  lib/Image/ExifTool/WriteRIFF.pl
433
434
  lib/Image/ExifTool/WriteXMP.pl
434
435
  lib/Image/ExifTool/Writer.pl
436
+ lib/Image/ExifTool/XISF.pm
435
437
  lib/Image/ExifTool/XMP.pm
436
438
  lib/Image/ExifTool/XMP2.pl
437
439
  lib/Image/ExifTool/XMPStruct.pl
@@ -916,6 +918,8 @@ t/Writer_6.out
916
918
  t/Writer_60.out
917
919
  t/Writer_7.out
918
920
  t/Writer_9.out
921
+ t/XISF.t
922
+ t/XISF_2.out
919
923
  t/XMP.t
920
924
  t/XMP_10.out
921
925
  t/XMP_11.out
@@ -1144,6 +1148,7 @@ t/images/Vorbis.ogg
1144
1148
  t/images/WPG.wpg
1145
1149
  t/images/WTV.wtv
1146
1150
  t/images/Writer.jpg
1151
+ t/images/XISF.xisf
1147
1152
  t/images/XMP.inx
1148
1153
  t/images/XMP.jpg
1149
1154
  t/images/XMP.svg
data/bin/META.json CHANGED
@@ -50,5 +50,5 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "12.67"
53
+ "version" : "12.70"
54
54
  }
data/bin/META.yml CHANGED
@@ -31,4 +31,4 @@ recommends:
31
31
  Time::HiRes: 0
32
32
  requires:
33
33
  perl: 5.004
34
- version: 12.67
34
+ version: 12.70
data/bin/README CHANGED
@@ -51,11 +51,11 @@ supported by ExifTool (r = read, w = write, c = create):
51
51
  DCP r/w | ICO r | MPG r | PSB r/w | WV r
52
52
  DCR r | ICS r | MPO r/w | PSD r/w | X3F r/w
53
53
  DFONT r | IDML r | MQV r/w | PSP r | XCF r
54
- DIVX r | IIQ r/w | MRC r | QTIF r/w | XLS r
55
- DJVU r | IND r/w | MRW r/w | R3D r | XLSX r
56
- DLL r | INSP r/w | MXF r | RA r | XMP r/w/c
57
- DNG r/w | INSV r | NEF r/w | RAF r/w | ZIP r
58
- DOC r | INX r | NKSC r/w | RAM r |
54
+ DIVX r | IIQ r/w | MRC r | QTIF r/w | XISF r
55
+ DJVU r | IND r/w | MRW r/w | R3D r | XLS r
56
+ DLL r | INSP r/w | MXF r | RA r | XLSX r
57
+ DNG r/w | INSV r | NEF r/w | RAF r/w | XMP r/w/c
58
+ DOC r | INX r | NKSC r/w | RAM r | ZIP r
59
59
  DOCX r | ISO r | NRW r/w | RAR r |
60
60
 
61
61
  Meta Information
@@ -108,8 +108,8 @@ your home directory, then you would type the following commands in a
108
108
  terminal window to extract and run ExifTool:
109
109
 
110
110
  cd ~/Desktop
111
- gzip -dc Image-ExifTool-12.67.tar.gz | tar -xf -
112
- cd Image-ExifTool-12.67
111
+ gzip -dc Image-ExifTool-12.70.tar.gz | tar -xf -
112
+ cd Image-ExifTool-12.70
113
113
  ./exiftool t/images/ExifTool.jpg
114
114
 
115
115
  Note: These commands extract meta information from one of the test images.
data/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '12.67';
14
+ my $version = '12.70';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -4665,11 +4665,11 @@ supported by ExifTool (r = read, w = write, c = create):
4665
4665
  DCP r/w | ICO r | MPG r | PSB r/w | WV r
4666
4666
  DCR r | ICS r | MPO r/w | PSD r/w | X3F r/w
4667
4667
  DFONT r | IDML r | MQV r/w | PSP r | XCF r
4668
- DIVX r | IIQ r/w | MRC r | QTIF r/w | XLS r
4669
- DJVU r | IND r/w | MRW r/w | R3D r | XLSX r
4670
- DLL r | INSP r/w | MXF r | RA r | XMP r/w/c
4671
- DNG r/w | INSV r | NEF r/w | RAF r/w | ZIP r
4672
- DOC r | INX r | NKSC r/w | RAM r |
4668
+ DIVX r | IIQ r/w | MRC r | QTIF r/w | XISF r
4669
+ DJVU r | IND r/w | MRW r/w | R3D r | XLS r
4670
+ DLL r | INSP r/w | MXF r | RA r | XLSX r
4671
+ DNG r/w | INSV r | NEF r/w | RAF r/w | XMP r/w/c
4672
+ DOC r | INX r | NKSC r/w | RAM r | ZIP r
4673
4673
  DOCX r | ISO r | NRW r/w | RAR r |
4674
4674
 
4675
4675
  Meta Information
@@ -4738,7 +4738,7 @@ L<Input-output text formatting|/Input-output text formatting>
4738
4738
  -n (--printConv) No print conversion
4739
4739
  -p FMTFILE (-printFormat) Print output in specified format
4740
4740
  -php Export tags as a PHP Array
4741
- -s[NUM] (-short) Short output format
4741
+ -s[NUM] (-short) Short output format (-s for tag names)
4742
4742
  -S (-veryShort) Very short output format
4743
4743
  -sep STR (-separator) Set separator string for list items
4744
4744
  -sort Sort output alphabetically
@@ -4951,7 +4951,7 @@ while C<-all:all=> deletes entire blocks.
4951
4951
  application segments which are not associated with another deletable group.
4952
4952
  For example, specifying C<-APP14:All=> will NOT delete the APP14 "Adobe"
4953
4953
  segment because this is accomplished with C<-Adobe:All>. But note that
4954
- these unnamed APP segments may not be excluded with C<--APPxx:all>) when
4954
+ these unnamed APP segments may not be excluded with C<--APPxx:all> when
4955
4955
  deleting all information.
4956
4956
 
4957
4957
  6) When shifting a value, the shift is applied to the original value of the
@@ -5582,7 +5582,7 @@ with this command:
5582
5582
 
5583
5583
  produces output like this:
5584
5584
 
5585
- -- Generated by ExifTool 12.67 --
5585
+ -- Generated by ExifTool 12.70 --
5586
5586
  File: a.jpg - 2003:10:31 15:44:19
5587
5587
  (f/5.6, 1/60s, ISO 100)
5588
5588
  File: b.jpg - 2006:05:23 11:57:38
@@ -6418,10 +6418,14 @@ from the track log, and they are supported by the destination metadata
6418
6418
  format): GPSLatitude, GPSLatitudeRef, GPSLongitude, GPSLongitudeRef,
6419
6419
  GPSAltitude, GPSAltitudeRef, GPSDateStamp, GPSTimeStamp, GPSDateTime,
6420
6420
  GPSTrack, GPSTrackRef, GPSSpeed, GPSSpeedRef, GPSImgDirection,
6421
- GPSImgDirectionRef, GPSPitch, GPSRoll, AmbientTemperature and
6422
- CameraElevationAngle. By default, tags are created in EXIF, and updated in
6423
- XMP only if they already exist. However, C<EXIF:Geotime> or C<XMP:Geotime>
6424
- may be specified to write only EXIF or XMP tags respectively. Note that
6421
+ GPSImgDirectionRef, GPSPitch, GPSRoll, GPSCoordinates, AmbientTemperature
6422
+ and CameraElevationAngle. By default, in image files tags are created in
6423
+ EXIF, and updated in XMP only if they already exist. In QuickTime-format
6424
+ files GPSCoordinates is created in the preferred location (ItemList by
6425
+ default) as well as in XMP. However, C<EXIF:Geotime>, C<XMP:Geotime> or
6426
+ C<QuickTime:Geotime> may be specified to write to write only to one group.
6427
+ Also, C<ItemList:Geotime>, C<Keys:Geotime> or C<UserData:Geotime> may be
6428
+ used to write to a specific location in QuickTime-format files. Note that
6425
6429
  GPSPitch and GPSRoll are non-standard, and require user-defined tags in
6426
6430
  order to be written.
6427
6431
 
@@ -6544,11 +6548,12 @@ options on the command line.
6544
6548
 
6545
6549
  Load specified configuration file instead of the default ".ExifTool_config".
6546
6550
  If used, this option must come before all other arguments on the command
6547
- line and applies to all B<-execute>'d commands. The I<CFGFILE> must exist
6548
- relative to the current working directory or the exiftool application
6549
- directory unless an absolute path is specified. Loading of the default
6550
- config file may be disabled by setting I<CFGFILE> to an empty string (ie.
6551
- ""). See L<https://exiftool.org/config.html> and
6551
+ line and applies to all B<-execute>'d commands. This file is used to create
6552
+ user-defined tags as well as set default ExifTool options. The I<CFGFILE>
6553
+ must exist relative to the current working directory or the exiftool
6554
+ application directory unless an absolute path is specified. Loading of the
6555
+ default config file may be disabled by setting I<CFGFILE> to an empty string
6556
+ (ie. ""). See L<https://exiftool.org/config.html> and
6552
6557
  config_files/example.config in the full ExifTool distribution for details
6553
6558
  about the configuration file syntax.
6554
6559
 
@@ -6588,15 +6593,15 @@ option no longer suppresses the output "{readyNUM}" message.
6588
6593
 
6589
6594
  Read tags from an alternate source file. Among other things, this allows
6590
6595
  tags from different files to be compared and combined using the B<-if> and
6591
- B<-p> options. Tags from alternate files are accessed via the corresponding
6592
- family 8 group name (eg. C<File1:TAG> for the B<-file1> option, C<File2:TAG>
6593
- for B<-file2>, etc). I<ALTFILE> may contain filename formatting codes like
6594
- the B<-w> option (%d, %f, etc), and/or tag names with a leading C<$> symbol
6595
- to access tags from the source file in the same way as the B<-p> option (so
6596
- any other dollar symbol in the file name must be doubled, eg.
6597
- C<money$$.jpg>). For example, assuming that the OriginalFileName tag has
6598
- been set in the edited file, a command to copy Rights from the original file
6599
- could look like this:
6596
+ B<-p> options. I<NUM> is any string of digits. Tags from alternate files
6597
+ are accessed via the corresponding family 8 group name (eg. C<File1:TAG> for
6598
+ the B<-file1> option, C<File2:TAG> for B<-file2>, etc). I<ALTFILE> may
6599
+ contain filename formatting codes like the B<-w> option (%d, %f, etc),
6600
+ and/or tag names with a leading C<$> symbol to access tags from the source
6601
+ file in the same way as the B<-p> option (so any other dollar symbol in the
6602
+ file name must be doubled, eg. C<money$$.jpg>). For example, assuming that
6603
+ the OriginalFileName tag has been set in the edited file, a command to copy
6604
+ Rights from the original file could look like this:
6600
6605
 
6601
6606
  exiftool -file1 '$originalfilename' '-rights<file1:rights' edited.jpg
6602
6607
 
@@ -7,6 +7,7 @@
7
7
  #
8
8
  # References: 1) https://c2pa.org/public-draft/
9
9
  # 2) https://datatracker.ietf.org/doc/html/rfc7049
10
+ # 3) https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml
10
11
  #------------------------------------------------------------------------------
11
12
 
12
13
  package Image::ExifTool::CBOR;
@@ -15,7 +16,7 @@ use vars qw($VERSION);
15
16
  use Image::ExifTool qw(:DataAccess :Utils);
16
17
  use Image::ExifTool::JSON;
17
18
 
18
- $VERSION = '1.01';
19
+ $VERSION = '1.02';
19
20
 
20
21
  sub ProcessCBOR($$$);
21
22
  sub ReadCBORValue($$$$);
@@ -28,15 +29,27 @@ my %cborType6 = (
28
29
  3 => 'negative bignum',
29
30
  4 => 'decimal fraction',
30
31
  5 => 'bigfloat',
32
+ 16 => 'COSE Encrypt0', #3 (COSE Single Recipient Encrypted Data Object)
33
+ 17 => 'COSE Mac0', #3 (COSE Mac w/o Recipients Object)
34
+ 18 => 'COSE Sign1', #3 (COSE Single Signer Data Object)
35
+ 19 => 'COSE Countersignature', #3 (COSE standalone V2 countersignature)
31
36
  21 => 'expected base64url encoding',
32
37
  22 => 'expected base64 encoding',
33
38
  23 => 'expected base16 encoding',
34
39
  24 => 'encoded CBOR data',
40
+ 25 => 'string number', #3 (reference the nth previously seen string)
41
+ 26 => 'serialized Perl', #3 (Serialised Perl object with classname and constructor arguments)
42
+ 27 => 'serialized code', #3 (Serialised language-independent object with type name and constructor arguments)
43
+ 28 => 'shared value', #3 (mark value as (potentially) shared)
44
+ 29 => 'shared value number', #3 (reference nth marked value)
45
+ 30 => 'rational', #3 (Rational number)
46
+ 31 => 'missing array value', #3 (Absent value in a CBOR Array)
35
47
  32 => 'URI',
36
48
  33 => 'base64url',
37
49
  34 => 'base64',
38
50
  35 => 'regular expression',
39
51
  36 => 'MIME message',
52
+ # (lots more after this in ref 3, but don't include them unless we see them)
40
53
  55799 => 'CBOR magic number',
41
54
  );
42
55
 
@@ -212,7 +225,7 @@ sub ReadCBORValue($$$$)
212
225
  {
213
226
  $val = $$val[1] * ($num == 4 ? 10 : 2) ** $$val[0];
214
227
  }
215
- } elsif ($fmt == 7) {
228
+ } elsif ($fmt == 7) {
216
229
  if ($dat == 31) {
217
230
  undef $val; # "break" = end of indefinite array/hash (not used in C2PA)
218
231
  } elsif ($dat < 24) {
@@ -263,6 +276,7 @@ sub ProcessCBOR($$$)
263
276
  my ($val, $err, $tag, $i);
264
277
 
265
278
  $et->VerboseDir('CBOR', undef, $$dirInfo{DirLen});
279
+ SetByteOrder('MM');
266
280
 
267
281
  $$et{cbor_datapos} = $$dirInfo{DataPos} + $$dirInfo{Base};
268
282
 
@@ -320,6 +334,8 @@ under the same terms as Perl itself.
320
334
 
321
335
  =item L<https://datatracker.ietf.org/doc/html/rfc7049>
322
336
 
337
+ =item L<https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml>
338
+
323
339
  =back
324
340
 
325
341
  =head1 SEE ALSO
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.68';
91
+ $VERSION = '4.71';
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)
@@ -490,6 +490,7 @@ $VERSION = '4.68';
490
490
  '368.11' => 'Sigma 70mm f/2.8 DG Macro', #IB (A018)
491
491
  '368.12' => 'Sigma 18-35mm f/1.8 DC HSM | A', #50
492
492
  '368.13' => 'Sigma 24-105mm f/4 DG OS HSM | A', #forum3833
493
+ '368.14' => 'Sigma 18-300mm f/3.5-6.3 DC Macro OS HSM | C', #forum15280 (014)
493
494
  # Note: LensType 488 (0x1e8) is reported as 232 (0xe8) in 7D CameraSettings
494
495
  488 => 'Canon EF-S 15-85mm f/3.5-5.6 IS USM', #PH
495
496
  489 => 'Canon EF 70-300mm f/4-5.6L IS USM', #Gerald Kapounek
@@ -610,22 +611,23 @@ $VERSION = '4.68';
610
611
  '61182.35' => 'Canon RF 600mm F4L IS USM', #GiaZopatti
611
612
  '61182.36' => 'Canon RF 600mm F4L IS USM + RF1.4x', #42
612
613
  '61182.37' => 'Canon RF 600mm F4L IS USM + RF2x', #42
613
- '61182.38' => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
614
- '61182.39' => 'Canon RF 800mm F5.6L IS USM', #42
615
- '61182.40' => 'Canon RF 800mm F5.6L IS USM + RF1.4x', #42
616
- '61182.41' => 'Canon RF 800mm F5.6L IS USM + RF2x', #42
617
- '61182.42' => 'Canon RF 1200mm F8L IS USM', #42
618
- '61182.43' => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
619
- '61182.44' => 'Canon RF 1200mm F8L IS USM + RF2x', #42
620
- '61182.45' => 'Canon RF 135mm F1.8 L IS USM', #42
621
- '61182.46' => 'Canon RF 24-50mm F4.5-6.3 IS STM', #42
622
- '61182.47' => 'Canon RF-S 55-210mm F5-7.1 IS STM', #42
623
- '61182.48' => 'Canon RF 100-300mm F2.8L IS USM', #42
624
- '61182.49' => 'Canon RF 100-300mm F2.8L IS USM + RF1.4x', #42
625
- '61182.50' => 'Canon RF 100-300mm F2.8L IS USM + RF2x', #42
626
- '61182.51' => 'Canon RF 28mm F2.8 STM', #42
614
+ '61182.38' => 'Canon RF 800mm F5.6L IS USM', #42
615
+ '61182.39' => 'Canon RF 800mm F5.6L IS USM + RF1.4x', #42
616
+ '61182.40' => 'Canon RF 800mm F5.6L IS USM + RF2x', #42
617
+ '61182.41' => 'Canon RF 1200mm F8L IS USM', #42
618
+ '61182.42' => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
619
+ '61182.43' => 'Canon RF 1200mm F8L IS USM + RF2x', #42
620
+ '61182.44' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH
621
+ '61182.45' => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
622
+ '61182.46' => 'Canon RF 135mm F1.8 L IS USM', #42
623
+ '61182.47' => 'Canon RF 24-50mm F4.5-6.3 IS STM', #42
624
+ '61182.48' => 'Canon RF-S 55-210mm F5-7.1 IS STM', #42
625
+ '61182.49' => 'Canon RF 100-300mm F2.8L IS USM', #42
626
+ '61182.50' => 'Canon RF 100-300mm F2.8L IS USM + RF1.4x', #42
627
+ '61182.51' => 'Canon RF 100-300mm F2.8L IS USM + RF2x', #42
628
+ '61182.52' => 'Canon RF 10-20mm F4 L IS STM', #42
629
+ '61182.53' => 'Canon RF 28mm F2.8 STM', #42
627
630
  # we need the RFLensType values for the following...
628
- '61182.52' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH (NC)
629
631
  65535 => 'n/a',
630
632
  );
631
633
 
@@ -1389,6 +1391,16 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
1389
1391
  Condition => '$$self{Model} =~ /\b(1200D|REBEL T5|Kiss X70)\b/',
1390
1392
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo60D' },
1391
1393
  },
1394
+ {
1395
+ Name => 'CanonCameraInfoR6',
1396
+ Condition => '$$self{Model} =~ /\bEOS R6$/',
1397
+ SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoR6' },
1398
+ },
1399
+ {
1400
+ Name => 'CanonCameraInfoG5XII',
1401
+ Condition => '$$self{Model} =~ /\bG5 X Mark II$/',
1402
+ SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoG5XII' },
1403
+ },
1392
1404
  {
1393
1405
  Name => 'CanonCameraInfoPowerShot',
1394
1406
  # valid if format is int32u[138] or int32u[148]
@@ -4695,6 +4707,57 @@ my %ciMaxFocal = (
4695
4707
  },
4696
4708
  );
4697
4709
 
4710
+ %Image::ExifTool::Canon::CameraInfoR6 = (
4711
+ %binaryDataAttrs,
4712
+ FIRST_ENTRY => 0,
4713
+ PRIORITY => 0,
4714
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4715
+ NOTES => 'CameraInfo tags for the EOS R6.',
4716
+ 0x0af1 => { #forum15210
4717
+ Name => 'ShutterCount',
4718
+ Format => 'int32u',
4719
+ Notes => 'includes electronic + mechanical shutter',
4720
+ },
4721
+ );
4722
+
4723
+ # ref https://exiftool.org/forum/index.php?topic=15356.0
4724
+ %Image::ExifTool::Canon::CameraInfoG5XII = (
4725
+ %binaryDataAttrs,
4726
+ FIRST_ENTRY => 0,
4727
+ PRIORITY => 0,
4728
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4729
+ NOTES => 'CameraInfo tags for the EOS R6.',
4730
+ 0x0293 => {
4731
+ Name => 'ShutterCount',
4732
+ Format => 'int32u',
4733
+ Notes => 'includes electronic + mechanical shutter',
4734
+ # - advances by 1 for each photo file, regardless of mechanical or electronic shutter
4735
+ # - does not advance for regular video files
4736
+ # - advances for time lapse video files
4737
+ # - creating a new directory or resetting the counter from the menu doesn't affect this shutter count
4738
+ },
4739
+ 0x0b21 => {
4740
+ Name => 'DirectoryIndex',
4741
+ Groups => { 2 => 'Image' },
4742
+ Format => 'int32u',
4743
+ },
4744
+ 0x0b2d => {
4745
+ Name => 'FileIndex',
4746
+ Format => 'int32u',
4747
+ Groups => { 2 => 'Image' },
4748
+ Format => 'int32u',
4749
+ ValueConv => '$val + 1',
4750
+ ValueConvInv => '$val - 1',
4751
+ },
4752
+ #0x0b39 => {
4753
+ # Name => 'DirectoryIndex',
4754
+ # Groups => { 2 => 'Image' },
4755
+ # Format => 'int32u',
4756
+ # ValueConv => '$val - 1',
4757
+ # ValueConvInv => '$val + 1',
4758
+ #},
4759
+ );
4760
+
4698
4761
  # Canon camera information for 70D (MakerNotes tag 0x0d) (ref PH)
4699
4762
  %Image::ExifTool::Canon::CameraInfo70D = (
4700
4763
  %binaryDataAttrs,
@@ -6879,6 +6942,7 @@ my %ciMaxFocal = (
6879
6942
  298 => 'Canon RF 1200mm F8L IS USM', #42
6880
6943
  299 => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
6881
6944
  300 => 'Canon RF 1200mm F8L IS USM + RF2x', #42
6945
+ 301 => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH
6882
6946
  302 => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
6883
6947
  303 => 'Canon RF 135mm F1.8 L IS USM', #42
6884
6948
  304 => 'Canon RF 24-50mm F4.5-6.3 IS STM', #42
@@ -6886,6 +6950,7 @@ my %ciMaxFocal = (
6886
6950
  306 => 'Canon RF 100-300mm F2.8L IS USM', #42
6887
6951
  307 => 'Canon RF 100-300mm F2.8L IS USM + RF1.4x', #42
6888
6952
  308 => 'Canon RF 100-300mm F2.8L IS USM + RF2x', #42
6953
+ 312 => 'Canon RF 10-20mm F4 L IS STM', #42
6889
6954
  313 => 'Canon RF 28mm F2.8 STM', #42
6890
6955
  # Note: add new RF lenses to %canonLensTypes with ID 61182
6891
6956
  },
@@ -9081,8 +9146,14 @@ my %filterConv = (
9081
9146
  CMT3 => { # (CR3 files)
9082
9147
  Name => 'MakerNoteCanon',
9083
9148
  PreservePadding => 1,
9149
+ Writable => 'undef', # (writable directory!)
9150
+ # (note that ExifTool 12.68 and earlier lacked the ability to write this as a block,
9151
+ # and would instead add the maker notes the the CMT2 ExifIFD. To remove these
9152
+ # incorrectly-placed maker notes, use "exiftool -exififd:makernotes= FILE")
9153
+ MakerNotes => 1,
9084
9154
  SubDirectory => {
9085
9155
  TagTable => 'Image::ExifTool::Canon::Main',
9156
+ DirName => 'MakerNotes', # (necessary for mechanism that prevents these from being deleted)
9086
9157
  ProcessProc => \&ProcessCMT3,
9087
9158
  WriteProc => \&Image::ExifTool::WriteTIFF,
9088
9159
  },
@@ -16,7 +16,7 @@ use Image::ExifTool::Exif;
16
16
  use Image::ExifTool::XMP;
17
17
  use Image::ExifTool::GPS;
18
18
 
19
- $VERSION = '1.08';
19
+ $VERSION = '1.09';
20
20
 
21
21
  sub ProcessDJIInfo($$$);
22
22
 
@@ -143,9 +143,10 @@ my %convFloat2 = (
143
143
  PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
144
144
  PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lat")',
145
145
  },
146
- GpsLongtitude => { # (sic)
146
+ GpsLongtitude => { # [sic] (misspelt in DJI original file)
147
147
  Name => 'GPSLongtitude',
148
148
  Writable => 'real',
149
+ Avoid => 1, # (in case someone tries to write "GPSLong*")
149
150
  PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
150
151
  PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lon")',
151
152
  },
@@ -17,7 +17,7 @@ use Image::ExifTool::Exif;
17
17
  use Image::ExifTool::MakerNotes;
18
18
  use Image::ExifTool::CanonRaw;
19
19
 
20
- $VERSION = '1.23';
20
+ $VERSION = '1.24';
21
21
 
22
22
  sub ProcessOriginalRaw($$$);
23
23
  sub ProcessAdobeData($$$);
@@ -120,6 +120,25 @@ sub WriteAdobeStuff($$$);
120
120
  },
121
121
  );
122
122
 
123
+ # (DNG 1.7)
124
+ %Image::ExifTool::DNG::ImageSeq = (
125
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
126
+ 0 => { Name => 'SeqID', Format => 'var_string' },
127
+ 1 => { Name => 'SeqType', Format => 'var_string' },
128
+ 2 => { Name => 'SeqFrameInfo', Format => 'var_string' },
129
+ 3 => { Name => 'SeqIndex', Format => 'int32u' },
130
+ 7 => { Name => 'SeqCount', Format => 'int32u' },
131
+ 11 => { Name => 'SeqFinal', Format => 'int8u', PrintConv => { 0 => 'No', 1 => 'Yes' } },
132
+ );
133
+
134
+ # (DNG 1.7)
135
+ %Image::ExifTool::DNG::ProfileDynamicRange = (
136
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
137
+ 0 => { Name => 'PDRVersion', Format => 'int16u' },
138
+ 2 => { Name => 'DynamicRange', Format => 'int16u', PrintConv => { 0 => 'Standard', 1 => 'High' } },
139
+ 4 => { Name => 'HintMaxOutputValue', Format => 'float' },
140
+ );
141
+
123
142
  # fill in maker notes
124
143
  {
125
144
  my $tagInfo;
@@ -786,7 +805,11 @@ sub ProcessAdobeMakN($$$)
786
805
  return 1 unless $$tagInfo{Writable};
787
806
  }
788
807
  $val = substr($$dataPt, 20) unless defined $val;
789
- $et->FoundTag($tagInfo, $val);
808
+ my $key = $et->FoundTag($tagInfo, $val);
809
+ if ($$et{MAKER_NOTE_FIXUP}) {
810
+ $$et{TAG_EXTRA}{$key}{Fixup} = $$et{MAKER_NOTE_FIXUP};
811
+ delete $$et{MAKER_NOTE_FIXUP};
812
+ }
790
813
  }
791
814
  }
792
815
  return 1;