exiftool_vendored 12.73.0 → 12.74.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 +26 -1
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +49 -40
- data/bin/lib/File/RandomAccess.pm +31 -5
- data/bin/lib/File/RandomAccess.pod +4 -4
- data/bin/lib/Image/ExifTool/7Z.pm +3 -3
- data/bin/lib/Image/ExifTool/AFCP.pm +2 -2
- data/bin/lib/Image/ExifTool/BZZ.pm +2 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +5 -5
- data/bin/lib/Image/ExifTool/Canon.pm +3 -3
- data/bin/lib/Image/ExifTool/CanonVRD.pm +2 -2
- data/bin/lib/Image/ExifTool/DICOM.pm +2 -2
- data/bin/lib/Image/ExifTool/DNG.pm +4 -4
- data/bin/lib/Image/ExifTool/Exif.pm +2 -2
- data/bin/lib/Image/ExifTool/FLIR.pm +2 -2
- data/bin/lib/Image/ExifTool/Fixup.pm +3 -3
- data/bin/lib/Image/ExifTool/FlashPix.pm +3 -3
- data/bin/lib/Image/ExifTool/FujiFilm.pm +8 -3
- data/bin/lib/Image/ExifTool/Geotag.pm +3 -3
- data/bin/lib/Image/ExifTool/HtmlDump.pm +2 -2
- data/bin/lib/Image/ExifTool/ID3.pm +2 -2
- data/bin/lib/Image/ExifTool/Import.pm +5 -5
- data/bin/lib/Image/ExifTool/JSON.pm +2 -2
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +2 -2
- data/bin/lib/Image/ExifTool/MIE.pm +3 -3
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +3 -1
- data/bin/lib/Image/ExifTool/NikonCustom.pm +3 -3
- data/bin/lib/Image/ExifTool/Ogg.pm +2 -2
- data/bin/lib/Image/ExifTool/PLIST.pm +3 -3
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +3 -3
- data/bin/lib/Image/ExifTool/PhaseOne.pm +2 -2
- data/bin/lib/Image/ExifTool/Photoshop.pm +3 -3
- data/bin/lib/Image/ExifTool/PostScript.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +40 -107
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +8 -6
- data/bin/lib/Image/ExifTool/RSRC.pm +2 -2
- data/bin/lib/Image/ExifTool/Samsung.pm +4 -4
- data/bin/lib/Image/ExifTool/Shift.pl +1 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +3 -3
- data/bin/lib/Image/ExifTool/Sony.pm +3 -3
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +5 -5
- data/bin/lib/Image/ExifTool/TagNames.pod +5 -1
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteExif.pl +15 -15
- data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteXMP.pl +4 -2
- data/bin/lib/Image/ExifTool/Writer.pl +66 -42
- data/bin/lib/Image/ExifTool/ZIP.pm +6 -6
- data/bin/lib/Image/ExifTool.pm +27 -23
- data/bin/lib/Image/ExifTool.pod +7 -6
- 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: cfaf371fa934366773b7dde5e837c91f975499c1a503f2d5dc5b3e2aa45a83f1
|
4
|
+
data.tar.gz: 5dc4da573a2ccca50147787b16549efed648f0d8d77c40e59659c5d3fa0469cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d1543e5bb5dc636305b208149f84b76262725c9c78062d80aca27bdc0e008c748c8a497fc64d5c34ddd365796c40fcae2d06af64db711ee071da96f2337399f
|
7
|
+
data.tar.gz: 4ce5b564f2b77b083b55b27444fd8ca2daa2e05339baeeda494a04dd96f4538c117521ee6106263fdc506815b0bd89a4faf34ce964bed58657183013cd9769c1
|
data/bin/Changes
CHANGED
@@ -7,6 +7,30 @@ RSS feed: https://exiftool.org/rss.xml
|
|
7
7
|
Note: The most recent production release is Version 12.70. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
Jan. 23, 2024 - Version 12.74
|
11
|
+
|
12
|
+
- Added a couple of new Nikon lenses (thanks Chris)
|
13
|
+
- Added write support for a few new QuickTime Keys tags
|
14
|
+
- Decode ShutterCount for Canon EOS R5 (thanks John Moyer)
|
15
|
+
- Improved error messages in the case of file read errors
|
16
|
+
- Enhanced tag name strings (eg. -if option expressions) to allow values of
|
17
|
+
multiple matching tags to be concatenated when a group name of "All" is
|
18
|
+
specified
|
19
|
+
- Enhanced -p option to add -p- feature which avoids adding trailing newline
|
20
|
+
- Changed warning from "Shift results in negative time" to "Shift results in
|
21
|
+
date before 1970"
|
22
|
+
- Patched calculation of GPSDateTime for the timed metadata in Track3 of
|
23
|
+
Garmin videos so the API QuickTimeUTC option is no longer required
|
24
|
+
- Fixed conversion error when writing QuickTime:GoogleTrackDuration
|
25
|
+
- Fixed misidentification of non-TIFF-format files containing DNGVersion tag
|
26
|
+
- Fixed bug where Avoid-ed XMP structures could be created when writing
|
27
|
+
another same-named structure
|
28
|
+
- Internal Changes:
|
29
|
+
- Changed form of all new() calls to accommodate backward
|
30
|
+
incompatibilities in recent versions of Perl
|
31
|
+
- Changed order of InsertTagValues() arguments
|
32
|
+
- DateFmt() now returns value of formatted date/time string
|
33
|
+
|
10
34
|
Jan. 10, 2024 - Version 12.73
|
11
35
|
|
12
36
|
- Added write support for Leica XMP-xmpDSA tags
|
@@ -22,7 +46,8 @@ Jan. 10, 2024 - Version 12.73
|
|
22
46
|
decoding
|
23
47
|
- Fixed writing of date/time tags in XMP-xmpMM:Pantry structure
|
24
48
|
- API Changes:
|
25
|
-
- Added LimitLongValues option
|
49
|
+
- Added LimitLongValues option to provide control over tags which
|
50
|
+
previously had a hard-coded length limit
|
26
51
|
|
27
52
|
Dec. 29, 2023 - Version 12.72
|
28
53
|
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
@@ -108,8 +108,8 @@ your home directory, then you would type the following commands in a
|
|
108
108
|
terminal window to extract and run ExifTool:
|
109
109
|
|
110
110
|
cd ~/Desktop
|
111
|
-
gzip -dc Image-ExifTool-12.
|
112
|
-
cd Image-ExifTool-12.
|
111
|
+
gzip -dc Image-ExifTool-12.74.tar.gz | tar -xf -
|
112
|
+
cd Image-ExifTool-12.74
|
113
113
|
./exiftool t/images/ExifTool.jpg
|
114
114
|
|
115
115
|
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 = '12.
|
14
|
+
my $version = '12.74';
|
15
15
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
17
17
|
my $exePath;
|
@@ -70,7 +70,7 @@ sub PreserveTime();
|
|
70
70
|
sub AbsPath($);
|
71
71
|
sub MyConvertFileName($$);
|
72
72
|
sub SuggestedExtension($$$);
|
73
|
-
sub LoadPrintFormat(
|
73
|
+
sub LoadPrintFormat($;$);
|
74
74
|
sub FilenameSPrintf($;$@);
|
75
75
|
sub NextUnusedFilename($;$);
|
76
76
|
sub CreateDirectory($);
|
@@ -271,7 +271,7 @@ my %optArgs = (
|
|
271
271
|
'-lang' => 0, # (optional arg; cannot begin with "-")
|
272
272
|
'-listitem' => 1,
|
273
273
|
'-o' => 1, '-out' => 1,
|
274
|
-
'-p' => 1, '-printformat' => 1,
|
274
|
+
'-p' => 1, '-printformat' => 1, '-p-' => 1, '-printformat-' => 1,
|
275
275
|
'-P' => 0,
|
276
276
|
'-password' => 1,
|
277
277
|
'-require' => 1,
|
@@ -573,7 +573,7 @@ if ($^O eq 'MSWin32' and eval { require File::Glob }) {
|
|
573
573
|
$doGlob = 1;
|
574
574
|
}
|
575
575
|
|
576
|
-
$mt =
|
576
|
+
$mt = Image::ExifTool->new; # create ExifTool object
|
577
577
|
|
578
578
|
# don't extract duplicates by default unless set by UserDefined::Options
|
579
579
|
$mt->Options(Duplicates => 0) unless %Image::ExifTool::UserDefined::Options
|
@@ -1133,10 +1133,10 @@ for (;;) {
|
|
1133
1133
|
}
|
1134
1134
|
/^overwrite_original$/i and $overwriteOrig = 1, next;
|
1135
1135
|
/^overwrite_original_in_place$/i and $overwriteOrig = 2, next;
|
1136
|
-
if (/^p$/ or
|
1136
|
+
if (/^p(-?)$/ or /^printformat(-?)$/i) {
|
1137
1137
|
my $fmt = shift;
|
1138
1138
|
if ($pass) {
|
1139
|
-
LoadPrintFormat($fmt);
|
1139
|
+
LoadPrintFormat($fmt, $1);
|
1140
1140
|
# load MWG module now if necessary
|
1141
1141
|
if (not $useMWG and grep /^mwg:/i, @requestTags) {
|
1142
1142
|
$useMWG = 1;
|
@@ -1145,7 +1145,7 @@ for (;;) {
|
|
1145
1145
|
}
|
1146
1146
|
} else {
|
1147
1147
|
# defer to next pass so the filename charset is available
|
1148
|
-
push @nextPass,
|
1148
|
+
push @nextPass, "-$_", $fmt;
|
1149
1149
|
}
|
1150
1150
|
next;
|
1151
1151
|
}
|
@@ -1792,7 +1792,7 @@ if (not $altEnc and $mt->Options('Lang') ne 'en' and eval { require Encode }) {
|
|
1792
1792
|
if (@fileOrder) {
|
1793
1793
|
my @allFiles;
|
1794
1794
|
ProcessFiles($mt, \@allFiles);
|
1795
|
-
my $sortTool =
|
1795
|
+
my $sortTool = Image::ExifTool->new;
|
1796
1796
|
$sortTool->Options(FastScan => $fileOrderFast) if $fileOrderFast;
|
1797
1797
|
$sortTool->Options(PrintConv => $mt->Options('PrintConv'));
|
1798
1798
|
$sortTool->Options(Duplicates => 0);
|
@@ -2080,7 +2080,7 @@ sub GetImageInfo($$)
|
|
2080
2080
|
@foundTags = ('*', @tags) if @tags;
|
2081
2081
|
$info = $et->ImageInfo(Infile($pipe,$isWriting), \@foundTags, $opts);
|
2082
2082
|
foreach $condition (@condition) {
|
2083
|
-
my $cond = $et->InsertTagValues(\@foundTags,
|
2083
|
+
my $cond = $et->InsertTagValues($condition, \@foundTags, \%info);
|
2084
2084
|
{
|
2085
2085
|
# set package so eval'd functions are in Image::ExifTool namespace
|
2086
2086
|
package Image::ExifTool;
|
@@ -2281,7 +2281,7 @@ sub GetImageInfo($$)
|
|
2281
2281
|
my @lines;
|
2282
2282
|
my $opt = $type eq 'IF' ? 'Silent' : 'Warn'; # silence "IF" warnings
|
2283
2283
|
foreach (@$prf) {
|
2284
|
-
my $line = $et->InsertTagValues(\@foundTags, $
|
2284
|
+
my $line = $et->InsertTagValues($_, \@foundTags, $opt, $grp, $cache);
|
2285
2285
|
if ($type eq 'IF') {
|
2286
2286
|
$skipBody = 1 unless defined $line;
|
2287
2287
|
} elsif (defined $line) {
|
@@ -2714,7 +2714,7 @@ TAG: foreach $tag (@foundTags) {
|
|
2714
2714
|
} elsif ($fixLen == 1) {
|
2715
2715
|
$padLen -= length Encode::decode_utf8($desc);
|
2716
2716
|
} else {
|
2717
|
-
my $gcstr = eval {
|
2717
|
+
my $gcstr = eval { Unicode::GCString->new(Encode::decode_utf8($desc)) };
|
2718
2718
|
if ($gcstr) {
|
2719
2719
|
$padLen -= $gcstr->columns;
|
2720
2720
|
} else {
|
@@ -3640,7 +3640,7 @@ sub Infile($;$)
|
|
3640
3640
|
if ($rafStdin) {
|
3641
3641
|
$rafStdin->Seek(0); # rewind
|
3642
3642
|
} elsif (open RAF_STDIN, '-') {
|
3643
|
-
$rafStdin =
|
3643
|
+
$rafStdin = File::RandomAccess->new(\*RAF_STDIN);
|
3644
3644
|
$rafStdin->BinMode();
|
3645
3645
|
}
|
3646
3646
|
return $rafStdin if $rafStdin;
|
@@ -4117,12 +4117,12 @@ sub SuggestedExtension($$$)
|
|
4117
4117
|
|
4118
4118
|
#------------------------------------------------------------------------------
|
4119
4119
|
# Load print format file
|
4120
|
-
# Inputs: 0) file name
|
4120
|
+
# Inputs: 0) file name, 1) flag to avoid adding newline to input argument
|
4121
4121
|
# - saves lines of file to %printFmt list
|
4122
4122
|
# - adds tag names to @tags list
|
4123
|
-
sub LoadPrintFormat(
|
4123
|
+
sub LoadPrintFormat($;$)
|
4124
4124
|
{
|
4125
|
-
my $arg =
|
4125
|
+
my ($arg, $noNL) = @_;
|
4126
4126
|
if (not defined $arg) {
|
4127
4127
|
Error "Must specify file or expression for -p option\n";
|
4128
4128
|
} elsif ($arg !~ /\n/ and -f $arg and $mt->Open(\*FMT_FILE, $arg)) {
|
@@ -4131,7 +4131,8 @@ sub LoadPrintFormat($)
|
|
4131
4131
|
}
|
4132
4132
|
close(FMT_FILE);
|
4133
4133
|
} else {
|
4134
|
-
|
4134
|
+
$arg .= "\n" unless $noNL;
|
4135
|
+
AddPrintFormat($arg);
|
4135
4136
|
}
|
4136
4137
|
}
|
4137
4138
|
|
@@ -4295,7 +4296,7 @@ sub CreateDirectory($)
|
|
4295
4296
|
return 0;
|
4296
4297
|
}
|
4297
4298
|
unless ($k32CreateDir) {
|
4298
|
-
$k32CreateDir =
|
4299
|
+
$k32CreateDir = Win32::API->new('KERNEL32', 'CreateDirectoryW', 'PP', 'I');
|
4299
4300
|
}
|
4300
4301
|
$success = $k32CreateDir->Call($d2, 0) if $k32CreateDir;
|
4301
4302
|
} else {
|
@@ -4752,7 +4753,7 @@ L<Input-output text formatting|/Input-output text formatting>
|
|
4752
4753
|
-lang [LANG] Set current language
|
4753
4754
|
-listItem INDEX Extract specific item from a list
|
4754
4755
|
-n (--printConv) No print conversion
|
4755
|
-
-p
|
4756
|
+
-p[-] STR (-printFormat) Print output in specified format
|
4756
4757
|
-php Export tags as a PHP Array
|
4757
4758
|
-s[NUM] (-short) Short output format (-s for tag names)
|
4758
4759
|
-S (-veryShort) Very short output format
|
@@ -5561,30 +5562,31 @@ when writing. For example, the following commands all have the same effect:
|
|
5561
5562
|
> exiftool -Orientation=6 -n a.jpg
|
5562
5563
|
> exiftool -Orientation#=6 a.jpg
|
5563
5564
|
|
5564
|
-
=item B<-p> I<
|
5565
|
+
=item B<-p>[-] I<STR> or I<FMTFILE> (B<-printFormat>)
|
5565
5566
|
|
5566
|
-
Print output in the format specified by the given
|
5567
|
+
Print output in the format specified by the given string or file. The
|
5567
5568
|
argument is interpreted as a string unless a file of that name exists, in
|
5568
5569
|
which case the string is loaded from the contents of the file. Tag names in
|
5569
|
-
the format
|
5570
|
+
the format string or file begin with a C<$> symbol and may contain leading
|
5570
5571
|
group names and/or a trailing C<#> (to disable print conversion). Case is
|
5571
5572
|
not significant. Braces C<{}> may be used around the tag name to separate
|
5572
5573
|
it from subsequent text (and must be used if subsequent text begins with an
|
5573
5574
|
alphanumeric character, hyphen, underline, colon or number sign). Use C<$$>
|
5574
|
-
to represent a C<$> symbol, and C<$/> for a newline.
|
5575
|
-
|
5576
|
-
|
5577
|
-
|
5578
|
-
|
5579
|
-
|
5580
|
-
|
5581
|
-
|
5582
|
-
|
5583
|
-
C<#[
|
5584
|
-
|
5585
|
-
|
5586
|
-
|
5587
|
-
|
5575
|
+
to represent a C<$> symbol, and C<$/> for a newline. When the string
|
5576
|
+
argument is used (ie. I<STR>), a newline is added to the end of the string
|
5577
|
+
unless B<-p-> is specified.
|
5578
|
+
|
5579
|
+
Multiple B<-p> options may be used. Lines beginning with C<#[HEAD]> and
|
5580
|
+
C<#[TAIL]> are output before the first processed file and after the last
|
5581
|
+
processed file respectively. Lines beginning with C<#[SECT]> and C<#[ENDS]>
|
5582
|
+
are output before and after each section of files. A section is defined as
|
5583
|
+
a group of consecutive files with the same section header (eg. files are
|
5584
|
+
grouped by directory if C<#[SECT]> contains C<$directory>). Lines beginning
|
5585
|
+
with C<#[BODY]> and lines not beginning with C<#> are output for each
|
5586
|
+
processed file. Lines beginning with C<#[IF]> are not output, but all BODY
|
5587
|
+
lines are skipped if any tag on an IF line doesn't exist. Other lines
|
5588
|
+
beginning with C<#> are ignored. (To output a line beginning with C<#>, use
|
5589
|
+
C<#[BODY]#>.) For example, this format file:
|
5588
5590
|
|
5589
5591
|
# this is a comment line
|
5590
5592
|
#[HEAD]-- Generated by ExifTool $exifToolVersion --
|
@@ -5598,16 +5600,21 @@ with this command:
|
|
5598
5600
|
|
5599
5601
|
produces output like this:
|
5600
5602
|
|
5601
|
-
-- Generated by ExifTool 12.
|
5603
|
+
-- Generated by ExifTool 12.74 --
|
5602
5604
|
File: a.jpg - 2003:10:31 15:44:19
|
5603
5605
|
(f/5.6, 1/60s, ISO 100)
|
5604
5606
|
File: b.jpg - 2006:05:23 11:57:38
|
5605
5607
|
(f/8.0, 1/13s, ISO 100)
|
5606
5608
|
-- end --
|
5607
5609
|
|
5608
|
-
The values of List-type tags with multiple items
|
5609
|
-
|
5610
|
-
when interpolated in the string.
|
5610
|
+
The values of List-type tags with multiple items, Shortcut tags representing
|
5611
|
+
multiple tags, and matching tags when the C<All> group is specified are
|
5612
|
+
joined according the B<-sep> option setting when interpolated in the string.
|
5613
|
+
(Note that when C<All> is used as a group name, dupicate tags are included
|
5614
|
+
regardless of the Duplicates option setting.) When C<All> is used as a tag
|
5615
|
+
name, a value of 1 is returned if any tag exists in the specified group, or
|
5616
|
+
0 otherwise (unless the C<All> group is also specified, in which case the
|
5617
|
+
values of all matching tags are joined).
|
5611
5618
|
|
5612
5619
|
When B<-ee> (B<-extractEmbedded>) is combined with B<-p>, embedded documents
|
5613
5620
|
are effectively processed as separate input files.
|
@@ -6550,7 +6557,9 @@ set to undef if C<=> is used, or an empty string with C<^=>. If I<OPT> is
|
|
6550
6557
|
not specified a list of available options is returned. The option name is
|
6551
6558
|
not case senstive, but the option values are. See
|
6552
6559
|
L<Image::ExifTool Options|Image::ExifTool/Options> for option details. This
|
6553
|
-
overrides API options set via the config file.
|
6560
|
+
overrides API options set via the config file. Note that the exiftool app
|
6561
|
+
sets some API options internally, and attempts to change these via the
|
6562
|
+
command line will have no effect.
|
6554
6563
|
|
6555
6564
|
=item B<-common_args>
|
6556
6565
|
|
@@ -17,6 +17,7 @@
|
|
17
17
|
# scalar with a multi-character newline
|
18
18
|
# 01/24/2009 - PH Protect against reading too much at once
|
19
19
|
# 10/04/2018 - PH Added NoBuffer option
|
20
|
+
# 01/20/2024 - PH Set ERROR on file read error
|
20
21
|
#
|
21
22
|
# Notes: Calls the normal file i/o routines unless SeekTest() fails, in
|
22
23
|
# which case the file is buffered in memory to allow random access.
|
@@ -25,6 +26,9 @@
|
|
25
26
|
#
|
26
27
|
# May also be used for string i/o (just pass a scalar reference)
|
27
28
|
#
|
29
|
+
# Sets internal ERROR member from $! if there is an error reading
|
30
|
+
# the file.
|
31
|
+
#
|
28
32
|
# Legal: Copyright (c) 2003-2024, Phil Harvey (philharvey66 at gmail.com)
|
29
33
|
# This library is free software; you can redistribute it and/or
|
30
34
|
# modify it under the same terms as Perl itself.
|
@@ -37,7 +41,7 @@ require 5.002;
|
|
37
41
|
require Exporter;
|
38
42
|
|
39
43
|
use vars qw($VERSION @ISA @EXPORT_OK);
|
40
|
-
$VERSION = '1.
|
44
|
+
$VERSION = '1.12';
|
41
45
|
@ISA = qw(Exporter);
|
42
46
|
|
43
47
|
sub Read($$$);
|
@@ -211,6 +215,8 @@ sub Read($$$)
|
|
211
215
|
if ($num) {
|
212
216
|
${$self->{BUFF_PT}} .= $buff;
|
213
217
|
$self->{LEN} += $num;
|
218
|
+
} elsif (not defined $num) {
|
219
|
+
$self->{ERROR} = $!;
|
214
220
|
}
|
215
221
|
}
|
216
222
|
# number of bytes left in data buffer
|
@@ -229,7 +235,11 @@ sub Read($$$)
|
|
229
235
|
} else {
|
230
236
|
# read directly from file
|
231
237
|
$_[0] = '' unless defined $_[0];
|
232
|
-
$rtnVal = read($self->{FILE_PT}, $_[0], $len)
|
238
|
+
$rtnVal = read($self->{FILE_PT}, $_[0], $len);
|
239
|
+
unless (defined $rtnVal) {
|
240
|
+
$self->{ERROR} = $!;
|
241
|
+
$rtnVal = 0;
|
242
|
+
}
|
233
243
|
}
|
234
244
|
if ($self->{DEBUG}) {
|
235
245
|
my $pos = $self->Tell() - $rtnVal;
|
@@ -258,7 +268,10 @@ sub ReadLine($$)
|
|
258
268
|
# make sure we have some data after the current position
|
259
269
|
while ($self->{LEN} <= $pos) {
|
260
270
|
$num = read($fp, $buff, $CHUNK_SIZE);
|
261
|
-
|
271
|
+
unless ($num) {
|
272
|
+
defined $num or $self->{ERROR} = $!;
|
273
|
+
return 0;
|
274
|
+
}
|
262
275
|
${$self->{BUFF_PT}} .= $buff;
|
263
276
|
$self->{LEN} += $num;
|
264
277
|
}
|
@@ -270,7 +283,11 @@ sub ReadLine($$)
|
|
270
283
|
last;
|
271
284
|
}
|
272
285
|
$pos = $self->{LEN}; # have scanned to end of buffer
|
273
|
-
$num = read($fp, $buff, $CHUNK_SIZE)
|
286
|
+
$num = read($fp, $buff, $CHUNK_SIZE);
|
287
|
+
unless ($num) {
|
288
|
+
defined $num or $self->{ERROR} = $!;
|
289
|
+
last;
|
290
|
+
}
|
274
291
|
${$self->{BUFF_PT}} .= $buff;
|
275
292
|
$self->{LEN} += $num;
|
276
293
|
}
|
@@ -314,7 +331,12 @@ sub Slurp($)
|
|
314
331
|
my $fp = $self->{FILE_PT} || return;
|
315
332
|
# read whole file into buffer (in large chunks)
|
316
333
|
my ($buff, $num);
|
317
|
-
|
334
|
+
for (;;) {
|
335
|
+
$num = read($fp, $buff, $CHUNK_SIZE * $SLURP_CHUNKS);
|
336
|
+
unless ($num) {
|
337
|
+
defined $num or $self->{ERROR} = $!;
|
338
|
+
last;
|
339
|
+
}
|
318
340
|
${$self->{BUFF_PT}} .= $buff;
|
319
341
|
$self->{LEN} += $num;
|
320
342
|
}
|
@@ -339,6 +361,10 @@ sub Purge($)
|
|
339
361
|
$self->{POS} -= $self->{LEN};
|
340
362
|
${$self->{BUFF_PT}} = '';
|
341
363
|
$self->{LEN} = read($self->{FILE_PT}, ${$self->{BUFF_PT}}, $SKIP_SIZE);
|
364
|
+
if (not defined $self->{LEN}) {
|
365
|
+
$self->{ERROR} = $!;
|
366
|
+
last;
|
367
|
+
}
|
342
368
|
last if $self->{LEN} < $SKIP_SIZE;
|
343
369
|
}
|
344
370
|
} elsif ($purge > 0) {
|
@@ -16,9 +16,9 @@ File::RandomAccess - Random access reads of sequential file or scalar
|
|
16
16
|
|
17
17
|
use File::RandomAccess;
|
18
18
|
|
19
|
-
$raf =
|
19
|
+
$raf = File::RandomAccess->new(\*FILE, $disableSeekTest);
|
20
20
|
|
21
|
-
$raf =
|
21
|
+
$raf = File::RandomAccess->new(\$data);
|
22
22
|
|
23
23
|
$err = $raf->Seek($pos);
|
24
24
|
$num = $raf->Read($buff, $bytes);
|
@@ -38,10 +38,10 @@ Creates a new RandomAccess object given a file reference or
|
|
38
38
|
reference to data in memory.
|
39
39
|
|
40
40
|
# Read from open file or pipe
|
41
|
-
$raf =
|
41
|
+
$raf = File::RandomAccess->new(\*FILE);
|
42
42
|
|
43
43
|
# Read from data in memory
|
44
|
-
$raf =
|
44
|
+
$raf = File::RandomAccess->new(\$data);
|
45
45
|
|
46
46
|
=over 4
|
47
47
|
|
@@ -15,7 +15,7 @@ use strict;
|
|
15
15
|
use vars qw($VERSION);
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
17
17
|
|
18
|
-
$VERSION = '1.
|
18
|
+
$VERSION = '1.01';
|
19
19
|
|
20
20
|
sub ReadUInt32 {
|
21
21
|
my $buff;
|
@@ -569,7 +569,7 @@ sub ReadFilesInfo {
|
|
569
569
|
next;
|
570
570
|
}
|
571
571
|
$_[0]->Read($buff, $size);
|
572
|
-
my $buffer =
|
572
|
+
my $buffer = File::RandomAccess->new(\$buff);
|
573
573
|
if($prop == 14){ # empty stream
|
574
574
|
my @isempty = ReadBoolean($buffer, $numfiles, 0);
|
575
575
|
my $numemptystreams = 0;
|
@@ -732,7 +732,7 @@ sub Process7Z($$)
|
|
732
732
|
$folder_data .= Decompress($et, $raf, $decomporessor, $remaining);
|
733
733
|
$remaining = $uncompressed_size - length($folder_data);
|
734
734
|
}
|
735
|
-
$buffer2 =
|
735
|
+
$buffer2 = File::RandomAccess->new(\$folder_data);
|
736
736
|
}
|
737
737
|
$buffer2->Seek(0, 0);
|
738
738
|
$buffer2->Read($buff, 1);
|
@@ -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.09';
|
18
18
|
|
19
19
|
sub ProcessAFCP($$);
|
20
20
|
|
@@ -134,7 +134,7 @@ NoAFCP: for (;;) {
|
|
134
134
|
$dirBuff = $valBuff = '';
|
135
135
|
require Image::ExifTool::Fixup;
|
136
136
|
$fixup = $$dirInfo{Fixup};
|
137
|
-
$fixup or $fixup = $$dirInfo{Fixup} =
|
137
|
+
$fixup or $fixup = $$dirInfo{Fixup} = Image::ExifTool::Fixup->new;
|
138
138
|
$vers = substr($buff, 4, 2); # get version number
|
139
139
|
} else {
|
140
140
|
$et->DumpTrailer($dirInfo) if $verbose or $$et{HTML_DUMP};
|
@@ -19,7 +19,7 @@ use integer; # IMPORTANT!! use integer arithmetic throughout
|
|
19
19
|
require Exporter;
|
20
20
|
use vars qw($VERSION @ISA @EXPORT_OK);
|
21
21
|
|
22
|
-
$VERSION = '1.
|
22
|
+
$VERSION = '1.01';
|
23
23
|
@ISA = qw(Exporter);
|
24
24
|
@EXPORT_OK = qw(Decode);
|
25
25
|
|
@@ -196,7 +196,7 @@ sub Decode($;$)
|
|
196
196
|
if (ref $_[0] and UNIVERSAL::isa($_[0],'Image::ExifTool::BZZ')) {
|
197
197
|
$self = shift;
|
198
198
|
} else {
|
199
|
-
$self =
|
199
|
+
$self = Image::ExifTool::BZZ->new;
|
200
200
|
}
|
201
201
|
my $dataPt = shift;
|
202
202
|
if ($dataPt) {
|
@@ -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.53';
|
39
39
|
@ISA = qw(Exporter);
|
40
40
|
|
41
41
|
sub NumbersFirst($$);
|
@@ -797,7 +797,7 @@ sub new
|
|
797
797
|
}
|
798
798
|
|
799
799
|
my $tableNum = 0;
|
800
|
-
my $et =
|
800
|
+
my $et = Image::ExifTool->new;
|
801
801
|
my ($tableName, $tag);
|
802
802
|
# create lookup for short table names
|
803
803
|
foreach $tableName (@tableNames) {
|
@@ -1727,12 +1727,12 @@ sub WriteTagLookup($$)
|
|
1727
1727
|
}
|
1728
1728
|
|
1729
1729
|
#------------------------------------------------------------------------------
|
1730
|
-
# Sort numbers first numerically, then strings alphabetically
|
1730
|
+
# Sort numbers first numerically, then strings alphabetically
|
1731
|
+
# - case-insensitive sorting set by global variable $caseInsensitive
|
1731
1732
|
# - two global variables are used to change the sort algorithm:
|
1732
1733
|
# $numbersFirst: -1 = put numbers after other strings
|
1733
1734
|
# 1 = put numbers before other strings
|
1734
1735
|
# 2 = put numbers first, but negative numbers last
|
1735
|
-
# $caseInsensitive: flag set for case-insensitive sorting
|
1736
1736
|
sub NumbersFirst($$)
|
1737
1737
|
{
|
1738
1738
|
my ($a, $b) = @_;
|
@@ -2742,7 +2742,7 @@ validation and consistency checks on the tag tables.
|
|
2742
2742
|
|
2743
2743
|
use Image::ExifTool::BuildTagLookup;
|
2744
2744
|
|
2745
|
-
$builder =
|
2745
|
+
$builder = Image::ExifTool::BuildTagLookup->new;
|
2746
2746
|
|
2747
2747
|
# update Image::ExifTool::TagLookup
|
2748
2748
|
$ok = $builder->WriteTagLookup('lib/Image/ExifTool/TagLookup.pm');
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
88
88
|
sub ProcessExifInfo($$$);
|
89
89
|
sub SwapWords($);
|
90
90
|
|
91
|
-
$VERSION = '4.
|
91
|
+
$VERSION = '4.73';
|
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)
|
@@ -1394,7 +1394,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
1394
1394
|
},
|
1395
1395
|
{
|
1396
1396
|
Name => 'CanonCameraInfoR6',
|
1397
|
-
Condition => '$$self{Model} =~ /\bEOS
|
1397
|
+
Condition => '$$self{Model} =~ /\bEOS R[56]$/',
|
1398
1398
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoR6' },
|
1399
1399
|
},
|
1400
1400
|
{
|
@@ -4714,7 +4714,7 @@ my %ciMaxFocal = (
|
|
4714
4714
|
PRIORITY => 0,
|
4715
4715
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
4716
4716
|
NOTES => 'CameraInfo tags for the EOS R6.',
|
4717
|
-
0x0af1 => { #forum15210
|
4717
|
+
0x0af1 => { #forum15210/15579
|
4718
4718
|
Name => 'ShutterCount',
|
4719
4719
|
Format => 'int32u',
|
4720
4720
|
Notes => 'includes electronic + mechanical shutter',
|
@@ -23,7 +23,7 @@ use vars qw($VERSION);
|
|
23
23
|
use Image::ExifTool qw(:DataAccess :Utils);
|
24
24
|
use Image::ExifTool::Canon;
|
25
25
|
|
26
|
-
$VERSION = '1.
|
26
|
+
$VERSION = '1.37';
|
27
27
|
|
28
28
|
sub ProcessCanonVRD($$;$);
|
29
29
|
sub WriteCanonVRD($$;$);
|
@@ -2011,7 +2011,7 @@ sub ProcessCanonVRD($$;$)
|
|
2011
2011
|
$verbose and print $out " Creating CanonVRD trailer\n";
|
2012
2012
|
$created = 1;
|
2013
2013
|
}
|
2014
|
-
$raf =
|
2014
|
+
$raf = File::RandomAccess->new($dataPt);
|
2015
2015
|
}
|
2016
2016
|
# read and validate the footer
|
2017
2017
|
$raf->Seek(-0x40-$offset, 2) or return 0;
|
@@ -20,7 +20,7 @@ use strict;
|
|
20
20
|
use vars qw($VERSION %uid);
|
21
21
|
use Image::ExifTool qw(:DataAccess :Utils);
|
22
22
|
|
23
|
-
$VERSION = '1.
|
23
|
+
$VERSION = '1.23';
|
24
24
|
|
25
25
|
# DICOM VR (Value Representation) format conversions
|
26
26
|
my %dicomFormat = (
|
@@ -3668,7 +3668,7 @@ sub ProcessDICOM($$)
|
|
3668
3668
|
}
|
3669
3669
|
last if length $data < 8;
|
3670
3670
|
# create new RAF object from inflated data stream
|
3671
|
-
$raf =
|
3671
|
+
$raf = File::RandomAccess->new(\$data);
|
3672
3672
|
# re-read start of stream (now decompressed)
|
3673
3673
|
$raf->Read($buff, 8) == 8 or last;
|
3674
3674
|
$group = Get16u(\$buff, 0);
|
@@ -17,7 +17,7 @@ use Image::ExifTool::Exif;
|
|
17
17
|
use Image::ExifTool::MakerNotes;
|
18
18
|
use Image::ExifTool::CanonRaw;
|
19
19
|
|
20
|
-
$VERSION = '1.
|
20
|
+
$VERSION = '1.25';
|
21
21
|
|
22
22
|
sub ProcessOriginalRaw($$$);
|
23
23
|
sub ProcessAdobeData($$$);
|
@@ -516,7 +516,7 @@ sub ProcessAdobeMRW($$$)
|
|
516
516
|
my $buff = "\0MRM" . pack('N', $dirLen - 4);
|
517
517
|
# ignore leading byte order and directory count words
|
518
518
|
$buff .= substr($$dataPt, $dirStart + 4, $dirLen - 4);
|
519
|
-
my $raf =
|
519
|
+
my $raf = File::RandomAccess->new(\$buff);
|
520
520
|
my %dirInfo = ( RAF => $raf, OutFile => $outfile );
|
521
521
|
my $rtnVal = Image::ExifTool::MinoltaRaw::ProcessMRW($et, \%dirInfo);
|
522
522
|
if ($outfile and defined $$outfile and length $$outfile) {
|
@@ -548,7 +548,7 @@ sub ProcessAdobeRAF($$$)
|
|
548
548
|
}
|
549
549
|
$et->VerboseDir($dirInfo);
|
550
550
|
# make fake RAF object for processing (same acronym, different meaning)
|
551
|
-
my $raf =
|
551
|
+
my $raf = File::RandomAccess->new($dataPt);
|
552
552
|
my $num = '';
|
553
553
|
# loop through all records in Adobe RAF data:
|
554
554
|
# 0 - RAF table (not processed)
|
@@ -752,7 +752,7 @@ sub ProcessAdobeMakN($$$)
|
|
752
752
|
}
|
753
753
|
if ($outfile) {
|
754
754
|
# rewrite the maker notes directory
|
755
|
-
my $fixup = $subdirInfo{Fixup} =
|
755
|
+
my $fixup = $subdirInfo{Fixup} = Image::ExifTool::Fixup->new;
|
756
756
|
my $oldChanged = $$et{CHANGED};
|
757
757
|
my $buff = $et->WriteDirectory(\%subdirInfo, $subTable);
|
758
758
|
# nothing to do if error writing directory or nothing changed
|
@@ -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.
|
60
|
+
$VERSION = '4.49';
|
61
61
|
|
62
62
|
sub ProcessExif($$$);
|
63
63
|
sub WriteExif($$$);
|
@@ -6465,7 +6465,7 @@ sub ProcessExif($$$)
|
|
6465
6465
|
TagInfo => $tagInfo || $tmpInfo,
|
6466
6466
|
Offset => $base + $valuePtr + $dataPos,
|
6467
6467
|
Size => $size,
|
6468
|
-
Fixup =>
|
6468
|
+
Fixup => Image::ExifTool::Fixup->new,
|
6469
6469
|
};
|
6470
6470
|
}
|
6471
6471
|
} else {
|