exiftool-vendored.exe 12.65.0 → 12.69.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 (33) hide show
  1. package/bin/exiftool_files/Changes +60 -2
  2. package/bin/exiftool_files/README +7 -7
  3. package/bin/exiftool_files/exiftool.pl +35 -25
  4. package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +6 -2
  5. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +55 -13
  6. package/bin/exiftool_files/lib/Image/ExifTool/DNG.pm +25 -2
  7. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +95 -13
  8. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +20 -1
  9. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +17 -12
  10. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +47 -11
  11. package/bin/exiftool_files/lib/Image/ExifTool/PLUS.pm +19 -4
  12. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +14 -7
  13. package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +13 -9
  14. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +8 -1
  15. package/bin/exiftool_files/lib/Image/ExifTool/PhotoMechanic.pm +2 -1
  16. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +62 -52
  17. package/bin/exiftool_files/lib/Image/ExifTool/README +7 -3
  18. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +8 -2
  19. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +66 -21
  20. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +6881 -6709
  21. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +454 -37
  22. package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +18 -16
  23. package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
  24. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +14 -4
  25. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +2 -0
  26. package/bin/exiftool_files/lib/Image/ExifTool/WriteRIFF.pl +22 -3
  27. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +53 -11
  28. package/bin/exiftool_files/lib/Image/ExifTool/XISF.pm +185 -0
  29. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +67 -2
  30. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +36 -1
  31. package/bin/exiftool_files/lib/Image/ExifTool.pm +45 -20
  32. package/bin/exiftool_files/lib/Image/ExifTool.pod +20 -10
  33. package/package.json +2 -2
