exiftool_vendored 13.57.1 → 13.59.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: ba4192d537a29f92d95021a0ee7718b33b62e9d1b74ac77b6338d8977556d362
4
- data.tar.gz: 45bb1f4f1ae0019d715d87e1dbcb2114d3f2b68dbca7bde4bec11a91a85996c6
3
+ metadata.gz: 9ce05a515790dd95ab7268976c98a631cd914f89751e06325c85c4d5621295bc
4
+ data.tar.gz: d944c0936aea71dd27276c9591ac5e2568070f8a2088df644e8a019a42b98467
5
5
  SHA512:
6
- metadata.gz: 044e6e583071bffdbb6a6d8db31656067a44995f89d035b26cf1864dff6da1cf7872f90f821f17ab206e088e0233f59236fd80709cc166a21e063467b5f27fff
7
- data.tar.gz: c5ea4c50271825cc61cf0679ca9cde1d8b3abd1e4f434024276ba032fe74d92e5f136c5009bf083f62123f307a07e61854ba0a038b6f1d8336e9b30d96a47840
6
+ metadata.gz: f299b91c8e5085bf0f661ef597d551e3859c41c879ce8a2c14fdc4038396ea9882fd74f60a556c58d944b70db558b9719ced4cb4874784bd1d64b01c45cf4590
7
+ data.tar.gz: b2d2edf181e10759f40853133e294e1ed52dfbf14d7e90c94d2548d71c6bfa2c10d3203f77fb83fad1e787babb67e129e1275a66bf230899d6c357c9676b8619
data/bin/Changes CHANGED
@@ -7,11 +7,47 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 13.55. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ May 27, 2026 - Version 13.59
11
+
12
+ - Security update
13
+ - Added NewUUID Extra tag (thanks Daniel Dumitriu, github #421)
14
+ - Added a new Canon RF lens (thanks Norbert Wasser)
15
+ - Added config_files/novelty.config to the distribution (github #422)
16
+ - Decode tags from the Sony ILCE-7RM6 (thanks Jos Roost)
17
+ - Decode a new FujiFilm tag (thanks Iliah Borg)
18
+ - Decode a few more DJI protobuf tags
19
+ - Decode a new Ricoh Pentax tag
20
+ - Issue Error instead of Warning when writing XMP with some problems which
21
+ could cause loss of data
22
+ - Improved error message when reading wrongly encoded CSV or JSON file
23
+ - Enhanced -config option to allow piped input with "-config -"
24
+ - Enhanced -validate option to do more strict checking of EXIF-for-XMP tags
25
+ - Patched -sort option avoid inconsistent output ordering of same-named tags
26
+ - Patched Composite SubSec date/time tags to specify the EXIF group for the
27
+ SubSec and OffsetTime tags upon which they are based (avoids non-standard
28
+ XMP tags from being incorrectly used here)
29
+ - Fixed bug in -diff feature when finding differences for specific tags and a
30
+ specified tag was missing from the source file
31
+
32
+ May 5, 2026 - Version 13.58
33
+
34
+ - Added a few new Nikon Z lenses (thanks Warren Hatch)
35
+ - Added a few new QuickTime MajorBrand values (thanks Herb)
36
+ - Added a new RAFCompression value
37
+ - Added undocumented -eh option (alias for -E/-escapeHTML)
38
+ - Decode timed GPS from INNOVV N2 TS videos
39
+ - Improved decoding of Canon ColorData for some models (thanks Iliah Borg)
40
+ - Changed the name of the RAFVersion tag to FirmwareVersion
41
+ - Removed conversion for Garmin FIT DeviceIndex values
42
+ - Properly parse XML CDATA and comment sections
43
+ - Fixed issue which could cause failed Garmin test on some systems
44
+
10
45
  Apr. 17, 2026 - Version 13.57
11
46
 
12
47
  - Added print conversions for Garmin FIT enum tags
13
48
  - Decode a number of undocumented Garmin FIT tags
14
- - Reverted XML patch of 13.56 which broke structured JSON output
49
+ - Reverted XML patch of 13.56 which broke structured output for XMP files with
50
+ an XML header
15
51
 
16
52
  Apr. 15, 2026 - Version 13.56 - "Exif 3.1"
17
53
 
@@ -91,7 +127,7 @@ Feb. 19, 2026 - Version 13.51
91
127
 
92
128
  Feb. 7, 2026 - Version 13.50 (production release)
93
129
 
94
- - Security update (MacOS only, thanks Tay Kiat Loong)
130
+ - Security update (MacOS only)
95
131
  - Added a few new Sony lenses (thanks Jos Roost)
96
132
  - Added a couple of new Canon lenses (thanks Norbert Wasser)
97
133
  - Decode another Samsung trailer tag
data/bin/MANIFEST CHANGED
@@ -29,6 +29,7 @@ config_files/gps2utm.config
29
29
  config_files/guano.config
30
30
  config_files/local_time.config
31
31
  config_files/nksc.config
32
+ config_files/novelty.config
32
33
  config_files/onone.config
33
34
  config_files/photoshop_paths.config
34
35
  config_files/picasa_faces.config
data/bin/META.json CHANGED
@@ -50,6 +50,6 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "13.57",
53
+ "version" : "13.59",
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.57'
34
+ version: '13.59'
35
35
  x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
data/bin/README CHANGED
@@ -111,8 +111,8 @@ your home directory, then you would type the following commands in a
111
111
  terminal window to extract and run ExifTool:
112
112
 
113
113
  cd ~/Desktop
114
- gzip -dc Image-ExifTool-13.57.tar.gz | tar -xf -
115
- cd Image-ExifTool-13.57
114
+ gzip -dc Image-ExifTool-13.59.tar.gz | tar -xf -
115
+ cd Image-ExifTool-13.59
116
116
  ./exiftool t/images/ExifTool.jpg
117
117
 
118
118
  Note: These commands extract meta information from one of the test images.
@@ -213,6 +213,7 @@ distribution package:
213
213
  guano.config - Decode individual tags from Guano metadata
214
214
  local_time.config - Determine local time from GPS information
215
215
  nksc.config - Decode tags in Nikon ViewNX NKSC files
216
+ novelty.config - Definitions for XMP Novelty Theory tags
216
217
  onone.config - Definitions for writing On1 XMP tags
217
218
  photoshop_paths.config - For extracting or copying Photoshop paths
218
219
  picasa_faces.config - Convert from Picasa to MWG/MP face regions
@@ -136,7 +136,7 @@
136
136
  # new PNG tags are added to the PNG::TextualData table:
137
137
  'Image::ExifTool::PNG::TextualData' => {
138
138
  # Example 12. PNG:NewPngTag1
139
- NewPngTag1 => { },
139
+ NewPngTag1 => { }, # (Writable is 'string' by default for XMP tags)
140
140
  # Example 13. PNG:NewPngTag2
141
141
  NewPngTag2 => { iTXt => 1 }, # (force this tag to be written as iTXt)
142
142
  # Example 14. PNG:NewPngTag3
@@ -0,0 +1,51 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: novelty.config
3
+ #
4
+ # Description: This config file defines Novelty Theory XMP tags for writing.
5
+ #
6
+ # Notes: Tags for annotating timestamped media (video, photo, audio)
7
+ # with metadata in the context of Terence McKenna's Novelty
8
+ # Theory framework (see The Invisible Landscape, 1975).
9
+ # Published and maintained at http://hexart.pl/novelty/1.0/
10
+ # for use by archival projects documenting media against the
11
+ # McKenna timewave.
12
+ #
13
+ # Requires: ExifTool version 7.00 or later
14
+ #
15
+ # Revisions: 2026-05-27 - P. Harvey Created (from github #422)
16
+ #------------------------------------------------------------------------------
17
+
18
+ %Image::ExifTool::UserDefined = (
19
+ 'Image::ExifTool::XMP::Main' => {
20
+ novelty => {
21
+ SubDirectory => { TagTable => 'Image::ExifTool::UserDefined::novelty' },
22
+ },
23
+ },
24
+ );
25
+
26
+ # Novelty Theory XMP namespace (http://hexart.pl/novelty/1.0/)
27
+ %Image::ExifTool::UserDefined::novelty = (
28
+ GROUPS => { 0 => 'XMP', 1 => 'XMP-novelty', 2 => 'Other' },
29
+ NAMESPACE => { novelty => 'http://hexart.pl/novelty/1.0/' },
30
+ WRITABLE => 'string',
31
+ NoveltyIndex => { Writable => 'real' },
32
+ TimewavePosition => { },
33
+ Concrescence => { },
34
+ EschatonCoordinates => { },
35
+ StrangeAttractor => { },
36
+ HabitNoveltyRatio => { },
37
+ WaveformType => { },
38
+ Protocol => { },
39
+ Operator => { },
40
+ Intent => { },
41
+ Witness => { },
42
+ CosmicSign => { },
43
+ Frequency => { },
44
+ SacredGeometry => { },
45
+ Dimension => { },
46
+ Lineage => { },
47
+ Mantra => { },
48
+ Seal => { Avoid => 1 }, # avoid conflict with XMP-seal:Seal
49
+ );
50
+
51
+ 1; #end
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.57';
14
+ my $version = '13.59';
15
15
 
16
16
  $^W = 1; # enable global warnings
17
17
 
@@ -1009,7 +1009,8 @@ for (;;) {
1009
1009
  /^list_dir$/i and $listDir = 1, next;
1010
1010
  (/^e$/ or $a eq '-composite') and $mt->Options(Composite => 0), next;
1011
1011
  (/^-e$/ or $a eq 'composite') and $mt->Options(Composite => 1), next;
1012
- (/^E$/ or $a eq 'escapehtml') and require Image::ExifTool::HTML and $escapeHTML = 1, next;
1012
+ # (-eh is undocumented)
1013
+ (/^E$/ or $a eq 'escapehtml' or $a eq 'eh') and require Image::ExifTool::HTML and $escapeHTML = 1, next;
1013
1014
  ($a eq 'ec' or $a eq 'escapec') and $escapeC = 1, next;
1014
1015
  ($a eq 'ex' or $a eq 'escapexml') and $escapeXML = 1, next;
1015
1016
  if (/^echo(\d)?$/i) {
@@ -2436,7 +2437,8 @@ sub GetImageInfo($$)
2436
2437
  if (defined $tag) {
2437
2438
  $done{$tag} = 1;
2438
2439
  $g = $et->GetGroup($tag, $showGroup);
2439
- } else {
2440
+ }
2441
+ unless ($g) { # ($g could be '' if requesting non-existent tag, and this will sort last)
2440
2442
  for (;;) {
2441
2443
  $tag2 = shift @found2;
2442
2444
  defined $tag2 or $g = '', last;
@@ -4663,6 +4665,7 @@ sub FilenameSPrintf($;$@)
4663
4665
  $part{F} = $part{f} . $part{E};
4664
4666
  ($part{D} = $part{d}) =~ s{/+$}{};
4665
4667
  @part{qw(t g s o)} = @extra;
4668
+ $part{o} =~ s(^.*[/\\])()s if $part{o}; # remove directory if it exists
4666
4669
  my ($filename, $pos) = ('', 0);
4667
4670
  while ($fmt =~ /(%([-+]?)(\d*)([.:]?)(\d*)([lu]?)([dDfFeEtgso]))/g) {
4668
4671
  $filename .= substr($fmt, $pos, pos($fmt) - $pos - length($1));
@@ -6159,7 +6162,7 @@ with this command:
6159
6162
 
6160
6163
  produces output like this:
6161
6164
 
6162
- -- Generated by ExifTool 13.57 --
6165
+ -- Generated by ExifTool 13.59 --
6163
6166
  File: a.jpg - 2003:10:31 15:44:19
6164
6167
  (f/5.6, 1/60s, ISO 100)
6165
6168
  File: b.jpg - 2006:05:23 11:57:38
@@ -6456,12 +6459,12 @@ between B<-W> and B<-w>:
6456
6459
 
6457
6460
  2) B<-W> supports four additional format codes: %t, %g and %s represent the
6458
6461
  tag name, group name, and suggested extension for the output file (based on
6459
- the format of the data), and %o represents the value of the
6460
- OriginalRawFileName or OriginalFileName tag from the input file (including
6461
- extension). The %g code may be followed by a single digit to specify the
6462
- group family number (eg. %g1), otherwise family 0 is assumed. The substring
6463
- width/position/case specifiers may be used with these format codes in
6464
- exactly the same way as with %f and %e.
6462
+ the format of the data), and %o is the value of the OriginalRawFileName or
6463
+ OriginalFileName tag from the input file (without directory name, but
6464
+ including extension). The %g code may be followed by a single digit to
6465
+ specify the group family number (eg. %g1), otherwise family 0 is assumed.
6466
+ The substring width/position/case specifiers may be used with these format
6467
+ codes in exactly the same way as with %f and %e.
6465
6468
 
6466
6469
  3) The argument for B<-W> is interpreted as a file name if it contains no
6467
6470
  format codes. (For B<-w>, this would be a file extension.) This change
@@ -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.68';
38
+ $VERSION = '3.69';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -481,7 +481,7 @@ assume these values are properly stored as UTC, and will convert them to
481
481
  local time when extracting.
482
482
 
483
483
  When writing string-based date/time tags, the system time zone is added if
484
- the PrintConv option is enabled and no time zone is specified. This is
484
+ the L<PrintConv|../ExifTool.html#PrintConv> option is enabled and no time zone is specified. This is
485
485
  because Apple software may display crazy values if the time zone is missing
486
486
  for some tags.
487
487
 
@@ -2301,12 +2301,13 @@ sub WriteTagNames($$)
2301
2301
  for ($r=0; $r<$rows; ++$r) {
2302
2302
  print HTMLFILE '<tr>';
2303
2303
  for ($c=0; $c<$cols; ++$c) {
2304
- my ($key, $val, $index, $prt);
2304
+ my ($key, $val, $index, $prt, $bit);
2305
2305
  my $n = $r + $c * $rows;
2306
2306
  if ($n < @keys) {
2307
2307
  $key = $keys[$n];
2308
2308
  $val = $$printConv{$key};
2309
2309
  } elsif ($n < $items) {
2310
+ $bit = 1;
2310
2311
  $key = 'Bit ' . $bits[$n - @keys];
2311
2312
  $val = $$bits{$bits[$n - @keys]};
2312
2313
  }
@@ -2321,7 +2322,8 @@ sub WriteTagNames($$)
2321
2322
  } elsif ($$printConv{PrintString} or
2322
2323
  $index !~ /^[+-]?(?=\d|\.\d)\d*(\.\d*)?$/)
2323
2324
  {
2324
- $index = "'" . EscapeHTML($index) . "'";
2325
+ $index = EscapeHTML($index);
2326
+ $index = "'${index}'" unless $bit;
2325
2327
  }
2326
2328
  } else {
2327
2329
  $index = $prt = '&nbsp;';
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '5.06';
91
+ $VERSION = '5.07';
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)
@@ -646,9 +646,10 @@ $VERSION = '5.06';
646
646
  '61182.63' => 'Canon RF 24mm F1.4 L VCM', #42
647
647
  '61182.64' => 'Canon RF 20mm F1.4 L VCM', #42
648
648
  '61182.65' => 'Canon RF 85mm F1.4 L VCM', #github350
649
- '61182.66' => 'Canon RF 45mm F1.2 STM', #42
650
- '61182.67' => 'Canon RF 7-14mm F2.8-3.5 L FISHEYE STM', #42
651
- '61182.68' => 'Canon RF 14mm F1.4 L VCM', #42
649
+ '61182.66' => 'Canon RF 20-50mm F4 L IS USM PZ', #42
650
+ '61182.67' => 'Canon RF 45mm F1.2 STM', #42
651
+ '61182.68' => 'Canon RF 7-14mm F2.8-3.5 L FISHEYE STM', #42
652
+ '61182.69' => 'Canon RF 14mm F1.4 L VCM', #42
652
653
  65535 => 'n/a',
653
654
  );
654
655
 
@@ -2031,7 +2032,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
2031
2032
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData10' },
2032
2033
  },
2033
2034
  { # (int16u[3973]) - R3 ref IB
2034
- Condition => '($count == 3973 or $count == 3778) and $$valPt !~ /^\x41\0/',
2035
+ Condition => '($count == 3973 or $count == 3778) and $$valPt =~ /^[\0-\x40]/',
2035
2036
  Name => 'ColorData11',
2036
2037
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData11' },
2037
2038
  },
@@ -7132,6 +7133,7 @@ my %ciMaxFocal = (
7132
7133
  326 => 'Canon RF 24mm F1.4 L VCM', #42
7133
7134
  327 => 'Canon RF 20mm F1.4 L VCM', #42
7134
7135
  328 => 'Canon RF 85mm F1.4 L VCM', #42/github350
7136
+ 329 => 'Canon RF 20-50mm F4 L IS USM PZ', #42
7135
7137
  330 => 'Canon RF 45mm F1.2 STM', #42
7136
7138
  331 => 'Canon RF 7-14mm F2.8-3.5 L FISHEYE STM', #42
7137
7139
  332 => 'Canon RF 14mm F1.4 L VCM', #42
@@ -8729,18 +8731,18 @@ my %ciMaxFocal = (
8729
8731
  0xa9 => { Name => 'ColorTempUnknown10', Unknown => 1 },
8730
8732
  0xaa => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 },
8731
8733
  0xae => { Name => 'ColorTempUnknown11', Unknown => 1 },
8732
- 0xaf => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 },
8733
- 0xb3 => { Name => 'ColorTempUnknown11', Unknown => 1 },
8734
- 0xb4 => { Name => 'WB_RGGBLevelsUnknown12', Format => 'int16s[4]', Unknown => 1 },
8735
- 0xb8 => { Name => 'ColorTempUnknown12', Unknown => 1 },
8736
- 0xb9 => { Name => 'WB_RGGBLevelsUnknown13', Format => 'int16s[4]', Unknown => 1 },
8737
- 0xbd => { Name => 'ColorTempUnknown13', Unknown => 1 },
8738
- 0xbe => { Name => 'WB_RGGBLevelsUnknown14', Format => 'int16s[4]', Unknown => 1 },
8739
- 0xc2 => { Name => 'ColorTempUnknown14', Unknown => 1 },
8740
- 0xc3 => { Name => 'WB_RGGBLevelsUnknown15', Format => 'int16s[4]', Unknown => 1 },
8741
- 0xc7 => { Name => 'ColorTempUnknown15', Unknown => 1 },
8742
- 0xc8 => { Name => 'WB_RGGBLevelsUnknown16', Format => 'int16s[4]', Unknown => 1 },
8743
- 0xcc => { Name => 'ColorTempUnknown16', Unknown => 1 },
8734
+ 0xaf => { Name => 'WB_RGGBLevelsUnknown12', Format => 'int16s[4]', Unknown => 1 },
8735
+ 0xb3 => { Name => 'ColorTempUnknown12', Unknown => 1 },
8736
+ 0xb4 => { Name => 'WB_RGGBLevelsUnknown13', Format => 'int16s[4]', Unknown => 1 },
8737
+ 0xb8 => { Name => 'ColorTempUnknown13', Unknown => 1 },
8738
+ 0xb9 => { Name => 'WB_RGGBLevelsUnknown14', Format => 'int16s[4]', Unknown => 1 },
8739
+ 0xbd => { Name => 'ColorTempUnknown14', Unknown => 1 },
8740
+ 0xbe => { Name => 'WB_RGGBLevelsUnknown15', Format => 'int16s[4]', Unknown => 1 },
8741
+ 0xc2 => { Name => 'ColorTempUnknown15', Unknown => 1 },
8742
+ 0xc3 => { Name => 'WB_RGGBLevelsUnknown16', Format => 'int16s[4]', Unknown => 1 },
8743
+ 0xc7 => { Name => 'ColorTempUnknown16', Unknown => 1 },
8744
+ 0xc8 => { Name => 'WB_RGGBLevelsUnknown17', Format => 'int16s[4]', Unknown => 1 },
8745
+ 0xcc => { Name => 'ColorTempUnknown17', Unknown => 1 },
8744
8746
  0xcd => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16s[4]' },
8745
8747
  0xd1 => 'ColorTempDaylight',
8746
8748
  0xd2 => { Name => 'WB_RGGBLevelsShade', Format => 'int16s[4]' },
@@ -8755,28 +8757,28 @@ my %ciMaxFocal = (
8755
8757
  0xea => 'ColorTempKelvin',
8756
8758
  0xeb => { Name => 'WB_RGGBLevelsFlash', Format => 'int16s[4]' },
8757
8759
  0xef => 'ColorTempFlash',
8758
- 0xf0 => { Name => 'WB_RGGBLevelsUnknown17', Format => 'int16s[4]', Unknown => 1 },
8759
- 0xf4 => { Name => 'ColorTempUnknown17', Unknown => 1 },
8760
- 0xf5 => { Name => 'WB_RGGBLevelsUnknown18', Format => 'int16s[4]', Unknown => 1 },
8761
- 0xf9 => { Name => 'ColorTempUnknown18', Unknown => 1 },
8762
- 0xfa => { Name => 'WB_RGGBLevelsUnknown19', Format => 'int16s[4]', Unknown => 1 },
8763
- 0xfe => { Name => 'ColorTempUnknown19', Unknown => 1 },
8764
- 0xff => { Name => 'WB_RGGBLevelsUnknown20', Format => 'int16s[4]', Unknown => 1 },
8765
- 0x103 => { Name => 'ColorTempUnknown20', Unknown => 1 },
8766
- 0x104 => { Name => 'WB_RGGBLevelsUnknown21', Format => 'int16s[4]', Unknown => 1 },
8767
- 0x108 => { Name => 'ColorTempUnknown21', Unknown => 1 },
8768
- 0x109 => { Name => 'WB_RGGBLevelsUnknown22', Format => 'int16s[4]', Unknown => 1 },
8769
- 0x10d => { Name => 'ColorTempUnknown22', Unknown => 1 },
8770
- 0x10e => { Name => 'WB_RGGBLevelsUnknown23', Format => 'int16s[4]', Unknown => 1 },
8771
- 0x112 => { Name => 'ColorTempUnknown23', Unknown => 1 },
8772
- 0x113 => { Name => 'WB_RGGBLevelsUnknown24', Format => 'int16s[4]', Unknown => 1 },
8773
- 0x117 => { Name => 'ColorTempUnknown24', Unknown => 1 },
8774
- 0x118 => { Name => 'WB_RGGBLevelsUnknown25', Format => 'int16s[4]', Unknown => 1 },
8775
- 0x11c => { Name => 'ColorTempUnknown25', Unknown => 1 },
8776
- 0x11d => { Name => 'WB_RGGBLevelsUnknown26', Format => 'int16s[4]', Unknown => 1 },
8777
- 0x121 => { Name => 'ColorTempUnknown26', Unknown => 1 },
8778
- 0x122 => { Name => 'WB_RGGBLevelsUnknown27', Format => 'int16s[4]', Unknown => 1 },
8779
- 0x126 => { Name => 'ColorTempUnknown27', Unknown => 1 },
8760
+ 0xf0 => { Name => 'WB_RGGBLevelsUnknown18', Format => 'int16s[4]', Unknown => 1 },
8761
+ 0xf4 => { Name => 'ColorTempUnknown18', Unknown => 1 },
8762
+ 0xf5 => { Name => 'WB_RGGBLevelsUnknown19', Format => 'int16s[4]', Unknown => 1 },
8763
+ 0xf9 => { Name => 'ColorTempUnknown19', Unknown => 1 },
8764
+ 0xfa => { Name => 'WB_RGGBLevelsUnknown20', Format => 'int16s[4]', Unknown => 1 },
8765
+ 0xfe => { Name => 'ColorTempUnknown20', Unknown => 1 },
8766
+ 0xff => { Name => 'WB_RGGBLevelsUnknown21', Format => 'int16s[4]', Unknown => 1 },
8767
+ 0x103 => { Name => 'ColorTempUnknown21', Unknown => 1 },
8768
+ 0x104 => { Name => 'WB_RGGBLevelsUnknown22', Format => 'int16s[4]', Unknown => 1 },
8769
+ 0x108 => { Name => 'ColorTempUnknown22', Unknown => 1 },
8770
+ 0x109 => { Name => 'WB_RGGBLevelsUnknown23', Format => 'int16s[4]', Unknown => 1 },
8771
+ 0x10d => { Name => 'ColorTempUnknown23', Unknown => 1 },
8772
+ 0x10e => { Name => 'WB_RGGBLevelsUnknown24', Format => 'int16s[4]', Unknown => 1 },
8773
+ 0x112 => { Name => 'ColorTempUnknown24', Unknown => 1 },
8774
+ 0x113 => { Name => 'WB_RGGBLevelsUnknown25', Format => 'int16s[4]', Unknown => 1 },
8775
+ 0x117 => { Name => 'ColorTempUnknown25', Unknown => 1 },
8776
+ 0x118 => { Name => 'WB_RGGBLevelsUnknown26', Format => 'int16s[4]', Unknown => 1 },
8777
+ 0x11c => { Name => 'ColorTempUnknown26', Unknown => 1 },
8778
+ 0x11d => { Name => 'WB_RGGBLevelsUnknown27', Format => 'int16s[4]', Unknown => 1 },
8779
+ 0x121 => { Name => 'ColorTempUnknown27', Unknown => 1 },
8780
+ 0x122 => { Name => 'WB_RGGBLevelsUnknown28', Format => 'int16s[4]', Unknown => 1 },
8781
+ 0x126 => { Name => 'ColorTempUnknown28', Unknown => 1 },
8780
8782
  0x12c => {
8781
8783
  Name => 'ColorCalib',
8782
8784
  Format => 'undef[120]',
@@ -18,7 +18,7 @@ use Image::ExifTool::XMP;
18
18
  use Image::ExifTool::GPS;
19
19
  use Image::ExifTool::Protobuf;
20
20
 
21
- $VERSION = '1.18';
21
+ $VERSION = '1.19';
22
22
 
23
23
  sub ProcessDJIInfo($$$);
24
24
  sub ProcessSettings($$$);
@@ -275,7 +275,9 @@ my %convFloat2 = (
275
275
  Name => 'FrameInfo',
276
276
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
277
277
  },
278
- 'dvtm_ac203_3-2-2-1' => { Name => 'ISO', Format => 'float' },
278
+ #WRONG (forum17996) 'dvtm_ac203_3-2-2-1' => { Name => 'ISO', Format => 'float' },
279
+ 'dvtm_ac203_3-1-1' => { Name => 'FrameNumber', Format => 'unsigned' }, #forum17996
280
+ 'dvtm_ac203_3-2-3-1' => { Name => 'ISO', Format => 'float' }, #forum17996
279
281
  'dvtm_ac203_3-2-4-1' => { # (NC)
280
282
  Name => 'ShutterSpeed',
281
283
  Format => 'rational',
@@ -315,6 +317,8 @@ my %convFloat2 = (
315
317
  Name => 'FrameInfo',
316
318
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
317
319
  },
320
+ 'dvtm_ac204_3-1-1' => { Name => 'FrameNumber', Format => 'unsigned' }, #forum17996
321
+ 'dvtm_ac204_3-2-3-1' => { Name => 'ISO', Format => 'float' }, #forum17996
318
322
  'dvtm_ac204_3-2-4-1' => { # (NC)
319
323
  Name => 'ShutterSpeed',
320
324
  Format => 'rational',
@@ -354,6 +358,8 @@ my %convFloat2 = (
354
358
  Name => 'FrameInfo',
355
359
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
356
360
  },
361
+ 'dvtm_ac206_3-1-1' => { Name => 'FrameNumber', Format => 'unsigned' }, #forum17996
362
+ 'dvtm_ac206_3-2-3-1' => { Name => 'ISO', Format => 'float' }, #forum17996
357
363
  'dvtm_ac206_3-2-4-1' => { # (NC)
358
364
  Name => 'ShutterSpeed',
359
365
  Format => 'rational',
@@ -395,7 +401,7 @@ my %convFloat2 = (
395
401
  Name => 'FrameInfo',
396
402
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
397
403
  },
398
- # dvtm_AVATA2_3-1-1 - frame number (starting at 1)
404
+ 'dvtm_AVATA2_3-1-1' => { Name => 'FrameNumber', Format => 'unsigned' },
399
405
  'dvtm_AVATA2_3-1-2' => { # (also 3-2-1-6 and 3-4-1-6)
400
406
  Name => 'TimeStamp',
401
407
  Groups => { 2 => 'Time' },
@@ -437,6 +443,7 @@ my %convFloat2 = (
437
443
  Name => 'FrameInfo',
438
444
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
439
445
  },
446
+ 'dvtm_wm265e_3-1-1' => { Name => 'FrameNumber', Format => 'unsigned' },
440
447
  # dvtm_wm265e_3-2-1-4 - model code?
441
448
  'dvtm_wm265e_3-2-2-1' => { Name => 'ISO', Format => 'float' },
442
449
  'dvtm_wm265e_3-2-3-1' => {
@@ -469,6 +476,7 @@ my %convFloat2 = (
469
476
  Name => 'FrameInfo',
470
477
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
471
478
  },
479
+ 'dvtm_pm320_3-1-1' => { Name => 'FrameNumber', Format => 'unsigned' },
472
480
  'dvtm_pm320_3-2-2-1' => { Name => 'ISO', Format => 'float' },
473
481
  'dvtm_pm320_3-2-3-1' => {
474
482
  Name => 'ShutterSpeed',
@@ -504,6 +512,7 @@ my %convFloat2 = (
504
512
  Name => 'FrameInfo',
505
513
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
506
514
  },
515
+ 'dvtm_Mini4_Pro_3-1-1' => { Name => 'FrameNumber', Format => 'unsigned' },
507
516
  'dvtm_Mini4_Pro_3-2-7-1' => { Name => 'ISO', Format => 'float' },
508
517
  'dvtm_Mini4_Pro_3-2-10-1' => {
509
518
  Name => 'ShutterSpeed',
@@ -546,7 +555,7 @@ my %convFloat2 = (
546
555
  Name => 'FrameInfo',
547
556
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
548
557
  },
549
- # dvtm_dji_neo_3-1-1 - frame number (starting at 1)
558
+ 'dvtm_dji_neo_3-1-1' => { Name => 'FrameNumber', Format => 'unsigned' },
550
559
  'dvtm_dji_neo_3-1-2' => { # (also 3-2-1-6 and 3-4-1-6)
551
560
  Name => 'TimeStamp',
552
561
  Groups => { 2 => 'Time' },
@@ -586,6 +595,7 @@ my %convFloat2 = (
586
595
  Name => 'FrameInfo',
587
596
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
588
597
  },
598
+ 'dvtm_Air3_3-1-1' => { Name => 'FrameNumber', Format => 'unsigned' }, # (NC)
589
599
  'dvtm_Air3_3-1-2' => {
590
600
  Name => 'TimeStamp',
591
601
  Groups => { 2 => 'Time' },
@@ -626,6 +636,7 @@ my %convFloat2 = (
626
636
  Name => 'FrameInfo',
627
637
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
628
638
  },
639
+ 'dvtm_Air3s_3-1-1' => { Name => 'FrameNumber', Format => 'unsigned' }, # (NC)
629
640
  'dvtm_Air3s_3-1-2' => {
630
641
  Name => 'TimeStamp',
631
642
  Groups => { 2 => 'Time' },
@@ -659,10 +670,11 @@ my %convFloat2 = (
659
670
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::GimbalInfo' },
660
671
  },
661
672
  #
662
- # Osmo 360 (similar to Action 4/5)
673
+ # Osmo 360 (similar to Action 4/5/6)
663
674
  #
664
675
  'dvtm_oq101_1-1-5' => { Name => 'SerialNumber', Notes => 'Osmo 360' },
665
676
  'dvtm_oq101_1-1-10' => 'Model',
677
+ 'dvtm_oq101_3-1-1' => { Name => 'FrameNumber', Format => 'unsigned' },
666
678
  'dvtm_oq101_3-1-2' => {
667
679
  Name => 'TimeStamp',
668
680
  Groups => { 2 => 'Time' },
@@ -706,6 +718,7 @@ my %convFloat2 = (
706
718
  Name => 'FrameInfo',
707
719
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
708
720
  },
721
+ 'dvtm_PP-101_3-1-1' => { Name => 'FrameNumber', Format => 'unsigned' },
709
722
  'dvtm_PP-101_3-1-2' => {
710
723
  Name => 'TimeStamp',
711
724
  Groups => { 2 => 'Time' },
@@ -728,6 +741,7 @@ my %convFloat2 = (
728
741
  Name => 'FrameInfo',
729
742
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
730
743
  },
744
+ 'dvtm_wa345e_3-1-1' => { Name => 'FrameNumber', Format => 'unsigned' },
731
745
  'dvtm_wa345e_3-1-2' => {
732
746
  Name => 'TimeStamp',
733
747
  Groups => { 2 => 'Time' },
@@ -765,6 +779,7 @@ my %convFloat2 = (
765
779
  Name => 'FrameInfo',
766
780
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
767
781
  },
782
+ 'dvtm_wm261_3-1-1' => { Name => 'FrameNumber', Format => 'unsigned' },
768
783
  'dvtm_wm261_3-1-2' => {
769
784
  Name => 'TimeStamp',
770
785
  Groups => { 2 => 'Time' },
@@ -815,6 +830,7 @@ my %convFloat2 = (
815
830
  Name => 'FrameInfo',
816
831
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
817
832
  },
833
+ 'dvtm_Mavic4_3-1-1' => { Name => 'FrameNumber', Format => 'unsigned' },
818
834
  'dvtm_Mavic4_3-1-2' => {
819
835
  Name => 'TimeStamp',
820
836
  Groups => { 2 => 'Time' },
@@ -849,6 +865,7 @@ my %convFloat2 = (
849
865
  #
850
866
  'dvtm_Mini5Pro_1-1-5' => { Name => 'SerialNumber', Notes => 'Mini 5 Pro' }, # (NC)
851
867
  'dvtm_Mini5Pro_1-1-10' => 'Model', # (NC)
868
+ 'dvtm_Mini5Pro_3-1-1' => { Name => 'FrameNumber', Format => 'unsigned' }, # (NC)
852
869
  'dvtm_Mini5Pro_3-2-37-1' => { Name => 'Temperature', Format => 'float' }, # (NC)
853
870
  'dvtm_Mini5Pro_3-3-4-1' => {
854
871
  Name => 'GPSInfo',
@@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
57
57
  use Image::ExifTool qw(:DataAccess :Utils);
58
58
  use Image::ExifTool::MakerNotes;
59
59
 
60
- $VERSION = '4.64';
60
+ $VERSION = '4.65';
61
61
 
62
62
  sub ProcessExif($$$);
63
63
  sub WriteExif($$$);
@@ -5170,8 +5170,8 @@ my %subSecConv = (
5170
5170
  0 => 'EXIF:DateTimeOriginal',
5171
5171
  },
5172
5172
  Desire => {
5173
- 1 => 'SubSecTimeOriginal',
5174
- 2 => 'OffsetTimeOriginal',
5173
+ 1 => 'EXIF:SubSecTimeOriginal',
5174
+ 2 => 'EXIF:OffsetTimeOriginal',
5175
5175
  },
5176
5176
  WriteAlso => {
5177
5177
  'EXIF:DateTimeOriginal' => '($val and $val=~/^(\d{4}:\d{2}:\d{2} \d{2}:\d{2}:\d{2})/) ? $1 : undef',
@@ -5189,8 +5189,8 @@ my %subSecConv = (
5189
5189
  0 => 'EXIF:CreateDate',
5190
5190
  },
5191
5191
  Desire => {
5192
- 1 => 'SubSecTimeDigitized',
5193
- 2 => 'OffsetTimeDigitized',
5192
+ 1 => 'EXIF:SubSecTimeDigitized',
5193
+ 2 => 'EXIF:OffsetTimeDigitized',
5194
5194
  },
5195
5195
  WriteAlso => {
5196
5196
  'EXIF:CreateDate' => '($val and $val=~/^(\d{4}:\d{2}:\d{2} \d{2}:\d{2}:\d{2})/) ? $1 : undef',
@@ -5208,8 +5208,8 @@ my %subSecConv = (
5208
5208
  0 => 'EXIF:ModifyDate',
5209
5209
  },
5210
5210
  Desire => {
5211
- 1 => 'SubSecTime',
5212
- 2 => 'OffsetTime',
5211
+ 1 => 'EXIF:SubSecTime',
5212
+ 2 => 'EXIF:OffsetTime',
5213
5213
  },
5214
5214
  WriteAlso => {
5215
5215
  'EXIF:ModifyDate' => '($val and $val=~/^(\d{4}:\d{2}:\d{2} \d{2}:\d{2}:\d{2})/) ? $1 : undef',