exiftool_vendored 11.94.0 → 12.06.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 (62) hide show
  1. checksums.yaml +5 -5
  2. data/bin/Changes +163 -3
  3. data/bin/MANIFEST +5 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +32 -32
  7. data/bin/exiftool +152 -52
  8. data/bin/lib/Image/ExifTool.pm +166 -115
  9. data/bin/lib/Image/ExifTool.pod +108 -81
  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 +13 -7
  13. data/bin/lib/Image/ExifTool/Canon.pm +6 -3
  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 +16 -3
  17. data/bin/lib/Image/ExifTool/Exif.pm +15 -6
  18. data/bin/lib/Image/ExifTool/Font.pm +9 -2
  19. data/bin/lib/Image/ExifTool/GIF.pm +5 -0
  20. data/bin/lib/Image/ExifTool/GeoTiff.pm +2 -0
  21. data/bin/lib/Image/ExifTool/Geotag.pm +69 -21
  22. data/bin/lib/Image/ExifTool/GoPro.pm +10 -1
  23. data/bin/lib/Image/ExifTool/H264.pm +1 -1
  24. data/bin/lib/Image/ExifTool/HtmlDump.pm +2 -2
  25. data/bin/lib/Image/ExifTool/ID3.pm +91 -12
  26. data/bin/lib/Image/ExifTool/Lang/de.pm +3 -1
  27. data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  28. data/bin/lib/Image/ExifTool/M2TS.pm +44 -24
  29. data/bin/lib/Image/ExifTool/MWG.pm +9 -1
  30. data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
  31. data/bin/lib/Image/ExifTool/Minolta.pm +3 -2
  32. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +11 -10
  33. data/bin/lib/Image/ExifTool/Nikon.pm +156 -18
  34. data/bin/lib/Image/ExifTool/Olympus.pm +34 -17
  35. data/bin/lib/Image/ExifTool/PNG.pm +14 -3
  36. data/bin/lib/Image/ExifTool/PPM.pm +5 -5
  37. data/bin/lib/Image/ExifTool/Panasonic.pm +147 -13
  38. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +33 -0
  39. data/bin/lib/Image/ExifTool/Parrot.pm +2 -1
  40. data/bin/lib/Image/ExifTool/Pentax.pm +3 -1
  41. data/bin/lib/Image/ExifTool/Photoshop.pm +2 -1
  42. data/bin/lib/Image/ExifTool/QuickTime.pm +277 -33
  43. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +460 -67
  44. data/bin/lib/Image/ExifTool/README +21 -20
  45. data/bin/lib/Image/ExifTool/RIFF.pm +123 -3
  46. data/bin/lib/Image/ExifTool/RTF.pm +12 -7
  47. data/bin/lib/Image/ExifTool/Ricoh.pm +19 -1
  48. data/bin/lib/Image/ExifTool/Shift.pl +1 -0
  49. data/bin/lib/Image/ExifTool/SigmaRaw.pm +40 -33
  50. data/bin/lib/Image/ExifTool/Sony.pm +379 -12
  51. data/bin/lib/Image/ExifTool/TagLookup.pm +1959 -1874
  52. data/bin/lib/Image/ExifTool/TagNames.pod +346 -55
  53. data/bin/lib/Image/ExifTool/Validate.pm +4 -4
  54. data/bin/lib/Image/ExifTool/WriteExif.pl +3 -2
  55. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +26 -15
  56. data/bin/lib/Image/ExifTool/Writer.pl +52 -23
  57. data/bin/lib/Image/ExifTool/XMP.pm +41 -4
  58. data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
  59. data/bin/lib/Image/ExifTool/ZISRAW.pm +123 -0
  60. data/bin/perl-Image-ExifTool.spec +31 -31
  61. data/lib/exiftool_vendored/version.rb +1 -1
  62. metadata +4 -4