@@ -7,6 +7,64 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 12.60. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Oct. 26, 2023 - Version 12.69
11
+
12
+ - Added support for DNG version 1.7.0.0
13
+ - Added a new XMP-GCamera tag
14
+ - Added a number of new Nikon Z lenses (thanks Warren Hatch and Stefan)
15
+ - Added a number of new XMP-crs tags
16
+ - Extract XML metadata from some Hasselblad images
17
+ - Tweaked -fast2 option to read metadata from inside mdat atom of HEIC images
18
+ - Patched FFF reader to be more tolerant of the mess made by incompetent
19
+ Hasselblad programmers (wrong IFD count for some values)
20
+ - Patched WebP reader to be more tolerant of the mess made by incompetent
21
+ Google programmers (EXIF with wrong header and XMP with wrong ID)
22
+ - Fixed problem which could cause "use of uninitialized variable" warnings
23
+ when reading images from some Nikon cameras
24
+ - Fixed List type for new XMP-photomech:CreatorIdentity tag
25
+
26
+ Oct. 16, 2023 - Version 12.68
27
+
28
+ - Added preliminary read support for XISF images
29
+ - Added the ability to delete JUMBF metadata from PNG images
30
+ - Added support for writing Canon burst-roll CR3 images
31
+ - Added a new Nikon Z9 SubjectDetection value, and improved Zf support (thanks
32
+ Warren Hatch)
33
+ - Added a couple of new PentaxModelID values
34
+ - Added a few couple of new tag values for the Pentax K-3 Mark III Monochrome (github #226)
35
+ - Added a new XMP-photomech tag
36
+ - Added a new QuickTime ItemList tag
37
+ - Added a new Nikon LensID
38
+ - Added a new Canon LensType
39
+ - Support decimal values for FujiFilm ShadowTone and HighlightTone tags
40
+ - Decode some new Sony tags (thanks Jos Roost)
41
+ - Decode ShutterCount for Canon EOS R6 (thanks gamin)
42
+ - Decode QuickTime VideoFullRangeFlag
43
+ - Decode JPGCompression for the Nikon D3S
44
+ - Enhanced -geotag feature to allow writing QuickTime:GPSCoordinates
45
+ - Renamed Panasonic HDRShot tag to MergedImages (forum 15298)
46
+ - Fixed problem where some NEF files were misidentified as NRW
47
+
48
+ Sept. 19, 2023 - Version 12.67
49
+
50
+ - Added a new Pentax LensType (thanks dmont)
51
+ - Added a new FujiFilm FilmMode and FaceElementTypes values (thanks Greybeard)
52
+ - Fixed error writing new DataMining tag where URI prefix wasn't being
53
+ properly added to the value
54
+
55
+ Sept. 19, 2023 - Version 12.66
56
+
57
+ - Added a few new Canon LensType values (thanks Norbert Wasser)
58
+ - Added conversions for a few Apple:ImageCaptureType values
59
+ - Added new XMP tag for PLUS version 2.0.1
60
+ - Added a new CanonModelID (thanks Laurent Clevy)
61
+ - Decode another tag from Canon 1DS raw images (Hubert Figuiere, github #219)
62
+ - Decode JPGCompression for newer Nikon models (thanks Warren Hatch)
63
+ - Fixed bug introduced in 12.65 where duplicate tags were not returned even
64
+ when the groups where specified explicitly
65
+ - API Changes:
66
+ - Added WindowsWideFile option
67
+
10
68
  Aug. 10, 2023 - Version 12.65
11
69
 
12
70
  - Added a new QuickTime Keys tag
@@ -135,6 +193,8 @@ Apr. 5, 2023 - Version 12.60 (production release)
135
193
  - Fixed problem where setting the Geotime value didn't work when using an
136
194
  advanced-formatting expression containing a greater-than symbol (>)
137
195
 
196
+ History of older versions (back to Nov. 19, 2003 - Version 1.00) -->
197
+
138
198
  Mar. 28, 2023 - Version 12.59
139
199
 
140
200
  - COMPATIBILITY WARNING: Changed the calculated ImageDataMD5 for JPEG images
@@ -323,8 +383,6 @@ Nov. 8, 2022 - Version 12.50 (production release)
323
383
  - Fixed inconsistent year and time zone for Kenwood dashcam timed GPS in MP4
324
384
  videos
325
385
 
326
- History of older versions (back to Nov. 19, 2003 - Version 1.00) -->
327
-
328
386
  Oct. 19, 2022 - Version 12.49
329
387
 
330
388
  - Added read support for Windows ICO and CUR files
@@ -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.65.tar.gz | tar -xf -
112
- cd Image-ExifTool-12.65
111
+ gzip -dc Image-ExifTool-12.69.tar.gz | tar -xf -
112
+ cd Image-ExifTool-12.69
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.65';
14
+ my $version = '12.69';
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
@@ -5604,7 +5604,7 @@ OPTIONS
5604
5604
 
5605
5605
  produces output like this:
5606
5606
 
5607
- -- Generated by ExifTool 12.65 --
5607
+ -- Generated by ExifTool 12.69 --
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.
@@ -6533,7 +6538,8 @@ OPTIONS
6533
6538
  value is set to 1 if *=VAL* is omitted. If *VAL* is omitted, the
6534
6539
  option value is set to undef if "=" is used, or an empty string
6535
6540
  with "^=". If *OPT* is not specified a list of available options is
6536
- returned. See Image::ExifTool Options for option details. This
6541
+ returned. The option name is not case senstive, but the option
6542
+ values are. See Image::ExifTool Options for option details. This
6537
6543
  overrides API options set via the config file.
6538
6544
 
6539
6545
  -common_args
@@ -6547,13 +6553,14 @@ OPTIONS
6547
6553
  Load specified configuration file instead of the default
6548
6554
  ".ExifTool_config". If used, this option must come before all other
6549
6555
  arguments on the command line and applies to all -execute'd
6550
- commands. The *CFGFILE* must exist relative to the current working
6551
- directory or the exiftool application directory unless an absolute
6552
- path is specified. Loading of the default config file may be
6553
- disabled by setting *CFGFILE* to an empty string (ie. ""). See
6554
- <https://exiftool.org/config.html> and config_files/example.config
6555
- in the full ExifTool distribution for details about the
6556
- 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.
6557
6564
 
6558
6565
  -echo[*NUM*] *TEXT*
6559
6566
  Echo *TEXT* to stdout (-echo or -echo1) or stderr (-echo2). Text is
@@ -7241,10 +7248,13 @@ RENAMING EXAMPLES
7241
7248
  "20060507_118-1861.jpg".
7242
7249
 
7243
7250
  GEOTAGGING EXAMPLES
7244
- ExifTool implements geotagging via 3 special tags: Geotag (which for
7245
- convenience is also implemented as an exiftool option), Geosync and
7246
- Geotime. The examples below highlight some geotagging features. See
7247
- <https://exiftool.org/geotag.html> for additional documentation.
7251
+ ExifTool implements geotagging from GPS log files via 3 special tags:
7252
+ Geotag (which for convenience is also implemented as an exiftool
7253
+ option), Geosync and Geotime. The examples below highlight some
7254
+ geotagging features. See <https://exiftool.org/geotag.html> for
7255
+ additional documentation. (Note that geotagging from known GPS
7256
+ coordinates is done by writing the GPS tags directly rather than using
7257
+ the -geotag option.)
7248
7258
 
7249
7259
  exiftool -geotag track.log a.jpg
7250
7260
  Geotag an image ("a.jpg") from position information in a GPS track
@@ -16,7 +16,7 @@ use vars qw($VERSION);
16
16
  use Image::ExifTool::Exif;
17
17
  use Image::ExifTool::PLIST;
18
18
 
19
- $VERSION = '1.10';
19
+ $VERSION = '1.11';
20
20
 
21
21
  sub ConvertPLIST($$);
22
22
 
@@ -123,8 +123,12 @@ sub ConvertPLIST($$);
123
123
  0x0014 => { # (StillImageCaptureType, ref 2)
124
124
  Name => 'ImageCaptureType',
125
125
  Writable => 'int32s',
126
- Unknown => 1, # (don't know what the values mean)
127
126
  # seen: 1,2,3,4,5,10,12
127
+ PrintConv => { #forum15096
128
+ 1 => 'ProRAW',
129
+ 2 => 'Portrait',
130
+ 10 => 'Photo',
131
+ },
128
132
  },
129
133
  0x0015 => { # (ImageGroupIdentifier, ref 2)
130
134
  Name => 'ImageUniqueID',
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.67';
91
+ $VERSION = '4.70';
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)
@@ -476,7 +476,6 @@ $VERSION = '4.67';
476
476
  255.1 => 'Sigma 180mm f/2.8 EX DG OS HSM APO Macro', #50
477
477
  255.2 => 'Tamron SP 70-200mm f/2.8 Di VC USD', #exiv issue 1202 (A009)
478
478
  255.3 => 'Yongnuo YN 50mm f/1.8', #50
479
- 313 => 'Canon RF 28mm F2.8 STM', #42
480
479
  368 => 'Sigma 14-24mm f/2.8 DG HSM | A or other Sigma Lens', #IB (A018)
481
480
  368.1 => 'Sigma 20mm f/1.4 DG HSM | A', #50 (newer firmware)
482
481
  368.2 => 'Sigma 50mm f/1.4 DG HSM | A', #50
@@ -491,6 +490,7 @@ $VERSION = '4.67';
491
490
  '368.11' => 'Sigma 70mm f/2.8 DG Macro', #IB (A018)
492
491
  '368.12' => 'Sigma 18-35mm f/1.8 DC HSM | A', #50
493
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)
494
494
  # Note: LensType 488 (0x1e8) is reported as 232 (0xe8) in 7D CameraSettings
495
495
  488 => 'Canon EF-S 15-85mm f/3.5-5.6 IS USM', #PH
496
496
  489 => 'Canon EF 70-300mm f/4-5.6L IS USM', #Gerald Kapounek
@@ -609,18 +609,24 @@ $VERSION = '4.67';
609
609
  '61182.33' => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
610
610
  '61182.34' => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
611
611
  '61182.35' => 'Canon RF 600mm F4L IS USM', #GiaZopatti
612
- '61182.36' => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
613
- '61182.37' => 'Canon RF 800mm F5.6L IS USM', #42
614
- '61182.38' => 'Canon RF 800mm F5.6L IS USM + RF1.4x', #42
615
- '61182.39' => 'Canon RF 800mm F5.6L IS USM + RF2x', #42
616
- '61182.40' => 'Canon RF 1200mm F8L IS USM', #42
617
- '61182.41' => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
618
- '61182.42' => 'Canon RF 1200mm F8L IS USM + RF2x', #42
619
- '61182.43' => 'Canon RF 135mm F1.8 L IS USM', #42
620
- '61182.44' => 'Canon RF 24-50mm F4.5-6.3 IS STM', #42
621
- '61182.45' => 'Canon RF-S 55-210mm F5-7.1 IS STM', #42
612
+ '61182.36' => 'Canon RF 600mm F4L IS USM + RF1.4x', #42
613
+ '61182.37' => 'Canon RF 600mm F4L IS USM + RF2x', #42
614
+ '61182.38' => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
615
+ '61182.39' => 'Canon RF 800mm F5.6L IS USM', #42
616
+ '61182.40' => 'Canon RF 800mm F5.6L IS USM + RF1.4x', #42
617
+ '61182.41' => 'Canon RF 800mm F5.6L IS USM + RF2x', #42
618
+ '61182.42' => 'Canon RF 1200mm F8L IS USM', #42
619
+ '61182.43' => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
620
+ '61182.44' => 'Canon RF 1200mm F8L IS USM + RF2x', #42
621
+ '61182.45' => 'Canon RF 135mm F1.8 L IS USM', #42
622
+ '61182.46' => 'Canon RF 24-50mm F4.5-6.3 IS STM', #42
623
+ '61182.47' => 'Canon RF-S 55-210mm F5-7.1 IS STM', #42
624
+ '61182.48' => 'Canon RF 100-300mm F2.8L IS USM', #42
625
+ '61182.49' => 'Canon RF 100-300mm F2.8L IS USM + RF1.4x', #42
626
+ '61182.50' => 'Canon RF 100-300mm F2.8L IS USM + RF2x', #42
627
+ '61182.51' => 'Canon RF 28mm F2.8 STM', #42
622
628
  # we need the RFLensType values for the following...
623
- '61182.46' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH (NC)
629
+ '61182.52' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH (NC)
624
630
  65535 => 'n/a',
625
631
  );
