exiftool_vendored 13.12.0 → 13.14.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: eee34189fb74202a66c58d76f0168f01089b47ca963c5f60124bcf5d73d2aecf
4
- data.tar.gz: b8e53f5654ff7090fa938edadb5de5c21794e9b8184439a67dc7d967b7a38945
3
+ metadata.gz: 84e9102db0da669ac4a4f0a5c4cb35058eee35318fa727ecf365f36341e9d9b9
4
+ data.tar.gz: baef093ba9ac71da9d59fc8239d9ca9ea3a5bab5a856fca5f33a3f8fcf6e6ba8
5
5
  SHA512:
6
- metadata.gz: e91976cbd88e3de90455e5879c583c6f48c15a0b12f102b0b8e6f8cedf1e61026e5e5d543e7c3848e1008feb842f46f709f3d87e012202b1bcda4fd3ebab3f2d
7
- data.tar.gz: c4c6ac6f3e7ed34e426b3f83a44d5fa9964b609e02613715cbbacc69c00ffa5a81f6bc0b13b3fb8a2b00b481966453ae7f102002f6c34cf2de663a8d019453e5
6
+ metadata.gz: 2a4abf6f32a17150d1b3b30b43204b8440b1e0c600df23ac992085a423942105067e02922cdcfdfa3a185fa867e138eab5e1a3a4cf3add9b8113afa6e167a038
7
+ data.tar.gz: da5b5975b6c1d20dc90d3c45179892297ab655f5e2dd76bac6180221ff5598895da66abc76a073561175d30a490444d56f701860e54fc70f21e93cd55cc0fd2d
data/bin/Changes CHANGED
@@ -7,6 +7,29 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 13.10. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Jan. 20, 2025 - Version 13.14
11
+
12
+ - Fixed bug where ItemList tags weren't created when creating new AudioKeys or
13
+ VideoKeys tags in the same command and neither tag group pre-existed in the
14
+ file
15
+
16
+ Jan. 20, 2025 - Version 13.13
17
+
18
+ - Added ability to write tags to the audio/video tracks of MOV/MP4 videos
19
+ using the new AudioKeys and VideoKeys group names
20
+ - Added support for another DJI protobuf format (Mavic 3)
21
+ - Decode yet another type of LIGOGPSINFO timed GPS from a dashcam video
22
+ - Extract some proprietary information from JPEG images of Vivo phones
23
+ - Enhanced Geolocation feature to allow the nearest cities to a specified city
24
+ to be returned
25
+ - Updated xmp2exif.args and exif2xmp.args to properly handle time zones in
26
+ XMP-exif date/time tags
27
+ - Changed family 1 group names for Keys, ItemList and UserData tags in a track
28
+ - Patched github #306 issue where a torrent file would return a format error
29
+ when reading if it didn't contain an "announce" or "created by" entry
30
+ - Fixed "uninitialized value" runtime warning when reading some EXE files
31
+ - Fixed -diff output to add colon missing from some lines when used with -g
32
+
10
33
  Jan. 13, 2025 - Version 13.12
11
34
 
12
35
  - Added a few new Panasonic AFAreaMode values (thanks Andrew J)
@@ -15,12 +38,12 @@ Jan. 13, 2025 - Version 13.12
15
38
  - Decode AF points for some newer Nikon models (thanks Warren Hatch)
16
39
  - Decode a new Panasonic tag (thanks Andrew J)
17
40
  - Decode a couple of previously unknown tags from LIGOGPSINFO records