@@ -65,35 +65,36 @@ 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
68
+ 3FR r | DPX r | ISO r | O r | RAW r/w
69
+ 3G2 r/w | DR4 r/w/c | ITC r | ODP r | RIFF r
70
+ 3GP r/w | DSS r | J2C r | ODS r | RSRC r
71
+ A r | DV r | JNG r/w | ODT r | RTF r
72
+ AA r | DVB r/w | JP2 r/w | OFR r | RW2 r/w
73
+ AAE r | DVR-MS r | JPEG r/w | OGG r | RWL r/w
74
+ AAX r/w | DYLIB r | JSON r | OGV r | RWZ r
75
+ ACR r | EIP r | K25 r | OPUS r | RM r
76
+ AFM r | EPS r/w | KDC r | ORF r/w | SEQ r
77
+ AI r/w | EPUB r | KEY r | OTF r | SKETCH r
78
+ AIFF r | ERF r/w | LA r | PAC r | SO r
79
+ APE r | EXE r | LFP r | PAGES r | SR2 r/w
80
+ ARQ r/w | EXIF r/w/c | LNK r | PBM r/w | SRF r
81
+ ARW r/w | EXR r | LRV r/w | PCD r | SRW r/w
82
+ ASF r | EXV r/w/c | M2TS r | PCX r | SVG r
83
+ AVI r | F4A/V r/w | M4A/V r/w | PDB r | SWF r
84
+ AVIF r/w | FFF r/w | MAX r | PDF r/w | THM r/w
85
+ AZW r | FITS r | MEF r/w | PEF r/w | TIFF r/w
86
+ BMP r | FLA r | MIE r/w/c | PFA r | TORRENT r
87
+ BPG r | FLAC r | MIFF r | PFB r | TTC r
88
+ BTF r | FLIF r/w | MKA r | PFM r | TTF r
89
+ CHM r | FLV r | MKS r | PGF r | TXT r
90
+ COS r | FPF r | MKV r | PGM r/w | VCF r
91
+ CR2 r/w | FPX r | MNG r/w | PLIST r | VRD r/w/c
92
+ CR3 r/w | GIF r/w | MOBI r | PICT r | VSD r
93
+ CRM r/w | GPR r/w | MODD r | PMP r | WAV r
94
+ CRW r/w | GZ r | MOI r | PNG r/w | WDP r/w
95
+ CS1 r/w | HDP r/w | MOS r/w | PPM r/w | WEBP r
96
+ CSV r | HDR r | MOV r/w | PPT r | WEBM r
97
+ CZI r | HEIC r/w | MP3 r | PPTX r | WMA r
97
98
  DCM r | HEIF r/w | MP4 r/w | PS r/w | WMV r
98
99
  DCP r/w | HTML r | MPC r | PSB r/w | WTV r
99
100
  DCR r | ICC r/w/c | MPG r | PSD r/w | WV r
@@ -104,7 +105,6 @@ supported by ExifTool (r = read, w = write, c = create):
104
105
  DNG r/w | INSP r/w | NEF r/w | RAF r/w | XMP r/w/c
105
106
  DOC r | INSV r | NRW r/w | RAM r | ZIP r
106
107
  DOCX r | INX r | NUMBERS r | RAR r |
107
- DPX r | ISO r | O r | RAW r/w |
108
108
 
109
109
  Meta Information
110
110
  ----------------------+----------------------+---------------------
@@ -652,16 +652,17 @@ based on the file's extension. Default is undef.
652
652
 
653
653
  Perl expression used to filter values for all tags. The expression acts on
654
654
  the value of the Perl default variable ($_), and changes the value of this
655
- variable as required. The value is not changed if $_ is set to undef. List
656
- items are filtered individually. Applies to all returned values unless
657
- PrintConv option is disabled.
655
+ variable as required. The current ExifTool object may be accessed through
656
+ $self. The value is not changed if $_ is set to undef. List items are
657
+ filtered individually. Applies to all returned values unless PrintConv
658
+ option is disabled.
658
659
 
659
660
  =item FilterW
660
661
 
661
662
  Perl expression used to filter PrintConv values when writing. The
662
663
  expression acts on the value of the Perl default variable ($_), and changes
663
- the value of this variable as required. The value is not changed if $_ is
664
- set to undef.
664
+ the value of this variable as required. The current ExifTool object may be
665
+ accessed through $self. The tag is not written if $_ is set to undef.
665
666
 
666
667
  =item FixBase
667
668
 
@@ -730,6 +731,11 @@ to be excluded by preceding group name with a '-'. See L</GetGroup> for a
730
731
  description of group families, and L</GetAllGroups [static]> for lists of
731
732
  group names.
732
733
 
734
+ =item HexTagIDs
735
+
736
+ Use hexadecimal instead of decimal for the family 7 group names of tags with
737
+ numerical ID's.
738
+
733
739
  =item HtmlDump
734
740
 
735
741
  Dump information in hex to dynamic HTML web page. The value may be 0-3 for
@@ -808,6 +814,11 @@ formatting expression returns undef). If not set, a minor error is issued
808
814
  for missing values, or the value is set to '' if L</IgnoreMinorErrors> is