626
632
 
@@ -985,6 +991,7 @@ $VERSION = '4.67';
985
991
  0x80000481 => 'EOS R6 Mark II', #42
986
992
  0x80000487 => 'EOS R8', #42
987
993
  0x80000491 => 'PowerShot V10', #25
994
+ 0x80000498 => 'EOS R100', #25
988
995
  0x80000520 => 'EOS D2000C', #IB
989
996
  0x80000560 => 'EOS D6000C', #PH (guess)
990
997
  );
@@ -1383,6 +1390,11 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
1383
1390
  Condition => '$$self{Model} =~ /\b(1200D|REBEL T5|Kiss X70)\b/',
1384
1391
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo60D' },
1385
1392
  },
1393
+ {
1394
+ Name => 'CanonCameraInfoR6',
1395
+ Condition => '$$self{Model} =~ /\bEOS R6$/',
1396
+ SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoR6' },
1397
+ },
1386
1398
  {
1387
1399
  Name => 'CanonCameraInfoPowerShot',
1388
1400
  # valid if format is int32u[138] or int32u[148]
@@ -1698,6 +1710,12 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
1698
1710
  # Writable => 'int32u',
1699
1711
  # Protected => 2,
1700
1712
  },
1713
+ 0x82 => { #github219 (found on 1DS)
1714
+ Name => 'RawDataLength',
1715
+ # (can't yet write 1DS raw files)
1716
+ # Writable => 'int32u',
1717
+ # Protected => 2,
1718
+ },
1701
1719
  0x83 => { #PH
1702
1720
  Name => 'OriginalDecisionDataOffset',
1703
1721
  Writable => 'int32u',
@@ -4683,6 +4701,19 @@ my %ciMaxFocal = (
4683
4701
  },
4684
4702
  );