18
- - Extract some PDB information if available from Win32 EXE files (github#303)
41
+ - Extract some PDB information if available from Win32 EXE files (github #303)
19
42
  - Improved handling of duplicate tags in -diff output
20
43
  - Improved handling of QuickTime zero date/time values
21
44
  - Enchanced -csv= and -json= options to allow group names and wildcards to be
22
45
  used when specifying which tags to import
23
- - Updated some EXIF:Compression values (github#304)
46
+ - Updated some EXIF:Compression values (github #304)
24
47
  - Changed wording of warning when file time couldn't be updated
25
48
  - Fixed bug introduced in 13.11 reading EXIF from some EXV files
26
49
  - Fixed bug introduced in 12.99 where empty entries in a CSV file weren't
@@ -33,7 +56,7 @@ Jan. 13, 2025 - Version 13.12
33
56
  Jan. 1, 2025 - Version 13.11
34
57
 
35
58
  - Added warning for an unknown DJI protobuf schema
36
- - Decode timed GPS from the DJI Osmo Action 5
59
+ - Decode timed GPS from DJI Osmo Action 5 videos
37
60
  - Decode yet another type of LIGOGPSINFO timed GPS from a dashcam video
38
61
  - Made Matroska Keywords and Instruments List-type tags
39
62
  - Fixed problem were EXIF couldn't be added to some AVIF files
@@ -286,7 +309,7 @@ July 24, 2024 - Version 12.92
286
309
 
287
310
  July 24, 2024 - Version 12.91
288
311
 
289
- - Added a couple of new OpenEXR Compression values (github#276)
312
+ - Added a couple of new OpenEXR Compression values (github #276)
290
313
  - Updated 2 test files that were causing failed tests (ExifTool itself is
291
314
  unchanged)
292
315
 
@@ -753,7 +776,7 @@ Aug. 10, 2023 - Version 12.65
753
776
  provided
754
777
  - Lowered priority of IFD1 tags in ARW images so IFD0/SubIFD take precedence
755
778
  - Changed QuickTime tag names for atID (AlbumTitleID to ArtistID) and plID
756
- (PlayListID to AlbumID) (github issue #216), and added cmID (ComposerID)
779
+ (PlayListID to AlbumID) (github #216), and added cmID (ComposerID)
757
780
  - Changed Apple:MediaGroupUUID tag name back to ContentIdentifier
758
781
  - Patched the -d option to handle the %s format code internally when writing
759
782
  (avoids problems due to inconsistent behaviour of this format code in the
@@ -1304,7 +1327,15 @@ Dec. 8, 2021 - Version 12.37
1304
1327
  - Extract TransparentColor from GIF images
1305
1328
  - Improved parsing of input time values for GPSTimeStamp to properly handle a
1306
1329
  "." separator
1307
- - Improved warning when incorrectly using "
1330
+ - Improved warning when incorrectly using "<" instead of "=" to assign a tag
1331
+ value
1332
+ - Shortened a few of the new obscenely-long XMP-crs tag names
1333
+ - Avoid writing XMP-dwc:EventID and XMP-tiff:NativeDigest
1334
+ - Avoid printing same structure twice in -j and -X output when -l is used
1335
+ - Fixed typo in a QuickTime tag name (thanks Hubert)
1336
+ - Fixed two XMP-crs tag names and typo in a NikonSettings value (thanks Herb)
1337
+ - Fixed patch of version 12.25 to avoid writing XMP which contains an
1338
+ undefined namespace
1308
1339
 
1309
1340
  Nov. 16, 2021 - Version 12.36
1310
1341
 
@@ -1616,7 +1647,7 @@ Feb. 3, 2021 - Version 12.17
1616
1647
  - Avoid extracting audio/video data from AVI videos when -ee -u is used
1617
1648
  - Patched decoding of Canon ContinuousShootingSpeed for newer firmware
1618
1649
  versions of the EOS-1DXmkIII
1619
- - Re-worked LensID patch of version 12.00 (github issue #51)
1650
+ - Re-worked LensID patch of version 12.00 (github #51)
1620
1651
  - Fixed a few typos in newly-added NikonSettings tags (thanks Herb)
1621
1652
  - Fixed problem where group could not be specified for PNG-pHYs tags when
1622
1653
  writing
@@ -1687,7 +1718,7 @@ Nov. 27, 2020 - Version 12.11
1687
1718
 
1688
1719
  - Added -csvDelim option
1689
1720
  - Added new Canon and Olympus LensType values (thanks LibRaw)
1690
- - Added a warning if ICC_Profile is deleted from an image (github issue #63)
1721
+ - Added a warning if ICC_Profile is deleted from an image (github #63)
1691
1722
  - EndDir() function for -if option now works when -fileOrder is used
1692
1723
  - Changed FileSize conversion to use binary prefixes since that is how the
1693
1724
  conversion is currently done (eg. MiB instead of MB)
@@ -2061,7 +2092,7 @@ Jan. 8, 2020 - Version 11.82
2061
2092
  - Added a new Canon LensType
2062
2093
  - Added a new CanonModelID (thanks LibRaw)
2063
2094
  - Added ability to process SubDirectories in QuickTime Keys tags
2064
- - Removed minor error when writing PDF 2.0 files (github issue #30)
2095
+ - Removed minor error when writing PDF 2.0 files (github #30)
2065
2096
  - Fixed problem where trailing null bytes were removed from binary values in
2066
2097
  the -php output when the -b option was used
2067
2098
 
@@ -2075,8 +2106,7 @@ Jan. 2, 2020 - Version 11.81
2075
2106
  - Patched Composite sub-second date/time tags to do additional validation of
2076
2107
  source EXIF date/time tags before adding sub seconds
2077
2108
  - Fixed problem where -json output could produce invalid JSON when -struct was
2078
- used and the structure field names contained special characters (github
2079
- issue #32)
2109
+ used and the structure field names contained special characters (github #32)
2080
2110
  - Fixed spelling in a Panasonic SceneMode value (thanks Hubert)
2081
2111
 
2082
2112
  Dec. 17, 2019 - Version 11.80
@@ -2096,7 +2126,7 @@ Dec. 12, 2019 - Version 11.79
2096
2126
 
2097
2127
  - Added support for AVIF files
2098
2128
  - Added new Canon, Sigma and Sony LensType values (thanks LibRaw)
2099
- - Made PDF 2.0 writable at your own risk with the -m option (github issue #30)
2129
+ - Made PDF 2.0 writable at your own risk with the -m option (github #30)
2100
2130
  - Enhanced -validate feature to warn about duplicate languages in an XMP
2101
2131
  lang-alt list
2102
2132
  - Fixed inconsistency between documentation and ExifTool capabilities for
@@ -2182,7 +2212,7 @@ Oct. 16, 2019 - Version 11.71
2182
2212
  Oct. 10, 2019 - Version 11.70 (production release)
2183
2213
 
2184
2214
  - Added a new CanonModelID (thanks Laurent Clevy)
2185
- - Improved identification of Office Open XML files (github issue #27)
2215
+ - Improved identification of Office Open XML files (github #27)
2186
2216
  - Removed RAF version check when writing FujiFilm RAF files
2187
2217
  - Limited the number of accelerometer records that ExifTool will read by
2188
2218
  default with the -ee option from INSV files to avoid excessive processing
@@ -2264,7 +2294,7 @@ Aug. 20, 2019 - Version 11.63 - "PNG Early Text"
2264
2294
  - Added a few new Sigma lenses (thanks LibRaw)
2265
2295
  - Improved handling of Canon CNTH atom in MOV/MP4 videos
2266
2296
  - Changed PNG writer to place all text chunks before IDAT (not just XMP)
2267
- (github issue #23)
2297
+ (github #23)
2268
2298
  - Issue minor warning for any text chunk after PNG IDAT (not just XMP)
2269
2299
  - Enhanced ForceWrite feature to allow "PNG" to be specified (to move existing
2270
2300
  text chunks to before IDAT without editing any metadata)
@@ -2421,7 +2451,7 @@ June 17, 2019 - Version 11.52
2421
2451
  - Fixed problem where reading a large, corrupt AIFF file may could take an
2422
2452
  excessively long time
2423
2453
  - API Changes:
2424
- - Enhanced Compact option to add levels 3, 4 and 5 (github issue #16)
2454
+ - Enhanced Compact option to add levels 3, 4 and 5 (github #16)
2425
2455
 
2426
2456
  June 13, 2019 - Version 11.51
2427
2457
 
@@ -2559,7 +2589,7 @@ May 3, 2019 - Version 11.39 - "Create QuickTime tags"
2559
2589
  - Decode Canon EOS D60 black levels
2560
2590
  - Split off some QuickTime tags into different family 1 groups
2561
2591
  - Fixed "Chunk offset outside movie data" error when writing some HEIC files
2562
- - Fixed decoding of Pentax AutoBracketing for K-1 and K-5 (github issue #15)
2592
+ - Fixed decoding of Pentax AutoBracketing for K-1 and K-5 (github #15)
2563
2593
  - Fixed some QuickTime family 2 group names
2564
2594
  - Fixed bug introduced in 11.38 that broke extraction of thumbnail images from
2565
2595
  Canon MOV videos
@@ -2663,7 +2693,7 @@ Mar. 14, 2019 - Version 11.32
2663
2693
  Mar. 7, 2019 - Version 11.31
2664
2694
 
2665
2695
  - Added read support for FITS images
2666
- - Another try at removing spaces from some DICOM values (github issues #10/12)
2696
+ - Another try at removing spaces from some DICOM values (github #10 and #12)
2667
2697
 
2668
2698
  Mar. 6, 2019 - Version 11.30 (production release)
2669
2699
 
@@ -2672,7 +2702,7 @@ Mar. 6, 2019 - Version 11.30 (production release)
2672
2702
  - Decode Reconyx HF2 PRO maker notes
2673
2703
  - Decode ColorData for some new Canon models (thanks LibRaw)
2674
2704
  - Enhanced -geotag feature to set AmbientTemperature if available
2675
- - Remove non-significant spaces from some DICOM values (github issues #10/12)
2705
+ - Remove non-significant spaces from some DICOM values (github #10 and #12)
2676
2706
  - Fixed possible "'x' outside of string" error when reading corrupted EXIF
2677
2707
  - Fixed incorrect write group for GeoTIFF tags added in version 11.24
2678
2708
 
@@ -2680,13 +2710,13 @@ Feb. 28, 2019 - Version 11.29
2680
2710
 
2681
2711
  - Added support for Ricoh GR III maker notes
2682
2712
  - Added a new Canon LensType (thanks Claude Jolicoeur)
2683
- - Added a new XMP-crs tag (github issue #8)
2713
+ - Added a new XMP-crs tag (github #8)
2684
2714
  - Enhanced -csv option to output base64-encoded binary data when combined with
2685
2715
  -b or when the -charset option is used and the text has invalid characters
2686
- (github issue #11)
2687
- - Remove trailing space from even-length DICOM values (github issue #9)
2716
+ (github #11)
2717
+ - Remove trailing space from even-length DICOM values (github #9)
2688
2718
  - Patched to avoid "Hexadecimal number > 0xffffffff non-portable" warning
2689
- (github issue #6)
2719
+ (github #6)
2690
2720
  - Fixed meta charset attribute in -htmlDump output
2691
2721
 
2692
2722
  Feb. 21, 2019 - Version 11.28
data/bin/MANIFEST CHANGED
@@ -180,6 +180,7 @@ html/TagNames/Theora.html
180
180
  html/TagNames/Torrent.html
181
181
  html/TagNames/Unknown.html
182
182
  html/TagNames/VCard.html
183
+ html/TagNames/Vivo.html
183
184
  html/TagNames/Vorbis.html
184
185
  html/TagNames/WPG.html
185
186
  html/TagNames/WTV.html
@@ -431,6 +432,7 @@ lib/Image/ExifTool/Torrent.pm
431
432
  lib/Image/ExifTool/Unknown.pm
432
433
  lib/Image/ExifTool/VCard.pm
433
434
  lib/Image/ExifTool/Validate.pm
435
+ lib/Image/ExifTool/Vivo.pm
434
436
  lib/Image/ExifTool/Vorbis.pm
435
437
  lib/Image/ExifTool/WPG.pm
436
438
  lib/Image/ExifTool/WTV.pm
@@ -826,7 +828,10 @@ t/QuickTime_14.out
826
828
  t/QuickTime_15.out
827
829
  t/QuickTime_16.out
828
830
  t/QuickTime_17.out
831
+ t/QuickTime_18.out
832
+ t/QuickTime_19.out
829
833
  t/QuickTime_2.out
834
+ t/QuickTime_20.out
830
835
  t/QuickTime_3.out
831
836
  t/QuickTime_4.out
832
837
  t/QuickTime_5.out
data/bin/META.json CHANGED
@@ -50,5 +50,5 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "13.12"
53
+ "version" : "13.14"
54
54
  }
data/bin/META.yml CHANGED
@@ -31,4 +31,4 @@ recommends:
31
31
  Time::HiRes: '0'
32
32
  requires:
33
33
  perl: '5.004'
34
- version: '13.12'
34
+ version: '13.14'
data/bin/README CHANGED
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
109
109
  terminal window to extract and run ExifTool:
110
110
 
111
111
  cd ~/Desktop
112
- gzip -dc Image-ExifTool-13.12.tar.gz | tar -xf -
113
- cd Image-ExifTool-13.12
112
+ gzip -dc Image-ExifTool-13.14.tar.gz | tar -xf -
113
+ cd Image-ExifTool-13.14
114
114
  ./exiftool t/images/ExifTool.jpg
115
115
 
116
116
  Note: These commands extract meta information from one of the test images.
@@ -14,6 +14,7 @@
14
14
  # 2018/05/07 - PH Added support for GPSDestXxxRef tags
15
15
  # 2022/03/31 - PH IPTC Photometadata Mapping Guidelines 2202.1 update
16
16
  # 2024/10/24 - PH Additions for the 2024 EXIF for XMP spec
17
+ # 2025/01/16 - PH Copy Composite SubSec tags to XMP-exif
17
18
  #
18
19
  # References: http://www.metadataworkinggroup.org/specs/
19
20
  # https://iptc.org/std/photometadata/documentation/mappingguidelines/
@@ -54,4 +55,7 @@
54
55
  # new for the 2024 EXIF for XMP specification
55
56
  -XMP-exifEX:PhotographicSensitivity < EXIF:ISO
56
57
  -XMP-exif:DateTimeDigitized < EXIF:CreateDate
58
+ # add sub-seconds and time-zone to XMP-exif tags if available
59
+ -XMP-exif:DateTimeOriginal < Composite:SubSecDateTimeOriginal
60
+ -XMP-exif:DateTimeDigitized < Composite:SubSecCreateDate
57
61
  # end
@@ -18,6 +18,7 @@
18
18
  # 2023/01/30 - PH Also write Composite:SubSecDateTimeOriginal from
19
19
  # XMP-exif:DateTimeOriginal
20
20
  # 2024/10/24 - PH Additions for the 2024 EXIF for XMP spec
21
+ # 2025/01/16 - PH Write Composite:SubSecCreateDate from XMP-exif
21
22
  #
22
23
  # References: http://www.metadataworkinggroup.org/specs/
23
24
  # https://iptc.org/std/photometadata/documentation/mappingguidelines/
@@ -39,11 +40,11 @@
39
40
  -EXIF:DateTimeOriginal < XMP-photoshop:DateCreated
40
41
  # new for the 2024 EXIF for XMP specification
41
42
  -EXIF:ISO < XMP-exifEX:PhotographicSensitivity
42
- -EXIF:CreateDate < XMP-exif:DateTimeDigitized
43
43
  # the following SubSec tags also write/delete the corresponding EXIF
44
44
  # SubSecTime and OffsetTime tags as appropriate
45
45
  -Composite:SubSecDateTimeOriginal < XMP-exif:DateTimeOriginal
46
46
  -Composite:SubSecDateTimeOriginal < XMP-photoshop:DateCreated
47
+ -Composite:SubSecCreateDate < XMP-exif:DateTimeDigitized
47
48
  -Composite:SubSecCreateDate < XMP-xmp:CreateDate
48
49
  -Composite:SubSecModifyDate < XMP-xmp:ModifyDate
49
50
  -EXIF:Software < XMP-xmp:CreatorTool
@@ -228,7 +228,7 @@ Options:
228
228
  feature-code list may begin with a dash to remove entries from
229
229
  the default list, or a plus sign to add entries. May be
230
230
  multiple -c options for each intput DBFILE. Country/region and
231
- feature names are case insensitive. Default is "$defaults{def_codes}".
231
+ feature names are case insensitive. Default is "$defaults{def_codes}".
232
232
  -cp CODE - Additional features to include if above minimum population.
233
233
  Default is "$defcp".
234
234
  -l LANG - Alternate languages to read from $altNamesFile if
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.12';
14
+ my $version = '13.14';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -2455,7 +2455,7 @@ T2: foreach $t2 (@tags2) {
2455
2455
  } else {
2456
2456
  push @diffs, sprintf "< %s%s: %s\n", $desc, $pad, Printable($val);
2457
2457
  $desc = ' ' x $len if $v < 3;
2458
- push @diffs, sprintf "> %s%s %s\n", $desc, $pad, Printable($val2) if defined $val2;
2458
+ push @diffs, sprintf "> %s%s: %s\n", $desc, $pad, Printable($val2) if defined $val2;
2459
2459
  }
2460
2460
  }
2461
2461
  $done2{$tag2} = 1 if defined $tag2;
@@ -5983,7 +5983,7 @@ with this command:
5983
5983
 
5984
5984
  produces output like this:
5985
5985
 
5986
- -- Generated by ExifTool 13.12 --
5986
+ -- Generated by ExifTool 13.14 --
5987
5987
  File: a.jpg - 2003:10:31 15:44:19
5988
5988
  (f/5.6, 1/60s, ISO 100)
5989
5989
  File: b.jpg - 2006:05:23 11:57:38
@@ -6000,8 +6000,8 @@ name, a value of 1 is returned if any tag exists in the specified group, or
6000
6000
  values of all matching tags are joined).
6001
6001
 
6002
6002
  The B<-p> output iterates through the family 3 group names, with each
6003
- sub-document producing additional output. This feature is most useful when
6004
- used in combination with the B<-ee> option to extract embedded documents.
6003
+ sub-document producing additional output when combined with the B<-ee>
6004
+ (ExtractEmbedded) option.
6005
6005
 
6006
6006
  If a specified tag does not exist, a minor warning is issued and the line
6007
6007
  with the missing tag is not printed. However, the B<-f> option may be used
@@ -14,7 +14,7 @@ use strict;
14
14
  use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
 
17
- $VERSION = '1.09';
17
+ $VERSION = '1.10';
18
18
 
19
19
  sub ProcessAFCP($$);
20
20
 
@@ -63,10 +63,10 @@ for the AFCP specification.
63
63
  #------------------------------------------------------------------------------
64
64
  # Read/write AFCP information in a file
65
65
  # Inputs: 0) ExifTool object reference, 1) dirInfo reference
66
- # (Set 'ScanForAFCP' member in dirInfo to scan from current position for AFCP)
66
+ # (Set 'ScanForTrailer' member in dirInfo to scan from current position for AFCP)
67
67
  # Returns: 1 on success, 0 if this file didn't contain AFCP information
68
68
  # -1 on write error or if the offsets were incorrect on reading
69
- # - updates DataPos to point to actual AFCP start if ScanForAFCP is set
69
+ # - updates DataPos to point to actual AFCP start if ScanForTrailer is set
70
70
  # - updates DirLen to trailer length
71
71
  # - returns Fixup reference in dirInfo hash when writing
72
72
  sub ProcessAFCP($$)
@@ -91,8 +91,8 @@ NoAFCP: for (;;) {
91
91
  $fix = 0;
92
92
  } else {
93
93
  $rtnVal = -1;
94
- # look for start of AXS trailer if 'ScanForAFCP'
95
- last unless $$dirInfo{ScanForAFCP} and $raf->Seek($curPos, 0);
94
+ # look for start of AXS trailer if 'ScanForTrailer'
95
+ last unless $$dirInfo{ScanForTrailer} and $raf->Seek($curPos, 0);
96
96
  my $actualPos = $curPos;
97
97
  # first look for header right at current position
98
98
  for (;;) {
@@ -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.60';
38
+ $VERSION = '3.61';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -84,7 +84,8 @@ my %tweakOrder = (
84
84
  Nintendo => 'NikonCapture',
85
85
  Pentax => 'Panasonic',
86
86
  SonyIDC => 'Sony',
87
- Unknown => 'SonyIDC',
87
+ Vivo => 'SonyIDC',
88
+ Unknown => 'Vivo',
88
89
  DNG => 'Unknown',
89
90
  PrintIM => 'ICC_Profile',
90
91
  Vorbis => 'Ogg',
@@ -100,6 +101,8 @@ my %tweakOrder = (
100
101
  MWG => 'Shortcuts',
101
102
  'FujiFilm::RAF' => 'FujiFilm::RAFHeader',
102
103
  'FujiFilm::RAFData' => 'FujiFilm::RAF',
104
+ 'QuickTime::AudioKeys' => 'QuickTime::Keys',
105
+ 'QuickTime::VideoKeys' => 'QuickTime::AudioKeys',
103
106
  );
104
107
 
105
108
  # list of all recognized Format strings
@@ -437,15 +440,22 @@ appropriate table in the config file (see
437
440
  L<example.config|../config.html#PREF> in the full distribution for an
438
441
  example). Note that some tags with the same name but different ID's may
439
442
  exist in the same location, but the family 7 group names may be used to
440
- differentiate these. ExifTool currently writes only top-level metadata in
441
- QuickTime-based files; it extracts other track-specific and timed metadata,
442
- but can not yet edit tags in these locations (with the exception of
443
- track-level date/time tags).
443
+ differentiate these.
444
444
 
445
- Beware that the Keys tags are actually stored inside the ItemList in the
446
- file, so deleting the ItemList group as a block (ie. C<-ItemList:all=>) also
447
- deletes Keys tags. Instead, to preserve Keys tags the ItemList tags may be
448
- deleted individually with C<-QuickTime:ItemList:all=>.
445
+ ExifTool currently writes
446
+ L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
447
+ L<UserData|Image::ExifTool::TagNames/QuickTime UserData Tags> only as
448
+ top-level metadata, but select Keys tags are may be written to the audio or
449
+ video track. See the
450
+ L<AudioKeys|Image::ExifTool::TagNames/QuickTime AudioKeys Tags> and
451
+ L<VideoKeys|Image::ExifTool::TagNames/QuickTime VideoKeys Tags> tags for
452
+ more information.
453
+
454
+ Beware that the values of the Keys tags are actually stored inside an
455
+ ItemList atom in the file, so deleting the ItemList group as a block (ie.
456
+ C<-ItemList:all=>) also deletes Keys tags. Instead, to preserve Keys tags
457
+ the ItemList tags may be deleted individually with
458
+ C<-QuickTime:ItemList:all=>.
449
459
 
450
460
  Alternate language tags may be accessed for
451
461
  L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
@@ -1783,9 +1793,10 @@ sub NumbersFirst($$)
1783
1793
  $rtnVal = $numbersFirst;
1784
1794
  } else {
1785
1795
  my ($a2, $b2) = ($a, $b);
1786
- # expand numbers to 3 digits (with restrictions to avoid messing up ascii-hex tags)
1787
- $a2 =~ s/(\d+)/sprintf("%.3d",$1)/eg if $a2 =~ /^(APP|DMC-\w+ )?[.0-9 ]*$/ and length($a2)<16;
1788
- $b2 =~ s/(\d+)/sprintf("%.3d",$1)/eg if $b2 =~ /^(APP|DMC-\w+ )?[.0-9 ]*$/ and length($b2)<16;
1796
+ # expand numbers to 3 digits (with restrictions to avoid messing up
1797
+ # ascii-hex tags -- Nikon LensID's are 23 characters long)
1798
+ $a2 =~ s/(\d+)/sprintf("%.3d",$1)/eg if $a2 =~ /^(APP|DMC-\w+ |dvtm_.*)?[.0-9 ]*$/ and length($a2)<23;
1799
+ $b2 =~ s/(\d+)/sprintf("%.3d",$1)/eg if $b2 =~ /^(APP|DMC-\w+ |dvtm_.*)?[.0-9 ]*$/ and length($b2)<23;
1789
1800
  $caseInsensitive and $rtnVal = (lc($a2) cmp lc($b2));
1790
1801
  $rtnVal or $rtnVal = ($a2 cmp $b2);
1791
1802
  }
@@ -18,14 +18,15 @@ use Image::ExifTool::XMP;
18
18
  use Image::ExifTool::GPS;
19
19
  use Image::ExifTool::Protobuf;
20
20
 
21
- $VERSION = '1.11';
21
+ $VERSION = '1.12';
22
22
 
23
23
  sub ProcessDJIInfo($$$);
24
24
 
25
25
  %knownProtocol = (
26
- 'dvtm_ac203.proto' => 1,
27
- 'dvtm_ac204.proto' => 1,
28
- 'dvtm_AVATA2.proto' => 1,
26
+ 'dvtm_ac203.proto' => 1, # Osmo Action 4
27
+ 'dvtm_ac204.proto' => 1, # Osmo Action 5
28
+ 'dvtm_AVATA2.proto' => 1, # Avanta 2
29
+ 'dvtm_wm265e.proto' => 1, # Mavic 3
29
30
  );
30
31
 
31
32
  my %convFloat2 = (
@@ -200,15 +201,19 @@ my %convFloat2 = (
200
201
  TAG_PREFIX => '',
201
202
  PROCESS_PROC => \&Image::ExifTool::Protobuf::ProcessProtobuf,
202
203
  NOTES => q{
203
- Tags found in protobuf-format DJI djmd and dbgi timed metadata. Only a few
204
- tags are currently known, but unknown djmd tags may be extracted by setting
205
- the Unknown option to 1 (or 2 to also extract unknown dbgi debug tags). Tag
206
- ID's are composed of the corresponding .proto file name combined with the
207
- hierarchical protobuf field numbers.
204
+ Tags found in protobuf-format DJI djmd and dbgi timed metadata. The known
205
+ tags listed below are extracted by default, but unknown djmd tags may be
206
+ extracted as well by setting the Unknown option to 1, or 2 to also extract
207
+ unknown dbgi debug tags. Tag ID's are composed of the corresponding .proto
208
+ file name combined with the hierarchical protobuf field numbers.
208
209
 
209
210
  ExifTool currently extracts timed GPS plus a few other tags from DJI devices
210
211
  which use the following protocols: dvtm_AVATA2.proto (Avanta 2),
211
- dvtm_ac203.proto (Osmo Action 4), and dvtm_ac204.proto (Osmo Action 5).
212
+ dvtm_ac203.proto (Osmo Action 4), dvtm_ac204.proto (Osmo Action 5) and
213
+ dvtm_wm265e.proto (Mavic 3).
214
+
215
+ Note that with the protobuf format, numerical tags missing from the output
216
+ for a given protocol should be considered to have the default value of 0.
212
217
  },
213
218
  Protocol => {
214
219
  RawConv => q{
@@ -218,6 +223,10 @@ my %convFloat2 = (
218
223
  return $val;
219
224
  },
220
225
  },
226
+ #
227
+ # Osmo Action 4
228
+ #
229
+ 'dvtm_ac203_1-1-5' => 'SerialNumber', # (NC)
221
230
  # dvtm_ac203_1-1-6 - some version number
222
231
  'dvtm_ac203_1-1-10' => 'Model',
223
232
  'dvtm_ac203_2-3' => {
@@ -243,6 +252,10 @@ my %convFloat2 = (
243
252
  ValueConv => '$val =~ tr/-/:/; $val',
244
253
  PrintConv => '$self->ConvertDateTime($val)',
245
254
  },
255
+ #
256
+ # Osmo Action 5
257
+ #
258
+ 'dvtm_ac204_1-1-5' => 'SerialNumber', # (NC)
246
259
  # dvtm_ac204_1-1-6 - some version number
247
260
  'dvtm_ac204_1-1-10' => 'Model',
248
261
  'dvtm_ac204_2-3' => {
@@ -254,6 +267,7 @@ my %convFloat2 = (
254
267
  Name => 'GPSInfo',
255
268
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
256
269
  },
270
+ # dvtm_ac204_3-2-4-1 - shutter speed? (rational)
257
271
  'dvtm_ac204_3-4-2-2' => {
258
272
  Name => 'GPSAltitude',
259
273
  Groups => { 2 => 'Location' },
@@ -268,10 +282,15 @@ my %convFloat2 = (
268
282
  ValueConv => '$val =~ tr/-/:/; $val',
269
283
  PrintConv => '$self->ConvertDateTime($val)',
270
284
  },
285
+ #
286
+ # Avanta 2
287
+ #
271
288
  # dvtm_AVATA2_1-1-2 - some version number
272
289
  # dvtm_AVATA2_1-1-3 - some version number
290
+ 'dvtm_AVATA2_1-1-5' => 'SerialNumber', # (NC)
273
291
  'dvtm_AVATA2_1-1-10' => 'Model',
274
- 'dvtm_AVATA2_2-2-3-1' => 'SerialNumber', # (NC)
292
+ # dvtm_AVATA2_2-2-1-4 - model code?
293
+ 'dvtm_AVATA2_2-2-3-1' => 'SerialNumber2', # (NC)
275
294
  'dvtm_AVATA2_2-3' => {
276
295
  Name => 'FrameInfo',
277
296
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
@@ -285,11 +304,45 @@ my %convFloat2 = (
285
304
  ValueConv => '$val / 1e6',
286
305
  },
287
306
  # dvtm_AVATA2_3-2-1-4 - model code?
307
+ # dvtm_AVATA2_3-2-1-5 - frame rate?
308
+ # dvtm_AVATA2_3-2-4-1 - shutter speed? (rational)
288
309
  # dvtm_AVATA2_3-4-1-4 - model code?
310
+ # dvtm_AVATA2_3-4-3-1,2,3 - YPR? (int64s)
289
311
  'dvtm_AVATA2_3-4-4-1' => {
290
312
  Name => 'GPSInfo',
291
313
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
292
314
  },
315
+ #
316
+ # Mavic 3
317
+ #
318
+ 'dvtm_wm265e_1-1-5' => 'SerialNumber', # (confirmed)
319
+ 'dvtm_wm265e_1-1-10' => 'Model',
320
+ 'dvtm_wm265e_2-2' => {
321
+ Name => 'FrameInfo',
322
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
323
+ },
324
+ # dvtm_wm265e_3-2-1-4 - model code?
325
+ 'dvtm_wm265e_3-2-2-1' => { Name => 'ISO', Format => 'float' },
326
+ 'dvtm_wm265e_3-2-3-1' => {
327
+ Name => 'ShutterSpeed',
328
+ Format => 'rational',
329
+ ValueConv => '$val =~ m{(.*)/(.*)} ? $1 / $2 : $val',
330
+ PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
331
+ },
332
+ # dvtm_wm265e_3-2-5-1 - unknown rational (xxxx / 1000)
333
+ 'dvtm_wm265e_3-2-6-1' => { Name => 'DigitalZoom', Format => 'float' },
334
+ 'dvtm_wm265e_3-3-4-1' => {
335
+ Name => 'GPSInfo',
336
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
337
+ },
338
+ 'dvtm_wm265e_3-3-3-1' => { Name => 'DroneRoll', Format => 'int64s', ValueConv => '$val/10' },
339
+ 'dvtm_wm265e_3-3-3-2' => { Name => 'DronePitch', Format => 'int64s', ValueConv => '$val/10' },
340
+ 'dvtm_wm265e_3-3-3-3' => { Name => 'DroneYaw', Format => 'int64s', ValueConv => '$val/10' },
341
+ 'dvtm_wm265e_3-3-4-2' => { Name => 'AbsoluteAltitude', ValueConv => '$val / 1000' },
342
+ 'dvtm_wm265e_3-3-5-1' => { Name => 'RelativeAltitude', Format => 'float', ValueConv => '$val / 1000' },
343
+ 'dvtm_wm265e_3-4-3-1' => { Name => 'GimbalPitch',Format => 'int64s', ValueConv => '$val / 10' },
344
+ 'dvtm_wm265e_3-4-3-2' => { Name => 'GimbalRoll', Format => 'int64s', ValueConv => '$val / 10' },
345
+ 'dvtm_wm265e_3-4-3-3' => { Name => 'GimbalYaw', Format => 'int64s', ValueConv => '$val / 10' },
293
346
  );
294
347
 
295
348
  %Image::ExifTool::DJI::FrameInfo = (
@@ -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.20';
25
+ $VERSION = '1.21';
26
26
 
27
27
  sub ProcessPEResources($$);
28
28
  sub ProcessPEVersion($$);
@@ -1283,7 +1283,7 @@ sub ProcessEXE($$)
1283
1283
  # read the rest of the optional header if necessary
1284
1284
  my $optSize = Get16u(\$buff, 20);
1285
1285
  my $more = $optSize + 24 - $size;
1286
- my $magic;
1286
+ my $magic = 0;
1287
1287
  if ($more > 0) {
1288
1288
  if ($raf->Read($buf2, $more) == $more) {
1289
1289
  $buff .= $buf2;