809
815
  set. Default is undef.
810
816
 
817
+ =item NoMultiExif
818
+
819
+ Raise error when attempting to write multi-segment EXIF in a JPEG image.
820
+ Default is undef.
821
+
811
822
  =item NoPDFList
812
823
 
813
824
  Flag to avoid splitting PDF list-type tag values into separate items.
@@ -1600,7 +1611,8 @@ values in list context.
1600
1611
 
1601
1612
  0) ExifTool object reference
1602
1613
 
1603
- 1) Tag name (case sensitive, may be prefixed by family 0 or 1 group name)
1614
+ 1) Tag name (case sensitive, may be prefixed by family 0, 1 or 7 group
1615
+ names, separated by colons)
1604
1616
 
1605
1617
  =item Return Values:
1606
1618
 
@@ -1662,34 +1674,35 @@ in a specified file.
1662
1674
 
1663
1675
  2-N) [optional] List of tag names to set or options hash references. All
1664
1676
  writable tags are set if none are specified. The tag names are not case
1665
- sensitive, and may be prefixed by one or more family 0, 1 or 2 group names
1666
- with optional leading family numbers, separated by colons (eg. 'exif:iso').
1667
- A leading '-' indicates tags to be excluded (eg. '-comment'), or a trailing
1668
- '#' causes the ValueConv value to be copied (same as setting the Type option
1669
- to 'ValueConv' for this tag only). Wildcards ('*' and '?') may be used in
1670
- the tag name. A tag name of '*' is commonly used when a group is specified
1671
- to copy all tags in the group (eg. 'XMP:*'). A special feature allows tag
1672
- names of the form 'DSTTAGE<lt>SRCTAG' (or 'SRCTAGE<gt>DSTTAG') to be
1673
- specified to copy information to a tag with a different name or a specified
1674
- group. Both 'SRCTAG' and 'DSTTAG' may contain wildcards and/or be prefixed
1675
- by a group name (eg. 'fileModifyDateE<lt>modifyDate' or 'xmp:*E<lt>*'),
1676
- and/or suffixed by a '#' to disable print conversion. Copied tags may also
1677
- be added or deleted from a list with arguments of the form
1678
- 'DSTTAG+E<lt>SRCTAG' or 'DSTTAG-E<lt>SRCTAG'. Tags are evaluated in order,
1679
- so exclusions apply only to tags included earlier in the list. An extension
1680
- of this feature allows the tag value to be set from a string containing tag
1681
- names with leading '$' symbols (eg. 'CommentE<lt>the file is $filename').
1682
- Braces '{}' may be used around the tag name to separate it from subsequent
1683
- text, and a '$$' is used to to represent a '$' symbol. The behaviour for
1684
- missing tags in expressions is defined by the L</MissingTagValue> option.
1685
- The tag value may be modified via changes to the default input variable ($_)
1686
- in a Perl expression placed inside the braces and after a semicolon
1687
- following the tag name (see the last example above). A '@' may be added
1688
- after the tag name (before the semicolon) to make the expression act on
1689
- individual list items instead of the concatenated string for list-type tags.
1690
- Braces within the expression must be balanced. Multiple options hash
1691
- references may be passed to set different options for different tags.
1692
- Options apply to subsequent tags in the argument list.
1677
+ sensitive, and may be prefixed by one or more family 0, 1, 2 or 7 group
1678
+ names with optional leading family numbers, separated by colons (eg.
1679
+ 'exif:iso'). A leading '-' indicates tags to be excluded (eg. '-comment'),
1680
+ or a trailing '#' causes the ValueConv value to be copied (same as setting
1681
+ the Type option to 'ValueConv' for this tag only). Wildcards ('*' and '?')
1682
+ may be used in the tag name. A tag name of '*' is commonly used when a
1683
+ group is specified to copy all tags in the group (eg. 'XMP:*'). A special
1684
+ feature allows tag names of the form 'DSTTAGE<lt>SRCTAG' (or
1685
+ 'SRCTAGE<gt>DSTTAG') to be specified to copy information to a tag with a
1686
+ different name or a specified group. Both 'SRCTAG' and 'DSTTAG' may contain
1687
+ wildcards and/or be prefixed by a group name (eg.
1688
+ 'fileModifyDateE<lt>modifyDate' or 'xmp:*E<lt>*'), and/or suffixed by a '#'
1689
+ to disable print conversion. Copied tags may also be added or deleted from
1690
+ a list with arguments of the form 'DSTTAG+E<lt>SRCTAG' or
1691
+ 'DSTTAG-E<lt>SRCTAG'. Tags are evaluated in order, so exclusions apply only
1692
+ to tags included earlier in the list. An extension of this feature allows
1693
+ the tag value to be set from a string containing tag names with leading '$'
1694
+ symbols (eg. 'CommentE<lt>the file is $filename'). Braces '{}' may be used
1695
+ around the tag name to separate it from subsequent text, and a '$$' is used
1696
+ to to represent a '$' symbol. The behaviour for missing tags in expressions
1697
+ is defined by the L</MissingTagValue> option. The tag value may be modified
1698
+ via changes to the default input variable ($_) in a Perl expression placed
1699
+ inside the braces and after a semicolon following the tag name (see the last
1700
+ example above). A '@' may be added after the tag name (before the
1701
+ semicolon) to make the expression act on individual list items instead of
1702
+ the concatenated string for list-type tags. Braces within the expression
1703
+ must be balanced. Multiple options hash references may be passed to set
1704
+ different options for different tags. Options apply to subsequent tags in
1705
+ the argument list.
1693
1706
 
