exiftool_vendored 11.98.0 → 12.10.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of exiftool_vendored might be problematic. Click here for more details.

Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +198 -2
  3. data/bin/MANIFEST +8 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +43 -42
  7. data/bin/exiftool +102 -75
  8. data/bin/lib/Image/ExifTool.pm +163 -111
  9. data/bin/lib/Image/ExifTool.pod +127 -93
  10. data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
  11. data/bin/lib/Image/ExifTool/APE.pm +2 -2
  12. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +21 -10
  13. data/bin/lib/Image/ExifTool/Canon.pm +202 -14
  14. data/bin/lib/Image/ExifTool/CanonCustom.pm +82 -16
  15. data/bin/lib/Image/ExifTool/DPX.pm +56 -2
  16. data/bin/lib/Image/ExifTool/DarwinCore.pm +22 -3
  17. data/bin/lib/Image/ExifTool/EXE.pm +8 -5
  18. data/bin/lib/Image/ExifTool/Exif.pm +15 -6
  19. data/bin/lib/Image/ExifTool/Font.pm +9 -2
  20. data/bin/lib/Image/ExifTool/GIF.pm +6 -1
  21. data/bin/lib/Image/ExifTool/GeoTiff.pm +2 -0
  22. data/bin/lib/Image/ExifTool/Geotag.pm +2 -2
  23. data/bin/lib/Image/ExifTool/GoPro.pm +48 -22
  24. data/bin/lib/Image/ExifTool/H264.pm +1 -1
  25. data/bin/lib/Image/ExifTool/ID3.pm +91 -12
  26. data/bin/lib/Image/ExifTool/IPTC.pm +1 -0
  27. data/bin/lib/Image/ExifTool/JSON.pm +27 -4
  28. data/bin/lib/Image/ExifTool/Lang/de.pm +3 -1
  29. data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  30. data/bin/lib/Image/ExifTool/M2TS.pm +19 -19
  31. data/bin/lib/Image/ExifTool/MacOS.pm +154 -38
  32. data/bin/lib/Image/ExifTool/Matroska.pm +3 -1
  33. data/bin/lib/Image/ExifTool/Minolta.pm +7 -2
  34. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +11 -10
  35. data/bin/lib/Image/ExifTool/Nikon.pm +164 -20
  36. data/bin/lib/Image/ExifTool/Olympus.pm +39 -17
  37. data/bin/lib/Image/ExifTool/PNG.pm +14 -3
  38. data/bin/lib/Image/ExifTool/PPM.pm +5 -5
  39. data/bin/lib/Image/ExifTool/Panasonic.pm +148 -14
  40. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +34 -0
  41. data/bin/lib/Image/ExifTool/Parrot.pm +2 -1
  42. data/bin/lib/Image/ExifTool/Pentax.pm +3 -1
  43. data/bin/lib/Image/ExifTool/Photoshop.pm +2 -1
  44. data/bin/lib/Image/ExifTool/QuickTime.pm +289 -37
  45. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +419 -60
  46. data/bin/lib/Image/ExifTool/README +26 -22
  47. data/bin/lib/Image/ExifTool/RSRC.pm +17 -11
  48. data/bin/lib/Image/ExifTool/RTF.pm +12 -7
  49. data/bin/lib/Image/ExifTool/Radiance.pm +7 -2
  50. data/bin/lib/Image/ExifTool/Ricoh.pm +19 -1
  51. data/bin/lib/Image/ExifTool/Shift.pl +1 -0
  52. data/bin/lib/Image/ExifTool/SigmaRaw.pm +40 -33
  53. data/bin/lib/Image/ExifTool/Sony.pm +426 -40
  54. data/bin/lib/Image/ExifTool/TagLookup.pm +5799 -5671
  55. data/bin/lib/Image/ExifTool/TagNames.pod +584 -97
  56. data/bin/lib/Image/ExifTool/Validate.pm +4 -4
  57. data/bin/lib/Image/ExifTool/WriteExif.pl +3 -2
  58. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +26 -18
  59. data/bin/lib/Image/ExifTool/Writer.pl +47 -24
  60. data/bin/lib/Image/ExifTool/XMP.pm +99 -17
  61. data/bin/lib/Image/ExifTool/XMP2.pl +1 -0
  62. data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
  63. data/bin/lib/Image/ExifTool/ZISRAW.pm +123 -0
  64. data/bin/perl-Image-ExifTool.spec +42 -41
  65. data/lib/exiftool_vendored/version.rb +1 -1
  66. metadata +8 -7
@@ -65,46 +65,47 @@ supported by ExifTool (r = read, w = write, c = create):
65
65
 
66
66
  File Types
67
67
  ------------+-------------+-------------+-------------+------------
