exiftool_vendored 13.06.0 → 13.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +55 -4
- data/bin/MANIFEST +1 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +29 -15
- data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/APE.pm +1 -1
- data/bin/lib/Image/ExifTool/ASF.pm +1 -1
- data/bin/lib/Image/ExifTool/Apple.pm +9 -7
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +12 -3
- data/bin/lib/Image/ExifTool/Canon.pm +19 -1
- data/bin/lib/Image/ExifTool/DJI.pm +1 -1
- data/bin/lib/Image/ExifTool/Exif.pm +2 -2
- data/bin/lib/Image/ExifTool/FITS.pm +2 -2
- data/bin/lib/Image/ExifTool/FLIF.pm +2 -2
- data/bin/lib/Image/ExifTool/FlashPix.pm +11 -11
- data/bin/lib/Image/ExifTool/Font.pm +1 -1
- data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- data/bin/lib/Image/ExifTool/HP.pm +1 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +80 -1
- data/bin/lib/Image/ExifTool/ID3.pm +3 -3
- data/bin/lib/Image/ExifTool/IPTC.pm +2 -2
- data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +8 -7
- data/bin/lib/Image/ExifTool/M2TS.pm +39 -9
- data/bin/lib/Image/ExifTool/MXF.pm +2 -2
- data/bin/lib/Image/ExifTool/Matroska.pm +1 -1
- data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
- data/bin/lib/Image/ExifTool/PDF.pm +15 -15
- data/bin/lib/Image/ExifTool/PLIST.pm +3 -3
- data/bin/lib/Image/ExifTool/PNG.pm +6 -5
- data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
- data/bin/lib/Image/ExifTool/PhaseOne.pm +3 -3
- data/bin/lib/Image/ExifTool/Photoshop.pm +64 -3
- data/bin/lib/Image/ExifTool/Protobuf.pm +4 -4
- data/bin/lib/Image/ExifTool/QuickTime.pm +72 -24
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +336 -91
- data/bin/lib/Image/ExifTool/README +4 -1
- data/bin/lib/Image/ExifTool/RIFF.pm +3 -3
- data/bin/lib/Image/ExifTool/RTF.pm +1 -1
- data/bin/lib/Image/ExifTool/Ricoh.pm +3 -3
- data/bin/lib/Image/ExifTool/Sony.pm +2 -2
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +4 -3
- data/bin/lib/Image/ExifTool/TagLookup.pm +6982 -6970
- data/bin/lib/Image/ExifTool/TagNames.pod +48 -5
- data/bin/lib/Image/ExifTool/VCard.pm +2 -2
- data/bin/lib/Image/ExifTool/Validate.pm +3 -3
- data/bin/lib/Image/ExifTool/WriteExif.pl +2 -2
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +47 -13
- data/bin/lib/Image/ExifTool/WriteXMP.pl +2 -2
- data/bin/lib/Image/ExifTool/Writer.pl +32 -21
- data/bin/lib/Image/ExifTool/XMP.pm +9 -9
- data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
- data/bin/lib/Image/ExifTool.pm +65 -61
- data/bin/lib/Image/ExifTool.pod +41 -35
- 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: 9bd6e60c5e63b9f1c5c19ec9ecff2c388dbb148125958da2dc032788523a6f1b
|
4
|
+
data.tar.gz: 0ca3fe31d4880779349339e560485d5780f9568a100ed3b2e66c1bf0d1d556ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36c2edb4757ce9a9a1311d4688ceba8da4b9529c1f193cf1e7c70634295e980d93fc68a133d3d5079d9f359dbe2b4efb53a05cf2f5ea5e09b6a4b469ff02a435
|
7
|
+
data.tar.gz: 0e977d49e4c994eac82d4e1c2525f30c95112513cc7bc620256f3788d550b4d294681aa36183c49f0bae1ded85b1bce9beba097025d0ecbb88df5774a610a652
|
data/bin/Changes
CHANGED
@@ -4,17 +4,68 @@ ExifTool Version History
|
|
4
4
|
|
5
5
|
RSS feed: https://exiftool.org/rss.xml
|
6
6
|
|
7
|
-
Note: The most recent production release is Version 13.
|
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
|
+
Dec. 20, 2024 - Version 13.10 (production release)
|
11
|
+
|
12
|
+
- Added warnings for out-of-order entries in 'iinf' and 'ipma' boxes of HEIC
|
13
|
+
images
|
14
|
+
- Added support for date/time formatting codes %f and %z in the inverse
|
15
|
+
print conversion when writing tags
|
16
|
+
- Updated Geolocation databases from current geonames.org files
|
17
|
+
- Improved verbose output to show values stored with construction method 1 in
|
18
|
+
MP4-based files
|
19
|
+
- Enhanced the date/time timezone format specifier %z so that %:z returns the
|
20
|
+
time zone with a colon separator (eg. "-05:00")
|
21
|
+
- Fixed bug where the existing tag wasn't being removed when writing a new
|
22
|
+
value for an Unknown QuickTime UserData or ItemList tag
|
23
|
+
|
24
|
+
Dec. 17, 2024 - Version 13.09
|
25
|
+
|
26
|
+
- Added a new QuickTime tag (thanks Matti)
|
27
|
+
- Added a missing format check on a few tags when writing
|
28
|
+
- Decode a couple of new ICC_Profile tags
|
29
|
+
- Patched HEIC writer so newly added XMP or EXIF refers to the 'tmap' item as
|
30
|
+
well as the primary item of an HDRGainMap image (since iPhone 15 and 16 do
|
31
|
+
it this way)
|
32
|
+
- Fixed compatibility issue where Apple Preview would no longer show the gain
|
33
|
+
map image after adding new XMP to an HEIC with an HDR gain map
|
34
|
+
|
35
|
+
Dec. 14, 2024 - Version 13.08
|
36
|
+
|
37
|
+
- Decode ShutterCount for Canon EOS R6 Mark II (thanks Agoston Kapitany)
|
38
|
+
- Decode a few new Photoshop tags
|
39
|
+
- Suppress all duplicate Warning tags and add count to end of message
|
40
|
+
- Changed format of bitmask keys in -listx output
|
41
|
+
- Internal streamlining of LIGOGPSINFO decoding
|
42
|
+
- Fixed issue where some tags were incorrectly shown as writable in -listx
|
43
|
+
output
|
44
|
+
- Fixed incorrect scaling for GPSSpeed in one LIGOGPSINFO variant
|
45
|
+
- Fixed an issue with filename encoding when the -L option is used and the API
|
46
|
+
WindowsLongPath option is active
|
47
|
+
|
48
|
+
Dec. 11, 2024 - Version 13.07
|
49
|
+
|
50
|
+
- Decode a number of LIGOGPSINFO encrypted and enciphered timed GPS types
|
51
|
+
(long overdue, but it took me a couple of years to acquire enough sample
|
52
|
+
videos to have a good cross-section of the different formats)
|
53
|
+
- Fixed another place where FileSequence could be incremented twice when a -if
|
54
|
+
condition was used
|
55
|
+
- Fixed a few places where character 0x7f may not have been escaped in string
|
56
|
+
values
|
57
|
+
- API Changes:
|
58
|
+
- Changed default WindowsLongPath option back to 1 after adding a patch to
|
59
|
+
fix issue with piping from stdin
|
60
|
+
|
10
61
|
Dec. 5, 2024 - Version 13.06
|
11
62
|
|
12
63
|
- Decode timed metadata from MP4 videos of yet another dashcam model
|
13
64
|
- Patched issue where FileSequence could increment twice for each file when a
|
14
65
|
-if condition was used
|
15
66
|
- API Changes:
|
16
|
-
- Revert default
|
17
|
-
problem
|
67
|
+
- Revert default WindowsLongPath option to the pre-13.05 setting
|
68
|
+
until we can solve the pipe problem
|
18
69
|
|
19
70
|
Dec. 4, 2024 - Version 13.05
|
20
71
|
|
@@ -24,7 +75,7 @@ Dec. 4, 2024 - Version 13.05
|
|
24
75
|
- Decode APP10 AROT HDRGainCurve and APP2 URN UniformResourceName
|
25
76
|
- Decode a couple of new GoPro tags
|
26
77
|
- API Changes:
|
27
|
-
- Changed default
|
78
|
+
- Changed default WindowsLongPath option to 1 (please report if this
|
28
79
|
causes any problems)
|
29
80
|
|
30
81
|
Nov. 26, 2024 - Version 13.04
|
data/bin/MANIFEST
CHANGED
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
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.
|
113
|
-
cd Image-ExifTool-13.
|
112
|
+
gzip -dc Image-ExifTool-13.10.tar.gz | tar -xf -
|
113
|
+
cd Image-ExifTool-13.10
|
114
114
|
./exiftool t/images/ExifTool.jpg
|
115
115
|
|
116
116
|
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.
|
14
|
+
my $version = '13.10';
|
15
15
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
17
17
|
my $exePath;
|
@@ -2172,7 +2172,8 @@ sub GetImageInfo($$)
|
|
2172
2172
|
}
|
2173
2173
|
# can't make use of $info if verbose because we must reprocess
|
2174
2174
|
# the file anyway to generate the verbose output
|
2175
|
-
|
2175
|
+
# (also if writing just to avoid double-incrementing FileSequence)
|
2176
|
+
if ($isWriting or $verbose or defined $fastCondition or defined $diff) {
|
2176
2177
|
undef $info;
|
2177
2178
|
--$$et{FILE_SEQUENCE};
|
2178
2179
|
}
|
@@ -3639,7 +3640,7 @@ sub EscapeJSON($;$)
|
|
3639
3640
|
if ($json < 2) { # JSON
|
3640
3641
|
$str =~ tr/\0//d; # remove all nulls
|
3641
3642
|
# escape other control characters with \u
|
3642
|
-
$str =~ s/([\0-\x1f])/sprintf("\\u%.4X",ord $1)/sge;
|
3643
|
+
$str =~ s/([\0-\x1f\x7f])/sprintf("\\u%.4X",ord $1)/sge;
|
3643
3644
|
# JSON strings must be valid UTF8
|
3644
3645
|
Image::ExifTool::XMP::FixUTF8(\$str) unless $altEnc;
|
3645
3646
|
} else { # PHP
|
@@ -3647,7 +3648,7 @@ sub EscapeJSON($;$)
|
|
3647
3648
|
# must escape "$" too for PHP
|
3648
3649
|
$str =~ s/\$/\\\$/sg;
|
3649
3650
|
# escape other control characters with \x
|
3650
|
-
$str =~ s/([\0-\x1f])/sprintf("\\x%.2X",ord $1)/sge;
|
3651
|
+
$str =~ s/([\0-\x1f\x7f])/sprintf("\\x%.2X",ord $1)/sge;
|
3651
3652
|
}
|
3652
3653
|
return '"' . $str . '"'; # return the quoted string
|
3653
3654
|
}
|
@@ -5643,16 +5644,29 @@ in the delimiter. Default is ','.
|
|
5643
5644
|
|
5644
5645
|
Set the format for date/time tag values. The I<FMT> string may contain
|
5645
5646
|
formatting codes beginning with a percent character (C<%>) to represent the
|
5646
|
-
various components of a date/time value.
|
5647
|
-
|
5648
|
-
|
5649
|
-
|
5650
|
-
|
5651
|
-
|
5652
|
-
|
5653
|
-
|
5654
|
-
|
5655
|
-
|
5647
|
+
various components of a date/time value. ExifTool implements 3 format codes
|
5648
|
+
internally (see below), but other format codes are system dependent --
|
5649
|
+
consult the C<strftime> man page on your system for details. The default
|
5650
|
+
format is equivalent to "%Y:%m:%d %H:%M:%S". This option has no effect on
|
5651
|
+
date-only or time-only tags. Requires POSIX::strptime or Time::Piece for
|
5652
|
+
the inversion conversion when writing. Only one B<-d> option may be used
|
5653
|
+
per command.
|
5654
|
+
|
5655
|
+
Additional format codes implemented internally by ExifTool:
|
5656
|
+
|
5657
|
+
1) C<%z> represents the time zone in "+/-HHMM" format. Adding a colon (ie.
|
5658
|
+
C<%:z>) adds a colon separator (eg. "-05:00"). If the date/time value
|
5659
|
+
doesn't contain a time zone then C<%z> gives the system time zone for the
|
5660
|
+
specified date/time value.
|
5661
|
+
|
5662
|
+
2) C<%f> represents fractional seconds, and supports an optional width to
|
5663
|
+
specify the number of digits after the decimal point (eg. C<%3f> would give
|
5664
|
+
something like ".437"). Adding a minus sign drops the decimal point (eg.
|
5665
|
+
C<%-3f> would give "437").
|
5666
|
+
|
5667
|
+
3) C<%s> represents the number of seconds since 00:00 UTC Jan 1, 1970,
|
5668
|
+
taking into account the specified time zone (or system time zone if not
|
5669
|
+
specified).
|
5656
5670
|
|
5657
5671
|
=item B<-D> (B<-decimal>)
|
5658
5672
|
|
@@ -5912,7 +5926,7 @@ with this command:
|
|
5912
5926
|
|
5913
5927
|
produces output like this:
|
5914
5928
|
|
5915
|
-
-- Generated by ExifTool 13.
|
5929
|
+
-- Generated by ExifTool 13.10 --
|
5916
5930
|
File: a.jpg - 2003:10:31 15:44:19
|
5917
5931
|
(f/5.6, 1/60s, ISO 100)
|
5918
5932
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -231,7 +231,7 @@ sub ProcessAIFF($$)
|
|
231
231
|
$et->Warn('End of processing at large chunk (LargeFileSupport not enabled)');
|
232
232
|
last;
|
233
233
|
} elsif ($et->Options('LargeFileSupport') eq '2') {
|
234
|
-
$et->
|
234
|
+
$et->Warn('Skipping large chunk (LargeFileSupport is 2)');
|
235
235
|
}
|
236
236
|
}
|
237
237
|
if ($tagInfo) {
|
@@ -217,7 +217,7 @@ sub ProcessAPE($$)
|
|
217
217
|
$val = \$buf2;
|
218
218
|
# extract cover art description separately (hackitty hack)
|
219
219
|
if ($tag =~ /^Cover Art/) {
|
220
|
-
$buf2 =~ s/^([\x20-\
|
220
|
+
$buf2 =~ s/^([\x20-\x7e]*)\0//;
|
221
221
|
if ($1) {
|
222
222
|
my $t = "$tag Desc";
|
223
223
|
my $v = $1;
|
@@ -781,7 +781,7 @@ sub ProcessASF($$;$)
|
|
781
781
|
$err = 'Invalid ASF object size';
|
782
782
|
} elsif ($et->Options('LargeFileSupport')) {
|
783
783
|
if ($et->Options('LargeFileSupport') eq '2') {
|
784
|
-
$et->
|
784
|
+
$et->Warn('Skipping large ASF object (LargeFileSupport is 2)');
|
785
785
|
}
|
786
786
|
if ($raf->Seek($size, 1)) {
|
787
787
|
$et->VPrint(0, " Skipped large ASF object ($size bytes)\n");
|
@@ -16,7 +16,7 @@ use vars qw($VERSION);
|
|
16
16
|
use Image::ExifTool::Exif;
|
17
17
|
use Image::ExifTool::PLIST;
|
18
18
|
|
19
|
-
$VERSION = '1.
|
19
|
+
$VERSION = '1.14';
|
20
20
|
|
21
21
|
sub ConvertPLIST($$);
|
22
22
|
|
@@ -291,12 +291,12 @@ sub ConvertPLIST($$);
|
|
291
291
|
# 0x0047 - (LeaderFollowerAutoFocusLeaderDepth, ref 2)
|
292
292
|
# 0x0048 - (LeaderFollowerAutoFocusLeaderFocusMethod, ref 2)
|
293
293
|
# 0x0049 - (LeaderFollowerAutoFocusLeaderConfidence, ref 2)
|
294
|
-
#
|
294
|
+
# 0x004a - (LeaderFollowerAutoFocusLeaderROIType, ref 2)
|
295
295
|
# 0x004a - 2=back normal, 4=back wide angle, 5=front (ref PH)
|
296
|
-
#
|
297
|
-
#
|
298
|
-
#
|
299
|
-
#
|
296
|
+
# 0x004b - (ZeroShutterLagFailureReason, ref 2)
|
297
|
+
# 0x004c - (TimeOfFlightAssistedAutoFocusEstimatorMSPMeasuredDepth, ref 2)
|
298
|
+
# 0x004d - (TimeOfFlightAssistedAutoFocusEstimatorMSPSensorConfidence, ref 2)
|
299
|
+
# 0x004e - (Camera, ref 2)
|
300
300
|
0x004e => {
|
301
301
|
Name => 'Apple_0x004e',
|
302
302
|
Unknown => 1,
|
@@ -358,7 +358,8 @@ Image::ExifTool::AddCompositeTags('Image::ExifTool::Apple');
|
|
358
358
|
sub ConvertPLIST($$)
|
359
359
|
{
|
360
360
|
my ($val, $et) = @_;
|
361
|
-
my $dirInfo = { DataPt => \$val };
|
361
|
+
my $dirInfo = { DataPt => \$val, NoVerboseDir => 1 };
|
362
|
+
my $oldOrder = $et->GetByteOrder();
|
362
363
|
require Image::ExifTool::PLIST;
|
363
364
|
Image::ExifTool::PLIST::ProcessBinaryPLIST($et, $dirInfo);
|
364
365
|
$val = $$dirInfo{Value};
|
@@ -366,6 +367,7 @@ sub ConvertPLIST($$)
|
|
366
367
|
require 'Image/ExifTool/XMPStruct.pl';
|
367
368
|
$val = Image::ExifTool::XMP::SerializeStruct($et, $val);
|
368
369
|
}
|
370
|
+
$et->SetByteOrder($oldOrder);
|
369
371
|
return $val;
|
370
372
|
}
|
371
373
|
|
@@ -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.59';
|
39
39
|
@ISA = qw(Exporter);
|
40
40
|
|
41
41
|
sub NumbersFirst($$);
|
@@ -866,10 +866,16 @@ sub new
|
|
866
866
|
}
|
867
867
|
$noID = 1 if $isXMP or $short =~ /^(Shortcuts|ASF.*)$/ or $$vars{NO_ID};
|
868
868
|
$hexID = $$vars{HEX_ID};
|
869
|
+
if ($$table{WRITE_PROC} and $$table{WRITE_PROC} eq \&Image::ExifTool::WriteBinaryData
|
870
|
+
and not $$table{CHECK_PROC})
|
871
|
+
{
|
872
|
+
warn("Binary table $tableName doesn't have a CHECK_PROC\n");
|
873
|
+
}
|
869
874
|
my $processBinaryData = ($$table{PROCESS_PROC} and (
|
870
875
|
$$table{PROCESS_PROC} eq \&Image::ExifTool::ProcessBinaryData or
|
871
876
|
$$table{PROCESS_PROC} eq \&Image::ExifTool::Nikon::ProcessNikonEncrypted or
|
872
|
-
$$table{PROCESS_PROC} eq \&Image::ExifTool::Sony::ProcessEnciphered)
|
877
|
+
$$table{PROCESS_PROC} eq \&Image::ExifTool::Sony::ProcessEnciphered) or
|
878
|
+
$$table{VARS} and $$table{VARS}{IS_BINARY});
|
873
879
|
if ($$vars{ID_LABEL} or $processBinaryData) {
|
874
880
|
my $s = $$table{FORMAT} ? Image::ExifTool::FormatSize($$table{FORMAT}) || 1 : 1;
|
875
881
|
$binaryTable = 1;
|
@@ -1003,6 +1009,9 @@ TagID: foreach $tagID (@keys) {
|
|
1003
1009
|
if ($writable and not ($$table{WRITE_PROC} or $tableName =~ /Shortcuts/ or $writable eq '2')) {
|
1004
1010
|
undef $writable;
|
1005
1011
|
}
|
1012
|
+
#if ($writable and $$tagInfo{Unknown} and $$table{GROUPS}{0} ne 'MakerNotes') {
|
1013
|
+
# warn "Warning: Writable Unknown tag - $short $name\n",
|
1014
|
+
#}
|
1006
1015
|
# validate some characteristics of obvious date/time tags
|
1007
1016
|
my @g = $et->GetGroup($tagInfo);
|
1008
1017
|
if ($$tagInfo{List} and $g[2] eq 'Time' and $writable and not $$tagInfo{Protected} and
|
@@ -1248,7 +1257,7 @@ TagID: foreach $tagID (@keys) {
|
|
1248
1257
|
}
|
1249
1258
|
} elsif ($$tagInfo{PrintString} or not /^[+-]?(?=\d|\.\d)\d*(\.\d*)?$/) {
|
1250
1259
|
# translate unprintable values
|
1251
|
-
if ($index =~ s/([\x00-\x1f\
|
1260
|
+
if ($index =~ s/([\x00-\x1f\x7f-\xff])/sprintf("\\x%.2x",ord $1)/eg) {
|
1252
1261
|
$index = qq{"$index"};
|
1253
1262
|
} else {
|
1254
1263
|
$index = qq{'${index}'};
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
88
88
|
sub ProcessExifInfo($$$);
|
89
89
|
sub SwapWords($);
|
90
90
|
|
91
|
-
$VERSION = '4.
|
91
|
+
$VERSION = '4.86';
|
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)
|
@@ -1404,6 +1404,11 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
1404
1404
|
Condition => '$$self{Model} =~ /\bEOS R[56]$/',
|
1405
1405
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoR6' },
|
1406
1406
|
},
|
1407
|
+
{
|
1408
|
+
Name => 'CanonCameraInfoR6m2',
|
1409
|
+
Condition => '$$self{Model} =~ /\bEOS R6m2$/',
|
1410
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoR6m2' },
|
1411
|
+
},
|
1407
1412
|
{
|
1408
1413
|
Name => 'CanonCameraInfoG5XII',
|
1409
1414
|
Condition => '$$self{Model} =~ /\bG5 X Mark II$/',
|
@@ -4752,6 +4757,19 @@ my %ciMaxFocal = (
|
|
4752
4757
|
# 0x0bb7 - counts down during focus stack (ref forum16111)
|
4753
4758
|
);
|
4754
4759
|
|
4760
|
+
%Image::ExifTool::Canon::CameraInfoR6m2 = (
|
4761
|
+
%binaryDataAttrs,
|
4762
|
+
FIRST_ENTRY => 0,
|
4763
|
+
PRIORITY => 0,
|
4764
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
4765
|
+
NOTES => 'CameraInfo tags for the EOS R6 Mark II.',
|
4766
|
+
0x0d29 => { #AgostonKapitany
|
4767
|
+
Name => 'ShutterCount',
|
4768
|
+
Format => 'int32u',
|
4769
|
+
Notes => 'includes electronic + mechanical shutter',
|
4770
|
+
},
|
4771
|
+
);
|
4772
|
+
|
4755
4773
|
# ref https://exiftool.org/forum/index.php?topic=15356.0
|
4756
4774
|
%Image::ExifTool::Canon::CameraInfoG5XII = (
|
4757
4775
|
%binaryDataAttrs,
|
@@ -295,7 +295,7 @@ sub ProcessDJIInfo($$$)
|
|
295
295
|
while ($$dataPt =~ /\G\[(.*?)\](?=(\[|$))/sg) {
|
296
296
|
my ($tag, $val) = split /:/, $1, 2;
|
297
297
|
next unless defined $tag and defined $val;
|
298
|
-
if ($val =~ /^([\x20-\
|
298
|
+
if ($val =~ /^([\x20-\x7e]+)\0*$/) {
|
299
299
|
$val = $1;
|
300
300
|
} else {
|
301
301
|
my $buff = $val;
|
@@ -6186,7 +6186,7 @@ sub ProcessExif($$$)
|
|
6186
6186
|
if ($$dirInfo{DirName} eq 'MakerNotes' and $$et{FileType} eq 'CR3' and
|
6187
6187
|
$$dirInfo{Parent} and $$dirInfo{Parent} eq 'ExifIFD')
|
6188
6188
|
{
|
6189
|
-
$et->
|
6189
|
+
$et->Warn("MakerNotes shouldn't exist ExifIFD of CR3 image", 1);
|
6190
6190
|
}
|
6191
6191
|
# set flag to calculate image data hash if requested
|
6192
6192
|
$doHash = 1 if $$et{ImageDataHash} and (($$et{FILE_TYPE} eq 'TIFF' and not $base and not $inMakerNotes) or
|
@@ -6656,7 +6656,7 @@ sub ProcessExif($$$)
|
|
6656
6656
|
if ($count > 500 and $formatStr !~ /^(undef|string|binary)$/ and
|
6657
6657
|
(not $tagInfo or $$tagInfo{LongBinary} or $warned) and not $$et{OPTIONS}{IgnoreMinorErrors})
|
6658
6658
|
{
|
6659
|
-
$et->
|
6659
|
+
$et->Warn('Not decoding some large array(s). Ignore minor errors to decode', 2) unless $warned;
|
6660
6660
|
next if $$et{TAGS_FROM_FILE}; # don't generate bogus value when copying tags
|
6661
6661
|
$val = "(large array of $count $formatStr values)";
|
6662
6662
|
} else {
|
@@ -61,7 +61,7 @@ sub ProcessFITS($$)
|
|
61
61
|
my $key = substr($buff, 0, 8);
|
62
62
|
$key =~ s/ +$//; # remove trailing space from key
|
63
63
|
if ($key eq 'CONTINUE') {
|
64
|
-
defined $continue or $et->
|
64
|
+
defined $continue or $et->Warn('Unexpected FITS CONTINUE keyword'), next;
|
65
65
|
} else {
|
66
66
|
if (defined $continue) {
|
67
67
|
# the previous value wasn't continued, so store with the trailing '&'
|
@@ -104,7 +104,7 @@ sub ProcessFITS($$)
|
|
104
104
|
# check for possible continuation, removing trailing '&'
|
105
105
|
$val =~ s/\&$// and $continue = $val, next;
|
106
106
|
} elsif (defined $continue) {
|
107
|
-
$et->
|
107
|
+
$et->Warn('Invalid FITS CONTINUE value');
|
108
108
|
next;
|
109
109
|
} else {
|
110
110
|
$val =~ s/ *(\/.*)?$//; # remove trailing spaces and comment
|
@@ -244,7 +244,7 @@ sub WriteFLIF($$)
|
|
244
244
|
}
|
245
245
|
}
|
246
246
|
} else {
|
247
|
-
$et->
|
247
|
+
$et->Warn('Install IO::Compress::RawDeflate to write FLIF metadata');
|
248
248
|
}
|
249
249
|
Write($outfile, $tag, SetVarInt(length $buff), $buff) or return -1;
|
250
250
|
} elsif (not defined $soi) {
|
@@ -301,7 +301,7 @@ sub ProcessFLIF($$)
|
|
301
301
|
$et->Warn("Error inflating FLIF $tag chunk");
|
302
302
|
}
|
303
303
|
} else {
|
304
|
-
$et->
|
304
|
+
$et->Warn('Install IO::Uncompress::RawInflate to decode FLIF metadata');
|
305
305
|
}
|
306
306
|
} else {
|
307
307
|
$raf->Seek($size, 1) or $et->Warn('Seek error'), last;
|
@@ -1449,7 +1449,7 @@ sub ReadFPXValue($$$$$;$$)
|
|
1449
1449
|
$noPad = 1; # values sometimes aren't padded inside vectors!!
|
1450
1450
|
my $size = $oleFormatSize{VT_VECTOR};
|
1451
1451
|
if ($valPos + $size > $dirEnd) {
|
1452
|
-
$et->
|
1452
|
+
$et->Warn('Incorrect FPX VT_VECTOR size');
|
1453
1453
|
last;
|
1454
1454
|
}
|
1455
1455
|
$count = Get32u($dataPt, $valPos);
|
@@ -1457,14 +1457,14 @@ sub ReadFPXValue($$$$$;$$)
|
|
1457
1457
|
$valPos += 4;
|
1458
1458
|
} else {
|
1459
1459
|
# can't yet handle this property flag
|
1460
|
-
$et->
|
1460
|
+
$et->Warn('Unknown FPX property');
|
1461
1461
|
last;
|
1462
1462
|
}
|
1463
1463
|
}
|
1464
1464
|
unless ($format =~ /^VT_/) {
|
1465
1465
|
my $size = Image::ExifTool::FormatSize($format) * $count;
|
1466
1466
|
if ($valPos + $size > $dirEnd) {
|
1467
|
-
$et->
|
1467
|
+
$et->Warn("Incorrect FPX $format size");
|
1468
1468
|
last;
|
1469
1469
|
}
|
1470
1470
|
@vals = ReadValue($dataPt, $valPos, $format, $count, $size);
|
@@ -1476,7 +1476,7 @@ sub ReadFPXValue($$$$$;$$)
|
|
1476
1476
|
my ($item, $val, $len);
|
1477
1477
|
for ($item=0; $item<$count; ++$item) {
|
1478
1478
|
if ($valPos + $size > $dirEnd) {
|
1479
|
-
$et->
|
1479
|
+
$et->Warn("Truncated FPX $format value");
|
1480
1480
|
last;
|
1481
1481
|
}
|
1482
1482
|
# sometimes VT_VECTOR items are padded to even 4-byte boundaries, and sometimes they aren't
|
@@ -1528,7 +1528,7 @@ sub ReadFPXValue($$$$$;$$)
|
|
1528
1528
|
$len = Get32u($dataPt, $valPos);
|
1529
1529
|
$len *= 2 if $format eq 'VT_LPWSTR'; # convert to byte count
|
1530
1530
|
if ($valPos + $len + 4 > $dirEnd) {
|
1531
|
-
$et->
|
1531
|
+
$et->Warn("Truncated $format value");
|
1532
1532
|
last;
|
1533
1533
|
}
|
1534
1534
|
$val = substr($$dataPt, $valPos + 4, $len);
|
@@ -1551,7 +1551,7 @@ sub ReadFPXValue($$$$$;$$)
|
|
1551
1551
|
} elsif ($format eq 'VT_BLOB' or $format eq 'VT_CF') {
|
1552
1552
|
my $len = Get32u($dataPt, $valPos); # (use local $len because we always expect padding)
|
1553
1553
|
if ($valPos + $len + 4 > $dirEnd) {
|
1554
|
-
$et->
|
1554
|
+
$et->Warn("Truncated $format value");
|
1555
1555
|
last;
|
1556
1556
|
}
|
1557
1557
|
$val = substr($$dataPt, $valPos + 4, $len);
|
@@ -1627,7 +1627,7 @@ sub ProcessContents($$$)
|
|
1627
1627
|
while ($$dataPt =~ /\x0bTargetRole1(?:.\x80|\xff\xff.\0.\0Vn(\w+))\0\0\x01.{4}(.{24})/sg) {
|
1628
1628
|
my ($index, @coords) = unpack('Vx4V4', $2);
|
1629
1629
|
next if $index == 0xffffffff;
|
1630
|
-
$$et{IeImg_lkup}{$index} and $et->
|
1630
|
+
$$et{IeImg_lkup}{$index} and $et->Warn('Duplicate image index');
|
1631
1631
|
$$et{IeImg_lkup}{$index} = "@coords";
|
1632
1632
|
$$et{IeImg_class}{$index} = $1 if $1;
|
1633
1633
|
}
|
@@ -1661,7 +1661,7 @@ sub ProcessWordDocument($$$)
|
|
1661
1661
|
my $dirLen = length $$dataPt;
|
1662
1662
|
# validate the FIB signature
|
1663
1663
|
unless ($dirLen > 2 and Get16u($dataPt,0) == 0xa5ec) {
|
1664
|
-
$et->
|
1664
|
+
$et->Warn('Invalid FIB signature', 1);
|
1665
1665
|
return 0;
|
1666
1666
|
}
|
1667
1667
|
$et->ProcessBinaryData($dirInfo, $tagTablePtr); # process FIB
|
@@ -2098,7 +2098,7 @@ sub ProcessFPXR($$$)
|
|
2098
2098
|
my $overlap = length($$obj{Stream}) - $offset;
|
2099
2099
|
my $start = $dirStart + 13;
|
2100
2100
|
if ($overlap < 0 or $dirLen - $overlap < 13) {
|
2101
|
-
$et->
|
2101
|
+
$et->Warn("Bad FPXR stream $index offset",1);
|
2102
2102
|
} else {
|
2103
2103
|
# ignore any overlapping data in this segment
|
2104
2104
|
# (this seems to be the convention)
|
@@ -2338,7 +2338,7 @@ sub ProcessFPX($$)
|
|
2338
2338
|
$tag =~ s/\0.*//s; # truncate at null (in case length was wrong)
|
2339
2339
|
|
2340
2340
|
if ($tag eq '0' and not defined $ee) {
|
2341
|
-
$et->
|
2341
|
+
$et->Warn('Use the ExtractEmbedded option to extract embedded information', 3);
|
2342
2342
|
}
|
2343
2343
|
my $sect = Get32u(\$dir, $pos + 0x74); # start sector number
|
2344
2344
|
my $size = Get32u(\$dir, $pos + 0x78); # stream length
|
@@ -2441,7 +2441,7 @@ sub ProcessFPX($$)
|
|
2441
2441
|
my $subTablePtr = GetTagTable($$subdir{TagTable});
|
2442
2442
|
$et->ProcessDirectory(\%dirInfo, $subTablePtr, $$subdir{ProcessProc});
|
2443
2443
|
} elsif (defined $size and $size > length($buff)) {
|
2444
|
-
$et->
|
2444
|
+
$et->Warn('Truncated object');
|
2445
2445
|
} else {
|
2446
2446
|
$buff = substr($buff, 0, $size) if defined $size and $size < length($buff);
|
2447
2447
|
if ($tag =~ /^IeImg_0*(\d+)$/) {
|
@@ -405,7 +405,7 @@ sub ProcessOTF($$)
|
|
405
405
|
next;
|
406
406
|
}
|
407
407
|
if ($verbose) {
|
408
|
-
$tag =~ s/([\0-\x1f\
|
408
|
+
$tag =~ s/([\0-\x1f\x7f-\xff])/sprintf('\x%.2x',ord $1)/ge;
|
409
409
|
my $str = sprintf("%s%d) Tag '%s' (offset 0x%.4x, %d bytes)\n",
|
410
410
|
$$et{INDENT}, $pos/16, $tag, $offset, $size);
|
411
411
|
$et->VPrint(0, $str);
|
Binary file
|
@@ -225,7 +225,7 @@ sub ProcessHP($$$)
|
|
225
225
|
# scan for other tag ID's
|
226
226
|
foreach $tagID (sort(TagTableKeys($tagTablePtr))) {
|
227
227
|
next if $tagID eq 'PreviewImage';
|
228
|
-
next unless $$dataPt =~ /$tagID:\s*([\x20-\
|
228
|
+
next unless $$dataPt =~ /$tagID:\s*([\x20-\x7e]+)/i;
|
229
229
|
$et->HandleTag($tagTablePtr, $tagID, $1);
|
230
230
|
}
|
231
231
|
return 1;
|