1694
1707
  By default, this routine will commute information between same-named tags in
1695
1708
  different groups, allowing information to be translated between images with
@@ -2066,6 +2079,14 @@ Family 6 is currently used only for EXIF/TIFF metadata, and gives the format
2066
2079
  type of the extracted value. Generated only if the L</SaveFormat> option is
2067
2080
  used when extracting.
2068
2081
 
2082
+ Family 7 is used for tag ID's. The group names are "ID-" followed by the
2083
+ tag ID with characters other than [-_A-Za-z0-9] converted to hex. Numerical
2084
+ tag ID's are given in hex if the L</HexTagIDs> option is set. When
2085
+ specifying a family 7 group name, numerical ID's may be in hex or decimal,
2086
+ and non-numercal ID's may or may not have characters other than
2087
+ [-_A-Za-z0-9] converted to hex. Note that unlike other group names, family
2088
+ 7 group names are case sensitive (except for the leading "ID-").
2089
+
2069
2090
  See L</GetAllGroups [static]> for complete lists of group names.
2070
2091
 
2071
2092
  =back
@@ -2259,22 +2280,22 @@ ICC-meta, ICC-view, ICC_Profile, ICC_Profile#, ID3, ID3v1, ID3v1_Enh,
2259
2280
  ID3v2_2, ID3v2_3, ID3v2_4, IFD0, IFD1, IPTC, IPTC#, ISO, ITC, Insta360,
2260
2281
  InteropIFD, ItemList, JFIF, JFXX, JPEG, JPEG-HDR, JSON, JVC, Jpeg2000,
2261
2282
  KDC_IFD, Keys, Kodak, KodakBordersIFD, KodakEffectsIFD, KodakIFD,
