exiftool-vendored.exe 12.67.0 → 12.70.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 (42) hide show
  1. package/bin/exiftool_files/Changes +79 -10
  2. package/bin/exiftool_files/README +7 -7
  3. package/bin/exiftool_files/exiftool.pl +37 -31
  4. package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +18 -2
  5. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +87 -16
  6. package/bin/exiftool_files/lib/Image/ExifTool/DJI.pm +3 -2
  7. package/bin/exiftool_files/lib/Image/ExifTool/DNG.pm +25 -2
  8. package/bin/exiftool_files/lib/Image/ExifTool/EXE.pm +54 -6
  9. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +175 -14
  10. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +158 -20
  11. package/bin/exiftool_files/lib/Image/ExifTool/GIF.pm +5 -1
  12. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +16 -11
  13. package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +70 -7
  14. package/bin/exiftool_files/lib/Image/ExifTool/InDesign.pm +1 -1
  15. package/bin/exiftool_files/lib/Image/ExifTool/JPEG.pm +1 -1
  16. package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +30 -15
  17. package/bin/exiftool_files/lib/Image/ExifTool/MakerNotes.pm +2 -2
  18. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +82 -22
  19. package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +7 -1
  20. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +3 -1
  21. package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +22 -9
  22. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +6 -1
  23. package/bin/exiftool_files/lib/Image/ExifTool/PhotoMechanic.pm +2 -1
  24. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +92 -55
  25. package/bin/exiftool_files/lib/Image/ExifTool/README +14 -5
  26. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +60 -10
  27. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +152 -46
  28. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +6955 -6713
  29. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +878 -334
  30. package/bin/exiftool_files/lib/Image/ExifTool/Text.pm +4 -5
  31. package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +23 -20
  32. package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
  33. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +14 -4
  34. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +3 -0
  35. package/bin/exiftool_files/lib/Image/ExifTool/WriteRIFF.pl +31 -6
  36. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +40 -14
  37. package/bin/exiftool_files/lib/Image/ExifTool/XISF.pm +185 -0
  38. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +67 -2
  39. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +35 -0
  40. package/bin/exiftool_files/lib/Image/ExifTool.pm +92 -45
  41. package/bin/exiftool_files/lib/Image/ExifTool.pod +14 -8
  42. package/package.json +3 -3
@@ -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)
@@ -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.
@@ -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;
@@ -4673,11 +4673,11 @@ DESCRIPTION
4673
4673
  DCP r/w | ICO r | MPG r | PSB r/w | WV r
4674
4674
  DCR r | ICS r | MPO r/w | PSD r/w | X3F r/w
4675
4675
  DFONT r | IDML r | MQV r/w | PSP r | XCF r
4676
- DIVX r | IIQ r/w | MRC r | QTIF r/w | XLS r
4677
- DJVU r | IND r/w | MRW r/w | R3D r | XLSX r
4678
- DLL r | INSP r/w | MXF r | RA r | XMP r/w/c
4679
- DNG r/w | INSV r | NEF r/w | RAF r/w | ZIP r
4680
- DOC r | INX r | NKSC r/w | RAM r |
4676
+ DIVX r | IIQ r/w | MRC r | QTIF r/w | XISF r
4677
+ DJVU r | IND r/w | MRW r/w | R3D r | XLS r
4678
+ DLL r | INSP r/w | MXF r | RA r | XLSX r
4679
+ DNG r/w | INSV r | NEF r/w | RAF r/w | XMP r/w/c
4680
+ DOC r | INX r | NKSC r/w | RAM r | ZIP r
4681
4681
  DOCX r | ISO r | NRW r/w | RAR r |
4682
4682
 
4683
4683
  Meta Information
@@ -4745,7 +4745,7 @@ OPTIONS
4745
4745
  -n (--printConv) No print conversion
4746
4746
  -p FMTFILE (-printFormat) Print output in specified format
4747
4747
  -php Export tags as a PHP Array
4748
- -s[NUM] (-short) Short output format
4748
+ -s[NUM] (-short) Short output format (-s for tag names)
4749
4749
  -S (-veryShort) Very short output format
4750
4750
  -sep STR (-separator) Set separator string for list items
4751
4751
  -sort Sort output alphabetically
@@ -5604,7 +5604,7 @@ OPTIONS
5604
5604
 
5605
5605
  produces output like this:
5606
5606
 
5607
- -- Generated by ExifTool 12.67 --
5607
+ -- Generated by ExifTool 12.70 --
5608
5608
  File: a.jpg - 2003:10:31 15:44:19
5609
5609
  (f/5.6, 1/60s, ISO 100)
5610
5610
  File: b.jpg - 2006:05:23 11:57:38
@@ -6434,12 +6434,17 @@ OPTIONS
6434
6434
  GPSLongitude, GPSLongitudeRef, GPSAltitude, GPSAltitudeRef,
