exiftool_vendored 12.56.0 → 12.57.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 +21 -2
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +74 -30
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -2
- data/bin/lib/Image/ExifTool/FlashPix.pm +4 -0
- data/bin/lib/Image/ExifTool/GPS.pm +7 -2
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +5 -5
- data/bin/lib/Image/ExifTool/MIE.pm +3 -3
- data/bin/lib/Image/ExifTool/Nikon.pm +665 -845
- data/bin/lib/Image/ExifTool/NikonCustom.pm +2 -2
- data/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +3 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +36 -5
- data/bin/lib/Image/ExifTool/QuickTime.pm +18 -2
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +2 -0
- data/bin/lib/Image/ExifTool/README +11 -2
- data/bin/lib/Image/ExifTool/Sigma.pm +2 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4654 -4628
- data/bin/lib/Image/ExifTool/TagNames.pod +194 -86
- data/bin/lib/Image/ExifTool/Writer.pl +36 -16
- data/bin/lib/Image/ExifTool.pm +38 -22
- data/bin/lib/Image/ExifTool.pod +4 -4
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
data/bin/lib/Image/ExifTool.pm
CHANGED
|
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
|
|
|
29
29
|
%jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
|
|
30
30
|
%static_vars);
|
|
31
31
|
|
|
32
|
-
$VERSION = '12.
|
|
32
|
+
$VERSION = '12.57';
|
|
33
33
|
$RELEASE = '';
|
|
34
34
|
@ISA = qw(Exporter);
|
|
35
35
|
%EXPORT_TAGS = (
|
|
@@ -2043,6 +2043,7 @@ sub new
|
|
|
2043
2043
|
$$self{DEL_GROUP} = { }; # lookup for groups to delete when writing
|
|
2044
2044
|
$$self{SAVE_COUNT} = 0; # count calls to SaveNewValues()
|
|
2045
2045
|
$$self{FILE_SEQUENCE} = 0; # sequence number for files when reading
|
|
2046
|
+
$$self{FILES_WRITTEN} = 0; # count of files successfully written
|
|
2046
2047
|
$$self{INDENT2} = ''; # indentation of verbose messages from SetNewValue
|
|
2047
2048
|
|
|
2048
2049
|
# initialize our new groups for writing
|
|
@@ -7988,7 +7989,7 @@ sub ProcessDirectory($$$;$)
|
|
|
7988
7989
|
# patch for bug in Windows phone 7.5 O/S that writes incorrect InteropIFD pointer
|
|
7989
7990
|
return 0 unless $dirName eq 'GPS' and $$self{PROCESSED}{$addr} eq 'InteropIFD';
|
|
7990
7991
|
}
|
|
7991
|
-
$$self{PROCESSED}{$addr} = $dirName;
|
|
7992
|
+
$$self{PROCESSED}{$addr} = $dirName unless $$tagTablePtr{VARS} and $$tagTablePtr{VARS}{ALLOW_REPROCESS};
|
|
7992
7993
|
}
|
|
7993
7994
|
my $oldOrder = GetByteOrder();
|
|
7994
7995
|
my @save = @$self{'INDENT','DIR_NAME','Compression','SubfileType'};
|
|
@@ -8749,13 +8750,16 @@ sub ProcessBinaryData($$$)
|
|
|
8749
8750
|
{
|
|
8750
8751
|
my ($self, $dirInfo, $tagTablePtr) = @_;
|
|
8751
8752
|
my $dataPt = $$dirInfo{DataPt};
|
|
8752
|
-
my $
|
|
8753
|
-
my $
|
|
8753
|
+
my $dataLen = length $$dataPt;
|
|
8754
|
+
my $dirStart = $$dirInfo{DirStart} || 0;
|
|
8755
|
+
my $maxLen = $dataLen - $dirStart;
|
|
8756
|
+
my $size = $$dirInfo{DirLen};
|
|
8754
8757
|
my $base = $$dirInfo{Base} || 0;
|
|
8755
8758
|
my $verbose = $$self{OPTIONS}{Verbose};
|
|
8756
8759
|
my $unknown = $$self{OPTIONS}{Unknown};
|
|
8757
8760
|
my $dataPos = $$dirInfo{DataPos} || 0;
|
|
8758
8761
|
|
|
8762
|
+
$size = $maxLen if not defined $size or $size > $maxLen;
|
|
8759
8763
|
# get default format ('int8u' unless specified)
|
|
8760
8764
|
my $defaultFormat = $$tagTablePtr{FORMAT} || 'int8u';
|
|
8761
8765
|
my $increment = $formatSize{$defaultFormat};
|
|
@@ -8797,6 +8801,7 @@ sub ProcessBinaryData($$$)
|
|
|
8797
8801
|
$tagInfo = $self->GetTagInfo($tagTablePtr, $index);
|
|
8798
8802
|
unless ($tagInfo) {
|
|
8799
8803
|
next unless defined $tagInfo;
|
|
8804
|
+
# $entry = offset of value relative to directory start (or end if negative)
|
|
8800
8805
|
my $entry = int($index) * $increment + $varSize;
|
|
8801
8806
|
if ($entry < 0) {
|
|
8802
8807
|
$entry += $size;
|
|
@@ -8805,7 +8810,7 @@ sub ProcessBinaryData($$$)
|
|
|
8805
8810
|
next if $entry >= $size;
|
|
8806
8811
|
my $more = $size - $entry;
|
|
8807
8812
|
$more = 128 if $more > 128;
|
|
8808
|
-
my $v = substr($$dataPt, $entry+$
|
|
8813
|
+
my $v = substr($$dataPt, $entry+$dirStart, $more);
|
|
8809
8814
|
$tagInfo = $self->GetTagInfo($tagTablePtr, $index, \$v);
|
|
8810
8815
|
next unless $tagInfo;
|
|
8811
8816
|
}
|
|
@@ -8838,7 +8843,7 @@ sub ProcessBinaryData($$$)
|
|
|
8838
8843
|
$count = $more;
|
|
8839
8844
|
} elsif ($format eq 'pstring') {
|
|
8840
8845
|
$format = 'string';
|
|
8841
|
-
$count = Get8u($dataPt, ($entry++)+$
|
|
8846
|
+
$count = Get8u($dataPt, ($entry++)+$dirStart);
|
|
8842
8847
|
--$more;
|
|
8843
8848
|
} elsif (not $formatSize{$format}) {
|
|
8844
8849
|
if ($format =~ /(.*)\[(.*)\]/) {
|
|
@@ -8867,17 +8872,17 @@ sub ProcessBinaryData($$$)
|
|
|
8867
8872
|
} elsif ($format =~ /^var_/) {
|
|
8868
8873
|
# handle variable-length string formats
|
|
8869
8874
|
$format = substr($format, 4);
|
|
8870
|
-
pos($$dataPt) = $entry + $
|
|
8875
|
+
pos($$dataPt) = $entry + $dirStart;
|
|
8871
8876
|
undef $count;
|
|
8872
8877
|
if ($format eq 'ustring') {
|
|
8873
|
-
$count = pos($$dataPt) - ($entry+$
|
|
8878
|
+
$count = pos($$dataPt) - ($entry+$dirStart) if $$dataPt =~ /\G(..)*?\0\0/sg;
|
|
8874
8879
|
$varSize -= 2; # ($count includes base size of 2 bytes)
|
|
8875
8880
|
} elsif ($format eq 'pstring') {
|
|
8876
|
-
$count = Get8u($dataPt, ($entry++)+$
|
|
8881
|
+
$count = Get8u($dataPt, ($entry++)+$dirStart);
|
|
8877
8882
|
--$more;
|
|
8878
8883
|
} elsif ($format eq 'pstr32' or $format eq 'ustr32') {
|
|
8879
8884
|
last if $more < 4;
|
|
8880
|
-
$count = Get32u($dataPt, $entry + $
|
|
8885
|
+
$count = Get32u($dataPt, $entry + $dirStart);
|
|
8881
8886
|
$count *= 2 if $format eq 'ustr32';
|
|
8882
8887
|
$entry += 4;
|
|
8883
8888
|
$more -= 4;
|
|
@@ -8885,22 +8890,22 @@ sub ProcessBinaryData($$$)
|
|
|
8885
8890
|
} elsif ($format eq 'int16u') {
|
|
8886
8891
|
# int16u size of binary data to follow
|
|
8887
8892
|
last if $more < 2;
|
|
8888
|
-
$count = Get16u($dataPt, $entry + $
|
|
8893
|
+
$count = Get16u($dataPt, $entry + $dirStart) + 2;
|
|
8889
8894
|
$varSize -= 2; # ($count includes size word)
|
|
8890
8895
|
$format = 'undef';
|
|
8891
8896
|
} elsif ($format eq 'ue7') {
|
|
8892
8897
|
require Image::ExifTool::BPG;
|
|
8893
|
-
($val, $count) = Image::ExifTool::BPG::Get_ue7($dataPt, $entry + $
|
|
8898
|
+
($val, $count) = Image::ExifTool::BPG::Get_ue7($dataPt, $entry + $dirStart);
|
|
8894
8899
|
last unless defined $val;
|
|
8895
8900
|
--$varSize; # ($count includes base size of 1 byte)
|
|
8896
8901
|
} elsif ($$dataPt =~ /\0/g) {
|
|
8897
|
-
$count = pos($$dataPt) - ($entry+$
|
|
8902
|
+
$count = pos($$dataPt) - ($entry+$dirStart);
|
|
8898
8903
|
--$varSize; # ($count includes base size of 1 byte)
|
|
8899
8904
|
}
|
|
8900
8905
|
$count = $more if not defined $count or $count > $more;
|
|
8901
8906
|
$varSize += $count; # shift subsequent indices
|
|
8902
8907
|
unless (defined $val) {
|
|
8903
|
-
$val = substr($$dataPt, $entry+$
|
|
8908
|
+
$val = substr($$dataPt, $entry+$dirStart, $count);
|
|
8904
8909
|
$val = $self->Decode($val, 'UCS2') if $format eq 'ustring' or $format eq 'ustr32';
|
|
8905
8910
|
$val =~ s/\0.*//s unless $format eq 'undef'; # truncate at null
|
|
8906
8911
|
}
|
|
@@ -8914,7 +8919,7 @@ sub ProcessBinaryData($$$)
|
|
|
8914
8919
|
# hook to allow format, etc to be set dynamically
|
|
8915
8920
|
if (defined $$tagInfo{Hook}) {
|
|
8916
8921
|
my $oldVarSize = $varSize;
|
|
8917
|
-
my $pos = $entry + $
|
|
8922
|
+
my $pos = $entry + $dirStart;
|
|
8918
8923
|
#### eval Hook ($format, $varSize, $size, $dataPt, $pos)
|
|
8919
8924
|
eval $$tagInfo{Hook};
|
|
8920
8925
|
# save variable size data if required for writing (in case changed by Hook)
|
|
@@ -8939,7 +8944,7 @@ sub ProcessBinaryData($$$)
|
|
|
8939
8944
|
next if $$tagInfo{LargeTag} and $$self{EXCL_TAG_LOOKUP}{lc $$tagInfo{Name}};
|
|
8940
8945
|
# read value now if necessary
|
|
8941
8946
|
unless (defined $val and not $$tagInfo{SubDirectory}) {
|
|
8942
|
-
$val = ReadValue($dataPt, $entry+$
|
|
8947
|
+
$val = ReadValue($dataPt, $entry+$dirStart, $format, $count, $more, \$rational);
|
|
8943
8948
|
next unless defined $val;
|
|
8944
8949
|
$mask = $$tagInfo{Mask};
|
|
8945
8950
|
$val = ($val & $mask) >> $$tagInfo{BitShift} if $mask;
|
|
@@ -8956,8 +8961,8 @@ sub ProcessBinaryData($$$)
|
|
|
8956
8961
|
Value => $val,
|
|
8957
8962
|
DataPt => $dataPt,
|
|
8958
8963
|
Size => $len,
|
|
8959
|
-
Start => $entry+$
|
|
8960
|
-
Addr => $entry+$
|
|
8964
|
+
Start => $entry+$dirStart,
|
|
8965
|
+
Addr => $entry+$dirStart+$base+$dataPos,
|
|
8961
8966
|
Format => $format,
|
|
8962
8967
|
Count => $count,
|
|
8963
8968
|
Extra => $mask ? sprintf(', mask 0x%.2x',$mask) : undef,
|
|
@@ -8983,16 +8988,27 @@ sub ProcessBinaryData($$$)
|
|
|
8983
8988
|
my $subdirBase = $base;
|
|
8984
8989
|
if (defined $$subdir{Base}) {
|
|
8985
8990
|
#### eval Base ($start,$base)
|
|
8986
|
-
my $start = $entry + $
|
|
8991
|
+
my $start = $entry + $dirStart + $dataPos;
|
|
8987
8992
|
$subdirBase = eval($$subdir{Base}) + $base;
|
|
8988
8993
|
}
|
|
8989
8994
|
my $start = $$subdir{Start} || 0;
|
|
8995
|
+
if ($start =~ /\$/) {
|
|
8996
|
+
# ignore directories with a zero offset (ie. missing Nikon ShotInfo entries)
|
|
8997
|
+
next unless $val;
|
|
8998
|
+
#### eval Start ($val, $dirStart)
|
|
8999
|
+
$start = eval($start);
|
|
9000
|
+
next if $start < $dirStart or $start > $dataLen;
|
|
9001
|
+
$len = $$subdir{DirLen};
|
|
9002
|
+
$len = $dataLen - $start unless $len and $len <= $dataLen - $start;
|
|
9003
|
+
} else {
|
|
9004
|
+
$start += $dirStart + $entry;
|
|
9005
|
+
}
|
|
8990
9006
|
my %subdirInfo = (
|
|
8991
9007
|
DataPt => $dataPt,
|
|
8992
9008
|
DataPos => $dataPos,
|
|
8993
|
-
DataLen =>
|
|
8994
|
-
DirStart => $
|
|
8995
|
-
DirLen => $len
|
|
9009
|
+
DataLen => $dataLen,
|
|
9010
|
+
DirStart => $start,
|
|
9011
|
+
DirLen => $len,
|
|
8996
9012
|
Base => $subdirBase,
|
|
8997
9013
|
);
|
|
8998
9014
|
delete $$self{NO_UNKNOWN};
|
data/bin/lib/Image/ExifTool.pod
CHANGED
|
@@ -2327,9 +2327,9 @@ CBOR, CIFF, CameraIFD, Canon, CanonCustom, CanonDR4, CanonRaw, CanonVRD,
|
|
|
2327
2327
|
Casio, Chapter#, Composite, DICOM, DJI, DNG, DV, DjVu, DjVu-Meta, Ducky,
|
|
2328
2328
|
EPPIM, EXE, EXIF, ExifIFD, ExifTool, FITS, FLAC, FLIR, File, Flash,
|
|
2329
2329
|
FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF, GIMP, GPS,
|
|
2330
|
-
GSpherical, GeoTiff, GlobParamIFD, GoPro, GraphConv, H264, HP, HTC,
|
|
2331
|
-
HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-equiv,
|
|
2332
|
-
ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view, ICC_Profile,
|
|
2330
|
+
GSpherical, Garmin, GeoTiff, GlobParamIFD, GoPro, GraphConv, H264, HP, HTC,
|
|
2331
|
+
HTML, HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-equiv,
|
|
2332
|
+
ICC-chrm, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view, ICC_Profile,
|
|
2333
2333
|
ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2, ID3v2_3, ID3v2_4, IFD0, IFD1,
|
|
2334
2334
|
IPTC, IPTC#, ISO, ITC, InfiRay, Insta360, InteropIFD, ItemList, JFIF, JFXX,
|
|
2335
2335
|
JPEG, JPEG-HDR, JPS, JSON, JUMBF, JVC, Jpeg2000, KDC_IFD, Keys, Kodak,
|
|
@@ -2349,7 +2349,7 @@ RMETA, RSRC, RTF, Radiance, Rawzor, Real, Real-CONT, Real-MDPR, Real-PROP,
|
|
|
2349
2349
|
Real-RA3, Real-RA4, Real-RA5, Real-RJMD, Reconyx, Red, Ricoh, SPIFF, SR2,
|
|
2350
2350
|
SR2DataIFD, SR2SubIFD, SRF#, SVG, Samsung, Sanyo, Scalado, Sigma, SigmaRaw,
|
|
2351
2351
|
Sony, SonyIDC, Stim, SubIFD, System, Theora, Torrent, Track#, UserData,
|
|
2352
|
-
VCalendar, VCard,
|
|
2352
|
+
VCalendar, VCard, VNote, Version0, Vorbis, WTV, XML, XMP, XMP-DICOM,
|
|
2353
2353
|
XMP-Device, XMP-GAudio, XMP-GCamera, XMP-GCreations, XMP-GDepth, XMP-GFocus,
|
|
2354
2354
|
XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP, XMP-MP1,
|
|
2355
2355
|
XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album, XMP-apple-fi, XMP-ast,
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: exiftool_vendored
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 12.
|
|
4
|
+
version: 12.57.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Matthew McEachen
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2023-02-
|
|
12
|
+
date: 2023-02-23 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: exiftool
|