2262
- KyoceraRaw, LNK, Leaf, LeafSubIFD, Leica, Lytro, M2TS, MAC, MIE-Audio,
2263
- MIE-Camera, MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS, MIE-Geo,
2264
- MIE-Image, MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient,
2265
- MIE-Preview, MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MNG,
2266
- MOBI, MOI, MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS, MakerNotes,
2267
- MakerUnknown, Matroska, MediaJukebox, Meta, MetaIFD, Microsoft, Minolta,
2268
- MinoltaRaw, Motorola, NITF, Nikon, NikonCapture, NikonCustom, NikonScan,
2269
- Nintendo, Ocad, Ogg, Olympus, OpenEXR, Opus, PDF, PICT, PNG, PNG-pHYs, PSP,
2270
- Palm, Panasonic, PanasonicRaw, Pentax, PhaseOne, PhotoCD, PhotoMechanic,
2271
- Photoshop, PictureInfo, PostScript, PreviewIFD, PrintIM, ProfileIFD,
2272
- Qualcomm, QuickTime, RAF, RAF2, RIFF, RMETA, RSRC, RTF, Radiance, Rawzor,
2273
- Real, Real-CONT, Real-MDPR, Real-PROP, Real-RA3, Real-RA4, Real-RA5,
2274
- Real-RJMD, Reconyx, Red, Ricoh, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#,
2275
- SVG, Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD,
2276
- System, Theora, Torrent, Track#, UserData, UserParam, VCalendar, VCard,
2277
- Version0, Vorbis, WTV, XML, XMP, XMP-DICOM, XMP-Device, XMP-GAudio,
2283
+ KyoceraRaw, LNK, Leaf, LeafSubIFD, Leica, Lyrics3, Lytro, M2TS, MAC,
2284
+ MIE-Audio, MIE-Camera, MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS,
2285
+ MIE-Geo, MIE-Image, MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta,
2286
+ MIE-Orient, MIE-Preview, MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video,
2287
+ MIFF, MNG, MOBI, MOI, MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS,
2288
+ MakerNotes, MakerUnknown, Matroska, MediaJukebox, Meta, MetaIFD, Microsoft,
2289
+ Minolta, MinoltaRaw, Motorola, NITF, Nikon, NikonCapture, NikonCustom,
2290
+ NikonScan, Nintendo, Ocad, Ogg, Olympus, OpenEXR, Opus, PDF, PICT, PNG,
2291
+ PNG-pHYs, PSP, Palm, Panasonic, PanasonicRaw, Pentax, PhaseOne, PhotoCD,
2292
+ PhotoMechanic, Photoshop, PictureInfo, PostScript, PreviewIFD, PrintIM,
2293
+ ProfileIFD, Qualcomm, QuickTime, RAF, RAF2, RIFF, RMETA, RSRC, RTF,
2294
+ Radiance, Rawzor, Real, Real-CONT, Real-MDPR, Real-PROP, Real-RA3, Real-RA4,
2295
+ Real-RA5, Real-RJMD, Reconyx, Red, Ricoh, SPIFF, SR2, SR2DataIFD, SR2SubIFD,
2296
+ SRF#, SVG, Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim,
2297
+ SubIFD, System, Theora, Torrent, Track#, UserData, UserParam, VCalendar,
2298
+ VCard, Version0, Vorbis, WTV, XML, XMP, XMP-DICOM, XMP-Device, XMP-GAudio,
2278
2299
  XMP-GDepth, XMP-GFocus, XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage,
2279
2300
  XMP-MP, XMP-MP1, XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album,
2280
2301
  XMP-apple-fi, XMP-aux, XMP-cc, XMP-cell, XMP-creatorAtom, XMP-crs, XMP-dc,
@@ -2308,6 +2329,12 @@ eg. JPEG-APP1-IFD0-ExifIFD
2308
2329
  int8u, string, int16u, int32u, rational64u, int8s, undef, int16s, int32s,
2309
2330
  rational64s, float, double, ifd, unicode, complex, int64u, int64s, ifd64
2310
2331
 
2332
+ =item Family 7 (Tag ID):
2333
+
2334
+ ID-xxx (where xxx is the tag ID. Numerical ID's are given in hex with a
2335
+ leading "0x" if the HexTagIDs option is set, as are characters in
2336
+ non-numerical ID's which are not valid in a group name)
2337
+
2311
2338
  =back
2312
2339
 
2313
2340
  =head2 GetDeleteGroups [static]
@@ -2587,7 +2614,7 @@ IPTC Core and Extension specifications actually use the XMP format.)
2587
2614
 
2588
2615
  =head2 XMP
2589
2616
 
2590
- Exiftool reads XMP encoded as UTF-8, UTF-16 or UTF-32, and converts them all
2617
+ ExifTool reads XMP encoded as UTF-8, UTF-16 or UTF-32, and converts them all
2591
2618
  to UTF-8 internally. Also, all XML character entity references and numeric
2592
2619
  character references are converted. When writing, ExifTool always encodes
2593
2620
  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.34';
38
+ $VERSION = '3.37';
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
@@ -877,6 +877,11 @@ TagID: foreach $tagID (@keys) {
877
877
  $case{$lc} = $name;
878
878
  }
879
879
  my $format = $$tagInfo{Format};
880
+ # check TagID's to make sure they don't start with 'ID-'
881
+ my @grps = $et->GetGroup($tagInfo);
882
+ foreach (@grps) {
883
+ warn "Group name starts with 'ID-' for $short $name\n" if /^ID-/i;
884
+ }
880
885
  # validate Name (must not start with a digit or else XML output will not be valid;
881
886
  # must not start with a dash or exiftool command line may get confused)