6435
6435
  GPSDateStamp, GPSTimeStamp, GPSDateTime, GPSTrack, GPSTrackRef,
6436
6436
  GPSSpeed, GPSSpeedRef, GPSImgDirection, GPSImgDirectionRef,
6437
- GPSPitch, GPSRoll, AmbientTemperature and CameraElevationAngle. By
6438
- default, tags are created in EXIF, and updated in XMP only if they
6439
- already exist. However, "EXIF:Geotime" or "XMP:Geotime" may be
6440
- specified to write only EXIF or XMP tags respectively. Note that
6441
- GPSPitch and GPSRoll are non-standard, and require user-defined
6442
- tags in order to be written.
6437
+ GPSPitch, GPSRoll, GPSCoordinates, AmbientTemperature and
6438
+ CameraElevationAngle. By default, in image files tags are created
6439
+ in EXIF, and updated in XMP only if they already exist. In
6440
+ QuickTime-format files GPSCoordinates is created in the preferred
6441
+ location (ItemList by default) as well as in XMP. However,
6442
+ "EXIF:Geotime", "XMP:Geotime" or "QuickTime:Geotime" may be
6443
+ specified to write to write only to one group. Also,
6444
+ "ItemList:Geotime", "Keys:Geotime" or "UserData:Geotime" may be
6445
+ used to write to a specific location in QuickTime-format files.
6446
+ Note that GPSPitch and GPSRoll are non-standard, and require
6447
+ user-defined tags in order to be written.
6443
6448
 
6444
6449
  The "Geosync" tag may be used to specify a time correction which is
6445
6450
  applied to each "Geotime" value for synchronization with GPS time.
@@ -6548,13 +6553,14 @@ OPTIONS
6548
6553
  Load specified configuration file instead of the default
6549
6554
  ".ExifTool_config". If used, this option must come before all other
6550
6555
  arguments on the command line and applies to all -execute'd
6551
- commands. The *CFGFILE* must exist relative to the current working
6552
- directory or the exiftool application directory unless an absolute
6553
- path is specified. Loading of the default config file may be
6554
- disabled by setting *CFGFILE* to an empty string (ie. ""). See
6555
- <https://exiftool.org/config.html> and config_files/example.config
6556
- in the full ExifTool distribution for details about the
6557
- configuration file syntax.
6556
+ commands. This file is used to create user-defined tags as well as
6557
+ set default ExifTool options. The *CFGFILE* must exist relative to
6558
+ the current working directory or the exiftool application directory
6559
+ unless an absolute path is specified. Loading of the default config
6560
+ file may be disabled by setting *CFGFILE* to an empty string (ie.
6561
+ ""). See <https://exiftool.org/config.html> and
6562
+ config_files/example.config in the full ExifTool distribution for
6563
+ details about the configuration file syntax.
6558
6564
 
6559
6565
  -echo[*NUM*] *TEXT*
6560
6566
  Echo *TEXT* to stdout (-echo or -echo1) or stderr (-echo2). Text is
@@ -6589,16 +6595,16 @@ OPTIONS
6589
6595
  -file*NUM* *ALTFILE*
6590
6596
  Read tags from an alternate source file. Among other things, this
6591
6597
  allows tags from different files to be compared and combined using
6592
- the -if and -p options. Tags from alternate files are accessed via
6593
- the corresponding family 8 group name (eg. "File1:TAG" for the
6594
- -file1 option, "File2:TAG" for -file2, etc). *ALTFILE* may contain
6595
- filename formatting codes like the -w option (%d, %f, etc), and/or
6596
- tag names with a leading "$" symbol to access tags from the source
6597
- file in the same way as the -p option (so any other dollar symbol
6598
- in the file name must be doubled, eg. "money$$.jpg"). For example,
6599
- assuming that the OriginalFileName tag has been set in the edited
6600
- file, a command to copy Rights from the original file could look
6601
- like this:
6598
+ the -if and -p options. *NUM* is any string of digits. Tags from
6599
+ alternate files are accessed via the corresponding family 8 group
6600
+ name (eg. "File1:TAG" for the -file1 option, "File2:TAG" for
6601
+ -file2, etc). *ALTFILE* may contain filename formatting codes like
6602
+ the -w option (%d, %f, etc), and/or tag names with a leading "$"
6603
+ symbol to access tags from the source file in the same way as the
6604
+ -p option (so any other dollar symbol in the file name must be
6605
+ doubled, eg. "money$$.jpg"). For example, assuming that the
6606
+ OriginalFileName tag has been set in the edited file, a command to
6607
+ copy Rights from the original file could look like this:
6602
6608
 
6603
6609
  exiftool -file1 "$originalfilename" "-rights<file1:rights" edited.jpg
6604
6610
 
@@ -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;