exiftool_vendored 12.57.0 → 12.58.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 +14 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/config_files/rotate_regions.config +1 -1
- data/bin/exiftool +25 -21
- data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
- data/bin/lib/Image/ExifTool/APE.pm +2 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +13 -14
- data/bin/lib/Image/ExifTool/Canon.pm +26 -6
- data/bin/lib/Image/ExifTool/DJI.pm +28 -2
- data/bin/lib/Image/ExifTool/Exif.pm +24 -5
- data/bin/lib/Image/ExifTool/FlashPix.pm +2 -2
- data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -0
- data/bin/lib/Image/ExifTool/JPEG.pm +14 -2
- data/bin/lib/Image/ExifTool/LNK.pm +5 -4
- data/bin/lib/Image/ExifTool/MPEG.pm +2 -2
- data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
- data/bin/lib/Image/ExifTool/Minolta.pm +6 -7
- data/bin/lib/Image/ExifTool/Nikon.pm +385 -110
- data/bin/lib/Image/ExifTool/Pentax.pm +8 -5
- data/bin/lib/Image/ExifTool/Photoshop.pm +3 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +5 -5
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
- data/bin/lib/Image/ExifTool/README +8 -0
- data/bin/lib/Image/ExifTool/RIFF.pm +3 -3
- data/bin/lib/Image/ExifTool/Rawzor.pm +2 -2
- data/bin/lib/Image/ExifTool/Sigma.pm +4 -4
- data/bin/lib/Image/ExifTool/Sony.pm +23 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4457 -4441
- data/bin/lib/Image/ExifTool/TagNames.pod +76 -12
- data/bin/lib/Image/ExifTool/Validate.pm +5 -5
- data/bin/lib/Image/ExifTool/WriteExif.pl +42 -0
- data/bin/lib/Image/ExifTool/Writer.pl +3 -1
- data/bin/lib/Image/ExifTool/XMP.pm +2 -2
- data/bin/lib/Image/ExifTool.pm +57 -12
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
|
@@ -65,6 +65,7 @@ sub RebuildMakerNotes($$$);
|
|
|
65
65
|
sub EncodeExifText($$);
|
|
66
66
|
sub ValidateIFD($;$);
|
|
67
67
|
sub ValidateImageData($$$;$);
|
|
68
|
+
sub AddImageDataMD5($$$);
|
|
68
69
|
sub ProcessTiffIFD($$$);
|
|
69
70
|
sub PrintParameter($$$);
|
|
70
71
|
sub GetOffList($$$$$);
|
|
@@ -573,6 +574,7 @@ my %opcodeInfo = (
|
|
|
573
574
|
],
|
|
574
575
|
Name => 'StripOffsets',
|
|
575
576
|
IsOffset => 1,
|
|
577
|
+
IsImageData => 1,
|
|
576
578
|
OffsetPair => 0x117, # point to associated byte counts
|
|
577
579
|
# A200 stores this information in the wrong byte order!!
|
|
578
580
|
ValueConv => '$val=join(" ",unpack("N*",pack("V*",split(" ",$val))));\$val',
|
|
@@ -582,6 +584,7 @@ my %opcodeInfo = (
|
|
|
582
584
|
Condition => '$$self{Compression} and $$self{Compression} eq "34892"', # DNG Lossy JPEG
|
|
583
585
|
Name => 'OtherImageStart',
|
|
584
586
|
IsOffset => 1,
|
|
587
|
+
IsImageData => 1,
|
|
585
588
|
OffsetPair => 0x117, # point to associated byte counts
|
|
586
589
|
DataTag => 'OtherImage',
|
|
587
590
|
},
|
|
@@ -594,6 +597,7 @@ my %opcodeInfo = (
|
|
|
594
597
|
],
|
|
595
598
|
Name => 'StripOffsets',
|
|
596
599
|
IsOffset => 1,
|
|
600
|
+
IsImageData => 1,
|
|
597
601
|
OffsetPair => 0x117, # point to associated byte counts
|
|
598
602
|
ValueConv => 'length($val) > 32 ? \$val : $val',
|
|
599
603
|
},
|
|
@@ -630,6 +634,7 @@ my %opcodeInfo = (
|
|
|
630
634
|
# JpgFromRawStart in various IFD's of DNG images except SubIFD2
|
|
631
635
|
Name => 'JpgFromRawStart',
|
|
632
636
|
IsOffset => 1,
|
|
637
|
+
IsImageData => 1,
|
|
633
638
|
OffsetPair => 0x117,
|
|
634
639
|
DataTag => 'JpgFromRaw',
|
|
635
640
|
Writable => 'int32u',
|
|
@@ -933,6 +938,7 @@ my %opcodeInfo = (
|
|
|
933
938
|
0x144 => {
|
|
934
939
|
Name => 'TileOffsets',
|
|
935
940
|
IsOffset => 1,
|
|
941
|
+
IsImageData => 1,
|
|
936
942
|
OffsetPair => 0x145,
|
|
937
943
|
ValueConv => 'length($val) > 32 ? \$val : $val',
|
|
938
944
|
},
|
|
@@ -1187,6 +1193,7 @@ my %opcodeInfo = (
|
|
|
1187
1193
|
Name => 'JpgFromRawStart',
|
|
1188
1194
|
Condition => '$$self{DIR_NAME} eq "SubIFD"',
|
|
1189
1195
|
IsOffset => 1,
|
|
1196
|
+
IsImageData => 1,
|
|
1190
1197
|
OffsetPair => 0x202,
|
|
1191
1198
|
DataTag => 'JpgFromRaw',
|
|
1192
1199
|
Writable => 'int32u',
|
|
@@ -1199,6 +1206,7 @@ my %opcodeInfo = (
|
|
|
1199
1206
|
Name => 'JpgFromRawStart',
|
|
1200
1207
|
Condition => '$$self{DIR_NAME} eq "IFD2"',
|
|
1201
1208
|
IsOffset => 1,
|
|
1209
|
+
IsImageData => 1,
|
|
1202
1210
|
OffsetPair => 0x202,
|
|
1203
1211
|
DataTag => 'JpgFromRaw',
|
|
1204
1212
|
Writable => 'int32u',
|
|
@@ -1210,6 +1218,7 @@ my %opcodeInfo = (
|
|
|
1210
1218
|
{
|
|
1211
1219
|
Name => 'OtherImageStart',
|
|
1212
1220
|
Condition => '$$self{DIR_NAME} eq "SubIFD1"',
|
|
1221
|
+
IsImageData => 1,
|
|
1213
1222
|
IsOffset => 1,
|
|
1214
1223
|
OffsetPair => 0x202,
|
|
1215
1224
|
DataTag => 'OtherImage',
|
|
@@ -1222,6 +1231,7 @@ my %opcodeInfo = (
|
|
|
1222
1231
|
Name => 'OtherImageStart',
|
|
1223
1232
|
Condition => '$$self{DIR_NAME} eq "SubIFD2"',
|
|
1224
1233
|
IsOffset => 1,
|
|
1234
|
+
IsImageData => 1,
|
|
1225
1235
|
OffsetPair => 0x202,
|
|
1226
1236
|
DataTag => 'OtherImage',
|
|
1227
1237
|
Writable => 'int32u',
|
|
@@ -1232,6 +1242,7 @@ my %opcodeInfo = (
|
|
|
1232
1242
|
{
|
|
1233
1243
|
Name => 'OtherImageStart',
|
|
1234
1244
|
IsOffset => 1,
|
|
1245
|
+
IsImageData => 1,
|
|
1235
1246
|
OffsetPair => 0x202,
|
|
1236
1247
|
},
|
|
1237
1248
|
],
|
|
@@ -2968,6 +2979,7 @@ my %opcodeInfo = (
|
|
|
2968
2979
|
0xbcc0 => { #13
|
|
2969
2980
|
Name => 'ImageOffset',
|
|
2970
2981
|
IsOffset => 1,
|
|
2982
|
+
IsImageData => 1,
|
|
2971
2983
|
OffsetPair => 0xbcc1, # point to associated byte count
|
|
2972
2984
|
},
|
|
2973
2985
|
0xbcc1 => { #13
|
|
@@ -2977,6 +2989,7 @@ my %opcodeInfo = (
|
|
|
2977
2989
|
0xbcc2 => { #13
|
|
2978
2990
|
Name => 'AlphaOffset',
|
|
2979
2991
|
IsOffset => 1,
|
|
2992
|
+
IsImageData => 1,
|
|
2980
2993
|
OffsetPair => 0xbcc3, # point to associated byte count
|
|
2981
2994
|
},
|
|
2982
2995
|
0xbcc3 => { #13
|
|
@@ -5885,10 +5898,14 @@ sub ProcessExif($$$)
|
|
|
5885
5898
|
my $saveFormat = $et->Options('SaveFormat');
|
|
5886
5899
|
my $htmlDump = $$et{HTML_DUMP};
|
|
5887
5900
|
my $success = 1;
|
|
5888
|
-
my ($tagKey, $dirSize, $makerAddr, $strEnc, %offsetInfo, $offName, $nextOffName);
|
|
5901
|
+
my ($tagKey, $dirSize, $makerAddr, $strEnc, %offsetInfo, $offName, $nextOffName, $doMD5);
|
|
5889
5902
|
my $inMakerNotes = $$tagTablePtr{GROUPS}{0} eq 'MakerNotes';
|
|
5890
5903
|
my $isExif = ($tagTablePtr eq \%Image::ExifTool::Exif::Main);
|
|
5891
5904
|
|
|
5905
|
+
# set flag to calculate image data MD5 if requested
|
|
5906
|
+
$doMD5 = 1 if $$et{ImageDataMD5} and (($$et{FILE_TYPE} eq 'TIFF' and not $base and not $inMakerNotes) or
|
|
5907
|
+
($$et{FILE_TYPE} eq 'RAF' and $dirName eq 'FujiIFD'));
|
|
5908
|
+
|
|
5892
5909
|
# set encoding to assume for strings
|
|
5893
5910
|
$strEnc = $et->Options('CharsetEXIF') if $$tagTablePtr{GROUPS}{0} eq 'EXIF';
|
|
5894
5911
|
|
|
@@ -6725,7 +6742,7 @@ sub ProcessExif($$$)
|
|
|
6725
6742
|
}
|
|
6726
6743
|
$val = join(' ', @vals);
|
|
6727
6744
|
}
|
|
6728
|
-
if ($validate) {
|
|
6745
|
+
if ($validate or $doMD5) {
|
|
6729
6746
|
if ($$tagInfo{OffsetPair}) {
|
|
6730
6747
|
$offsetInfo{$tagID} = [ $tagInfo, $val ];
|
|
6731
6748
|
} elsif ($saveForValidate{$tagID} and $isExif) {
|
|
@@ -6743,9 +6760,11 @@ sub ProcessExif($$$)
|
|
|
6743
6760
|
}
|
|
6744
6761
|
}
|
|
6745
6762
|
|
|
6746
|
-
|
|
6747
|
-
|
|
6748
|
-
|
|
6763
|
+
if (%offsetInfo) {
|
|
6764
|
+
# calculate image data MD5 if requested
|
|
6765
|
+
AddImageDataMD5($et, $dirInfo, \%offsetInfo) if $doMD5;
|
|
6766
|
+
# validate image data offsets for this IFD (note: modifies %offsetInfo)
|
|
6767
|
+
Image::ExifTool::Validate::ValidateOffsetInfo($et, \%offsetInfo, $dirName, $inMakerNotes) if $validate;
|
|
6749
6768
|
}
|
|
6750
6769
|
|
|
6751
6770
|
# scan for subsequent IFD's if specified
|
|
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
21
21
|
use Image::ExifTool::Exif;
|
|
22
22
|
use Image::ExifTool::ASF; # for GetGUID()
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.43';
|
|
25
25
|
|
|
26
26
|
sub ProcessFPX($$);
|
|
27
27
|
sub ProcessFPXR($$$);
|
|
@@ -2441,7 +2441,7 @@ sub ProcessFPX($$)
|
|
|
2441
2441
|
}
|
|
2442
2442
|
$$et{INDENT} = $oldIndent if $verbose;
|
|
2443
2443
|
# try to better identify the file type
|
|
2444
|
-
if ($$et{
|
|
2444
|
+
if ($$et{FileType} eq 'FPX') {
|
|
2445
2445
|
my $val = $$et{CompObjUserType} || $$et{Software};
|
|
2446
2446
|
if ($val) {
|
|
2447
2447
|
my %type = ( '^3ds Max' => 'MAX', Word => 'DOC', PowerPoint => 'PPT', Excel => 'XLS' );
|
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use vars qw($VERSION);
|
|
12
12
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
13
13
|
|
|
14
|
-
$VERSION = '1.
|
|
14
|
+
$VERSION = '1.35';
|
|
15
15
|
|
|
16
16
|
sub ProcessOcad($$$);
|
|
17
17
|
sub ProcessJPEG_HDR($$$);
|
|
@@ -134,9 +134,17 @@ sub ProcessJPEG_HDR($$$);
|
|
|
134
134
|
Condition => '$$self{HasIJPEG}"',
|
|
135
135
|
SubDirectory => { TagTable => 'Image::ExifTool::InfiRay::Factory' },
|
|
136
136
|
}, {
|
|
137
|
-
Name => 'ThermalParams', # (written by DJI FLIR models)
|
|
137
|
+
Name => 'ThermalParams', # (written by some DJI FLIR models)
|
|
138
138
|
Condition => '$$self{Make} eq "DJI" and $$valPt =~ /^\xaa\x55\x12\x06/',
|
|
139
139
|
SubDirectory => { TagTable => 'Image::ExifTool::DJI::ThermalParams' },
|
|
140
|
+
}, {
|
|
141
|
+
Name => 'ThermalParams2', # (written by M3T)
|
|
142
|
+
Condition => '$$self{Make} eq "DJI" and $$valPt =~ /^(.{32})?.{32}\x2c\x01\x20\0/s',
|
|
143
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::ThermalParams2' },
|
|
144
|
+
}, {
|
|
145
|
+
Name => 'ThermalParams3', # (written by M30T)
|
|
146
|
+
Condition => '$$self{Make} eq "DJI" and $$valPt =~ /^.{32}\xaa\x55\x38\0/s',
|
|
147
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::ThermalParams3' },
|
|
140
148
|
}, {
|
|
141
149
|
Name => 'PreviewImage', # (eg. Samsung S1060)
|
|
142
150
|
Notes => 'continued from APP3',
|
|
@@ -207,6 +215,10 @@ sub ProcessJPEG_HDR($$$);
|
|
|
207
215
|
Name => 'InfiRayOpMode',
|
|
208
216
|
Condition => '$$self{HasIJPEG}',
|
|
209
217
|
SubDirectory => { TagTable => 'Image::ExifTool::InfiRay::OpMode' },
|
|
218
|
+
}, {
|
|
219
|
+
Name => 'DJI-DBG',
|
|
220
|
+
Condition => '$$valPt =~ /^DJI-DBG\0/',
|
|
221
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::Info' },
|
|
210
222
|
}],
|
|
211
223
|
APP8 => [{
|
|
212
224
|
Name => 'SPIFF',
|
|
@@ -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.09';
|
|
19
19
|
|
|
20
20
|
sub ProcessItemID($$$);
|
|
21
21
|
sub ProcessLinkInfo($$$);
|
|
@@ -507,7 +507,7 @@ sub ProcessLinkInfo($$$)
|
|
|
507
507
|
if ($lif & 0x01) {
|
|
508
508
|
# read Volume ID
|
|
509
509
|
$off = Get32u($dataPt, 0x0c);
|
|
510
|
-
if ($off + 0x20 <= $dataLen) {
|
|
510
|
+
if ($off and $off + 0x20 <= $dataLen) {
|
|
511
511
|
# my $len = Get32u($dataPt, $off);
|
|
512
512
|
$et->HandleTag($tagTablePtr, 'DriveType', undef, %opts, Start=>$off+4);
|
|
513
513
|
$et->HandleTag($tagTablePtr, 'DriveSerialNumber', undef, %opts, Start=>$off+8);
|
|
@@ -545,6 +545,7 @@ sub ProcessLinkInfo($$$)
|
|
|
545
545
|
$off = Get32u($dataPt, 0x14);
|
|
546
546
|
if ($off and $off + 0x14 <= $dataLen) {
|
|
547
547
|
my $siz = Get32u($dataPt, $off);
|
|
548
|
+
return 0 if $off + $siz > $dataLen;
|
|
548
549
|
$pos = Get32u($dataPt, $off + 0x08);
|
|
549
550
|
if ($pos > 0x14 and $siz >= 0x18) {
|
|
550
551
|
$pos = Get32u($dataPt, $off + 0x14);
|
|
@@ -552,7 +553,7 @@ sub ProcessLinkInfo($$$)
|
|
|
552
553
|
} else {
|
|
553
554
|
undef $unicode;
|
|
554
555
|
}
|
|
555
|
-
$val = GetString($dataPt, $pos, $unicode);
|
|
556
|
+
$val = GetString($dataPt, $off + $pos, $unicode);
|
|
556
557
|
if (defined $val) {
|
|
557
558
|
$size = length $val;
|
|
558
559
|
$val = $et->Decode($val, 'UCS2') if $unicode;
|
|
@@ -567,7 +568,7 @@ sub ProcessLinkInfo($$$)
|
|
|
567
568
|
} else {
|
|
568
569
|
undef $unicode;
|
|
569
570
|
}
|
|
570
|
-
$val = GetString($dataPt, $pos, $unicode);
|
|
571
|
+
$val = GetString($dataPt, $off + $pos, $unicode);
|
|
571
572
|
if (defined $val) {
|
|
572
573
|
$size = length $val;
|
|
573
574
|
$val = $et->Decode($val, 'UCS2') if $unicode;
|
|
@@ -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.17';
|
|
22
22
|
|
|
23
23
|
%Image::ExifTool::MPEG::Audio = (
|
|
24
24
|
GROUPS => { 2 => 'Audio' },
|
|
@@ -599,7 +599,7 @@ sub ProcessMPEGVideo($$)
|
|
|
599
599
|
return 0;
|
|
600
600
|
}
|
|
601
601
|
# set file type if not done already
|
|
602
|
-
$et->SetFileType('MPEG') unless $$et{
|
|
602
|
+
$et->SetFileType('MPEG') unless $$et{FileType};
|
|
603
603
|
|
|
604
604
|
my $tagTablePtr = GetTagTable('Image::ExifTool::MPEG::Video');
|
|
605
605
|
ProcessFrameHeader($et, $tagTablePtr, $w1, $w2);
|
|
@@ -21,7 +21,7 @@ sub ProcessKodakPatch($$$);
|
|
|
21
21
|
sub WriteUnknownOrPreview($$$);
|
|
22
22
|
sub FixLeicaBase($$;$);
|
|
23
23
|
|
|
24
|
-
$VERSION = '2.
|
|
24
|
+
$VERSION = '2.13';
|
|
25
25
|
|
|
26
26
|
my $debug; # set to 1 to enable debugging code
|
|
27
27
|
|
|
@@ -96,7 +96,7 @@ my $debug; # set to 1 to enable debugging code
|
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
98
|
Name => 'MakerNoteDJI',
|
|
99
|
-
Condition => '$$self{Make} eq "DJI" and $$valPt !~
|
|
99
|
+
Condition => '$$self{Make} eq "DJI" and $$valPt !~ /^(...\@AMBA|DJI)/s',
|
|
100
100
|
SubDirectory => {
|
|
101
101
|
TagTable => 'Image::ExifTool::DJI::Main',
|
|
102
102
|
Start => '$valuePtr',
|
|
@@ -49,7 +49,7 @@ use vars qw($VERSION %minoltaLensTypes %minoltaTeleconverters %minoltaColorMode
|
|
|
49
49
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
50
50
|
use Image::ExifTool::Exif;
|
|
51
51
|
|
|
52
|
-
$VERSION = '2.
|
|
52
|
+
$VERSION = '2.88';
|
|
53
53
|
|
|
54
54
|
# Full list of product codes for Sony-compatible Minolta lenses
|
|
55
55
|
# (ref http://www.kb.sony.com/selfservice/documentLink.do?externalId=C1000570)
|
|
@@ -179,12 +179,9 @@ $VERSION = '2.87';
|
|
|
179
179
|
# ("New" and "II" appear in brackets if original version also has this LensType)
|
|
180
180
|
%minoltaLensTypes = (
|
|
181
181
|
Notes => q{
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
brackets if the original version of the lens has the same LensType. Special
|
|
186
|
-
logic is employed to identify the attached lens when a Metabones Canon EF
|
|
187
|
-
adapter is used.
|
|
182
|
+
"New" or "II" appear in brackets if the original version of the lens has the
|
|
183
|
+
same LensType. Special logic is employed to identify the attached lens when
|
|
184
|
+
a Metabones Canon EF adapter is used.
|
|
188
185
|
},
|
|
189
186
|
OTHER => sub {
|
|
190
187
|
my ($val, $inv) = @_;
|
|
@@ -898,6 +895,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
898
895
|
SeparateTable => 1,
|
|
899
896
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
900
897
|
PrintConv => \%minoltaLensTypes,
|
|
898
|
+
PrintInt => 1,
|
|
901
899
|
},
|
|
902
900
|
# 0x010e - WhiteBalance according to ref #10
|
|
903
901
|
0x0111 => { #20
|
|
@@ -2708,6 +2706,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2708
2706
|
SeparateTable => 1,
|
|
2709
2707
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
2710
2708
|
PrintConv => \%minoltaLensTypes,
|
|
2709
|
+
PrintInt => 1,
|
|
2711
2710
|
},
|
|
2712
2711
|
0x49c0 => {
|
|
2713
2712
|
Name => 'ExposureCompensation', # (in exposure bracketing, this is the actual value used)
|