882
887
  if ($name !~ /^[_A-Za-z][-\w]+$/ and
@@ -1474,7 +1479,8 @@ TagID: foreach $tagID (@keys) {
1474
1479
  my $tag;
1475
1480
  foreach $tag (sort keys %$struct) {
1476
1481
  my $tagInfo = $$struct{$tag};
1477
- next unless ref $tagInfo eq 'HASH' and $tag ne 'NAMESPACE';
1482
+ next unless ref $tagInfo eq 'HASH' and $tag ne 'NAMESPACE' and $tag ne 'GROUPS';
1483
+ warn "WARNING: $strName Struct containes $tag\n" if $Image::ExifTool::specialTags{$tag};
1478
1484
  my $writable = $$tagInfo{Writable};
1479
1485
  my @vals;
1480
1486
  unless ($writable) {
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.36';
91
+ $VERSION = '4.39';
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.36';
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,6 +487,7 @@ $VERSION = '4.36';
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)
490
+ 368.10 => 'Sigma 35mm f/1.4 DG HSM | A', #PH (012)
489
491
  '368.10' => 'Sigma 70mm f/2.8 DG Macro', #IB (A018)
490
492
  # Note: LensType 488 (0x1e8) is reported as 232 (0xe8) in 7D CameraSettings
491
493
  488 => 'Canon EF-S 15-85mm f/3.5-5.6 IS USM', #PH
@@ -532,7 +534,7 @@ $VERSION = '4.36';
532
534
  757 => 'Canon EF 400mm f/2.8L IS III USM', #IB
533
535
  758 => 'Canon EF 600mm f/4L IS III USM', #IB
534
536
 
535
- 1136 => 'Sigma 24-70mm f/2.8 DG OS HSM | Art 017', #IB
537
+ 1136 => 'Sigma 24-70mm f/2.8 DG OS HSM | A', #IB (017)
536
538
  # (STM lenses - 0x10xx)
537
539
  4142 => 'Canon EF-S 18-135mm f/3.5-5.6 IS STM',
538
540
  4143 => 'Canon EF-M 18-55mm f/3.5-5.6 IS STM or Tamron Lens',
@@ -922,6 +924,7 @@ $VERSION = '4.36';
922
924
  0x80000428 => 'EOS-1D X Mark III', #IB
923
925
  0x80000432 => 'EOS Rebel T7 / 2000D / 1500D / Kiss X90', #IB
924
926
  0x80000433 => 'EOS RP',
927
+ 0x80000435 => 'EOS Rebel T8i / 850D / X10i', #JR/PH
925
928
  0x80000436 => 'EOS SL3 / 250D / Kiss X10', #25
926
929
  0x80000437 => 'EOS 90D', #IB
927
930
  0x80000520 => 'EOS D2000C', #IB
@@ -19,7 +19,7 @@ use Image::ExifTool qw(:DataAccess);
19
19
  use Image::ExifTool::Canon;
20
20
  use Image::ExifTool::Exif;
21
21
 
22
- $VERSION = '1.56';
22
+ $VERSION = '1.57';
23
23
 
24
24
  sub ProcessCanonCustom($$$);
25
25
  sub ProcessCanonCustom2($$$);
@@ -1326,9 +1326,15 @@ my %convPFn = ( PrintConv => \&ConvertPfn, PrintConvInv => \&ConvertPfnInv );
1326
1326
  2 => 'Enable (ISO speed)',
1327
1327
  },
1328
1328
  },
1329
- 0x0109 => {
1329
+ 0x0109 => [{ # (1DXmkIII)
1330
1330
  Name => 'UsableShootingModes',
1331
- Count => 2, # (Count is 1 for 1DXmkIII -- need to decode this)
1331
+ Condition => '$count == 1',
1332
+ Count => 1,
1333
+ PrintConv => 'sprintf("Flags 0x%x",$val)',
1334
+ PrintConvInv => '$val=~/0x([\dA-F]+)/i ? hex($1) : undef',
1335
+ },{
1336
+ Name => 'UsableShootingModes',
1337
+ Count => 2,
1332
1338
  PrintConv => [
1333
1339
  \%disableEnable,
1334
1340
  'sprintf("Flags 0x%x",$val)', # (M, Tv, Av, P, Bulb)
@@ -1337,10 +1343,16 @@ my %convPFn = ( PrintConv => \&ConvertPfn, PrintConvInv => \&ConvertPfnInv );
1337
1343
  undef,
1338
1344
  '$val=~/0x([\dA-F]+)/i ? hex($1) : undef',
1339
1345
  ],
1340
- },
1341
- 0x010a => {
1346
+ }],
1347
+ 0x010a => [{ # (1DXmkIII)
1342
1348
  Name => 'UsableMeteringModes',
1343
- Count => 2, # (Count is 1 for 1DXmkIII -- need to decode this)
1349
+ Condition => '$count == 1',
1350
+ Count => 1,
1351
+ PrintConv => 'sprintf("Flags 0x%x",$val)',
1352
+ PrintConvInv => '$val=~/0x([\dA-F]+)/i ? hex($1) : undef',
1353
+ },{
1354
+ Name => 'UsableMeteringModes',
1355
+ Count => 2,
1344
1356
  PrintConv => [
1345
1357
  \%disableEnable,
1346
1358
  'sprintf("Flags 0x%x",$val)', # (evaluative,partial,spot,center-weighted average)
@@ -1349,7 +1361,7 @@ my %convPFn = ( PrintConv => \&ConvertPfn, PrintConvInv => \&ConvertPfnInv );
1349
1361
  undef,
1350
1362
  '$val=~/0x([\dA-F]+)/i ? hex($1) : undef',
1351
1363
  ],
1352
- },
1364
+ }],
1353
1365
  0x010b => {
1354
1366
  Name => 'ExposureModeInManual',
1355
1367
  PrintConv => {
@@ -2066,7 +2078,27 @@ my %convPFn = ( PrintConv => \&ConvertPfn, PrintConvInv => \&ConvertPfnInv );
2066
2078
  2 => 'Enable: Down with Set',
2067
2079
  },
2068
2080
  },
2069
- 0x0610 => {
2081
+ 0x0610 => [{ # (1DXmkIII)
2082
+ Name => 'ContinuousShootingSpeed',
2083
+ Condition => '$count == 6',
2084
+ Count => 6,
2085
+ PrintConv => [
2086
+ \%disableEnable,
2087
+ '"Hi $val"',
2088
+ '"Cont $val"',
2089
+ '"Lo $val"',
2090
+ '"Soft $val"',
2091
+ '"Soft LS $val"',
2092
+ ],
2093
+ PrintConvInv => [
2094
+ undef,
2095
+ '$val=~/(\d+)/ ? $1 : 0',
2096
+ '$val=~/(\d+)/ ? $1 : 0',
2097
+ '$val=~/(\d+)/ ? $1 : 0',
2098
+ '$val=~/(\d+)/ ? $1 : 0',
2099
+ '$val=~/(\d+)/ ? $1 : 0',
2100
+ ],
2101
+ },{ # others
2070
2102
  Name => 'ContinuousShootingSpeed',
2071
2103
  Count => 3,
2072
2104
  PrintConv => [
@@ -2079,7 +2111,7 @@ my %convPFn = ( PrintConv => \&ConvertPfn, PrintConvInv => \&ConvertPfnInv );
2079
2111
  '$val=~/(\d+)/ ? $1 : 0',
2080
2112
  '$val=~/(\d+)/ ? $1 : 0',
2081
2113
  ],
2082
- },
2114
+ }],
2083
2115
  0x0611 => {
2084
2116
  Name => 'ContinuousShotLimit',
2085
2117
  Count => 2,
@@ -2092,9 +2124,15 @@ my %convPFn = ( PrintConv => \&ConvertPfn, PrintConvInv => \&ConvertPfnInv );
2092
2124
  '$val=~/(\d+)/ ? $1 : 0',
2093
2125
  ],
2094
2126
  },
