exiftool_vendored 13.37.0 → 13.38.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e99939a853444d1ebc80ab2738cd08bc29f2945044aa74ff682a9205e7e2e878
4
- data.tar.gz: 14cc3a3e709dd586a4d73d4056c52ee24e74c0020042ecba084211a17ce93381
3
+ metadata.gz: 41c912cc465c00eabd73bd1192f484d997d3c2b8c2dfaf3b63bb49251d53be0c
4
+ data.tar.gz: 742291182313e01c2c318ee7e9df71f4dfc4d4e9479d725e7d50eb218b6e9436
5
5
  SHA512:
6
- metadata.gz: '098d4af617f88acbc7cba6dd401e894e6eac938b5475b889fab26de2c670aef6320040e3bb5acd1e951d06c95de022e6c76207e67c6f022117566efa13fca872'
7
- data.tar.gz: 72e570d5b590d04d5a39de9c32698f3946c0f1c0b8bdac6d9010b6c0b94e0418100b6991d16601c5064a093a6d04867290ddc286ae76478e0cc87900a9adb2e3
6
+ metadata.gz: 5c31b6b771b02395a5a78d86f0c531ba82c21f491811c2d1f181f6445fe878a8a59b32f4eeb6fa9874b12309a6ea69098d77f5635859fef2a092004b35d72b9c
7
+ data.tar.gz: 1537c480de198d70e14d832dc48d4f9591016cbec09c99ee0d9fab69327236819040c37756478a796ad4483da1e149ada4addfcd1bb0a148c4dc4ecb864de59e
data/bin/Changes CHANGED
@@ -7,6 +7,21 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 13.36. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Sept. 30, 2025 - Version 13.38
11
+
12
+ - Added read support for DSF audio files (github #331)
13
+ - Decode a couple more GoPro tags
14
+ - Improved WavPack audio file support to recognize the WVP extension and
15
+ extract more than just RIFF metadata
16
+ - Updated Sony decoding for the ILCE-6400A (thanks Jos Roost)
17
+ - Set family 0 group name to "Composite" for approximated GPSDateTime in timed
18
+ video metadata
19
+ - Patched to recognize M2TS videos which begin in the middle of a packet
20
+ - Patched to attempt reading XMP which has an invalid encoding (github #348)
21
+ - Patched to avoid possible runtime warning when reading a EXE file with
22
+ corrupt resources (github #354)
23
+ - Fixed typo in a GoPro tag name
24
+
10
25
  Sept. 22, 2025 - Version 13.37
11
26
 
12
27
  - Added support for geotagging from Columbus GPS logger CSV files
@@ -15,12 +30,12 @@ Sept. 22, 2025 - Version 13.37
15
30
  - Added new Canon RFLensType and CanonModelID values (thanks Norbert Wasser
16
31
  and Hubert Figuiere, github #350)
17
32
  - Added a new FujiFilm FaceElementType value
33
+ - Decode Google HDRP maker notes (both text and Protobuf formats)
18
34
  - Decode Reconyx MicroFire and Hyperfire 4K maker notes (thanks Reconyx)
19
35
  - Decode a number of new Canon and Pentax tags and add a number of new values
20
36
  (thanks Karsten Gieselmann)
21
37
  - Decode maker notes from Ricoh GR III videos
22
38
  - Decode a new Sony tag (thanks Jos Roost)
23
- - Decode Google HDRP maker notes
24
39
  - Raised size limit on QuickTime atoms extracted for the -ee option, and added
25
40
  a minor warning and allow bypassing with the -m option if over this limit
26
41
  - Minor change to verbose output for XMP metadata
@@ -28,7 +43,7 @@ Sept. 22, 2025 - Version 13.37
28
43
  - Fixed incorrect FujiFilm PanoramaDirection values
29
44
  - API Changes:
30
45
  - Fixed GeoDir option so alternate languages are loaded properly when a
31
- relative path is used
46
+ relative path is specified
32
47
 
33
48
  Sept. 9, 2025 - Version 13.36 (production release)
34
49
 
@@ -3091,7 +3106,7 @@ Feb. 14, 2019 - Version 11.27
3091
3106
  Jan. 21, 2019 - Version 11.26
3092
3107
 
3093
3108
  - Added a new Nikon LensID (thanks LibRaw)
3094
- - Decode more tags for the Sony ICLE-6400 (thanks Jos Roost and LibRaw)
3109
+ - Decode more tags for the Sony ILCE-6400 (thanks Jos Roost and LibRaw)
3095
3110
  - Enhanced -htmldump feature to highlight IFD when mousing over IFD offset
3096
3111
 
3097
3112
  Jan. 15, 2019 - Version 11.25
data/bin/MANIFEST CHANGED
@@ -65,6 +65,7 @@ html/TagNames/DICOM.html
65
65
  html/TagNames/DJI.html
66
66
  html/TagNames/DNG.html
67
67
  html/TagNames/DPX.html
68
+ html/TagNames/DSF.html
68
69
  html/TagNames/DV.html
69
70
  html/TagNames/DarwinCore.html
70
71
  html/TagNames/DjVu.html
@@ -188,6 +189,7 @@ html/TagNames/VCard.html
188
189
  html/TagNames/Vorbis.html
189
190
  html/TagNames/WPG.html
190
191
  html/TagNames/WTV.html
192
+ html/TagNames/WavPack.html
191
193
  html/TagNames/XISF.html
192
194
  html/TagNames/XMP.html
193
195
  html/TagNames/ZIP.html
@@ -291,6 +293,7 @@ lib/Image/ExifTool/DICOM.pm
291
293
  lib/Image/ExifTool/DJI.pm
292
294
  lib/Image/ExifTool/DNG.pm
293
295
  lib/Image/ExifTool/DPX.pm
296
+ lib/Image/ExifTool/DSF.pm
294
297
  lib/Image/ExifTool/DV.pm
295
298
  lib/Image/ExifTool/DarwinCore.pm
296
299
  lib/Image/ExifTool/DjVu.pm
@@ -451,6 +454,7 @@ lib/Image/ExifTool/Validate.pm
451
454
  lib/Image/ExifTool/Vorbis.pm
452
455
  lib/Image/ExifTool/WPG.pm
453
456
  lib/Image/ExifTool/WTV.pm
457
+ lib/Image/ExifTool/WavPack.pm
454
458
  lib/Image/ExifTool/WriteCanonRaw.pl
455
459
  lib/Image/ExifTool/WriteExif.pl
456
460
  lib/Image/ExifTool/WriteIPTC.pl
data/bin/META.json CHANGED
@@ -50,6 +50,6 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "13.37",
53
+ "version" : "13.38",
54
54
  "x_serialization_backend" : "JSON::PP version 4.06"
55
55
  }
data/bin/META.yml CHANGED
@@ -31,5 +31,5 @@ recommends:
31
31
  Time::HiRes: '0'
32
32
  requires:
33
33
  perl: '5.004'
34
- version: '13.37'
34
+ version: '13.38'
35
35
  x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
data/bin/README CHANGED
@@ -14,51 +14,51 @@ supported by ExifTool (r = read, w = write, c = create):
14
14
 
15
15
  File Types
16
16
  ------------+-------------+-------------+-------------+------------
17
- 360 r/w | DPX r | JNG r/w | ODP r | RSRC r
18
- 3FR r | DR4 r/w/c | JP2 r/w | ODS r | RTF r
19
- 3G2 r/w | DSS r | JPEG r/w | ODT r | RW2 r/w
20
- 3GP r/w | DV r | JSON r | OFR r | RWL r/w
21
- 7Z r | DVB r/w | JXL r/w | OGG r | RWZ r
22
- A r | DVR-MS r | K25 r | OGV r | RM r
23
- AA r | DYLIB r | KDC r | ONP r | SEQ r
24
- AAC r | EIP r | KEY r | OPUS r | SKETCH r
25
- AAE r | EPS r/w | LA r | ORF r/w | SO r
26
- AAX r/w | EPUB r | LFP r | ORI r/w | SR2 r/w
27
- ACR r | ERF r/w | LIF r | OTF r | SRF r
28
- AFM r | EXE r | LNK r | PAC r | SRW r/w
29
- AI r/w | EXIF r/w/c | LRV r/w | PAGES r | SVG r
30
- AIFF r | EXR r | M2TS r | PBM r/w | SWF r
31
- APE r | EXV r/w/c | M4A/V r/w | PCAP r | THM r/w
32
- ARQ r/w | F4A/V r/w | MACOS r | PCAPNG r | TIFF r/w
33
- ARW r/w | FFF r/w | MAX r | PCD r | TNEF r
34
- ASF r | FITS r | MEF r/w | PCX r | TORRENT r
35
- AVI r | FLA r | MIE r/w/c | PDB r | TTC r
36
- AVIF r/w | FLAC r | MIFF r | PDF r/w | TTF r
37
- AZW r | FLIF r/w | MKA r | PEF r/w | TXT r
38
- BMP r | FLV r | MKS r | PFA r | VCF r
39
- BPG r | FPF r | MKV r | PFB r | VNT r
40
- BTF r | FPX r | MNG r/w | PFM r | VRD r/w/c
41
- C2PA r | GIF r/w | MOBI r | PGF r | VSD r
42
- CHM r | GLV r/w | MODD r | PGM r/w | WAV r
43
- COS r | GPR r/w | MOI r | PLIST r | WDP r/w
44
- CR2 r/w | GZ r | MOS r/w | PICT r | WEBP r/w
45
- CR3 r/w | HDP r/w | MOV r/w | PMP r | WEBM r
46
- CRM r/w | HDR r | MP3 r | PNG r/w | WMA r
47
- CRW r/w | HEIC r/w | MP4 r/w | PPM r/w | WMV r
48
- CS1 r/w | HEIF r/w | MPC r | PPT r | WPG r
49
- CSV r | HTML r | MPG r | PPTX r | WTV r
50
- CUR r | ICC r/w/c | MPO r/w | PS r/w | WV r
51
- CZI r | ICO r | MQV r/w | PSB r/w | X3F r/w
52
- DCM r | ICS r | MRC r | PSD r/w | XCF r
53
- DCP r/w | IDML r | MRW r/w | PSP r | XISF r
54
- DCR r | IIQ r/w | MXF r | QTIF r/w | XLS r
55
- DFONT r | IND r/w | NEF r/w | R3D r | XLSX r
56
- DIVX r | INSP r/w | NKA r | RA r | XMP r/w/c
57
- DJVU r | INSV r | NKSC r/w | RAF r/w | ZIP r
58
- DLL r | INX r | NRW r/w | RAM r |
59
- DNG r/w | ISO r | NUMBERS r | RAR r |
60
- DOC r | ITC r | NXD r | RAW r/w |
61
- DOCX r | J2C r | O r | RIFF r |
17
+ 360 r/w | DPX r | J2C r | O r | RIFF r
18
+ 3FR r | DR4 r/w/c | JNG r/w | ODP r | RSRC r
19
+ 3G2 r/w | DSF r | JP2 r/w | ODS r | RTF r
20
+ 3GP r/w | DSS r | JPEG r/w | ODT r | RW2 r/w
21
+ 7Z r | DV r | JSON r | OFR r | RWL r/w
22
+ A r | DVB r/w | JXL r/w | OGG r | RWZ r
23
+ AA r | DVR-MS r | K25 r | OGV r | RM r
24
+ AAC r | DYLIB r | KDC r | ONP r | SEQ r
25
+ AAE r | EIP r | KEY r | OPUS r | SKETCH r
26
+ AAX r/w | EPS r/w | LA r | ORF r/w | SO r
27
+ ACR r | EPUB r | LFP r | ORI r/w | SR2 r/w
28
+ AFM r | ERF r/w | LIF r | OTF r | SRF r
29
+ AI r/w | EXE r | LNK r | PAC r | SRW r/w
30
+ AIFF r | EXIF r/w/c | LRV r/w | PAGES r | SVG r
31
+ APE r | EXR r | M2TS r | PBM r/w | SWF r
32
+ ARQ r/w | EXV r/w/c | M4A/V r/w | PCAP r | THM r/w
33
+ ARW r/w | F4A/V r/w | MACOS r | PCAPNG r | TIFF r/w
34
+ ASF r | FFF r/w | MAX r | PCD r | TNEF r
35
+ AVI r | FITS r | MEF r/w | PCX r | TORRENT r
36
+ AVIF r/w | FLA r | MIE r/w/c | PDB r | TTC r
37
+ AZW r | FLAC r | MIFF r | PDF r/w | TTF r
38
+ BMP r | FLIF r/w | MKA r | PEF r/w | TXT r
39
+ BPG r | FLV r | MKS r | PFA r | VCF r
40
+ BTF r | FPF r | MKV r | PFB r | VNT r
41
+ C2PA r | FPX r | MNG r/w | PFM r | VRD r/w/c
42
+ CHM r | GIF r/w | MOBI r | PGF r | VSD r
43
+ COS r | GLV r/w | MODD r | PGM r/w | WAV r
44
+ CR2 r/w | GPR r/w | MOI r | PLIST r | WDP r/w
45
+ CR3 r/w | GZ r | MOS r/w | PICT r | WEBP r/w
46
+ CRM r/w | HDP r/w | MOV r/w | PMP r | WEBM r
47
+ CRW r/w | HDR r | MP3 r | PNG r/w | WMA r
48
+ CS1 r/w | HEIC r/w | MP4 r/w | PPM r/w | WMV r
49
+ CSV r | HEIF r/w | MPC r | PPT r | WPG r
50
+ CUR r | HTML r | MPG r | PPTX r | WTV r
51
+ CZI r | ICC r/w/c | MPO r/w | PS r/w | WV r
52
+ DCM r | ICO r | MQV r/w | PSB r/w | X3F r/w
53
+ DCP r/w | ICS r | MRC r | PSD r/w | XCF r
54
+ DCR r | IDML r | MRW r/w | PSP r | XISF r
55
+ DFONT r | IIQ r/w | MXF r | QTIF r/w | XLS r
56
+ DIVX r | IND r/w | NEF r/w | R3D r | XLSX r
57
+ DJVU r | INSP r/w | NKA r | RA r | XMP r/w/c
58
+ DLL r | INSV r | NKSC r/w | RAF r/w | ZIP r
59
+ DNG r/w | INX r | NRW r/w | RAM r |
60
+ DOC r | ISO r | NUMBERS r | RAR r |
61
+ DOCX r | ITC r | NXD r | RAW r/w |
62
62
 
63
63
  Meta Information
64
64
  ----------------------+----------------------+---------------------
@@ -110,8 +110,8 @@ your home directory, then you would type the following commands in a
110
110
  terminal window to extract and run ExifTool:
111
111
 
112
112
  cd ~/Desktop
113
- gzip -dc Image-ExifTool-13.37.tar.gz | tar -xf -
114
- cd Image-ExifTool-13.37
113
+ gzip -dc Image-ExifTool-13.38.tar.gz | tar -xf -
114
+ cd Image-ExifTool-13.38
115
115
  ./exiftool t/images/ExifTool.jpg
116
116
 
117
117
  Note: These commands extract meta information from one of the test images.
data/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '13.37';
14
+ my $version = '13.38';
15
15
 
16
16
  $^W = 1; # enable global warnings
17
17
 
@@ -5079,51 +5079,51 @@ supported by ExifTool (r = read, w = write, c = create):
5079
5079
 
5080
5080
  File Types
5081
5081
  ------------+-------------+-------------+-------------+------------
5082
- 360 r/w | DPX r | JNG r/w | ODP r | RSRC r
5083
- 3FR r | DR4 r/w/c | JP2 r/w | ODS r | RTF r
5084
- 3G2 r/w | DSS r | JPEG r/w | ODT r | RW2 r/w
5085
- 3GP r/w | DV r | JSON r | OFR r | RWL r/w
5086
- 7Z r | DVB r/w | JXL r/w | OGG r | RWZ r
5087
- A r | DVR-MS r | K25 r | OGV r | RM r
5088
- AA r | DYLIB r | KDC r | ONP r | SEQ r
5089
- AAC r | EIP r | KEY r | OPUS r | SKETCH r
5090
- AAE r | EPS r/w | LA r | ORF r/w | SO r
5091
- AAX r/w | EPUB r | LFP r | ORI r/w | SR2 r/w
5092
- ACR r | ERF r/w | LIF r | OTF r | SRF r
5093
- AFM r | EXE r | LNK r | PAC r | SRW r/w
5094
- AI r/w | EXIF r/w/c | LRV r/w | PAGES r | SVG r
5095
- AIFF r | EXR r | M2TS r | PBM r/w | SWF r
5096
- APE r | EXV r/w/c | M4A/V r/w | PCAP r | THM r/w
5097
- ARQ r/w | F4A/V r/w | MACOS r | PCAPNG r | TIFF r/w
5098
- ARW r/w | FFF r/w | MAX r | PCD r | TNEF r
5099
- ASF r | FITS r | MEF r/w | PCX r | TORRENT r
5100
- AVI r | FLA r | MIE r/w/c | PDB r | TTC r
5101
- AVIF r/w | FLAC r | MIFF r | PDF r/w | TTF r
5102
- AZW r | FLIF r/w | MKA r | PEF r/w | TXT r
5103
- BMP r | FLV r | MKS r | PFA r | VCF r
5104
- BPG r | FPF r | MKV r | PFB r | VNT r
5105
- BTF r | FPX r | MNG r/w | PFM r | VRD r/w/c
5106
- C2PA r | GIF r/w | MOBI r | PGF r | VSD r
5107
- CHM r | GLV r/w | MODD r | PGM r/w | WAV r
5108
- COS r | GPR r/w | MOI r | PLIST r | WDP r/w
5109
- CR2 r/w | GZ r | MOS r/w | PICT r | WEBP r/w
5110
- CR3 r/w | HDP r/w | MOV r/w | PMP r | WEBM r
5111
- CRM r/w | HDR r | MP3 r | PNG r/w | WMA r
5112
- CRW r/w | HEIC r/w | MP4 r/w | PPM r/w | WMV r
5113
- CS1 r/w | HEIF r/w | MPC r | PPT r | WPG r
5114
- CSV r | HTML r | MPG r | PPTX r | WTV r
5115
- CUR r | ICC r/w/c | MPO r/w | PS r/w | WV r
5116
- CZI r | ICO r | MQV r/w | PSB r/w | X3F r/w
5117
- DCM r | ICS r | MRC r | PSD r/w | XCF r
5118
- DCP r/w | IDML r | MRW r/w | PSP r | XISF r
5119
- DCR r | IIQ r/w | MXF r | QTIF r/w | XLS r
5120
- DFONT r | IND r/w | NEF r/w | R3D r | XLSX r
5121
- DIVX r | INSP r/w | NKA r | RA r | XMP r/w/c
5122
- DJVU r | INSV r | NKSC r/w | RAF r/w | ZIP r
5123
- DLL r | INX r | NRW r/w | RAM r |
5124
- DNG r/w | ISO r | NUMBERS r | RAR r |
5125
- DOC r | ITC r | NXD r | RAW r/w |
5126
- DOCX r | J2C r | O r | RIFF r |
5082
+ 360 r/w | DPX r | J2C r | O r | RIFF r
5083
+ 3FR r | DR4 r/w/c | JNG r/w | ODP r | RSRC r
5084
+ 3G2 r/w | DSF r | JP2 r/w | ODS r | RTF r
5085
+ 3GP r/w | DSS r | JPEG r/w | ODT r | RW2 r/w
5086
+ 7Z r | DV r | JSON r | OFR r | RWL r/w
5087
+ A r | DVB r/w | JXL r/w | OGG r | RWZ r
5088
+ AA r | DVR-MS r | K25 r | OGV r | RM r
5089
+ AAC r | DYLIB r | KDC r | ONP r | SEQ r
5090
+ AAE r | EIP r | KEY r | OPUS r | SKETCH r
5091
+ AAX r/w | EPS r/w | LA r | ORF r/w | SO r
5092
+ ACR r | EPUB r | LFP r | ORI r/w | SR2 r/w
5093
+ AFM r | ERF r/w | LIF r | OTF r | SRF r
5094
+ AI r/w | EXE r | LNK r | PAC r | SRW r/w
5095
+ AIFF r | EXIF r/w/c | LRV r/w | PAGES r | SVG r
5096
+ APE r | EXR r | M2TS r | PBM r/w | SWF r
5097
+ ARQ r/w | EXV r/w/c | M4A/V r/w | PCAP r | THM r/w
5098
+ ARW r/w | F4A/V r/w | MACOS r | PCAPNG r | TIFF r/w
5099
+ ASF r | FFF r/w | MAX r | PCD r | TNEF r
5100
+ AVI r | FITS r | MEF r/w | PCX r | TORRENT r
5101
+ AVIF r/w | FLA r | MIE r/w/c | PDB r | TTC r
5102
+ AZW r | FLAC r | MIFF r | PDF r/w | TTF r
5103
+ BMP r | FLIF r/w | MKA r | PEF r/w | TXT r
5104
+ BPG r | FLV r | MKS r | PFA r | VCF r
5105
+ BTF r | FPF r | MKV r | PFB r | VNT r
5106
+ C2PA r | FPX r | MNG r/w | PFM r | VRD r/w/c
5107
+ CHM r | GIF r/w | MOBI r | PGF r | VSD r
5108
+ COS r | GLV r/w | MODD r | PGM r/w | WAV r
5109
+ CR2 r/w | GPR r/w | MOI r | PLIST r | WDP r/w
5110
+ CR3 r/w | GZ r | MOS r/w | PICT r | WEBP r/w
5111
+ CRM r/w | HDP r/w | MOV r/w | PMP r | WEBM r
5112
+ CRW r/w | HDR r | MP3 r | PNG r/w | WMA r
5113
+ CS1 r/w | HEIC r/w | MP4 r/w | PPM r/w | WMV r
5114
+ CSV r | HEIF r/w | MPC r | PPT r | WPG r
5115
+ CUR r | HTML r | MPG r | PPTX r | WTV r
5116
+ CZI r | ICC r/w/c | MPO r/w | PS r/w | WV r
5117
+ DCM r | ICO r | MQV r/w | PSB r/w | X3F r/w
5118
+ DCP r/w | ICS r | MRC r | PSD r/w | XCF r
5119
+ DCR r | IDML r | MRW r/w | PSP r | XISF r
5120
+ DFONT r | IIQ r/w | MXF r | QTIF r/w | XLS r
5121
+ DIVX r | IND r/w | NEF r/w | R3D r | XLSX r
5122
+ DJVU r | INSP r/w | NKA r | RA r | XMP r/w/c
5123
+ DLL r | INSV r | NKSC r/w | RAF r/w | ZIP r
5124
+ DNG r/w | INX r | NRW r/w | RAM r |
5125
+ DOC r | ISO r | NUMBERS r | RAR r |
5126
+ DOCX r | ITC r | NXD r | RAW r/w |
5127
5127
 
5128
5128
  Meta Information
5129
5129
  ----------------------+----------------------+---------------------
@@ -5722,10 +5722,12 @@ as the exported file. The first row of the I<CSVFILE> must be the ExifTool
5722
5722
  tag names (with optional group names) for each column of the file, and
5723
5723
  values must be separated by commas. A special "SourceFile" column specifies
5724
5724
  the files associated with each row of information (and a SourceFile of "*"
5725
- may be used to define default tags to be imported for all files which are
5726
- combined with any tags specified for the specific SourceFile processed). The
5727
- B<-csvDelim> option may be used to change the input/output field delimiter
5728
- if something other than a comma is required.
5725
+ may be used to define default tags to be imported for all files, which are
5726
+ then combined with any tags specified for the specific SourceFile
5727
+ processed). To be clear, the imported CSV file acts as a lookup table to
5728
+ obtain the tags for import based on the files/directories and tags specified
5729
+ on the command line. The B<-csvDelim> option may be used to change the
5730
+ input/output field delimiter if something other than a comma is required.
5729
5731
 
5730
5732
  The following examples demonstrate basic use of the B<-csv> option:
5731
5733
 
@@ -5924,18 +5926,18 @@ convert arrays into strings. For example:
5924
5926
 
5925
5927
  exiftool -j -api structformat=jsonq -sep ", " ...
5926
5928
 
5927
- If I<JSONFILE> is specified, the file is imported and the tag definitions
5928
- from the file are used to set tag values on a per-file basis. The special
5929
- "SourceFile" entry in each JSON object associates the information with a
5930
- specific target file. An object with a missing SourceFile or a SourceFile
5931
- of "*" defines default tags for all target files which are combined with any
5932
- tags specified for the specific SourceFile processed. The imported JSON
5933
- file must have the same format as the exported JSON files with the exception
5934
- that options exporting JSON objects instead of simple values are not
5935
- compatible with the import file format (ie. export with B<-D>, B<-H>, B<-l>,
5936
- or B<-T> is not compatible, and use B<-G> instead of B<-g>). Additionally,
5937
- tag names in the input JSON file may be suffixed with a C<#> to disable
5938
- print conversion.
5929
+ If I<JSONFILE> is specified, the JSON file is imported and the tag
5930
+ definitions from the JSON are used to set tag values on a per-file basis for
5931
+ each file specified on the command line. A special "SourceFile" entry in
5932
+ each JSON object associates the information with a specific target file. An
5933
+ object with a missing SourceFile or a SourceFile of "*" defines default tags
5934
+ for all target files which are combined with any tags specified for the
5935
+ specific SourceFile processed. The imported JSON file must have the same
5936
+ format as the exported JSON files with the exception that options exporting
5937
+ JSON objects instead of simple values are not compatible with the import
5938
+ file format (ie. export with B<-D>, B<-H>, B<-l>, or B<-T> is not
5939
+ compatible, and use B<-G> instead of B<-g>). Additionally, tag names in the
5940
+ input JSON file may be suffixed with a C<#> to disable print conversion.
5939
5941
 
5940
5942
  Specific tags may be imported from the JSON database by adding B<->I<TAG>
5941
5943
  options to the command, or excluded with B<-->I<TAG>, with exclusions taking
@@ -6082,7 +6084,7 @@ with this command:
6082
6084
 
6083
6085
  produces output like this:
6084
6086
 
6085
- -- Generated by ExifTool 13.37 --
6087
+ -- Generated by ExifTool 13.38 --
6086
6088
  File: a.jpg - 2003:10:31 15:44:19
6087
6089
  (f/5.6, 1/60s, ISO 100)
6088
6090
  File: b.jpg - 2006:05:23 11:57:38
@@ -248,7 +248,7 @@ my %fixed2_30 = (
248
248
  );
249
249
 
250
250
  #------------------------------------------------------------------------------
251
- # Extract EXIF information from a BMP image
251
+ # Extract metadata from a BMP image
252
252
  # Inputs: 0) ExifTool object reference, 1) dirInfo reference
253
253
  # Returns: 1 on success, 0 if this wasn't a valid BMP file
254
254
  sub ProcessBMP($$)
@@ -74,7 +74,8 @@ my %tweakOrder = (
74
74
  DJI => 'Casio',
75
75
  FLIR => 'DJI',
76
76
  FujiFilm => 'FLIR',
77
- GoPro => 'GE',
77
+ Google => 'GE',
78
+ GoPro => 'Google',
78
79
  Kodak => 'JVC',
79
80
  Leaf => 'Kodak',
80
81
  Lytro => 'Leaf',
@@ -109,7 +110,6 @@ my %tweakOrder = (
109
110
  'FujiFilm::RAFData' => 'FujiFilm::RAF',
110
111
  'QuickTime::AudioKeys' => 'QuickTime::Keys',
111
112
  'QuickTime::VideoKeys' => 'QuickTime::AudioKeys',
112
- 'Google::HDRPText' => 'Google::HDRPlusMakerNote',
113
113
  );
114
114
 
115
115
  # list of all recognized Format strings
@@ -0,0 +1,138 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: DSF.pm
3
+ #
4
+ # Description: Read DSF meta information
5
+ #
6
+ # Revisions: 2025-09-24 - P. Harvey Created
7
+ #
8
+ # References: 1) https://dsd-guide.com/sites/default/files/white-papers/DSFFileFormatSpec_E.pdf
9
+ #------------------------------------------------------------------------------
10
+
11
+ package Image::ExifTool::DSF;
12
+
13
+ use strict;
14
+ use vars qw($VERSION);
15
+ use Image::ExifTool qw(:DataAccess :Utils);
16
+
17
+ $VERSION = '1.00';
18
+
19
+ # DSF header format
20
+ %Image::ExifTool::DSF::Main = (
21
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
22
+ GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Audio' },
23
+ FORMAT => 'int32u',
24
+ NOTES => q{
25
+ Tags read from the 'fmt ' header of a DSF (DSD Stream File) audio files. As
26
+ well, ID3 metadata may also exist in these files. See
27
+ L<https://dsd-guide.com/sites/default/files/white-papers/DSFFileFormatSpec_E.pdf>
28
+ for the specification.
29
+ },
30
+ 3 => 'FormatVersion',
31
+ 4 => { Name => 'FormatID', PrintConv => { 0 => 'DSD Raw' }},
32
+ 5 => {
33
+ Name => 'ChannelType',
34
+ PrintConv => {
35
+ 1 => 'Mono',
36
+ 2 => 'Stereo (Left, Right)',
37
+ 3 => '3 Channels (Left, Right, Center)',
38
+ 4 => 'Quad (Left, Right, Back L, Back R)',
39
+ 5 => '4 Channels (Left, Right, Center, Bass)',
40
+ 6 => '5 Channels (Left, Right, Center, Back L, Back R)',
41
+ 7 => '5.1 Channels (Left, Right, Center, Bass, Back L, Back R)',
42
+ },
43
+ },
44
+ 6 => 'ChannelCount',
45
+ 7 => 'SampleRate',
46
+ 8 => 'BitsPerSample',
47
+ 9 => { Name => 'SampleCount', Format => 'int64u' },
48
+ 11 => 'BlockSize',
49
+ );
50
+
51
+ #------------------------------------------------------------------------------
52
+ # Extract metadata from a DSF file
53
+ # Inputs: 0) ExifTool object reference, 1) dirInfo reference
54
+ # Returns: 1 on success, 0 if this wasn't a valid DSF file
55
+ sub ProcessDSF($$)
56
+ {
57
+ my ($et, $dirInfo) = @_;
58
+ my $raf = $$dirInfo{RAF};
59
+ my ($buff, $buf2, $tagTablePtr);
60
+
61
+ # verify this is a valid DSF file
62
+ return 0 unless $raf->Read($buff, 40) == 40;
63
+ return 0 unless $buff =~ /^DSD \x1c\0{7}.{16}fmt /s;
64
+ $et->SetFileType(); # set the FileType tag
65
+ my $tagTbl = GetTagTable('Image::ExifTool::DSF::Main');
66
+ SetByteOrder('II');
67
+ my $fmtLen = Get64u(\$buff,32);
68
+ unless ($fmtLen > 12 and $fmtLen < 1000 and
69
+ $raf->Read($buf2, $fmtLen - 12) == $fmtLen - 12)
70
+ {
71
+ $et->Warn('Error reading DSF fmt chunk');
72
+ return 1;
73
+ }
74
+ my $fileSize = Get64u(\$buff, 12);
75
+ my $metaPos = Get64u(\$buff, 20);
76
+ $buff = substr($buff, 28) . $buf2;
77
+ #
78
+ # process the DSF 'fmt ' chunk
79
+ #
80
+ my %dirInfo = (
81
+ DataPt => \$buff,
82
+ DirStart => 0,
83
+ DirLen => length($buff),
84
+ );
85
+ $et->ProcessBinaryData(\%dirInfo, $tagTbl);
86
+ #
87
+ # process ID3v2 if it exists
88
+ #
89
+ my $metaLen = $fileSize - $metaPos;
90
+ if ($metaPos and $metaLen > 0 and $metaLen < 20000000 and
91
+ $raf->Seek($metaPos, 0) and $raf->Read($buff, $metaLen) == $metaLen)
92
+ {
93
+ $dirInfo{DataPos} = $metaPos;
94
+ $dirInfo{DirLen} = $metaLen;
95
+ my $id3Tbl = GetTagTable('Image::ExifTool::ID3::Main');
96
+ $et->ProcessDirectory(\%dirInfo, $id3Tbl);
97
+ }
98
+ return 1;
99
+ }
100
+
101
+ 1; # end
102
+
103
+ __END__
104
+
105
+ =head1 NAME
106
+
107
+ Image::ExifTool::DSF - Read DSF meta information
108
+
109
+ =head1 SYNOPSIS
110
+
111
+ This module is used by Image::ExifTool
112
+
113
+ =head1 DESCRIPTION
114
+
115
+ This module contains definitions required by Image::ExifTool to read DSF
116
+ (DSD Stream File) audio files.
117
+
118
+ =head1 AUTHOR
119
+
120
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
121
+
122
+ This library is free software; you can redistribute it and/or modify it
123
+ under the same terms as Perl itself.
124
+
125
+ =head1 REFERENCES
126
+
127
+ =over 4
128
+
129
+ =item L<https://dsd-guide.com/sites/default/files/white-papers/DSFFileFormatSpec_E.pdf>
130
+
131
+ =back
132
+
133
+ =head1 SEE ALSO
134
+
135
+ L<Image::ExifTool::TagNames/DSF Tags>,
136
+ L<Image::ExifTool(3pm)|Image::ExifTool>
137
+
138
+ =cut
@@ -22,7 +22,7 @@ use strict;
22
22
  use vars qw($VERSION);
23
23
  use Image::ExifTool qw(:DataAccess :Utils);
24
24
 
25
- $VERSION = '1.24';
25
+ $VERSION = '1.25';
26
26
 
27
27
  sub ProcessPEResources($$);
28
28
  sub ProcessPEVersion($$);
@@ -962,6 +962,7 @@ sub ProcessPEVersion($$)
962
962
  $pos = ($pos + 3) & 0xfffffffc; # align on a 4-byte boundary
963
963
  last if $pos + 6 > $end;
964
964
  $len = Get16u($dataPt, $pos);
965
+ return 0 if $pos + $len > $end;
965
966
  $valLen = Get16u($dataPt, $pos + 2);
966
967
  $type = Get16u($dataPt, $pos + 4);
967
968
  return 0 unless $len or $valLen; # prevent possible infinite loop
@@ -989,6 +990,7 @@ sub ProcessPEVersion($$)
989
990
  $valLen = Get16u($dataPt, $pt + 2);
990
991
  # $type = Get16u($dataPt, $pt + 4);
991
992
  my $entryEnd = $pt + $len;
993
+ return 0 if $entryEnd > $end;
992
994
  # get tag ID (converted to UTF8)
993
995
  ($string, $pt) = ReadUnicodeStr($dataPt, $pt + 6, $entryEnd);
994
996
  unless ($index) {
@@ -20,6 +20,7 @@
20
20
  # 2024/11/26 - PH Also write GPSMeasureMode and GPSDOP
21
21
  # 2024/11/05 - PH Added support for Google Maps "Export timeline data"
22
22
  # JSON format
23
+ # 2025/09/22 - PH Added ability to read Columbus CSV log files
23
24
  #
24
25
  # References: 1) http://www.topografix.com/GPX/1/1/
25
26
  # 2) http://www.gpsinformation.org/dale/nmea.htm#GSA
@@ -1557,7 +1558,8 @@ This module loads GPS track logs, interpolates to determine position based
1557
1558
  on time, and sets new GPS values for geotagging images. Currently supported
1558
1559
  formats are GPX, NMEA RMC/GGA/GLL/GSA/ZDA, KML, IGC, Garmin XML and TCX,
1559
1560
  Magellan PMGNTRK, Honeywell PTNTHPR, Bramor gEO, Winplus Beacon text,
1560
- GPS/IMU CSV, DJI CSV, ExifTool CSV and 3 different Google JSON formats.
1561
+ GPS/IMU CSV, DJI/Columbus/ExifTool CSV format and 3 different Google JSON
1562
+ formats.
1561
1563
 
1562
1564
  Methods in this module should not be called directly. Instead, the Geotag
1563
1565
  feature is accessed by writing the values of the ExifTool Geotag, Geosync