exiftool_vendored 13.50.0 → 13.53.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 +4 -4
- data/bin/Changes +43 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +4 -3
- data/bin/exiftool +26 -15
- data/bin/lib/Image/ExifTool/APP12.pm +5 -5
- data/bin/lib/Image/ExifTool/ASF.pm +9 -9
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +31 -10
- data/bin/lib/Image/ExifTool/CBOR.pm +2 -1
- data/bin/lib/Image/ExifTool/Canon.pm +114 -4
- data/bin/lib/Image/ExifTool/Charset.pm +2 -2
- data/bin/lib/Image/ExifTool/DJI.pm +70 -8
- data/bin/lib/Image/ExifTool/EXE.pm +3 -3
- data/bin/lib/Image/ExifTool/Exif.pm +1 -3
- data/bin/lib/Image/ExifTool/Flash.pm +2 -8
- data/bin/lib/Image/ExifTool/FlashPix.pm +9 -9
- data/bin/lib/Image/ExifTool/Font.pm +2 -2
- data/bin/lib/Image/ExifTool/ID3.pm +3 -3
- data/bin/lib/Image/ExifTool/LIF.pm +3 -3
- data/bin/lib/Image/ExifTool/LNK.pm +1155 -78
- data/bin/lib/Image/ExifTool/M2TS.pm +5 -3
- data/bin/lib/Image/ExifTool/MIE.pm +2 -2
- data/bin/lib/Image/ExifTool/MXF.pm +2 -2
- data/bin/lib/Image/ExifTool/Matroska.pm +2 -4
- data/bin/lib/Image/ExifTool/Microsoft.pm +3 -3
- data/bin/lib/Image/ExifTool/Nikon.pm +52 -7
- data/bin/lib/Image/ExifTool/PDF.pm +2 -2
- data/bin/lib/Image/ExifTool/PLIST.pm +2 -2
- data/bin/lib/Image/ExifTool/Pentax.pm +2 -2
- data/bin/lib/Image/ExifTool/Photoshop.pm +5 -5
- data/bin/lib/Image/ExifTool/QuickTime.pm +13 -10
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +17 -22
- data/bin/lib/Image/ExifTool/README +22 -19
- data/bin/lib/Image/ExifTool/Reconyx.pm +3 -3
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +2 -2
- data/bin/lib/Image/ExifTool/Sony.pm +13 -6
- data/bin/lib/Image/ExifTool/TagLookup.pm +101 -11
- data/bin/lib/Image/ExifTool/TagNames.pod +232 -12
- data/bin/lib/Image/ExifTool/Torrent.pm +2 -1
- data/bin/lib/Image/ExifTool/WPG.pm +23 -11
- data/bin/lib/Image/ExifTool/WTV.pm +4 -4
- data/bin/lib/Image/ExifTool/XMP.pm +29 -3
- data/bin/lib/Image/ExifTool.pm +56 -18
- data/bin/lib/Image/ExifTool.pod +3 -2
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c653bfd291b7881243e271beba3bdcf6af6343647b7736ea5750a8b6427c6ba2
|
|
4
|
+
data.tar.gz: 550046af23b550283317d05a7d3387d2e977efd2d3c74af0285808f8035c7756
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a2dabd27da939c74ff1300eaea01b3597c994d9fe456bb2d386f6d5eba0f6fb682c8c154ac3ad833e8fd7e63f421b01f3c5c0b307989cb8e030284f2a5c0bf13
|
|
7
|
+
data.tar.gz: eb1cff971653f098e366a793786e43caa79a378134287935afd997f5dad37212f9bb6bf7b64523c85c4774e53fcd84379dc34b1016fa428f6d158011f0b69f5b
|
data/bin/Changes
CHANGED
|
@@ -7,6 +7,49 @@ RSS feed: https://exiftool.org/rss.xml
|
|
|
7
7
|
Note: The most recent production release is Version 13.50. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
Mar. 19, 2026 - Version 13.53
|
|
11
|
+
|
|
12
|
+
- Added ability to read FileCreateDate (btime) on Linux systems
|
|
13
|
+
- Added a bunch more Sony lenses (thanks Jos Roost)
|
|
14
|
+
- Added warnings for possibly malicious or corrupted LNK files (github #401)
|
|
15
|
+
- Decode timed GPS from Kenwood DRV-A510W MP4 videos
|
|
16
|
+
- Decode more information from LNK files
|
|
17
|
+
- Reduced memory requirements when running on a large number of files,
|
|
18
|
+
particularly when the -U option is used
|
|
19
|
+
- Patched a potential security issue in Windows version
|
|
20
|
+
- Fixed possible "undefined value" runtime warnings when reading torrent and
|
|
21
|
+
WPG files (thanks Raf)
|
|
22
|
+
- Fixed issue which could result in an "uninitialized value" runtime error
|
|
23
|
+
when parsing corrupted CBOR information
|
|
24
|
+
|
|
25
|
+
Feb. 27, 2026 - Version 13.52
|
|
26
|
+
|
|
27
|
+
- Added a number of new XMP tags written by Adobe software
|
|
28
|
+
- Added UTF-16 support for a few different metadata types in which only UCS-2
|
|
29
|
+
was previously implemented (github #396)
|
|
30
|
+
- Added a few more Canon FlashModel values and decode FlashModel for the
|
|
31
|
+
5DmkII (thanks Peter Wem, github #390)
|
|
32
|
+
- Added a new Canon LensType (github #395)
|
|
33
|
+
- Added some missing file attribute bits to two of the new LNK tags
|
|
34
|
+
- Decode internal serial number for the 5DmkII (thanks Peter Wem, github #398)
|
|
35
|
+
- Decode another OwnerName for the 5DmkII (thanks Peter Wem, github #397)
|
|
36
|
+
- Decode some timed GPS for a couple of new DJI drones
|
|
37
|
+
- Enable WindowsLongPath by default only if Win32::API is available
|
|
38
|
+
- Renamed the Pentax K3III AFInfo tag to AFInfoK3III
|
|
39
|
+
|
|
40
|
+
Feb. 19, 2026 - Version 13.51
|
|
41
|
+
|
|
42
|
+
- Added a new Nikon LensID (thanks Johan)
|
|
43
|
+
- Decode more tags from Windows LNK files
|
|
44
|
+
- Decode another LIGOGPSINFO variant (github #394)
|
|
45
|
+
- Decode some new Canon tags (thanks Peter Wem, github #389, #390, #393)
|
|
46
|
+
- Decode some new Nikon tags
|
|
47
|
+
- Split decoding on Nikon BurstGroupID into separate tags
|
|
48
|
+
- Fixed round-off error in GPSDateTime seconds for camm6 metadata in MP4
|
|
49
|
+
videos introduced in 13.45
|
|
50
|
+
- Fixed bug generating the default-language version of
|
|
51
|
+
QuickTime:LocationInformation (github #391)
|
|
52
|
+
|
|
10
53
|
Feb. 7, 2026 - Version 13.50 (production release)
|
|
11
54
|
|
|
12
55
|
- Added a few new Sony lenses (thanks Jos Roost)
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
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.
|
|
115
|
-
cd Image-ExifTool-13.
|
|
114
|
+
gzip -dc Image-ExifTool-13.53.tar.gz | tar -xf -
|
|
115
|
+
cd Image-ExifTool-13.53
|
|
116
116
|
./exiftool t/images/ExifTool.jpg
|
|
117
117
|
|
|
118
118
|
Note: These commands extract meta information from one of the test images.
|
|
@@ -158,10 +158,11 @@ for calculating digest values and providing other features listed below:
|
|
|
158
158
|
POSIX::strptime (for inverse date/time conversion)
|
|
159
159
|
Time::Piece (alternative to POSIX::strptime)
|
|
160
160
|
Unicode::LineBreak (for column alignment of alternate-language output)
|
|
161
|
-
Win32::API (for proper handling of Windows file times)
|
|
161
|
+
Win32::API (for proper handling of Windows file names/times)
|
|
162
162
|
Win32::FindFile (for Windows Unicode directory support, app only)
|
|
163
163
|
Win32API::File (for Windows Unicode file names and file times)
|
|
164
164
|
Compress::Raw::Lzma (for reading encoded 7z files)
|
|
165
|
+
File::StatX (for reading FileCreateDate on Linux systems)
|
|
165
166
|
IO::Compress::RawDeflate (for writing FLIF images)
|
|
166
167
|
IO::Uncompress::RawInflate (for reading FLIF images)
|
|
167
168
|
IO::Compress::Brotli (for writing compressed JXL metadata)
|
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.
|
|
14
|
+
my $version = '13.53';
|
|
15
15
|
|
|
16
16
|
$^W = 1; # enable global warnings
|
|
17
17
|
|
|
@@ -202,6 +202,7 @@ my $progressIncr; # increment for progress counter
|
|
|
202
202
|
my $progressMax; # total number of files to process
|
|
203
203
|
my $progressNext; # next progress count to output
|
|
204
204
|
my $progStr; # progress message string
|
|
205
|
+
my $purge; # flag to purge memory
|
|
205
206
|
my $quiet; # flag to disable printing of informational messages / warnings
|
|
206
207
|
my $rafStdin; # File::RandomAccess for stdin (if necessary to rewind)
|
|
207
208
|
my $recurse; # recurse into subdirectories (2=also hidden directories)
|
|
@@ -309,6 +310,7 @@ my @recommends = qw(
|
|
|
309
310
|
Time::Local
|
|
310
311
|
Unicode::LineBreak
|
|
311
312
|
Compress::Raw::Lzma
|
|
313
|
+
File::StatX
|
|
312
314
|
IO::Compress::RawDeflate
|
|
313
315
|
IO::Uncompress::RawInflate
|
|
314
316
|
IO::Compress::Brotli
|
|
@@ -521,6 +523,7 @@ undef $progressCount;
|
|
|
521
523
|
undef $progressIncr;
|
|
522
524
|
undef $progressMax;
|
|
523
525
|
undef $progressNext;
|
|
526
|
+
undef $purge;
|
|
524
527
|
undef $rafStdin;
|
|
525
528
|
undef $recurse;
|
|
526
529
|
undef $scanWritable;
|
|
@@ -791,6 +794,7 @@ for (;;) {
|
|
|
791
794
|
print "Optional libraries:\n";
|
|
792
795
|
foreach (@recommends) {
|
|
793
796
|
next if /^Win32/ and $^O ne 'MSWin32';
|
|
797
|
+
next if /StatX/ and $^O ne 'linux';
|
|
794
798
|
my $ver = eval "require $_ and \$${_}::VERSION";
|
|
795
799
|
my $alt = $altRecommends{$_};
|
|
796
800
|
# check for alternative if primary not available
|
|
@@ -1172,9 +1176,9 @@ for (;;) {
|
|
|
1172
1176
|
$vout = \*STDERR if $vout =~ /^-(\.\w+)?$/;
|
|
1173
1177
|
next;
|
|
1174
1178
|
}
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1179
|
+
$a eq 'overwrite_original' and $overwriteOrig = 1, next;
|
|
1180
|
+
$a eq 'overwrite_original_in_place' and $overwriteOrig = 2, next;
|
|
1181
|
+
$a eq 'plot' and require Image::ExifTool::Plot and $plot = Image::ExifTool::Plot->new, next;
|
|
1178
1182
|
if (/^p(-?)$/ or /^printformat(-?)$/i) {
|
|
1179
1183
|
my $fmt = shift;
|
|
1180
1184
|
if ($pass) {
|
|
@@ -1192,7 +1196,7 @@ for (;;) {
|
|
|
1192
1196
|
next;
|
|
1193
1197
|
}
|
|
1194
1198
|
(/^P$/ or $a eq 'preserve') and $preserveTime = 1, next;
|
|
1195
|
-
|
|
1199
|
+
$a eq 'password' and $mt->Options(Password => shift), next;
|
|
1196
1200
|
if (/^progress(\d*)(:.*)?$/i) {
|
|
1197
1201
|
$progressIncr = $1 || 1;
|
|
1198
1202
|
$progressNext = 0; # start showing progress at the first file
|
|
@@ -1207,6 +1211,7 @@ for (;;) {
|
|
|
1207
1211
|
$progressCount = 0;
|
|
1208
1212
|
next;
|
|
1209
1213
|
}
|
|
1214
|
+
/^purge(\d*)$/i and $purge = $1||1, Image::ExifTool::Purge($purge), next; # (undocumented) added in 13.53
|
|
1210
1215
|
/^q(uiet)?$/i and ++$quiet, next;
|
|
1211
1216
|
/^r(ecurse)?(\.?)$/i and $recurse = ($2 ? 2 : 1), next;
|
|
1212
1217
|
if ($a eq 'require') { # (undocumented) added in version 8.65
|
|
@@ -1222,10 +1227,10 @@ for (;;) {
|
|
|
1222
1227
|
}
|
|
1223
1228
|
next;
|
|
1224
1229
|
}
|
|
1225
|
-
|
|
1230
|
+
$a eq 'restore_original' and $deleteOrig = 0, next;
|
|
1226
1231
|
(/^S$/ or $a eq 'veryshort') and $outFormat+=2, next;
|
|
1227
1232
|
/^s(hort)?(\d*)$/i and $outFormat = $2 eq '' ? $outFormat + 1 : $2, next;
|
|
1228
|
-
|
|
1233
|
+
$a eq 'scanforxmp' and $mt->Options(ScanForXMP => 1), next;
|
|
1229
1234
|
if (/^sep(arator)?$/i) {
|
|
1230
1235
|
my $sep = $listSep = shift;
|
|
1231
1236
|
defined $listSep or Error("Expecting list item separator for -sep option\n"), $badCmd=1, next;
|
|
@@ -1360,7 +1365,7 @@ for (;;) {
|
|
|
1360
1365
|
next;
|
|
1361
1366
|
}
|
|
1362
1367
|
(/^X$/ or $a eq 'xmlformat') and $xml = 1, $html = $json = 0, $mt->Options(Duplicates => 1), next;
|
|
1363
|
-
if (
|
|
1368
|
+
if ($a eq 'php') {
|
|
1364
1369
|
$json = 2;
|
|
1365
1370
|
$html = $xml = 0;
|
|
1366
1371
|
$mt->Options(Duplicates => 1);
|
|
@@ -2074,6 +2079,8 @@ if ($countBadWr or $countBadCr or $countBad) {
|
|
|
2074
2079
|
$rtnVal = 2;
|
|
2075
2080
|
}
|
|
2076
2081
|
|
|
2082
|
+
Image::ExifTool::Purge(0) if $purge; # do final purging
|
|
2083
|
+
|
|
2077
2084
|
# clean up after each command
|
|
2078
2085
|
Cleanup();
|
|
2079
2086
|
|
|
@@ -4198,7 +4205,8 @@ sub SetWindowTitle($)
|
|
|
4198
4205
|
if ($curTitle ne $title) {
|
|
4199
4206
|
$curTitle = $title;
|
|
4200
4207
|
if ($^O eq 'MSWin32') {
|
|
4201
|
-
$title =~
|
|
4208
|
+
$title =~ tr(-_a-zA-Z0-9%.+/:=?*@~)()dc; # allow only safe characters
|
|
4209
|
+
$title =~ s/([\/?:%])/^$1/g; # escape remaing questionable chars
|
|
4202
4210
|
eval { system qq{title $title} };
|
|
4203
4211
|
} else {
|
|
4204
4212
|
# (this only works for XTerm terminals, and STDERR must go to the console)
|
|
@@ -4253,6 +4261,7 @@ sub ProcessFiles($;$)
|
|
|
4253
4261
|
next if $endDir{$d};
|
|
4254
4262
|
}
|
|
4255
4263
|
GetImageInfo($et, $file);
|
|
4264
|
+
Image::ExifTool::Purge($purge) if $purge;
|
|
4256
4265
|
$end and Warn("End called - $file\n");
|
|
4257
4266
|
if ($endDir) {
|
|
4258
4267
|
Warn("EndDir called - $file\n");
|
|
@@ -4382,6 +4391,7 @@ sub ScanDir($$;$)
|
|
|
4382
4391
|
push(@$list, $path);
|
|
4383
4392
|
} else {
|
|
4384
4393
|
GetImageInfo($et, $path);
|
|
4394
|
+
Image::ExifTool::Purge($purge) if $purge;
|
|
4385
4395
|
if ($end) {
|
|
4386
4396
|
Warn("End called - $file\n");
|
|
4387
4397
|
last;
|
|
@@ -5341,9 +5351,10 @@ information. Use the B<-s> option to see the tag names instead.
|
|
|
5341
5351
|
Exclude specified tag from extracted information. Same as the B<-x> option.
|
|
5342
5352
|
Group names and wildcards are permitted as described above for B<->I<TAG>.
|
|
5343
5353
|
Once excluded from the output, a tag may not be re-included by a subsequent
|
|
5344
|
-
option.
|
|
5345
|
-
|
|
5346
|
-
|
|
5354
|
+
option. Also note that this excludes the tag from being used in a C<-if>
|
|
5355
|
+
condition. May be used following a B<-tagsFromFile> option to exclude tags
|
|
5356
|
+
from being copied (when redirecting to another tag, it is the source tag
|
|
5357
|
+
that should be excluded), or to exclude groups from being deleted when
|
|
5347
5358
|
deleting all information (eg. C<-all= --exif:all> deletes all but EXIF
|
|
5348
5359
|
information). But note that this will not exclude individual tags from a
|
|
5349
5360
|
group delete (unless a family 2 group is specified, see note 4 below).
|
|
@@ -5530,7 +5541,7 @@ C<E<lt>> to avoid confusion with the C<E<lt>=> operator which sets the tag
|
|
|
5530
5541
|
value from the contents of a file. A single space at the start of the
|
|
5531
5542
|
string is removed if it exists, but all other whitespace in the string is
|
|
5532
5543
|
preserved. See note 8 below about using the redirection feature with
|
|
5533
|
-
list-type
|
|
5544
|
+
list-type tags, shortcuts or when using wildcards in tag names.
|
|
5534
5545
|
|
|
5535
5546
|
See L</COPYING EXAMPLES> for examples using B<-tagsFromFile>.
|
|
5536
5547
|
|
|
@@ -5601,7 +5612,7 @@ wildcards. When copying directly, the values of each matching source tag
|
|
|
5601
5612
|
are copied individually to the destination tag (as if they were separate
|
|
5602
5613
|
assignments). However, when interpolated inside a string, list items and
|
|
5603
5614
|
the values of shortcut tags are concatenated (with a separator set by the
|
|
5604
|
-
B<-sep> option), and wildcards are not allowed.Another difference is that a
|
|
5615
|
+
B<-sep> option), and wildcards are not allowed. Another difference is that a
|
|
5605
5616
|
minor warning is generated if a tag doesn't exist when interpolating its
|
|
5606
5617
|
value in a string (with C<$>), but isn't when copying the tag directly.
|
|
5607
5618
|
|
|
@@ -6136,7 +6147,7 @@ with this command:
|
|
|
6136
6147
|
|
|
6137
6148
|
produces output like this:
|
|
6138
6149
|
|
|
6139
|
-
-- Generated by ExifTool 13.
|
|
6150
|
+
-- Generated by ExifTool 13.53 --
|
|
6140
6151
|
File: a.jpg - 2003:10:31 15:44:19
|
|
6141
6152
|
(f/5.6, 1/60s, ISO 100)
|
|
6142
6153
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -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.
|
|
17
|
+
$VERSION = '1.15';
|
|
18
18
|
|
|
19
19
|
sub ProcessAPP12($$$);
|
|
20
20
|
sub ProcessDucky($$$);
|
|
@@ -114,8 +114,8 @@ sub WriteDucky($$$);
|
|
|
114
114
|
Priority => 0,
|
|
115
115
|
Avoid => 1,
|
|
116
116
|
# (ignore 4-byte character count at start of value)
|
|
117
|
-
ValueConv => '$self->Decode(substr($val,4),"
|
|
118
|
-
ValueConvInv => 'pack("N",length $val) . $self->Encode($val,"
|
|
117
|
+
ValueConv => '$self->Decode(substr($val,4),"UTF16","MM")',
|
|
118
|
+
ValueConvInv => 'pack("N",length $val) . $self->Encode($val,"UTF16","MM")',
|
|
119
119
|
},
|
|
120
120
|
3 => { #PH
|
|
121
121
|
Name => 'Copyright',
|
|
@@ -123,8 +123,8 @@ sub WriteDucky($$$);
|
|
|
123
123
|
Avoid => 1,
|
|
124
124
|
Groups => { 2 => 'Author' },
|
|
125
125
|
# (ignore 4-byte character count at start of value)
|
|
126
|
-
ValueConv => '$self->Decode(substr($val,4),"
|
|
127
|
-
ValueConvInv => 'pack("N",length $val) . $self->Encode($val,"
|
|
126
|
+
ValueConv => '$self->Decode(substr($val,4),"UTF16","MM")',
|
|
127
|
+
ValueConvInv => 'pack("N",length $val) . $self->Encode($val,"UTF16","MM")',
|
|
128
128
|
},
|
|
129
129
|
);
|
|
130
130
|
|
|
@@ -17,7 +17,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
17
17
|
use Image::ExifTool::Exif;
|
|
18
18
|
use Image::ExifTool::RIFF;
|
|
19
19
|
|
|
20
|
-
$VERSION = '1.
|
|
20
|
+
$VERSION = '1.27';
|
|
21
21
|
|
|
22
22
|
sub ProcessASF($$;$);
|
|
23
23
|
sub ProcessContentDescription($$$);
|
|
@@ -549,7 +549,7 @@ sub ProcessContentDescription($$$)
|
|
|
549
549
|
my $len = shift @len;
|
|
550
550
|
next unless $len;
|
|
551
551
|
return 0 if $pos + $len > $dirLen;
|
|
552
|
-
my $val = $et->Decode(substr($$dataPt,$pos,$len),'
|
|
552
|
+
my $val = $et->Decode(substr($$dataPt,$pos,$len),'UTF16','II');
|
|
553
553
|
$et->HandleTag($tagTablePtr, $tag, $val);
|
|
554
554
|
$pos += $len;
|
|
555
555
|
}
|
|
@@ -594,7 +594,7 @@ sub ReadASF($$$$$)
|
|
|
594
594
|
my ($et, $dataPt, $pos, $format, $size) = @_;
|
|
595
595
|
my @vals;
|
|
596
596
|
if ($format == 0) { # unicode string
|
|
597
|
-
$vals[0] = $et->Decode(substr($$dataPt,$pos,$size),'
|
|
597
|
+
$vals[0] = $et->Decode(substr($$dataPt,$pos,$size),'UTF16','II');
|
|
598
598
|
} elsif ($format == 2) { # 4-byte boolean
|
|
599
599
|
@vals = ReadValue($dataPt, $pos, 'int32u', undef, $size);
|
|
600
600
|
foreach (@vals) {
|
|
@@ -631,7 +631,7 @@ sub ProcessExtendedContentDescription($$$)
|
|
|
631
631
|
my $nameLen = unpack("x${pos}v", $$dataPt);
|
|
632
632
|
$pos += 2;
|
|
633
633
|
return 0 if $pos + $nameLen + 4 > $dirLen;
|
|
634
|
-
my $tag = Image::ExifTool::Decode(undef,substr($$dataPt,$pos,$nameLen),'
|
|
634
|
+
my $tag = Image::ExifTool::Decode(undef,substr($$dataPt,$pos,$nameLen),'UTF16','II','Latin');
|
|
635
635
|
$tag =~ s/^WM\///; # remove leading "WM/"
|
|
636
636
|
$pos += $nameLen;
|
|
637
637
|
my ($dType, $dLen) = unpack("x${pos}v2", $$dataPt);
|
|
@@ -667,7 +667,7 @@ sub ProcessMetadata($$$)
|
|
|
667
667
|
my ($index, $stream, $nameLen, $dType, $dLen) = unpack("x${pos}v4V", $$dataPt);
|
|
668
668
|
$pos += 12;
|
|
669
669
|
return 0 if $pos + $nameLen + $dLen > $dirLen;
|
|
670
|
-
my $tag = Image::ExifTool::Decode(undef,substr($$dataPt,$pos,$nameLen),'
|
|
670
|
+
my $tag = Image::ExifTool::Decode(undef,substr($$dataPt,$pos,$nameLen),'UTF16','II','Latin');
|
|
671
671
|
$tag =~ s/^WM\///; # remove leading "WM/"
|
|
672
672
|
$pos += $nameLen;
|
|
673
673
|
my $val = ReadASF($et,$dataPt,$pos,$dType,$dLen);
|
|
@@ -702,8 +702,8 @@ sub ProcessPicture($$$)
|
|
|
702
702
|
my $str = substr($$dataPt, $dirStart+5, $n);
|
|
703
703
|
if ($str =~ /^((?:..)*?)\0\0((?:..)*?)\0\0/s) {
|
|
704
704
|
my ($mime, $desc) = ($1, $2);
|
|
705
|
-
$et->HandleTag($tagTablePtr, 1, $et->Decode($mime,'
|
|
706
|
-
$et->HandleTag($tagTablePtr, 2, $et->Decode($desc,'
|
|
705
|
+
$et->HandleTag($tagTablePtr, 1, $et->Decode($mime,'UTF16','II'));
|
|
706
|
+
$et->HandleTag($tagTablePtr, 2, $et->Decode($desc,'UTF16','II')) if length $desc;
|
|
707
707
|
}
|
|
708
708
|
$et->HandleTag($tagTablePtr, 3, substr($$dataPt, $dirStart+5+$n, $picLen));
|
|
709
709
|
return 1;
|
|
@@ -731,12 +731,12 @@ sub ProcessCodecList($$$)
|
|
|
731
731
|
my $nameLen = Get16u($dataPt, $pos + 2) * 2;
|
|
732
732
|
$pos += 4;
|
|
733
733
|
return 0 if $pos + $nameLen + 2 > $dirLen;
|
|
734
|
-
my $name = $et->Decode(substr($$dataPt,$pos,$nameLen),'
|
|
734
|
+
my $name = $et->Decode(substr($$dataPt,$pos,$nameLen),'UTF16','II');
|
|
735
735
|
$et->HandleTag($tagTablePtr, "${type}Name", $name);
|
|
736
736
|
my $descLen = Get16u($dataPt, $pos + $nameLen) * 2;
|
|
737
737
|
$pos += $nameLen + 2;
|
|
738
738
|
return 0 if $pos + $descLen + 2 > $dirLen;
|
|
739
|
-
my $desc = $et->Decode(substr($$dataPt,$pos,$descLen),'
|
|
739
|
+
my $desc = $et->Decode(substr($$dataPt,$pos,$descLen),'UTF16','II');
|
|
740
740
|
$et->HandleTag($tagTablePtr, "${type}Description", $desc);
|
|
741
741
|
my $infoLen = Get16u($dataPt, $pos + $descLen);
|
|
742
742
|
$pos += $descLen + 2 + $infoLen;
|
|
@@ -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.
|
|
38
|
+
$VERSION = '3.67';
|
|
39
39
|
@ISA = qw(Exporter);
|
|
40
40
|
|
|
41
41
|
sub NumbersFirst($$);
|
|
@@ -963,6 +963,9 @@ TagID: foreach $tagID (@keys) {
|
|
|
963
963
|
if ($$tagInfo{List} and $$tagInfo{List} !~ /^(1|Alt|Bag|Seq|array|string)$/) {
|
|
964
964
|
warn "Warning: Unknown List type ($$tagInfo{List}) for $name in $tableName\n";
|
|
965
965
|
}
|
|
966
|
+
if ($$tagInfo{Hook} and $$tagInfo{Unknown}) {
|
|
967
|
+
warn "Warning: Unknown tag with Hook - $short $name\n"
|
|
968
|
+
}
|
|
966
969
|
# accumulate information for consistency check of BinaryData tables
|
|
967
970
|
if ($processBinaryData and $$table{WRITABLE}) {
|
|
968
971
|
# can't currently write tag if Condition accesses $valPt
|
|
@@ -2262,22 +2265,33 @@ sub WriteTagNames($$)
|
|
|
2262
2265
|
print HTMLFILE "<table class='inner sep' cellspacing=1>\n";
|
|
2263
2266
|
my $align = ' class=r';
|
|
2264
2267
|
my $wid = 0;
|
|
2265
|
-
my @keys;
|
|
2268
|
+
my (@keys, @bits);
|
|
2266
2269
|
foreach (sort { NumbersFirst($a,$b) } keys %$printConv) {
|
|
2267
|
-
next if /^(Notes|PrintHex|PrintInt|PrintString|OTHER)$/;
|
|
2270
|
+
next if /^(Notes|PrintHex|PrintInt|PrintString|OTHER|BITMASK)$/;
|
|
2268
2271
|
$align = '' if $align and /[^\d]/;
|
|
2269
2272
|
my $w = length($_) + length($$printConv{$_});
|
|
2270
2273
|
$wid = $w if $wid < $w;
|
|
2271
2274
|
push @keys, $_;
|
|
2272
|
-
|
|
2273
|
-
|
|
2275
|
+
next unless $$printConv{$_} =~ /[\0-\x1f\x7f-\xff]/;
|
|
2276
|
+
warn "Warning: Special characters in $tableName PrintConv ($$printConv{$_})\n";
|
|
2277
|
+
}
|
|
2278
|
+
my $bits = $$printConv{BITMASK};
|
|
2279
|
+
if ($bits) {
|
|
2280
|
+
$align = '';
|
|
2281
|
+
foreach (sort { NumbersFirst($a,$b) } keys %$bits) {
|
|
2282
|
+
my $w = length($_) + length($$bits{$_}) + 4;
|
|
2283
|
+
$wid = $w if $wid < $w;
|
|
2284
|
+
push @bits, $_;
|
|
2285
|
+
next unless $$bits{$_} =~ /[\0-\x1f\x7f-\xff]/;
|
|
2286
|
+
warn "Warning: Special characters in $tableName PrintConv BITMASK ($$bits{$_})\n";
|
|
2274
2287
|
}
|
|
2275
2288
|
}
|
|
2276
2289
|
$wid = length($tableName)+7 if $wid < length($tableName)+7;
|
|
2277
2290
|
# print in multiple columns if there is room
|
|
2278
2291
|
my $cols = int(110 / ($wid + 4));
|
|
2279
|
-
$
|
|
2280
|
-
|
|
2292
|
+
my $items = @keys + @bits;
|
|
2293
|
+
$cols = 1 if $cols < 1 or $cols > $items or $items < 4;
|
|
2294
|
+
my $rows = int(($items + $cols - 1) / $cols);
|
|
2281
2295
|
my ($r, $c);
|
|
2282
2296
|
print HTMLFILE '<tr class=h>';
|
|
2283
2297
|
for ($c=0; $c<$cols; ++$c) {
|
|
@@ -2287,11 +2301,18 @@ sub WriteTagNames($$)
|
|
|
2287
2301
|
for ($r=0; $r<$rows; ++$r) {
|
|
2288
2302
|
print HTMLFILE '<tr>';
|
|
2289
2303
|
for ($c=0; $c<$cols; ++$c) {
|
|
2290
|
-
my $key
|
|
2291
|
-
my
|
|
2304
|
+
my ($key, $val, $index, $prt);
|
|
2305
|
+
my $n = $r + $c * $rows;
|
|
2306
|
+
if ($n < @keys) {
|
|
2307
|
+
$key = $keys[$n];
|
|
2308
|
+
$val = $$printConv{$key};
|
|
2309
|
+
} elsif ($n < $items) {
|
|
2310
|
+
$key = 'Bit ' . $bits[$n - @keys];
|
|
2311
|
+
$val = $$bits{$bits[$n - @keys]};
|
|
2312
|
+
}
|
|
2292
2313
|
if (defined $key) {
|
|
2293
2314
|
$index = $key;
|
|
2294
|
-
$prt = '= ' . EscapeHTML(
|
|
2315
|
+
$prt = '= ' . EscapeHTML($val);
|
|
2295
2316
|
$index =~ s/\.\d+$// if $$printConv{PrintInt};
|
|
2296
2317
|
if ($$printConv{PrintHex}) {
|
|
2297
2318
|
$index =~ s/(\.\d+)$//; # remove decimal
|
|
@@ -16,7 +16,7 @@ use vars qw($VERSION);
|
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
17
17
|
use Image::ExifTool::JSON;
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.04';
|
|
20
20
|
|
|
21
21
|
sub ProcessCBOR($$$);
|
|
22
22
|
sub ReadCBORValue($$$$);
|
|
@@ -207,6 +207,7 @@ sub ReadCBORValue($$$$)
|
|
|
207
207
|
# read next value (note: in the case of multiple tags,
|
|
208
208
|
# this nesting will apply the tags in the correct order)
|
|
209
209
|
($val, $err, $pos) = ReadCBORValue($et, $dataPt, $pos, $end);
|
|
210
|
+
return(undef, $err, $pos) if $err;
|
|
210
211
|
$dumpStart = $pos;
|
|
211
212
|
# convert some values according to the optional tag number (untested)
|
|
212
213
|
if ($num == 0 and not ref $val) { # date/time string
|