2095
- 0x0612 => { # (1DX)
2127
+ 0x0612 => [{ # (1DXmkIII)
2128
+ Name => 'RestrictDriveModes',
2129
+ Condition => '$count == 1',
2130
+ Count => 1,
2131
+ PrintConv => 'sprintf("Flags 0x%x",$val)',
2132
+ PrintConvInv => '$val=~/0x([\dA-F]+)/i ? hex($1) : undef',
2133
+ },{ # (1DX)
2096
2134
  Name => 'RestrictDriveModes',
2097
- Count => 2, # (Count is 1 for 1DXmkIII -- need to decode this)
2135
+ Count => 2,
2098
2136
  PrintConv => [
2099
2137
  \%disableEnable,
2100
2138
  'sprintf("Flags 0x%x",$val)', # (Single,Cont Hi,Cont Lo,Timer 10,Timer 2,Silent,Super Hi)
@@ -2103,7 +2141,7 @@ my %convPFn = ( PrintConv => \&ConvertPfn, PrintConvInv => \&ConvertPfnInv );
2103
2141
  undef,
2104
2142
  '$val=~/0x([\dA-F]+)/i ? hex($1) : undef',
2105
2143
  ],
2106
- },
2144
+ }],
2107
2145
  #### 4a) Operation
2108
2146
  0x0701 => [
2109
2147
  {
@@ -2458,7 +2496,21 @@ my %convPFn = ( PrintConv => \&ConvertPfn, PrintConvInv => \&ConvertPfnInv );
2458
2496
  },
2459
2497
  },
