exiftool_vendored 12.73.0 → 12.75.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 +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');
|