68
- 3FR r | DR4 r/w/c | ITC r | ODP r | RIFF r
69
- 3G2 r/w | DSS r | J2C r | ODS r | RSRC r
70
- 3GP r/w | DV r | JNG r/w | ODT r | RTF r
71
- A r | DVB r/w | JP2 r/w | OFR r | RW2 r/w
72
- AA r | DVR-MS r | JPEG r/w | OGG r | RWL r/w
73
- AAE r | DYLIB r | JSON r | OGV r | RWZ r
74
- AAX r/w | EIP r | K25 r | OPUS r | RM r
75
- ACR r | EPS r/w | KDC r | ORF r/w | SEQ r
76
- AFM r | EPUB r | KEY r | OTF r | SKETCH r
77
- AI r/w | ERF r/w | LA r | PAC r | SO r
78
- AIFF r | EXE r | LFP r | PAGES r | SR2 r/w
79
- APE r | EXIF r/w/c | LNK r | PBM r/w | SRF r
80
- ARQ r/w | EXR r | LRV r/w | PCD r | SRW r/w
81
- ARW r/w | EXV r/w/c | M2TS r | PCX r | SVG r
82
- ASF r | F4A/V r/w | M4A/V r/w | PDB r | SWF r
83
- AVI r | FFF r/w | MAX r | PDF r/w | THM r/w
84
- AVIF r/w | FITS r | MEF r/w | PEF r/w | TIFF r/w
85
- AZW r | FLA r | MIE r/w/c | PFA r | TORRENT r
86
- BMP r | FLAC r | MIFF r | PFB r | TTC r
87
- BPG r | FLIF r/w | MKA r | PFM r | TTF r
88
- BTF r | FLV r | MKS r | PGF r | TXT r
89
- CHM r | FPF r | MKV r | PGM r/w | VCF r
90
- COS r | FPX r | MNG r/w | PLIST r | VRD r/w/c
91
- CR2 r/w | GIF r/w | MOBI r | PICT r | VSD r
92
- CR3 r/w | GPR r/w | MODD r | PMP r | WAV r
93
- CRM r/w | GZ r | MOI r | PNG r/w | WDP r/w
94
- CRW r/w | HDP r/w | MOS r/w | PPM r/w | WEBP r
95
- CS1 r/w | HDR r | MOV r/w | PPT r | WEBM r
96
- CSV r | HEIC r/w | MP3 r | PPTX r | WMA r
97
- DCM r | HEIF r/w | MP4 r/w | PS r/w | WMV r
98
- DCP r/w | HTML r | MPC r | PSB r/w | WTV r
99
- DCR r | ICC r/w/c | MPG r | PSD r/w | WV r
100
- DFONT r | ICS r | MPO r/w | PSP r | X3F r/w
101
- DIVX r | IDML r | MQV r/w | QTIF r/w | XCF r
102
- DJVU r | IIQ r/w | MRW r/w | R3D r | XLS r
103
- DLL r | IND r/w | MXF r | RA r | XLSX r
104
- DNG r/w | INSP r/w | NEF r/w | RAF r/w | XMP r/w/c
105
- DOC r | INSV r | NRW r/w | RAM r | ZIP r
106
- DOCX r | INX r | NUMBERS r | RAR r |
107
- DPX r | ISO r | O r | RAW r/w |
68
+ 360 r/w | DPX r | ITC r | ODP r | RIFF r
69
+ 3FR r | DR4 r/w/c | J2C r | ODS r | RSRC r
70
+ 3G2 r/w | DSS r | JNG r/w | ODT r | RTF r
71
+ 3GP r/w | DV r | JP2 r/w | OFR r | RW2 r/w
72
+ A r | DVB r/w | JPEG r/w | OGG r | RWL r/w
73
+ AA r | DVR-MS r | JSON r | OGV r | RWZ r
74
+ AAE r | DYLIB r | K25 r | ONP r | RM r
75
+ AAX r/w | EIP r | KDC r | OPUS r | SEQ r
76
+ ACR r | EPS r/w | KEY r | ORF r/w | SKETCH r
77
+ AFM r | EPUB r | LA r | OTF r | SO r
78
+ AI r/w | ERF r/w | LFP r | PAC r | SR2 r/w
79
+ AIFF r | EXE r | LNK r | PAGES r | SRF r
80
+ APE r | EXIF r/w/c | LRV r/w | PBM r/w | SRW r/w
81
+ ARQ r/w | EXR r | M2TS r | PCD r | SVG r
82
+ ARW r/w | EXV r/w/c | M4A/V r/w | PCX r | SWF r
83
+ ASF r | F4A/V r/w | MACOS r | PDB r | THM r/w
84
+ AVI r | FFF r/w | MAX r | PDF r/w | TIFF r/w
85
+ AVIF r/w | FITS r | MEF r/w | PEF r/w | TORRENT r
86
+ AZW r | FLA r | MIE r/w/c | PFA r | TTC r
87
+ BMP r | FLAC r | MIFF r | PFB r | TTF r
88
+ BPG r | FLIF r/w | MKA r | PFM r | TXT r
89
+ BTF r | FLV r | MKS r | PGF r | VCF r
90
+ CHM r | FPF r | MKV r | PGM r/w | VRD r/w/c
91
+ COS r | FPX r | MNG r/w | PLIST r | VSD r
92
+ CR2 r/w | GIF r/w | MOBI r | PICT r | WAV r
93
+ CR3 r/w | GPR r/w | MODD r | PMP r | WDP r/w
94
+ CRM r/w | GZ r | MOI r | PNG r/w | WEBP r
95
+ CRW r/w | HDP r/w | MOS r/w | PPM r/w | WEBM r
96
+ CS1 r/w | HDR r | MOV r/w | PPT r | WMA r
97
+ CSV r | HEIC r/w | MP3 r | PPTX r | WMV r
98
+ CZI r | HEIF r/w | MP4 r/w | PS r/w | WTV r
99
+ DCM r | HTML r | MPC r | PSB r/w | WV r
100
+ DCP r/w | ICC r/w/c | MPG r | PSD r/w | X3F r/w
101
+ DCR r | ICS r | MPO r/w | PSP r | XCF r
102
+ DFONT r | IDML r | MQV r/w | QTIF r/w | XLS r
103
+ DIVX r | IIQ r/w | MRW r/w | R3D r | XLSX r
104
+ DJVU r | IND r/w | MXF r | RA r | XMP r/w/c
105
+ DLL r | INSP r/w | NEF r/w | RAF r/w | ZIP r
106
+ DNG r/w | INSV r | NRW r/w | RAM r |
107
+ DOC r | INX r | NUMBERS r | RAR r |
108
+ DOCX r | ISO r | O r | RAW r/w |
108
109
 
109
110
  Meta Information
110
111
  ----------------------+----------------------+---------------------
@@ -306,7 +307,7 @@ L</Options> settings.
306
307
 
307
308
  =item Return Values:
308
309
 
309
- L</ImageInfo> returns a reference to a hash of tag key/value pairs. The tag
310
+ L</ImageInfo> returns a reference to a hash of tag-key/value pairs. The tag
310
311
  keys are identifiers -- essentially case-sensitive tag names with an
311
312
  appended instance number if multiple tags with the same name were extracted
312
313
  from the image. Many of the ExifTool functions require a tag key as an
@@ -662,7 +663,7 @@ option is disabled.
662
663
  Perl expression used to filter PrintConv values when writing. The
663
664
  expression acts on the value of the Perl default variable ($_), and changes
664
665
  the value of this variable as required. The current ExifTool object may be
665
- accessed through $self. The value is not changed if $_ is set to undef.
666
+ accessed through $self. The tag is not written if $_ is set to undef.
666
667
 
667
668
  =item FixBase
668
669
 
@@ -731,6 +732,11 @@ to be excluded by preceding group name with a '-'. See L</GetGroup> for a
731
732
  description of group families, and L</GetAllGroups [static]> for lists of
732
733
  group names.
733
734
 
735
+ =item HexTagIDs
736
+
737
+ Use hexadecimal instead of decimal for the family 7 group names of tags with
738
+ numerical ID's.
739
+
734
740
  =item HtmlDump
735
741
 
736
742
  Dump information in hex to dynamic HTML web page. The value may be 0-3 for
@@ -809,6 +815,11 @@ formatting expression returns undef). If not set, a minor error is issued
809
815
  for missing values, or the value is set to '' if L</IgnoreMinorErrors> is
810
816
  set. Default is undef.
811
817
 
818
+ =item NoMultiExif
819
+
820
+ Raise error when attempting to write multi-segment EXIF in a JPEG image.
821
+ Default is undef.
822
+
812
823
  =item NoPDFList
813
824
 
814
825
  Flag to avoid splitting PDF list-type tag values into separate items.
@@ -839,9 +850,10 @@ causing conversion to local time when they are extracted and from local time
839
850
  when written. According to the QuickTime specification date/time values