2460
2498
  ],
2461
- 0x080c => {
2499
+ 0x080c => [{ # (1DXmkIII)
2500
+ Name => 'TimerLength',
2501
+ Condition => '$count == 3',
2502
+ Count => 3,
2503
+ PrintConv => [
2504
+ '"6 s: $val"',
2505
+ '"16 s: $val"',
2506
+ '"After release: $val"',
2507
+ ],
2508
+ PrintConvInv => [
2509
+ '$val=~/(\d+)$/ ? $1 : 0',
2510
+ '$val=~/(\d+)$/ ? $1 : 0',
2511
+ '$val=~/(\d+)$/ ? $1 : 0',
2512
+ ],
2513
+ },{
2462
2514
  Name => 'TimerLength',
2463
2515
  Count => 4,
2464
2516
  PrintConv => [
@@ -2473,7 +2525,7 @@ my %convPFn = ( PrintConv => \&ConvertPfn, PrintConvInv => \&ConvertPfnInv );
2473
2525
  '$val=~/(\d+)$/ ? $1 : 0',
2474
2526
  '$val=~/(\d+)$/ ? $1 : 0',
2475
2527
  ],
2476
- },
2528
+ }],
2477
2529
  0x080d => {
2478
2530
  Name => 'ShortReleaseTimeLag',
2479
2531
  PrintConv => \%disableEnable,
@@ -2520,6 +2572,8 @@ my %convPFn = ( PrintConv => \&ConvertPfn, PrintConvInv => \&ConvertPfnInv );
2520
2572
  PrintConv => {
2521
2573
  0 => 'Cancel selected',
2522
2574
  1 => 'Erase selected',
2575
+ 2 => 'Erase RAW selected', # (1DXmkIII)
2576
+ 3 => 'Erase non-RAW selected', # (1DXmkIII)
2523
2577
  },
2524
2578
  },
2525
2579
  0x0814 => { # (5DS)
@@ -2595,7 +2649,7 @@ sub ProcessCanonCustom2($$$)
2595
2649
  my $recPos = $pos;
2596
2650
  my $recEnd = $pos + $recLen - 8;
2597
2651
  if ($recEnd > $end) {
2598
- $et->Warn('Corrupted CanonCustom2 group');
2652
+ $et->Warn("Corrupted CanonCustom2 group $recNum");
2599
2653
  return 0;
2600
2654
  }
2601
2655
  if ($verbose and not $write) {
@@ -2605,8 +2659,17 @@ sub ProcessCanonCustom2($$$)
2605
2659
  for ($i=0; $recPos + 8 < $recEnd; ++$i, $recPos+=4*$num) {
2606
2660
  $tag = Get32u($dataPt, $recPos);
2607
2661
  $num = Get32u($dataPt, $recPos + 4);
2662
+ my $nextRec = $recPos + 8 + $num * 4;
2663
+ last if $nextRec > $recEnd;
2664
+ # patch for EOS-1DXmkIII firmware 1.0.0 bug:
2665
+ if ($tag == 0x70c and $num == 0x66 and $nextRec + 8 < $recEnd) {
2666
+ my $tmp = Get32u($dataPt, $nextRec + 4);
2667
+ if ($tmp == 0x70f) {
2668
+ $et->Warn('Fixed incorrect CanonCustom tag 0x70c size', 1);
2669
+ ++$num; # (count should be one greater)
2670
+ }
2671
+ }
2608
2672
  $recPos += 8;
2609
- last if $recPos + $num * 4 > $recEnd;
2610
2673
  my $val = ReadValue($dataPt, $recPos, 'int32s', $num, $num * 4);
2611
2674
  if ($write) {
2612
2675
  # write new value
@@ -2638,6 +2701,9 @@ sub ProcessCanonCustom2($$$)
2638
2701
  }
2639
2702
  }
2640
2703
  }
2704
+ if ($i != $recCount) {
2705
+ $et->Warn('Missing '.($recCount-$i)." entries in CanonCustom2 group $recNum directory", 1);
2706
+ }
2641
2707
  $pos = $recEnd;
2642
2708
  }
2643
2709
  if ($pos != $end) {