4685
4703
 
4704
+ %Image::ExifTool::Canon::CameraInfoR6 = (
4705
+ %binaryDataAttrs,
4706
+ FIRST_ENTRY => 0,
4707
+ PRIORITY => 0,
4708
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4709
+ NOTES => 'CameraInfo tags for the EOS R6.',
4710
+ 0x0af1 => { #forum15210
4711
+ Name => 'ShutterCount',
4712
+ Format => 'int32u',
4713
+ Notes => 'includes electronic + mechanical shutter',
4714
+ },
4715
+ );
4716
+
4686
4717
  # Canon camera information for 70D (MakerNotes tag 0x0d) (ref PH)
4687
4718
  %Image::ExifTool::Canon::CameraInfo70D = (
4688
4719
  %binaryDataAttrs,
@@ -6859,6 +6890,8 @@ my %ciMaxFocal = (
6859
6890
  290 => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
6860
6891
  291 => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
6861
6892
  292 => 'Canon RF 600mm F4L IS USM', #GiaZopatti
6893
+ 293 => 'Canon RF 600mm F4L IS USM + RF1.4x', #42
6894
+ 294 => 'Canon RF 600mm F4L IS USM + RF2x', #42
6862
6895
  295 => 'Canon RF 800mm F5.6L IS USM', #42
6863
6896
  296 => 'Canon RF 800mm F5.6L IS USM + RF1.4x', #42
6864
6897
  297 => 'Canon RF 800mm F5.6L IS USM + RF2x', #42
@@ -6869,6 +6902,10 @@ my %ciMaxFocal = (
6869
6902
  303 => 'Canon RF 135mm F1.8 L IS USM', #42
6870
6903
  304 => 'Canon RF 24-50mm F4.5-6.3 IS STM', #42
6871
6904
  305 => 'Canon RF-S 55-210mm F5-7.1 IS STM', #42
6905
+ 306 => 'Canon RF 100-300mm F2.8L IS USM', #42
6906
+ 307 => 'Canon RF 100-300mm F2.8L IS USM + RF1.4x', #42
6907
+ 308 => 'Canon RF 100-300mm F2.8L IS USM + RF2x', #42
6908
+ 313 => 'Canon RF 28mm F2.8 STM', #42
6872
6909
  # Note: add new RF lenses to %canonLensTypes with ID 61182
6873
6910
  },
6874
6911
  },
@@ -9063,6 +9100,11 @@ my %filterConv = (
9063
9100
  CMT3 => { # (CR3 files)
9064
9101
  Name => 'MakerNoteCanon',
9065
9102
  PreservePadding => 1,
9103
+ Writable => 'undef', # (writable directory!)
9104
+ # (note that ExifTool 12.68 and earlier lacked the ability to write this as a block,
9105
+ # and would instead add the maker notes the the CMT2 ExifIFD. To remove these
9106
+ # incorrectly-placed maker notes, use "exiftool -exififd:makernotes= FILE")
9107
+ MakerNotes => 1,
9066
9108
  SubDirectory => {
9067
9109
  TagTable => 'Image::ExifTool::Canon::Main',
9068
9110
  ProcessProc => \&ProcessCMT3,
@@ -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;
@@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
57
57
  use Image::ExifTool qw(:DataAccess :Utils);
58
58
  use Image::ExifTool::MakerNotes;
59
59
 
60
- $VERSION = '4.44';
60
+ $VERSION = '4.45';
61
61
 
62
62
  sub ProcessExif($$$);
63
63
  sub WriteExif($$$);
@@ -250,6 +250,7 @@ $formatName[129] = 'utf8'; # (Exif 3.0)
250
250
  34927 => 'WebP', #LibTiff
251
251
  34933 => 'PNG', # (TIFF mail list)
252
252
  34934 => 'JPEG XR', # (TIFF mail list)
253
+ 52546 => 'JPEG XL', # (DNG 1.7)
253
254
  65000 => 'Kodak DCR Compressed', #PH
254
255
  65535 => 'Pentax PEF Compressed', #Jens
255
256
  );
@@ -3077,14 +3078,31 @@ my %opcodeInfo = (
3077
3078
  },
3078
3079
  PrintConvInv => '$val =~ /^PrintIM/ ? $val : undef', # quick validation
3079
3080
  },
3081
+ 0xc519 => { # (Hasselblad X2D)
3082
+ Name => 'HasselbladXML',
3083
+ Format => 'undef',
3084
+ TruncateOK => 1, # (incorrect size written by X2D)
3085
+ SubDirectory => {
3086
+ DirName => 'XML',
3087
+ TagTable => 'Image::ExifTool::PLIST::Main',
3088
+ Start => '$valuePtr + 4',
3089
+ },
3090
+ },
3080
3091
  0xc51b => { # (Hasselblad H3D)
3081
3092
  Name => 'HasselbladExif',
3082
3093
  Format => 'undef',
3083
- RawConv => q{
3084
- $$self{DOC_NUM} = ++$$self{DOC_COUNT};
3085
- $self->ExtractInfo(\$val, { ReEntry => 1 });
3086
- $$self{DOC_NUM} = 0;
3087
- return undef;
3094
+ SubDirectory => {
3095
+ Start => '$valuePtr',
3096
+ Base => '$start',
3097
+ TagTable => 'Image::ExifTool::Exif::Main',
3098
+ ProcessProc => \&Image::ExifTool::ProcessSubTIFF,
3099
+ # Writing this is problematic due to the braindead Hasselblad programmers.
3100
+ # One problem is that some values run outside the HasselbladExif data so they
3101
+ # will be lost if we do a simple copy (which is what we are currently doing
3102
+ # by returning undef from the WriteProc), but we can't rebuild this directory
3103
+ # by writing it properly because there is an erroneous StripByteCounts value
3104
+ # written by the X2D 100C that renders the data unreadable
3105
+ WriteProc => sub { return undef },
3088
3106
  },
3089
3107
  },
3090
3108
  0xc573 => { #PH
@@ -3123,7 +3141,7 @@ my %opcodeInfo = (
3123
3141
  0xc612 => {
3124
3142
  Name => 'DNGVersion',
3125
3143
  Notes => q{
3126
- tags 0xc612-0xcd3b are defined by the DNG specification unless otherwise
3144
+ tags 0xc612-0xcd48 are defined by the DNG specification unless otherwise
3127
3145
  noted. See L<https://helpx.adobe.com/photoshop/digital-negative.html> for
3128
3146
  the specification
3129
3147
  },
@@ -3609,6 +3627,11 @@ my %opcodeInfo = (
3609
3627
  Writable => 'int16u',
3610
3628
  WriteGroup => 'IFD0',
3611
3629
  Protected => 1,
3630
+ PrintConv => {
3631
+ 0 => 'Scene-referred',
3632
+ 1 => 'Output-referred (ICC Profile Dynamic Range)',
3633
+ 2 => 'Output-referred (High Dyanmic Range)', # DNG 1.7
3634
+ },
3612
3635
  },
3613
3636
  0xc6c5 => { Name => 'SRawType', Description => 'SRaw Type', WriteGroup => 'IFD0' }, #exifprobe (CR2 proprietary)
3614
3637
  0xc6d2 => { #JD (Panasonic DMC-TZ5)
@@ -4133,7 +4156,7 @@ my %opcodeInfo = (
4133
4156
  0xcd2d => { # DNG 1.6
4134
4157
  Name => 'ProfileGainTableMap',
4135
4158
  Writable => 'undef',
4136
- WriteGroup => 'SubIFD',
4159
+ WriteGroup => 'SubIFD', # (according to DNG 1.7 docs, this was an error and it should have been IFD0)
4137
4160
  Protected => 1,
4138
4161
  Binary => 1,
4139
4162
  },
@@ -4221,6 +4244,51 @@ my %opcodeInfo = (
4221
4244
  WriteGroup => 'IFD0',
4222
4245
  Protected => 1,
4223
4246
  },
4247
+ 0xcd40 => { # DNG 1.7
4248
+ Name => 'ProfileGainTableMap2',
4249
+ Writable => 'undef',
4250
+ WriteGroup => 'IFD0',
4251
+ Protected => 1,
4252
+ Binary => 1,
4253
+ },
4254
+ 0xcd43 => { # DNG 1.7
4255
+ Name => 'ColumnInterleaveFactor',
4256
+ Writable => 'int32u',
4257
+ WriteGroup => 'SubIFD',
4258
+ Protected => 1,
4259
+ },
4260
+ 0xcd44 => { # DNG 1.7
4261
+ Name => 'ImageSequenceInfo',
4262
+ Writable => 'undef',
4263
+ WriteGroup => 'IFD0',
4264
+ SubDirectory => {
4265
+ TagTable => 'Image::ExifTool::DNG::ImageSeq',
4266
+ ByteOrder => 'BigEndian',
4267
+ },
4268
+ },
4269
+ 0xcd46 => { # DNG 1.7
4270
+ Name => 'ImageStats',
4271
+ Writable => 'undef',
4272
+ WriteGroup => 'IFD0',
4273
+ Binary => 1,
4274
+ Protected => 1,
4275
+ },
4276
+ 0xcd47 => { # DNG 1.7
4277
+ Name => 'ProfileDynamicRange',
4278
+ Writable => 'undef',
4279
+ WriteGroup => 'IFD0',
4280
+ SubDirectory => {
4281
+ TagTable => 'Image::ExifTool::DNG::ProfileDynamicRange',
4282
+ ByteOrder => 'BigEndian', # (not indicated in spec)
4283
+ },
4284
+ },
4285
+ 0xcd48 => { # DNG 1.7
4286
+ Name => 'ProfileGroupName',
4287
+ Writable => 'string',
4288
+ Format => 'string',
4289
+ WriteGroup => 'IFD0',
4290
+ Protected => 1,
4291
+ },
4224
4292
  0xea1c => { #13
4225
4293
  Name => 'Padding',
4226
4294
  Binary => 1,
@@ -5944,6 +6012,12 @@ sub ProcessExif($$$)
5944
6012
  my $inMakerNotes = $$tagTablePtr{GROUPS}{0} eq 'MakerNotes';
5945
6013
  my $isExif = ($tagTablePtr eq \%Image::ExifTool::Exif::Main);
5946
6014
 
6015
+ # warn for incorrect maker notes in CR3 files
6016
+ if ($$dirInfo{DirName} eq 'MakerNotes' and $$et{FileType} eq 'CR3' and
6017
+ $$dirInfo{Parent} and $$dirInfo{Parent} eq 'ExifIFD')
6018
+ {
6019
+ $et->WarnOnce("MakerNotes shouldn't exist ExifIFD of CR3 image", 1);
6020
+ }
5947
6021
  # set flag to calculate image data hash if requested
5948
6022
  $doHash = 1 if $$et{ImageDataHash} and (($$et{FILE_TYPE} eq 'TIFF' and not $base and not $inMakerNotes) or
5949
6023
  ($$et{FILE_TYPE} eq 'RAF' and $dirName eq 'FujiIFD'));
@@ -6219,7 +6293,7 @@ sub ProcessExif($$$)
6219
6293
  }
6220
6294
  # read from file if necessary
6221
6295
  unless (defined $buff) {
6222
- my $wrn;
6296
+ my ($wrn, $truncOK);
6223
6297
  my $readFromRAF = ($tagInfo and $$tagInfo{ReadFromRAF});
6224
6298
  if (not $raf->Seek($base + $valuePtr + $dataPos, 0)) {
6225
6299
  $wrn = "Invalid offset for $dir entry $index";
@@ -6229,18 +6303,22 @@ sub ProcessExif($$$)
6229
6303
  $buff = "$$tagInfo{Name} data $size bytes";
6230
6304
  $readSize = length $buff;
6231
6305
  } elsif ($raf->Read($buff,$size) != $size) {
6232
- $wrn = "Error reading value for $dir entry $index";
6306
+ $wrn = sprintf("Error reading value for $dir entry $index, ID 0x%.4x", $tagID);
6307
+ if ($tagInfo and not $$tagInfo{Unknown}) {
6308
+ $wrn .= " $$tagInfo{Name}";
6309
+ $truncOK = $$tagInfo{TruncateOK};
6310
+ }
6233
6311
  } elsif ($readFromRAF) {
6234
6312
  # seek back to the start of the value
6235
6313
  $raf->Seek($base + $valuePtr + $dataPos, 0);
6236
6314
  }
6237
6315
  if ($wrn) {
6238
- $et->Warn($wrn, $inMakerNotes);
6239
- return 0 unless $inMakerNotes or $htmlDump;
6316
+ $et->Warn($wrn, $inMakerNotes || $truncOK);
6317
+ return 0 unless $inMakerNotes or $htmlDump or $truncOK;
6240
6318
  ++$warnCount;
6241
6319
  $buff = '' unless defined $buff;
6242
6320
  $readSize = length $buff;
6243
- $bad = 1;
6321
+ $bad = 1 unless $truncOK;
6244
6322
  }
6245
6323
  }
6246
6324
  $valueDataLen = length $buff;
@@ -6813,6 +6891,10 @@ sub ProcessExif($$$)
6813
6891
  # save original components of rational numbers (used when copying)
6814
6892
  $$et{RATIONAL}{$tagKey} = $rational if defined $rational;
6815
6893
  $$et{TAG_EXTRA}{$tagKey}{G6} = $saveFormat if $saveFormat;
6894
+ if ($$et{MAKER_NOTE_FIXUP}) {
6895
+ $$et{TAG_EXTRA}{$tagKey}{Fixup} = $$et{MAKER_NOTE_FIXUP};
6896
+ delete $$et{MAKER_NOTE_FIXUP};
6897
+ }
6816
6898
  }
6817
6899
  }
6818
6900