840
851
  should be UTC, but many digital cameras store local time instead (presumably
841
852
  because they don't know the time zone), so the default is to not convert
842
- these times. This option also disables the autodetection of incorrect
843
- time-zero offsets in QuickTime date/time values, and enforces a time zero of
844
- 1904 as per the QuickTime specification.
853
+ these times (except for Canon CR3 files, which always use UTC times). This
854
+ option also disables the autodetection of incorrect time-zero offsets in
855
+ QuickTime date/time values, and enforces a time zero of 1904 as per the
856
+ QuickTime specification.
845
857
 
846
858
  =item RequestAll
847
859
 
@@ -1128,11 +1140,17 @@ created in the destination file as required to store the specified
1128
1140
  information. May be called repeatedly to write the same information to
1129
1141
  additional files without the need to call L</SetNewValue> again.
1130
1142
 
1131
- Note that it is NOT necessary to call L</ExtractInfo> or L</ImageInfo>
1143
+ ExifTool queues all new values that are assigned via calls to
1144
+ L</SetNewValue>, then applies them to any number of files through one or
1145
+ more calls to L</WriteInfo>. These queued values may be accessed through
1146
+ L</GetNewValue>, and are completely separate from metadata extracted from
1147
+ files via L</ExtractInfo> or L</ImageInfo> and accessed through L</GetInfo>
1148
+ or L</GetValue>.
1149
+
1150
+ To be clear, it is NOT necessary to call L</ExtractInfo> or L</ImageInfo>
1132
1151
  before L</WriteInfo>. L</WriteInfo> changes only metadata specified by
1133
1152
  previous calls to L</SetNewValue>.
1134
1153
 
1135
-
1136
1154
  # add information to a source file, writing output to new file
1137
1155
  $exifTool->WriteInfo($srcfile, $dstfile);
1138
1156
 
@@ -1601,7 +1619,8 @@ values in list context.
1601
1619
 
1602
1620
  0) ExifTool object reference
1603
1621
 
1604
- 1) Tag name (case sensitive, may be prefixed by family 0 or 1 group name)
1622
+ 1) Tag name (case sensitive, may be prefixed by family 0, 1 or 7 group
1623
+ names, separated by colons)
1605
1624
 
1606
1625
  =item Return Values:
1607
1626
 
@@ -1663,34 +1682,35 @@ in a specified file.
1663
1682
 
1664
1683
  2-N) [optional] List of tag names to set or options hash references. All
1665
1684
  writable tags are set if none are specified. The tag names are not case
1666
- sensitive, and may be prefixed by one or more family 0, 1 or 2 group names
1667
- with optional leading family numbers, separated by colons (eg. 'exif:iso').
1668
- A leading '-' indicates tags to be excluded (eg. '-comment'), or a trailing
1669
- '#' causes the ValueConv value to be copied (same as setting the Type option
1670
- to 'ValueConv' for this tag only). Wildcards ('*' and '?') may be used in
1671
- the tag name. A tag name of '*' is commonly used when a group is specified
1672
- to copy all tags in the group (eg. 'XMP:*'). A special feature allows tag
1673
- names of the form 'DSTTAGE<lt>SRCTAG' (or 'SRCTAGE<gt>DSTTAG') to be
1674
- specified to copy information to a tag with a different name or a specified
1675
- group. Both 'SRCTAG' and 'DSTTAG' may contain wildcards and/or be prefixed
1676
- by a group name (eg. 'fileModifyDateE<lt>modifyDate' or 'xmp:*E<lt>*'),
1677
- and/or suffixed by a '#' to disable print conversion. Copied tags may also
1678
- be added or deleted from a list with arguments of the form
1679
- 'DSTTAG+E<lt>SRCTAG' or 'DSTTAG-E<lt>SRCTAG'. Tags are evaluated in order,
1680
- so exclusions apply only to tags included earlier in the list. An extension
1681
- of this feature allows the tag value to be set from a string containing tag
1682
- names with leading '$' symbols (eg. 'CommentE<lt>the file is $filename').
1683
- Braces '{}' may be used around the tag name to separate it from subsequent
1684
- text, and a '$$' is used to to represent a '$' symbol. The behaviour for
1685
- missing tags in expressions is defined by the L</MissingTagValue> option.
1686
- The tag value may be modified via changes to the default input variable ($_)
1687
- in a Perl expression placed inside the braces and after a semicolon
1688
- following the tag name (see the last example above). A '@' may be added
1689
- after the tag name (before the semicolon) to make the expression act on
1690
- individual list items instead of the concatenated string for list-type tags.
1691
- Braces within the expression must be balanced. Multiple options hash
1692
- references may be passed to set different options for different tags.
1693
- Options apply to subsequent tags in the argument list.
1685
+ sensitive, and may be prefixed by one or more family 0, 1, 2 or 7 group
1686
+ names with optional leading family numbers, separated by colons (eg.
1687
+ 'exif:iso'). A leading '-' indicates tags to be excluded (eg. '-comment'),
1688
+ or a trailing '#' causes the ValueConv value to be copied (same as setting
1689
+ the Type option to 'ValueConv' for this tag only). Wildcards ('*' and '?')
1690
+ may be used in the tag name. A tag name of '*' is commonly used when a
1691
+ group is specified to copy all tags in the group (eg. 'XMP:*'). A special
1692
+ feature allows tag names of the form 'DSTTAGE<lt>SRCTAG' (or
1693
+ 'SRCTAGE<gt>DSTTAG') to be specified to copy information to a tag with a
1694
+ different name or a specified group. Both 'SRCTAG' and 'DSTTAG' may contain
1695
+ wildcards and/or be prefixed by a group name (eg.
1696
+ 'fileModifyDateE<lt>modifyDate' or 'xmp:*E<lt>*'), and/or suffixed by a '#'
1697
+ to disable print conversion. Copied tags may also be added or deleted from
1698
+ a list with arguments of the form 'DSTTAG+E<lt>SRCTAG' or
1699
+ 'DSTTAG-E<lt>SRCTAG'. Tags are evaluated in order, so exclusions apply only
1700
+ to tags included earlier in the list. An extension of this feature allows
1701
+ the tag value to be set from a string containing tag names with leading '$'
1702
+ symbols (eg. 'CommentE<lt>the file is $filename'). Braces '{}' may be used
1703
+ around the tag name to separate it from subsequent text, and a '$$' is used
1704
+ to to represent a '$' symbol. The behaviour for missing tags in expressions
1705
+ is defined by the L</MissingTagValue> option. The tag value may be modified
1706
+ via changes to the default input variable ($_) in a Perl expression placed
1707
+ inside the braces and after a semicolon following the tag name (see the last
1708
+ example above). A '@' may be added after the tag name (before the
1709
+ semicolon) to make the expression act on individual list items instead of
1710
+ the concatenated string for list-type tags. Braces within the expression
1711
+ must be balanced. Multiple options hash references may be passed to set
1712
+ different options for different tags. Options apply to subsequent tags in
1713
+ the argument list.
1694
1714
 
1695
1715
  By default, this routine will commute information between same-named tags in
1696
1716
  different groups, allowing information to be translated between images with
@@ -2067,6 +2087,14 @@ Family 6 is currently used only for EXIF/TIFF metadata, and gives the format
2067
2087
  type of the extracted value. Generated only if the L</SaveFormat> option is
2068
2088
  used when extracting.
2069
2089
 
