exiftool_vendored 12.73.0 → 12.75.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 +41 -2
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +46 -45
- data/bin/exiftool +97 -83
- 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 +7 -7
- data/bin/lib/Image/ExifTool/Canon.pm +6 -5
- 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 +3 -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 +51 -12
- 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/PDF.pm +54 -4
- 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 +41 -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 -2
- 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 +8 -5
- data/bin/lib/Image/ExifTool/TagNames.pod +36 -5
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteExif.pl +26 -23
- 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 +68 -44
- data/bin/lib/Image/ExifTool/XMP.pm +2 -1
- data/bin/lib/Image/ExifTool/XMP2.pl +9 -0
- data/bin/lib/Image/ExifTool/ZIP.pm +6 -6
- data/bin/lib/Image/ExifTool.pm +42 -26
- data/bin/lib/Image/ExifTool.pod +76 -71
- data/bin/perl-Image-ExifTool.spec +45 -44
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
@@ -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.54';
|
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) {
|
@@ -1642,7 +1642,7 @@ sub WriteTagLookup($$)
|
|
1642
1642
|
} else {
|
1643
1643
|
my $quot = "'";
|
1644
1644
|
# escape non-printable characters in tag ID if necessary
|
1645
|
-
$quot = '"' if s/[\x00-\x1f,\x7f-\xff]/sprintf('\\x%.2x',ord(
|
1645
|
+
$quot = '"' if s/([\x00-\x1f,\x7f-\xff])/sprintf('\\x%.2x',ord($1))/ge;
|
1646
1646
|
$_ = $quot . $_ . $quot;
|
1647
1647
|
}
|
1648
1648
|
}
|
@@ -1655,7 +1655,7 @@ sub WriteTagLookup($$)
|
|
1655
1655
|
} else {
|
1656
1656
|
my $quot = "'";
|
1657
1657
|
# escape non-printable characters in tag ID if necessary
|
1658
|
-
$quot = '"' if $tagID =~ s/[\x00-\x1f,\x7f-\xff]/sprintf('\\x%.2x',ord(
|
1658
|
+
$quot = '"' if $tagID =~ s/([\x00-\x1f,\x7f-\xff])/sprintf('\\x%.2x',ord($1))/ge;
|
1659
1659
|
$entry = "$quot${tagID}$quot";
|
1660
1660
|
}
|
1661
1661
|
my $wrNum = $wrNum{$tableNum};
|
@@ -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
|
{
|
@@ -2206,8 +2206,9 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
2206
2206
|
6 => 'Manual Focus (6)',
|
2207
2207
|
16 => 'Pan Focus', #PH
|
2208
2208
|
# 137 - Single?
|
2209
|
-
256 => 'AF
|
2210
|
-
257 => 'Live View', #
|
2209
|
+
256 => 'One-shot AF (Live View)', #PH/forum15637
|
2210
|
+
257 => 'AI Servo AF (Live View)', #PH/forum15637
|
2211
|
+
258 => 'AI Focus AF (Live View)', #PH/forum15637
|
2211
2212
|
512 => 'Movie Snap Focus', #48
|
2212
2213
|
519 => 'Movie Servo AF', #PH (NC, EOS M)
|
2213
2214
|
},
|
@@ -4714,7 +4715,7 @@ my %ciMaxFocal = (
|
|
4714
4715
|
PRIORITY => 0,
|
4715
4716
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
4716
4717
|
NOTES => 'CameraInfo tags for the EOS R6.',
|
4717
|
-
0x0af1 => { #forum15210
|
4718
|
+
0x0af1 => { #forum15210/15579
|
4718
4719
|
Name => 'ShutterCount',
|
4719
4720
|
Format => 'int32u',
|
4720
4721
|
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.50';
|
61
61
|
|
62
62
|
sub ProcessExif($$$);
|
63
63
|
sub WriteExif($$$);
|
@@ -4348,6 +4348,7 @@ my %opcodeInfo = (
|
|
4348
4348
|
Deletable => 1,
|
4349
4349
|
SubDirectory => {
|
4350
4350
|
TagTable => 'Image::ExifTool::Jpeg2000::Main',
|
4351
|
+
DirName => 'JUMBF',
|
4351
4352
|
ByteOrder => 'BigEndian',
|
4352
4353
|
},
|
4353
4354
|
},
|
@@ -6465,7 +6466,7 @@ sub ProcessExif($$$)
|
|
6465
6466
|
TagInfo => $tagInfo || $tmpInfo,
|
6466
6467
|
Offset => $base + $valuePtr + $dataPos,
|
6467
6468
|
Size => $size,
|
6468
|
-
Fixup =>
|
6469
|
+
Fixup => Image::ExifTool::Fixup->new,
|
6469
6470
|
};
|
6470
6471
|
}
|
6471
6472
|
} else {
|
@@ -24,7 +24,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
24
24
|
use Image::ExifTool::Exif;
|
25
25
|
use Image::ExifTool::GPS;
|
26
26
|
|
27
|
-
$VERSION = '1.
|
27
|
+
$VERSION = '1.23';
|
28
28
|
|
29
29
|
sub ProcessFLIR($$;$);
|
30
30
|
sub ProcessFLIRText($$$);
|
@@ -1468,7 +1468,7 @@ sub ProcessMeasInfo($$$)
|
|
1468
1468
|
sub ProcessFLIR($$;$)
|
1469
1469
|
{
|
1470
1470
|
my ($et, $dirInfo, $tagTablePtr) = @_;
|
1471
|
-
my $raf = $$dirInfo{RAF} ||
|
1471
|
+
my $raf = $$dirInfo{RAF} || File::RandomAccess->new($$dirInfo{DataPt});
|
1472
1472
|
my $verbose = $et->Options('Verbose');
|
1473
1473
|
my $out = $et->Options('TextOut');
|
1474
1474
|
my $base = $raf->Tell();
|
@@ -39,7 +39,7 @@ use Image::ExifTool qw(GetByteOrder SetByteOrder Get32u Get32s Set32u
|
|
39
39
|
Get16u Get16s Set16u);
|
40
40
|
use vars qw($VERSION);
|
41
41
|
|
42
|
-
$VERSION = '1.
|
42
|
+
$VERSION = '1.06';
|
43
43
|
|
44
44
|
sub AddFixup($$;$$);
|
45
45
|
sub ApplyFixup($$);
|
@@ -69,7 +69,7 @@ sub new
|
|
69
69
|
sub Clone($)
|
70
70
|
{
|
71
71
|
my $self = shift;
|
72
|
-
my $clone =
|
72
|
+
my $clone = Image::ExifTool::Fixup->new;
|
73
73
|
$clone->{Start} = $self->{Start};
|
74
74
|
$clone->{Shift} = $self->{Shift};
|
75
75
|
my $phash = $self->{Pointers};
|
@@ -317,7 +317,7 @@ Image::ExifTool::Fixup - Utility to handle pointer fixups
|
|
317
317
|
|
318
318
|
use Image::ExifTool::Fixup;
|
319
319
|
|
320
|
-
$fixup =
|
320
|
+
$fixup = Image::ExifTool::Fixup->new;
|
321
321
|
|
322
322
|
# add a new fixup to a pointer at the specified offset in data
|
323
323
|
$fixup->AddFixup($offset);
|
@@ -22,7 +22,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
22
22
|
use Image::ExifTool::Exif;
|
23
23
|
use Image::ExifTool::ASF; # for GetGUID()
|
24
24
|
|
25
|
-
$VERSION = '1.
|
25
|
+
$VERSION = '1.48';
|
26
26
|
|
27
27
|
sub ProcessFPX($$);
|
28
28
|
sub ProcessFPXR($$$);
|
@@ -2206,7 +2206,7 @@ sub ProcessFPX($$)
|
|
2206
2206
|
my ($tag, %hier, %objIndex, %loadedDifSect);
|
2207
2207
|
|
2208
2208
|
# handle FPX format in memory from PNG cpIp chunk
|
2209
|
-
$raf or $raf =
|
2209
|
+
$raf or $raf = File::RandomAccess->new($$dirInfo{DataPt});
|
2210
2210
|
|
2211
2211
|
# read header
|
2212
2212
|
return 0 unless $raf->Read($buff,HDR_SIZE) == HDR_SIZE;
|
@@ -2353,7 +2353,7 @@ sub ProcessFPX($$)
|
|
2353
2353
|
$et->Warn('Error loading Mini-FAT stream');
|
2354
2354
|
last;
|
2355
2355
|
}
|
2356
|
-
$miniStream =
|
2356
|
+
$miniStream = File::RandomAccess->new(\$miniStreamBuff);
|
2357
2357
|
}
|
2358
2358
|
|
2359
2359
|
my $tagInfo;
|
@@ -31,7 +31,7 @@ use vars qw($VERSION);
|
|
31
31
|
use Image::ExifTool qw(:DataAccess :Utils);
|
32
32
|
use Image::ExifTool::Exif;
|
33
33
|
|
34
|
-
$VERSION = '1.
|
34
|
+
$VERSION = '1.92';
|
35
35
|
|
36
36
|
sub ProcessFujiDir($$$);
|
37
37
|
sub ProcessFaceRec($$$);
|
@@ -1187,6 +1187,8 @@ my %faceCategories = (
|
|
1187
1187
|
ValueConv => 'my @v=reverse split(" ",$val);"@v"', # reverse to show width first
|
1188
1188
|
PrintConv => '$val=~tr/ /x/; $val',
|
1189
1189
|
},
|
1190
|
+
# 0x112 - int16u[2] same as 0x111 but with width/height swapped?
|
1191
|
+
# 0x113 - int16u[2] same as 0x111?
|
1190
1192
|
0x115 => {
|
1191
1193
|
Name => 'RawImageAspectRatio',
|
1192
1194
|
Format => 'int16u',
|
@@ -1236,6 +1238,7 @@ my %faceCategories = (
|
|
1236
1238
|
Count => 36,
|
1237
1239
|
PrintConv => '$val =~ tr/012 /RGB/d; join " ", $val =~ /....../g',
|
1238
1240
|
},
|
1241
|
+
# 0x141 - int16u[2] Bit depth? "14 42" for 14-bit RAF and "16 48" for 16-bit RAF
|
1239
1242
|
0x2000 => { #IB
|
1240
1243
|
Name => 'WB_GRGBLevelsAuto',
|
1241
1244
|
Format => 'int16u',
|
@@ -1408,6 +1411,8 @@ my %faceCategories = (
|
|
1408
1411
|
0xf00e => 'WB_GRBLevels',
|
1409
1412
|
0xf00f => 'ChromaticAberrationParams', # (rational64s[23])
|
1410
1413
|
0xf010 => 'VignettingParams', #9 (rational64s[31 or 64])
|
1414
|
+
# 0xf013 - int32u[3] same as 0xf00d
|
1415
|
+
# 0xf014 - int32u[3] - also related to WhiteBalance
|
1411
1416
|
);
|
1412
1417
|
|
1413
1418
|
# information found in FFMV atom of MOV videos
|
@@ -1688,7 +1693,7 @@ sub WriteRAF($$)
|
|
1688
1693
|
# rewrite the embedded JPEG in memory
|
1689
1694
|
my %jpegInfo = (
|
1690
1695
|
Parent => 'RAF',
|
1691
|
-
RAF =>
|
1696
|
+
RAF => File::RandomAccess->new(\$jpeg),
|
1692
1697
|
OutFile => \$outJpeg,
|
1693
1698
|
);
|
1694
1699
|
$$et{FILE_TYPE} = 'JPEG';
|
@@ -1792,7 +1797,7 @@ sub ProcessRAF($$)
|
|
1792
1797
|
# extract information from embedded JPEG
|
1793
1798
|
my %dirInfo = (
|
1794
1799
|
Parent => 'RAF',
|
1795
|
-
RAF =>
|
1800
|
+
RAF => File::RandomAccess->new(\$jpeg),
|
1796
1801
|
);
|
1797
1802
|
if ($jpos) {
|
1798
1803
|
$$et{BASE} += $jpos;
|
@@ -29,7 +29,7 @@ use vars qw($VERSION);
|
|
29
29
|
use Image::ExifTool qw(:Public);
|
30
30
|
use Image::ExifTool::GPS;
|
31
31
|
|
32
|
-
$VERSION = '1.
|
32
|
+
$VERSION = '1.74';
|
33
33
|
|
34
34
|
sub JITTER() { return 2 } # maximum time jitter
|
35
35
|
|
@@ -174,7 +174,7 @@ sub LoadTrackLog($$;$)
|
|
174
174
|
# $val is track file name
|
175
175
|
if ($et->Open(\*EXIFTOOL_TRKFILE, $val)) {
|
176
176
|
$trackFile = $val;
|
177
|
-
$raf =
|
177
|
+
$raf = File::RandomAccess->new(\*EXIFTOOL_TRKFILE);
|
178
178
|
unless ($raf->Read($_, 256)) {
|
179
179
|
close EXIFTOOL_TRKFILE;
|
180
180
|
return "Empty track file '${val}'";
|
@@ -202,7 +202,7 @@ sub LoadTrackLog($$;$)
|
|
202
202
|
}
|
203
203
|
unless ($from) {
|
204
204
|
# set up RAF for reading log file in memory
|
205
|
-
$raf =
|
205
|
+
$raf = File::RandomAccess->new(\$val);
|
206
206
|
$from = 'data';
|
207
207
|
}
|
208
208
|
|
@@ -13,7 +13,7 @@ use vars qw($VERSION);
|
|
13
13
|
use Image::ExifTool; # only for FinishTiffDump()
|
14
14
|
use Image::ExifTool::HTML qw(EscapeHTML);
|
15
15
|
|
16
|
-
$VERSION = '1.
|
16
|
+
$VERSION = '1.40';
|
17
17
|
|
18
18
|
sub DumpTable($$$;$$$$$$);
|
19
19
|
sub Open($$$;@);
|
@@ -894,7 +894,7 @@ Image::ExifTool::HtmlDump - Dump information in hex to HTML page
|
|
894
894
|
=head1 SYNOPSIS
|
895
895
|
|
896
896
|
use Image::ExifTool::HtmlDump;
|
897
|
-
my $dump =
|
897
|
+
my $dump = Image::ExifTool::HtmlDump->new;
|
898
898
|
$dump->Add($start, $size, $comment);
|
899
899
|
$dump->Print($dumpInfo, $raf, $dataPt, $dataPos, $outfile);
|
900
900
|
|
@@ -18,7 +18,7 @@ use strict;
|
|
18
18
|
use vars qw($VERSION);
|
19
19
|
use Image::ExifTool qw(:DataAccess :Utils);
|
20
20
|
|
21
|
-
$VERSION = '1.
|
21
|
+
$VERSION = '1.61';
|
22
22
|
|
23
23
|
sub ProcessID3v2($$$);
|
24
24
|
sub ProcessPrivate($$$);
|
@@ -1408,7 +1408,7 @@ sub ProcessID3($$)
|
|
1408
1408
|
$$et{DoneID3} = 1;
|
1409
1409
|
|
1410
1410
|
# allow this to be called with either RAF or DataPt
|
1411
|
-
my $raf = $$dirInfo{RAF} ||
|
1411
|
+
my $raf = $$dirInfo{RAF} || File::RandomAccess->new($$dirInfo{DataPt});
|
1412
1412
|
my ($buff, %id3Header, %id3Trailer, $hBuff, $tBuff, $eBuff, $tagTablePtr);
|
1413
1413
|
my $rtnVal = 0;
|
1414
1414
|
my $hdrEnd = 0;
|
@@ -12,7 +12,7 @@ require Exporter;
|
|
12
12
|
|
13
13
|
use vars qw($VERSION @ISA @EXPORT_OK);
|
14
14
|
|
15
|
-
$VERSION = '1.
|
15
|
+
$VERSION = '1.11';
|
16
16
|
@ISA = qw(Exporter);
|
17
17
|
@EXPORT_OK = qw(ReadCSV ReadJSON);
|
18
18
|
|
@@ -38,13 +38,13 @@ sub ReadCSV($$;$$)
|
|
38
38
|
$raf = $file;
|
39
39
|
$file = 'CSV file';
|
40
40
|
} elsif (ref $file eq 'GLOB') {
|
41
|
-
$raf =
|
41
|
+
$raf = File::RandomAccess->new($file);
|
42
42
|
$file = 'CSV file';
|
43
43
|
} else {
|
44
44
|
open CSVFILE, $file or return "Error opening CSV file '${file}'";
|
45
45
|
binmode CSVFILE;
|
46
46
|
$openedFile = 1;
|
47
|
-
$raf =
|
47
|
+
$raf = File::RandomAccess->new(\*CSVFILE);
|
48
48
|
}
|
49
49
|
$delim = ',' unless defined $delim;
|
50
50
|
# set input record separator by first newline found in the file
|
@@ -253,13 +253,13 @@ sub ReadJSON($$;$$)
|
|
253
253
|
$raf = $file;
|
254
254
|
$file = 'JSON file';
|
255
255
|
} elsif (ref $file eq 'GLOB') {
|
256
|
-
$raf =
|
256
|
+
$raf = File::RandomAccess->new($file);
|
257
257
|
$file = 'JSON file';
|
258
258
|
} else {
|
259
259
|
open JSONFILE, $file or return "Error opening JSON file '${file}'";
|
260
260
|
binmode JSONFILE;
|
261
261
|
$openedFile = 1;
|
262
|
-
$raf =
|
262
|
+
$raf = File::RandomAccess->new(\*JSONFILE);
|
263
263
|
}
|
264
264
|
my $obj = ReadJSONObject($raf);
|
265
265
|
close JSONFILE if $openedFile;
|
@@ -14,7 +14,7 @@ use vars qw($VERSION);
|
|
14
14
|
use Image::ExifTool qw(:DataAccess :Utils);
|
15
15
|
use Image::ExifTool::Import;
|
16
16
|
|
17
|
-
$VERSION = '1.
|
17
|
+
$VERSION = '1.07';
|
18
18
|
|
19
19
|
sub ProcessJSON($$);
|
20
20
|
sub ProcessTag($$$$%);
|
@@ -120,7 +120,7 @@ sub ProcessJSON($$)
|
|
120
120
|
my $buff = substr(${$$dirInfo{DataPt}}, $$dirInfo{DirStart}, $$dirInfo{DirLen});
|
121
121
|
$dataPt = \$buff;
|
122
122
|
}
|
123
|
-
$raf =
|
123
|
+
$raf = File::RandomAccess->new($dataPt);
|
124
124
|
# extract as a block if requested
|
125
125
|
my $blockName = $$dirInfo{BlockInfo} ? $$dirInfo{BlockInfo}{Name} : '';
|
126
126
|
my $blockExtract = $et->Options('BlockExtract');
|