2090
+ Family 7 is used for tag ID's. The group names are "ID-" followed by the
2091
+ tag ID with characters other than [-_A-Za-z0-9] converted to hex. Numerical
2092
+ tag ID's are given in hex if the L</HexTagIDs> option is set. When
2093
+ specifying a family 7 group name, numerical ID's may be in hex or decimal,
2094
+ and non-numercal ID's may or may not have characters other than
2095
+ [-_A-Za-z0-9] converted to hex. Note that unlike other group names, family
2096
+ 7 group names are case sensitive (except for the leading "ID-").
2097
+
2070
2098
  See L</GetAllGroups [static]> for complete lists of group names.
2071
2099
 
2072
2100
  =back
@@ -2260,22 +2288,22 @@ ICC-meta, ICC-view, ICC_Profile, ICC_Profile#, ID3, ID3v1, ID3v1_Enh,
2260
2288
  ID3v2_2, ID3v2_3, ID3v2_4, IFD0, IFD1, IPTC, IPTC#, ISO, ITC, Insta360,
2261
2289
  InteropIFD, ItemList, JFIF, JFXX, JPEG, JPEG-HDR, JSON, JVC, Jpeg2000,
2262
2290
  KDC_IFD, Keys, Kodak, KodakBordersIFD, KodakEffectsIFD, KodakIFD,
2263
- KyoceraRaw, LNK, Leaf, LeafSubIFD, Leica, Lytro, M2TS, MAC, MIE-Audio,
2264
- MIE-Camera, MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS, MIE-Geo,
2265
- MIE-Image, MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient,
2266
- MIE-Preview, MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MNG,
2267
- MOBI, MOI, MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS, MakerNotes,
2268
- MakerUnknown, Matroska, MediaJukebox, Meta, MetaIFD, Microsoft, Minolta,
2269
- MinoltaRaw, Motorola, NITF, Nikon, NikonCapture, NikonCustom, NikonScan,
2270
- Nintendo, Ocad, Ogg, Olympus, OpenEXR, Opus, PDF, PICT, PNG, PNG-pHYs, PSP,
2271
- Palm, Panasonic, PanasonicRaw, Pentax, PhaseOne, PhotoCD, PhotoMechanic,
2272
- Photoshop, PictureInfo, PostScript, PreviewIFD, PrintIM, ProfileIFD,
2273
- Qualcomm, QuickTime, RAF, RAF2, RIFF, RMETA, RSRC, RTF, Radiance, Rawzor,
2274
- Real, Real-CONT, Real-MDPR, Real-PROP, Real-RA3, Real-RA4, Real-RA5,
2275
- Real-RJMD, Reconyx, Red, Ricoh, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#,
2276
- SVG, Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD,
2277
- System, Theora, Torrent, Track#, UserData, UserParam, VCalendar, VCard,
2278
- Version0, Vorbis, WTV, XML, XMP, XMP-DICOM, XMP-Device, XMP-GAudio,
2291
+ KyoceraRaw, LNK, Leaf, LeafSubIFD, Leica, Lyrics3, Lytro, M2TS, MAC,
2292
+ MIE-Audio, MIE-Camera, MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS,
2293
+ MIE-Geo, MIE-Image, MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta,
2294
+ MIE-Orient, MIE-Preview, MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video,
2295
+ MIFF, MNG, MOBI, MOI, MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS,
2296
+ MakerNotes, MakerUnknown, Matroska, MediaJukebox, Meta, MetaIFD, Microsoft,
2297
+ Minolta, MinoltaRaw, Motorola, NITF, Nikon, NikonCapture, NikonCustom,
2298
+ NikonScan, Nintendo, Ocad, Ogg, Olympus, OpenEXR, Opus, PDF, PICT, PNG,
2299
+ PNG-pHYs, PSP, Palm, Panasonic, PanasonicRaw, Pentax, PhaseOne, PhotoCD,
2300
+ PhotoMechanic, Photoshop, PictureInfo, PostScript, PreviewIFD, PrintIM,
2301
+ ProfileIFD, Qualcomm, QuickTime, RAF, RAF2, RIFF, RMETA, RSRC, RTF,
2302
+ Radiance, Rawzor, Real, Real-CONT, Real-MDPR, Real-PROP, Real-RA3, Real-RA4,
2303
+ Real-RA5, Real-RJMD, Reconyx, Red, Ricoh, SPIFF, SR2, SR2DataIFD, SR2SubIFD,
2304
+ SRF#, SVG, Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim,
2305
+ SubIFD, System, Theora, Torrent, Track#, UserData, UserParam, VCalendar,
2306
+ VCard, Version0, Vorbis, WTV, XML, XMP, XMP-DICOM, XMP-Device, XMP-GAudio,
2279
2307
  XMP-GDepth, XMP-GFocus, XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage,
2280
2308
  XMP-MP, XMP-MP1, XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album,
2281
2309
  XMP-apple-fi, XMP-aux, XMP-cc, XMP-cell, XMP-creatorAtom, XMP-crs, XMP-dc,
@@ -2309,6 +2337,12 @@ eg. JPEG-APP1-IFD0-ExifIFD
2309
2337
  int8u, string, int16u, int32u, rational64u, int8s, undef, int16s, int32s,
2310
2338
  rational64s, float, double, ifd, unicode, complex, int64u, int64s, ifd64
2311
2339
 
2340
+ =item Family 7 (Tag ID):
2341
+
2342
+ ID-xxx (where xxx is the tag ID. Numerical ID's are given in hex with a
2343
+ leading "0x" if the HexTagIDs option is set, as are characters in
2344
+ non-numerical ID's which are not valid in a group name)
2345
+
2312
2346
  =back
2313
2347
 
2314
2348
  =head2 GetDeleteGroups [static]
@@ -2588,7 +2622,7 @@ IPTC Core and Extension specifications actually use the XMP format.)
2588
2622
 
2589
2623
  =head2 XMP
2590
2624
 
2591
- Exiftool reads XMP encoded as UTF-8, UTF-16 or UTF-32, and converts them all
2625
+ ExifTool reads XMP encoded as UTF-8, UTF-16 or UTF-32, and converts them all
2592
2626
  to UTF-8 internally. Also, all XML character entity references and numeric
2593
2627
  character references are converted. When writing, ExifTool always encodes
2594
2628
  XMP as UTF-8, converting the following 5 characters to XML character
@@ -18,7 +18,7 @@ use vars qw($VERSION);
18
18
  use Image::ExifTool qw(:DataAccess :Utils);
19
19
  use Image::ExifTool::ID3;
20
20
 
21
- $VERSION = '1.10';
21
+ $VERSION = '1.11';
22
22
 
23
23
  # information for time/date-based tags (time zero is Jan 1, 1904)
24
24
  my %timeInfo = (
@@ -73,12 +73,12 @@ my %timeInfo = (
73
73
  ProcessProc => \&Image::ExifTool::ID3::ProcessID3,
74
74
  },
75
75
  },
76
+ APPL => 'ApplicationData', # (first 4 bytes are the application signature)
76
77
  # SSND => 'SoundData',
77
78
  # MARK => 'Marker',
78
79
  # INST => 'Instrument',
79
80
  # MIDI => 'MidiData',
80
81
  # AESD => 'AudioRecording',
81
- # APPL => 'ApplicationSpecific',
82
82
  );
83
83
 
84
84
  %Image::ExifTool::AIFF::Common = (
@@ -15,7 +15,7 @@ use strict;
15
15
  use vars qw($VERSION);
16
16
  use Image::ExifTool qw(:DataAccess :Utils);
17
17
 
18
- $VERSION = '1.05';
18
+ $VERSION = '1.06';
19
19
 
20
20
  # APE metadata blocks
21
21
  %Image::ExifTool::APE::Main = (
@@ -166,7 +166,7 @@ sub ProcessAPE($$)
166
166
  # look for the APE trailer footer...
167
167
  my $footPos = -32;
168
168
  # (...but before the ID3v1 trailer if it exists)
169
- $footPos -= 128 if $$et{DoneID3} == 2;
169
+ $footPos -= $$et{DoneID3} if $$et{DoneID3} > 1;
170
170
  $raf->Seek($footPos, 2) or return 1;
171
171
  $raf->Read($buff, 32) == 32 or return 1;
172
172
  $buff =~ /^APETAGEX/ or return 1;
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
35
35
  use Image::ExifTool::Validate;
36
36
  use Image::ExifTool::MacOS;
37
37
 
38
- $VERSION = '3.35';
38
+ $VERSION = '3.39';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -415,7 +415,7 @@ IPTC group only in the standard location.
415
415
  },
416
416
  QuickTime => q{
417
417
  The QuickTime format is used for many different types of audio, video and
418
- image files (most notably, MOV/MP4 videos and HEIC/CR3 images). Exiftool
418
+ image files (most notably, MOV/MP4 videos and HEIC/CR3 images). ExifTool
419
419
  extracts standard meta information and a variety of audio, video and image
420
420
  parameters, as well as proprietary information written by many camera
421
421
  models. Tags with a question mark after their name are not extracted unless
@@ -444,10 +444,10 @@ country code to the tag name (eg. "ItemList:Artist-deu" or
444
444
  "ItemList::Artist-deu-DE"). Most
445
445
  L<UserData|Image::ExifTool::TagNames/QuickTime UserData Tags> tags support a
446
446
  language code, but without a country code. If no language code is specified
447
- when writing, alternate languages for the tag are deleted. Use the "und"
448
- language code to write the default language without deleting alternate
449
- languages. Note that "eng" is treated as a default language when reading,
450
- but not when writing.
447
+ when writing, the default language is written and alternate languages for
448
+ the tag are deleted. Use the "und" language code to write the default
449
+ language without deleting alternate languages. Note that "eng" is treated
450
+ as a default language when reading, but not when writing.
451
451
 
452
452
  According to the specification, integer-format QuickTime date/time tags
453
453
  should be stored as UTC. Unfortunately, digital cameras often store local
@@ -633,7 +633,8 @@ L<http://www.metadataworkinggroup.org/> for the official MWG specification.
633
633
  MacOS => q{
634
634
  On MacOS systems, the there are additional MDItem and XAttr Finder tags that
635
635
  may be extracted. These tags are not extracted by default -- they must be
636
- specifically requested or enabled via an API option.
636
+ specifically requested or enabled via an API option. (Except when reading
637
+ MacOS "._" files directly, see below.)
637
638
 
638
639
  The tables below list some of the tags that may be extracted, but ExifTool
639
640
  will extract all available information even for tags not listed.
@@ -877,6 +878,11 @@ TagID: foreach $tagID (@keys) {
877
878
  $case{$lc} = $name;
878
879
  }
879
880
  my $format = $$tagInfo{Format};
881
+ # check TagID's to make sure they don't start with 'ID-'
882
+ my @grps = $et->GetGroup($tagInfo);
883
+ foreach (@grps) {
884
+ warn "Group name starts with 'ID-' for $short $name\n" if /^ID-/i;
885
+ }
880
886
  # validate Name (must not start with a digit or else XML output will not be valid;
881
887
  # must not start with a dash or exiftool command line may get confused)
882
888
  if ($name !~ /^[_A-Za-z][-\w]+$/ and
@@ -1023,9 +1029,14 @@ TagID: foreach $tagID (@keys) {
1023
1029
  $note =~ s/(^[ \t]+|[ \t]+$)//mg;
1024
1030
  push @values, "($note)";
1025
1031
  }
1026
- if ($isXMP and lc $tagID ne lc $name) {
1027
- # add note about different XMP Tag ID
1028
- my $note = $$tagInfo{RootTagInfo} ? $tagID : "called $tagID by the spec";
1032
+ if ($isXMP and (lc $tagID ne lc $name or $$tagInfo{NotFlat})) {
1033
+ my $note;
1034
+ if ($$tagInfo{NotFlat}) {
1035
+ $note = 'NOT a flattened tag!';
1036
+ } else {
1037
+ # add note about different XMP Tag ID
1038
+ $note = $$tagInfo{RootTagInfo} ? $tagID : "called $tagID by the spec";
1039
+ }
1029
1040
  if ($$tagInfo{Notes}) {
1030
1041
  $values[-1] =~ s/^\(/($note; /;
1031
1042
  } else {
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.37';
91
+ $VERSION = '4.40';
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)
@@ -474,8 +474,9 @@ $VERSION = '4.37';
474
474
  253.1 => 'Canon EF 70-200mm f/2.8L IS III USM + 2x', #PH (NC)
475
475
  # 253.2 => 'Tamron SP 70-200mm f/2.8 Di VC USD G2 (A025) + 2x', #forum9367
476
476
  254 => 'Canon EF 100mm f/2.8L Macro IS USM', #42
477
- 255 => 'Sigma 24-105mm f/4 DG OS HSM | A or Other Sigma Lens', #50
477
+ 255 => 'Sigma 24-105mm f/4 DG OS HSM | A or Other Lens', #50
478
478
  255.1 => 'Sigma 180mm f/2.8 EX DG OS HSM APO Macro', #50
479
+ 255.2 => 'Tamron SP 70-200mm f/2.8 Di VC USD', #exiv issue 1202 (A009)
479
480
  368 => 'Sigma 14-24mm f/2.8 DG HSM | A or other Sigma Lens', #IB (A018)
480
481
  368.1 => 'Sigma 20mm f/1.4 DG HSM | A', #50 (newer firmware)
481
482
  368.2 => 'Sigma 50mm f/1.4 DG HSM | A', #50
@@ -486,8 +487,9 @@ $VERSION = '4.37';
486
487
  368.7 => 'Sigma 85mm f/1.4 DG HSM | A', #IB (016)
487
488
  368.8 => 'Sigma 105mm f/1.4 DG HSM', #IB (A018)
488
489
  368.9 => 'Sigma 14-24mm f/2.8 DG HSM', #IB (A018)
489
- 368.10 => 'Sigma 35mm f/1.4 DG HSM | A', #PH (012)
490
- '368.10' => 'Sigma 70mm f/2.8 DG Macro', #IB (A018)
490
+ '368.10' => 'Sigma 35mm f/1.4 DG HSM | A', #PH (012)
491
+ '368.11' => 'Sigma 70mm f/2.8 DG Macro', #IB (A018)
492
+ '368.12' => 'Sigma 18-35mm f/1.8 DC HSM | A', #50
491
493
  # Note: LensType 488 (0x1e8) is reported as 232 (0xe8) in 7D CameraSettings
492
494
  488 => 'Canon EF-S 15-85mm f/3.5-5.6 IS USM', #PH
493
495
  489 => 'Canon EF 70-300mm f/4-5.6L IS USM', #Gerald Kapounek
@@ -565,14 +567,27 @@ $VERSION = '4.37';
565
567
  61494 => 'Canon CN-E 85mm T1.3 L F', #PH
566
568
  61495 => 'Canon CN-E 135mm T2.2 L F', #PH
567
569
  61496 => 'Canon CN-E 35mm T1.5 L F', #PH
568
- 61182 => 'Canon RF 35mm F1.8 Macro IS STM or other Canon RF Lens', #IB
569
- 61182.1 => 'Canon RF 50mm F1.2 L USM', #IB
570
- 61182.2 => 'Canon RF 24-105mm F4 L IS USM', #IB
571
- 61182.3 => 'Canon RF 28-70mm F2 L USM', #IB
572
- 61182.4 => 'Canon RF 85mm F1.2L USM', #IB
573
- 61182.5 => 'Canon RF 24-240mm F4-6.3 IS USM', #IB
574
- 61182.6 => 'Canon RF 24-70mm F2.8 L IS USM', #PH
575
- 61182.7 => 'Canon RF 15-35mm F2.8 L IS USM', #PH
570
+ # see RFLensType tag for master list of 61182 RF lenses
571
+ 61182 => 'Canon RF 50mm F1.2L USM or other Canon RF Lens',
572
+ 61182.1 => 'Canon RF 24-105mm F4L IS USM',
573
+ 61182.2 => 'Canon RF 28-70mm F2L USM',
574
+ 61182.3 => 'Canon RF 35mm F1.8 MACRO IS STM',
575
+ 61182.4 => 'Canon RF 85mm F1.2L USM',
576
+ 61182.5 => 'Canon RF 85mm F1.2L USM DS',
577
+ 61182.6 => 'Canon RF 24-70mm F2.8L IS USM',
578
+ 61182.7 => 'Canon RF 15-35mm F2.8L IS USM',
579
+ 61182.8 => 'Canon RF 24-240mm F4-6.3 IS USM',
580
+ 61182.9 => 'Canon RF 70-200mm F2.8L IS USM',
581
+ 61182.10 => 'Canon RF 600mm F11 IS STM',
582
+ 61182.11 => 'Canon RF 600mm F11 IS STM + RF1.4x',
583
+ 61182.12 => 'Canon RF 600mm F11 IS STM + RF2x',
584
+ 61182.13 => 'Canon RF 800mm F11 IS STM',
585
+ 61182.14 => 'Canon RF 800mm F11 IS STM + RF1.4x',
586
+ 61182.15 => 'Canon RF 800mm F11 IS STM + RF2x',
587
+ 61182.16 => 'Canon RF 24-105mm F4-7.1 IS STM',
588
+ 61182.17 => 'Canon RF 100-500mm F4.5-7.1L IS USM',
589
+ 61182.18 => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF1.4x',
590
+ 61182.19 => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF2x',
576
591
  65535 => 'n/a',
577
592
  );
578
593
 
@@ -918,13 +933,16 @@ $VERSION = '4.37';
918
933
  0x80000406 => 'EOS 6D Mark II', #IB/42
919
934
  0x80000408 => 'EOS 77D / 9000D',
920
935
  0x80000417 => 'EOS Rebel SL2 / 200D / Kiss X9', #IB/42
936
+ 0x80000421 => 'EOS R5', #PH
921
937
  0x80000422 => 'EOS Rebel T100 / 4000D / 3000D', #IB (3000D in China; Kiss? - PH)
922
938
  0x80000424 => 'EOS R', #IB
923
939
  0x80000428 => 'EOS-1D X Mark III', #IB
924
940
  0x80000432 => 'EOS Rebel T7 / 2000D / 1500D / Kiss X90', #IB
925
941
  0x80000433 => 'EOS RP',
942
+ 0x80000435 => 'EOS Rebel T8i / 850D / X10i', #JR/PH
926
943
  0x80000436 => 'EOS SL3 / 250D / Kiss X10', #25
927
944
  0x80000437 => 'EOS 90D', #IB
945
+ 0x80000453 => 'EOS R6', #PH
928
946
  0x80000520 => 'EOS D2000C', #IB
929
947
  0x80000560 => 'EOS D6000C', #PH (guess)
930
948
  );
@@ -1881,6 +1899,11 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
1881
1899
  Name => 'ColorData9',
1882
1900
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData9' },
1883
1901
  },
1902
+ { # (int16u[2024|3656]) - 1DXmkIII (2024) ref IB, R5/R6 (3656) ref PH
1903
+ Condition => '$count == 2024 or $count == 3656',
1904
+ Name => 'ColorData10',
1905
+ SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData10' },
1906
+ },
1884
1907
  {
1885
1908
  Name => 'ColorDataUnknown',
1886
1909
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorDataUnknown' },
@@ -5660,6 +5683,13 @@ my %ciMaxFocal = (
5660
5683
  ValueConv => 'unpack("H*",$val)',
5661
5684
  ValueConvInv => 'length($val) < 10 and $val = 0 x (10-length($val)) . $val; pack("H*",$val)',
5662
5685
  },
5686
+ 0x5c1 => {
5687
+ Name => 'FirmwareVersion',
5688
+ Format => 'string[6]',
5689
+ Writable => 0,
5690
+ Condition => '$$valPt =~ /^\d\.\d\.\d\0/',
5691
+ Notes => 'M50', # (firmware 1.0.0)
5692
+ },
5663
5693
  );
5664
5694
 
5665
5695
  # Picture Style information for various cameras (ref 48)
@@ -6692,7 +6722,17 @@ my %ciMaxFocal = (
6692
6722
  264 => 'Canon RF 15-35mm F2.8L IS USM',
6693
6723
  265 => 'Canon RF 24-240mm F4-6.3 IS USM',
6694
6724
  266 => 'Canon RF 70-200mm F2.8L IS USM',
6725
+ 268 => 'Canon RF 600mm F11 IS STM',
6726
+ 269 => 'Canon RF 600mm F11 IS STM + RF1.4x',
6727
+ 270 => 'Canon RF 600mm F11 IS STM + RF2x',
6728
+ 271 => 'Canon RF 800mm F11 IS STM',
6729
+ 272 => 'Canon RF 800mm F11 IS STM + RF1.4x',
6730
+ 273 => 'Canon RF 800mm F11 IS STM + RF2x',
6695
6731
  274 => 'Canon RF 24-105mm F4-7.1 IS STM',
6732
+ 275 => 'Canon RF 100-500mm F4.5-7.1L IS USM',
6733
+ 276 => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF1.4x',
6734
+ 277 => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF2x',
6735
+ # Note: add new RF lenses to %canonLensTypes with ID 61182
6696
6736
  },
6697
6737
  },
6698
6738
  );
@@ -8037,7 +8077,6 @@ my %ciMaxFocal = (
8037
8077
  0x149 => { #IB
8038
8078
  Name => 'PerChannelBlackLevel',
8039
8079
  Format => 'int16u[4]',
8040
- Notes => '1300D',
8041
8080
  },
8042
8081
  # 0x318 - PerChannelBlackLevel again (ref IB)
8043
8082
  0x31c => { #IB
@@ -8055,6 +8094,128 @@ my %ciMaxFocal = (
8055
8094
  },
8056
8095
  );
8057
8096
 
8097
+ # Color data (MakerNotes tag 0x4001, count=2024,3656)
8098
+ # (same as ColorData9 but shifted up by 0x0e, ref PH)
8099
+ %Image::ExifTool::Canon::ColorData10 = (
8100
+ %binaryDataAttrs,
8101
+ FORMAT => 'int16s',
8102
+ FIRST_ENTRY => 0,
8103
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8104
+ DATAMEMBER => [ 0 ],
8105
+ IS_SUBDIR => [ 0x118 ],
8106
+ 0x00 => {
8107
+ Name => 'ColorDataVersion',
8108
+ DataMember => 'ColorDataVersion',
8109
+ RawConv => '$$self{ColorDataVersion} = $val',
8110
+ PrintConv => {
8111
+ 32 => '32 (1DXmkIII)', #IB
8112
+ 33 => '33 (R5/R6)',
8113
+ },
8114
+ },
8115
+ 0x55 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
8116
+ 0x59 => 'ColorTempAsShot',
8117
+ 0x5a => { Name => 'WB_RGGBLevelsAuto', Format => 'int16s[4]' },
8118
+ 0x5e => 'ColorTempAuto',
8119
+ 0x5f => { Name => 'WB_RGGBLevelsMeasured', Format => 'int16s[4]' },
8120
+ 0x63 => 'ColorTempMeasured',
8121
+ 0x64 => { Name => 'WB_RGGBLevelsUnknown', Format => 'int16s[4]', Unknown => 1 },
8122
+ 0x68 => { Name => 'ColorTempUnknown', Unknown => 1 },
8123
+ 0x69 => { Name => 'WB_RGGBLevelsUnknown2', Format => 'int16s[4]', Unknown => 1 },
8124
+ 0x6d => { Name => 'ColorTempUnknown2', Unknown => 1 },
8125
+ 0x6e => { Name => 'WB_RGGBLevelsUnknown3', Format => 'int16s[4]', Unknown => 1 },
8126
+ 0x72 => { Name => 'ColorTempUnknown3', Unknown => 1 },
8127
+ 0x73 => { Name => 'WB_RGGBLevelsUnknown4', Format => 'int16s[4]', Unknown => 1 },
8128
+ 0x77 => { Name => 'ColorTempUnknown4', Unknown => 1 },
8129
+ 0x78 => { Name => 'WB_RGGBLevelsUnknown5', Format => 'int16s[4]', Unknown => 1 },
8130
+ 0x7c => { Name => 'ColorTempUnknown5', Unknown => 1 },
8131
+ 0x7d => { Name => 'WB_RGGBLevelsUnknown6', Format => 'int16s[4]', Unknown => 1 },
8132
+ 0x81 => { Name => 'ColorTempUnknown6', Unknown => 1 },
8133
+ 0x82 => { Name => 'WB_RGGBLevelsUnknown7', Format => 'int16s[4]', Unknown => 1 },
8134
+ 0x86 => { Name => 'ColorTempUnknown7', Unknown => 1 },
8135
+ 0x87 => { Name => 'WB_RGGBLevelsUnknown8', Format => 'int16s[4]', Unknown => 1 },
8136
+ 0x8b => { Name => 'ColorTempUnknown8', Unknown => 1 },
8137
+ 0x8c => { Name => 'WB_RGGBLevelsUnknown9', Format => 'int16s[4]', Unknown => 1 },
8138
+ 0x90 => { Name => 'ColorTempUnknown9', Unknown => 1 },
8139
+ 0x91 => { Name => 'WB_RGGBLevelsUnknown10', Format => 'int16s[4]', Unknown => 1 },
8140
+ 0x95 => { Name => 'ColorTempUnknown10', Unknown => 1 },
8141
+ 0x96 => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16s[4]' },
8142
+ 0x9a => 'ColorTempDaylight',
8143
+ 0x9b => { Name => 'WB_RGGBLevelsShade', Format => 'int16s[4]' },
8144
+ 0x9f => 'ColorTempShade',
8145
+ 0xa0 => { Name => 'WB_RGGBLevelsCloudy', Format => 'int16s[4]' },
8146
+ 0xa4 => 'ColorTempCloudy',
8147
+ 0xa5 => { Name => 'WB_RGGBLevelsTungsten', Format => 'int16s[4]' },
8148
+ 0xa9 => 'ColorTempTungsten',
8149
+ 0xaa => { Name => 'WB_RGGBLevelsFluorescent',Format => 'int16s[4]' },
8150
+ 0xae => 'ColorTempFluorescent',
8151
+ 0xaf => { Name => 'WB_RGGBLevelsKelvin', Format => 'int16s[4]' },
8152
+ 0xb3 => 'ColorTempKelvin',
8153
+ 0xb4 => { Name => 'WB_RGGBLevelsFlash', Format => 'int16s[4]' },
8154
+ 0xb8 => 'ColorTempFlash',
8155
+ 0xb9 => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 },
8156
+ 0xbd => { Name => 'ColorTempUnknown11', Unknown => 1 },
8157
+ 0xbe => { Name => 'WB_RGGBLevelsUnknown12', Format => 'int16s[4]', Unknown => 1 },
8158
+ 0xc2 => { Name => 'ColorTempUnknown12', Unknown => 1 },
8159
+ 0xc3 => { Name => 'WB_RGGBLevelsUnknown13', Format => 'int16s[4]', Unknown => 1 },
8160
+ 0xc7 => { Name => 'ColorTempUnknown13', Unknown => 1 },
8161
+ 0xc8 => { Name => 'WB_RGGBLevelsUnknown14', Format => 'int16s[4]', Unknown => 1 },
8162
+ 0xcc => { Name => 'ColorTempUnknown14', Unknown => 1 },
8163
+ 0xcd => { Name => 'WB_RGGBLevelsUnknown15', Format => 'int16s[4]', Unknown => 1 },
8164
+ 0xd1 => { Name => 'ColorTempUnknown15', Unknown => 1 },
8165
+ 0xd2 => { Name => 'WB_RGGBLevelsUnknown16', Format => 'int16s[4]', Unknown => 1 },
8166
+ 0xd6 => { Name => 'ColorTempUnknown16', Unknown => 1 },
8167
+ 0xd7 => { Name => 'WB_RGGBLevelsUnknown17', Format => 'int16s[4]', Unknown => 1 },
8168
+ 0xdb => { Name => 'ColorTempUnknown17', Unknown => 1 },
8169
+ 0xdc => { Name => 'WB_RGGBLevelsUnknown18', Format => 'int16s[4]', Unknown => 1 },
8170
+ 0xe0 => { Name => 'ColorTempUnknown18', Unknown => 1 },
8171
+ 0xe1 => { Name => 'WB_RGGBLevelsUnknown19', Format => 'int16s[4]', Unknown => 1 },
8172
+ 0xe5 => { Name => 'ColorTempUnknown19', Unknown => 1 },
8173
+ 0xe6 => { Name => 'WB_RGGBLevelsUnknown20', Format => 'int16s[4]', Unknown => 1 },
8174
+ 0xea => { Name => 'ColorTempUnknown20', Unknown => 1 },
8175
+ 0xeb => { Name => 'WB_RGGBLevelsUnknown21', Format => 'int16s[4]', Unknown => 1 },
8176
+ 0xef => { Name => 'ColorTempUnknown21', Unknown => 1 },
8177
+ 0xf0 => { Name => 'WB_RGGBLevelsUnknown22', Format => 'int16s[4]', Unknown => 1 },
8178
+ 0xf4 => { Name => 'ColorTempUnknown22', Unknown => 1 },
8179
+ 0xf5 => { Name => 'WB_RGGBLevelsUnknown23', Format => 'int16s[4]', Unknown => 1 },
8180
+ 0xf9 => { Name => 'ColorTempUnknown23', Unknown => 1 },
8181
+ 0xfa => { Name => 'WB_RGGBLevelsUnknown24', Format => 'int16s[4]', Unknown => 1 },
8182
+ 0xfe => { Name => 'ColorTempUnknown24', Unknown => 1 },
8183
+ 0xff => { Name => 'WB_RGGBLevelsUnknown25', Format => 'int16s[4]', Unknown => 1 },
8184
+ 0x103=> { Name => 'ColorTempUnknown25', Unknown => 1 },
8185
+ 0x104=> { Name => 'WB_RGGBLevelsUnknown26', Format => 'int16s[4]', Unknown => 1 },
8186
+ 0x108=> { Name => 'ColorTempUnknown26', Unknown => 1 },
8187
+ 0x109=> { Name => 'WB_RGGBLevelsUnknown27', Format => 'int16s[4]', Unknown => 1 },
8188
+ 0x10d=> { Name => 'ColorTempUnknown27', Unknown => 1 },
8189
+ 0x10e=> { Name => 'WB_RGGBLevelsUnknown28', Format => 'int16s[4]', Unknown => 1 },
8190
+ 0x112=> { Name => 'ColorTempUnknown28', Unknown => 1 },
8191
+ 0x113=> { Name => 'WB_RGGBLevelsUnknown29', Format => 'int16s[4]', Unknown => 1 },
8192
+ 0x117=> { Name => 'ColorTempUnknown29', Unknown => 1 },
8193
+ 0x118 => {
8194
+ Name => 'ColorCalib',
8195
+ Format => 'undef[120]',
8196
+ Unknown => 1,
8197
+ SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCalib' }
8198
+ },
8199
+ 0x157 => {
8200
+ Name => 'PerChannelBlackLevel',
8201
+ Format => 'int16u[4]',
8202
+ },
8203
+ # 0x326 - PerChannelBlackLevel again
8204
+ 0x32a => {
8205
+ Name => 'NormalWhiteLevel',
8206
+ Format => 'int16u',
8207
+ RawConv => '$val || undef',
8208
+ },
8209
+ 0x32b => {
8210
+ Name => 'SpecularWhiteLevel',
8211
+ Format => 'int16u',
8212
+ },
8213
+ 0x32c => {
8214
+ Name => 'LinearityUpperMargin',
8215
+ Format => 'int16u',
8216
+ },
8217
+ );
8218
+
8058
8219
  # Unknown color data (MakerNotes tag 0x4001)
8059
8220
  %Image::ExifTool::Canon::ColorDataUnknown = (
8060
8221
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
@@ -8563,7 +8724,7 @@ my %filterConv = (
8563
8724
  Name => 'MakerNoteCanon',
8564
8725
  SubDirectory => {
8565
8726
  TagTable => 'Image::ExifTool::Canon::Main',
8566
- ProcessProc => \&Image::ExifTool::ProcessTIFF,
8727
+ ProcessProc => \&ProcessCMT3,
8567
8728
  WriteProc => \&Image::ExifTool::WriteTIFF,
8568
8729
  },
8569
8730
  },
@@ -9509,6 +9670,33 @@ sub CanonEvInv($)
9509
9670
  return $sign * ($val * 0x20 + $frac);
9510
9671
  }
9511
9672
 
9673
+ #------------------------------------------------------------------------------
9674
+ # Read CMT3 maker notes from CR3 file
9675
+ # Inputs: 0) ExifTool object reference, 1) dirInfo ref, 2) tag table ref
9676
+ # Returns: data block (may be empty if no Exif data) or undef on error
9677
+ sub ProcessCMT3($$$)
9678
+ {
9679
+ my ($et, $dirInfo, $tagTablePtr) = @_;
9680
+
9681
+ # extract the static maker notes to copying to other file types if requested
9682
+ # Note: this won't copy makernotes in the timed metadata since these are stored
9683
+ # separately, but the only records they have that aren't in the static maker notes
9684
+ # (for the M50) are: ColorData9, Flavor, CanonCameraInfoUnknown,
9685
+ # VignettingCorrUnknown1, Canon_0x4033 and Canon_0x402e
9686
+ if (($et->Options('MakerNotes') or $$et{REQ_TAG_LOOKUP}{makernotecanon}) and
9687
+ $$dirInfo{DirLen} > 8)
9688
+ {
9689
+ my $dataPt = $$dirInfo{DataPt};
9690
+ # remove old (unused) trailer
9691
+ $$dataPt =~ s/(II\x2a\0|MM\0\x2a)\0{4,10}$//;
9692
+ # remove TIFF header and append as the Canon makernote trailer
9693
+ # (so offsets will be interpreted correctly)
9694
+ my $val = substr($$dataPt,8) . substr($$dataPt,0,8);
9695
+ $et->FoundTag($Image::ExifTool::Canon::uuid{CMT3}, \$val);
9696
+ }
9697
+ return $et->ProcessTIFF($dirInfo, $tagTablePtr);
9698
+ }
9699
+
9512
9700
  #------------------------------------------------------------------------------
9513
9701
  # Process CTMD EXIF information
9514
9702
  # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref