exiftool_vendored 12.15.0 → 12.22.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 +96 -2
- data/bin/MANIFEST +1 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/config_files/example.config +1 -8
- data/bin/exiftool +104 -59
- data/bin/fmt_files/gpx.fmt +1 -1
- data/bin/fmt_files/gpx_wpt.fmt +1 -1
- data/bin/fmt_files/kml.fmt +1 -1
- data/bin/fmt_files/kml_track.fmt +1 -1
- data/bin/lib/Image/ExifTool.pm +74 -24
- data/bin/lib/Image/ExifTool.pod +34 -24
- data/bin/lib/Image/ExifTool/Apple.pm +3 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +24 -13
- data/bin/lib/Image/ExifTool/Canon.pm +26 -2
- data/bin/lib/Image/ExifTool/CanonCustom.pm +19 -1
- data/bin/lib/Image/ExifTool/DJI.pm +6 -6
- data/bin/lib/Image/ExifTool/DPX.pm +3 -3
- data/bin/lib/Image/ExifTool/Exif.pm +35 -16
- data/bin/lib/Image/ExifTool/FITS.pm +13 -2
- data/bin/lib/Image/ExifTool/FujiFilm.pm +2 -1
- data/bin/lib/Image/ExifTool/GPS.pm +24 -13
- data/bin/lib/Image/ExifTool/H264.pm +20 -5
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
- data/bin/lib/Image/ExifTool/M2TS.pm +40 -4
- data/bin/lib/Image/ExifTool/MIE.pm +2 -2
- data/bin/lib/Image/ExifTool/Microsoft.pm +296 -82
- data/bin/lib/Image/ExifTool/Nikon.pm +5 -5
- data/bin/lib/Image/ExifTool/NikonSettings.pm +16 -16
- data/bin/lib/Image/ExifTool/Olympus.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +58 -30
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +27 -8
- data/bin/lib/Image/ExifTool/README +5 -4
- data/bin/lib/Image/ExifTool/RIFF.pm +2 -2
- data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
- data/bin/lib/Image/ExifTool/Sony.pm +63 -29
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
- data/bin/lib/Image/ExifTool/TagLookup.pm +4032 -3981
- data/bin/lib/Image/ExifTool/TagNames.pod +261 -104
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +7 -5
- data/bin/lib/Image/ExifTool/WriteXMP.pl +9 -6
- data/bin/lib/Image/ExifTool/Writer.pl +49 -14
- data/bin/lib/Image/ExifTool/XMP.pm +31 -5
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +48 -6
|
@@ -548,7 +548,7 @@ sub WriteExif($$$)
|
|
|
548
548
|
my $mustRead;
|
|
549
549
|
if ($dirStart < 0 or $dirStart > $dataLen-2) {
|
|
550
550
|
$mustRead = 1;
|
|
551
|
-
} elsif ($dirLen
|
|
551
|
+
} elsif ($dirLen >= 2) {
|
|
552
552
|
my $len = 2 + 12 * Get16u($dataPt, $dirStart);
|
|
553
553
|
$mustRead = 1 if $dirStart + $len > $dataLen;
|
|
554
554
|
}
|
|
@@ -17,6 +17,7 @@ my %movMap = (
|
|
|
17
17
|
Keys => 'Movie', # MOV-Movie-Meta-Keys !! (hack due to different Meta location)
|
|
18
18
|
Meta => 'UserData',
|
|
19
19
|
XMP => 'UserData', # MOV-Movie-UserData-XMP
|
|
20
|
+
Microsoft => 'UserData', # MOV-Movie-UserData-Microsoft
|
|
20
21
|
UserData => 'Movie', # MOV-Movie-UserData
|
|
21
22
|
Movie => 'MOV',
|
|
22
23
|
GSpherical => 'SphericalVideoXML', # MOV-Movie-Track-SphericalVideoXML
|
|
@@ -30,6 +31,7 @@ my %mp4Map = (
|
|
|
30
31
|
Keys => 'Movie', # MOV-Movie-Meta-Keys !! (hack due to different Meta location)
|
|
31
32
|
Meta => 'UserData',
|
|
32
33
|
UserData => 'Movie', # MOV-Movie-UserData
|
|
34
|
+
Microsoft => 'UserData', # MOV-Movie-UserData-Microsoft
|
|
33
35
|
Movie => 'MOV',
|
|
34
36
|
XMP => 'MOV', # MOV-XMP
|
|
35
37
|
GSpherical => 'SphericalVideoXML', # MOV-Movie-Track-SphericalVideoXML
|
|
@@ -76,8 +78,8 @@ my %dirMap = (
|
|
|
76
78
|
# convert ExifTool Format to QuickTime type
|
|
77
79
|
my %qtFormat = (
|
|
78
80
|
'undef' => 0x00, string => 0x01,
|
|
79
|
-
int8s => 0x15, int16s => 0x15, int32s => 0x15,
|
|
80
|
-
int8u => 0x16, int16u => 0x16, int32u => 0x16,
|
|
81
|
+
int8s => 0x15, int16s => 0x15, int32s => 0x15, int64s => 0x15,
|
|
82
|
+
int8u => 0x16, int16u => 0x16, int32u => 0x16, int64u => 0x16,
|
|
81
83
|
float => 0x17, double => 0x18,
|
|
82
84
|
);
|
|
83
85
|
my $undLang = 0x55c4; # numeric code for default ('und') language
|
|
@@ -294,7 +296,7 @@ sub GetLangInfo($$)
|
|
|
294
296
|
sub CheckQTValue($$$)
|
|
295
297
|
{
|
|
296
298
|
my ($et, $tagInfo, $valPtr) = @_;
|
|
297
|
-
my $format = $$tagInfo{Format} || $$tagInfo{Table}{FORMAT};
|
|
299
|
+
my $format = $$tagInfo{Format} || $$tagInfo{Writable} || $$tagInfo{Table}{FORMAT};
|
|
298
300
|
return undef unless $format;
|
|
299
301
|
return Image::ExifTool::CheckValue($valPtr, $format, $$tagInfo{Count});
|
|
300
302
|
}
|
|
@@ -307,8 +309,8 @@ sub FormatQTValue($$;$$)
|
|
|
307
309
|
{
|
|
308
310
|
my ($et, $valPt, $format, $writable) = @_;
|
|
309
311
|
my $flags;
|
|
310
|
-
if ($format and $format ne 'string') {
|
|
311
|
-
$$valPt = WriteValue($$valPt, $format);
|
|
312
|
+
if ($format and $format ne 'string' or not $format and $writable and $writable ne 'string') {
|
|
313
|
+
$$valPt = WriteValue($$valPt, $format || $writable);
|
|
312
314
|
if ($writable and $qtFormat{$writable}) {
|
|
313
315
|
$flags = $qtFormat{$writable};
|
|
314
316
|
} else {
|
|
@@ -12,7 +12,7 @@ use vars qw(%specialStruct %dateTimeInfo %stdXlatNS);
|
|
|
12
12
|
|
|
13
13
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
14
14
|
|
|
15
|
-
sub CheckXMP(
|
|
15
|
+
sub CheckXMP($$$;$);
|
|
16
16
|
sub CaptureXMP($$$;$);
|
|
17
17
|
sub SetPropertyPath($$;$$$$);
|
|
18
18
|
|
|
@@ -165,12 +165,12 @@ sub FormatXMPDate($)
|
|
|
165
165
|
|
|
166
166
|
#------------------------------------------------------------------------------
|
|
167
167
|
# Check XMP values for validity and format accordingly
|
|
168
|
-
# Inputs: 0) ExifTool object ref, 1) tagInfo hash ref, 2) raw value ref
|
|
168
|
+
# Inputs: 0) ExifTool object ref, 1) tagInfo hash ref, 2) raw value ref, 3) conversion type
|
|
169
169
|
# Returns: error string or undef (and may change value) on success
|
|
170
170
|
# Note: copies structured information to avoid conflicts with calling code
|
|
171
|
-
sub CheckXMP(
|
|
171
|
+
sub CheckXMP($$$;$)
|
|
172
172
|
{
|
|
173
|
-
my ($et, $tagInfo, $valPtr) = @_;
|
|
173
|
+
my ($et, $tagInfo, $valPtr, $convType) = @_;
|
|
174
174
|
|
|
175
175
|
if ($$tagInfo{Struct}) {
|
|
176
176
|
require 'Image/ExifTool/XMPStruct.pl';
|
|
@@ -250,9 +250,12 @@ sub CheckXMP($$$)
|
|
|
250
250
|
return "Invalid date/time (use YYYY:mm:dd HH:MM:SS[.ss][+/-HH:MM|Z])" unless $newDate;
|
|
251
251
|
$$valPtr = $newDate;
|
|
252
252
|
} elsif ($format eq 'boolean') {
|
|
253
|
+
# (allow lower-case 'true' and 'false' if not setting PrintConv value)
|
|
253
254
|
if (not $$valPtr or $$valPtr =~ /false/i or $$valPtr =~ /^no$/i) {
|
|
254
|
-
$$valPtr
|
|
255
|
-
|
|
255
|
+
if (not $$valPtr or $$valPtr ne 'false' or not $convType or $convType eq 'PrintConv') {
|
|
256
|
+
$$valPtr = 'False';
|
|
257
|
+
}
|
|
258
|
+
} elsif ($$valPtr ne 'true' or not $convType or $convType eq 'PrintConv') {
|
|
256
259
|
$$valPtr = 'True';
|
|
257
260
|
}
|
|
258
261
|
} elsif ($format eq '1') {
|
|
@@ -135,10 +135,10 @@ my %rawType = (
|
|
|
135
135
|
my @delGroups = qw(
|
|
136
136
|
Adobe AFCP APP0 APP1 APP2 APP3 APP4 APP5 APP6 APP7 APP8 APP9 APP10 APP11
|
|
137
137
|
APP12 APP13 APP14 APP15 CanonVRD CIFF Ducky EXIF ExifIFD File FlashPix
|
|
138
|
-
FotoStation GlobParamIFD GPS ICC_Profile IFD0 IFD1 Insta360 InteropIFD
|
|
139
|
-
ItemList JFIF Jpeg2000 Keys MakerNotes Meta MetaIFD MIE
|
|
140
|
-
PDF-update PhotoMechanic Photoshop PNG PNG-pHYs
|
|
141
|
-
SubIFD Trailer UserData XML XML-* XMP XMP-*
|
|
138
|
+
FotoStation GlobParamIFD GPS ICC_Profile IFD0 IFD1 Insta360 InteropIFD
|
|
139
|
+
IPTC ItemList JFIF Jpeg2000 Keys MakerNotes Meta MetaIFD Microsoft MIE
|
|
140
|
+
MPF NikonCapture PDF PDF-update PhotoMechanic Photoshop PNG PNG-pHYs
|
|
141
|
+
PrintIM QuickTime RMETA RSRC SubIFD Trailer UserData XML XML-* XMP XMP-*
|
|
142
142
|
);
|
|
143
143
|
# family 2 group names that we can delete
|
|
144
144
|
my @delGroup2 = qw(
|
|
@@ -669,7 +669,7 @@ TAG: foreach $tagInfo (@matchingTags) {
|
|
|
669
669
|
next TAG unless $lcWant eq lc $grp[1];
|
|
670
670
|
}
|
|
671
671
|
}
|
|
672
|
-
$writeGroup or $writeGroup = ($$tagInfo{WriteGroup} || $grp[0]);
|
|
672
|
+
$writeGroup or $writeGroup = ($$tagInfo{WriteGroup} || $$tagInfo{Table}{WRITE_GROUP} || $grp[0]);
|
|
673
673
|
$priority = $hiPri; # highest priority since group was specified
|
|
674
674
|
}
|
|
675
675
|
++$foundMatch;
|
|
@@ -2639,12 +2639,14 @@ GWTInfo: foreach $tagInfo (@infoArray) {
|
|
|
2639
2639
|
|
|
2640
2640
|
#------------------------------------------------------------------------------
|
|
2641
2641
|
# Get list of all group names
|
|
2642
|
-
# Inputs: 0) Group family number
|
|
2642
|
+
# Inputs: 0) [optional] ExifTool ref, 1) Group family number
|
|
2643
2643
|
# Returns: List of group names (sorted alphabetically)
|
|
2644
|
-
sub GetAllGroups(
|
|
2644
|
+
sub GetAllGroups($;$)
|
|
2645
2645
|
{
|
|
2646
2646
|
local $_;
|
|
2647
2647
|
my $family = shift || 0;
|
|
2648
|
+
my $self;
|
|
2649
|
+
ref $family and $self = $family, $family = shift || 0;
|
|
2648
2650
|
|
|
2649
2651
|
$family == 3 and return('Doc#', 'Main');
|
|
2650
2652
|
$family == 4 and return('Copy#');
|
|
@@ -2663,9 +2665,23 @@ sub GetAllGroups($)
|
|
|
2663
2665
|
$allGroups{$grp} = 1 if ($grps = $$table{GROUPS}) and ($grp = $$grps{$family});
|
|
2664
2666
|
foreach $tag (TagTableKeys($table)) {
|
|
2665
2667
|
my @infoArray = GetTagInfoList($table, $tag);
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2668
|
+
if ($family == 7) {
|
|
2669
|
+
foreach $tagInfo (@infoArray) {
|
|
2670
|
+
my $id = $$tagInfo{TagID};
|
|
2671
|
+
if (not defined $id) {
|
|
2672
|
+
$id = ''; # (just to be safe)
|
|
2673
|
+
} elsif ($id =~ /^\d+$/) {
|
|
2674
|
+
$id = sprintf('0x%x', $id) if $self and $$self{OPTIONS}{HexTagIDs};
|
|
2675
|
+
} else {
|
|
2676
|
+
$id =~ s/([^-_A-Za-z0-9])/sprintf('%.2x',ord $1)/ge;
|
|
2677
|
+
}
|
|
2678
|
+
$allGroups{'ID-' . $id} = 1;
|
|
2679
|
+
}
|
|
2680
|
+
} else {
|
|
2681
|
+
foreach $tagInfo (@infoArray) {
|
|
2682
|
+
next unless ($grps = $$tagInfo{Groups}) and ($grp = $$grps{$family});
|
|
2683
|
+
$allGroups{$grp} = 1;
|
|
2684
|
+
}
|
|
2669
2685
|
}
|
|
2670
2686
|
}
|
|
2671
2687
|
}
|
|
@@ -2766,6 +2782,8 @@ sub ConvInv($$$$$;$$)
|
|
|
2766
2782
|
my ($self, $val, $tagInfo, $tag, $wgrp1, $convType, $wantGroup) = @_;
|
|
2767
2783
|
my ($err, $type);
|
|
2768
2784
|
|
|
2785
|
+
$convType or $convType = $$self{ConvType} || 'PrintConv';
|
|
2786
|
+
|
|
2769
2787
|
Conv: for (;;) {
|
|
2770
2788
|
if (not defined $type) {
|
|
2771
2789
|
# split value into list if necessary
|
|
@@ -2779,7 +2797,7 @@ Conv: for (;;) {
|
|
|
2779
2797
|
$val = @splitVal > 1 ? \@splitVal : @splitVal ? $splitVal[0] : '';
|
|
2780
2798
|
}
|
|
2781
2799
|
}
|
|
2782
|
-
$type = $convType
|
|
2800
|
+
$type = $convType;
|
|
2783
2801
|
} elsif ($type eq 'PrintConv') {
|
|
2784
2802
|
$type = 'ValueConv';
|
|
2785
2803
|
} else {
|
|
@@ -2802,11 +2820,11 @@ Conv: for (;;) {
|
|
|
2802
2820
|
if (ref $val eq 'ARRAY') {
|
|
2803
2821
|
# loop through array values
|
|
2804
2822
|
foreach $v (@$val) {
|
|
2805
|
-
$err2 = &$checkProc($self, $tagInfo, \$v);
|
|
2823
|
+
$err2 = &$checkProc($self, $tagInfo, \$v, $convType);
|
|
2806
2824
|
last if $err2;
|
|
2807
2825
|
}
|
|
2808
2826
|
} else {
|
|
2809
|
-
$err2 = &$checkProc($self, $tagInfo, \$val);
|
|
2827
|
+
$err2 = &$checkProc($self, $tagInfo, \$val, $convType);
|
|
2810
2828
|
}
|
|
2811
2829
|
}
|
|
2812
2830
|
}
|
|
@@ -4933,6 +4951,12 @@ sub Set64u(@)
|
|
|
4933
4951
|
$_[1] and substr(${$_[1]}, $_[2], length($val)) = $val;
|
|
4934
4952
|
return $val;
|
|
4935
4953
|
}
|
|
4954
|
+
sub Set64s(@)
|
|
4955
|
+
{
|
|
4956
|
+
my $val = shift;
|
|
4957
|
+
$val < 0 and $val += 4294967296 * 4294967296; # (temporary hack won't really work due to round-off errors)
|
|
4958
|
+
return Set64u($val, @_);
|
|
4959
|
+
}
|
|
4936
4960
|
sub SetRational64u(@) {
|
|
4937
4961
|
my ($numer,$denom) = Rationalize($_[0],0xffffffff);
|
|
4938
4962
|
my $val = Set32u($numer) . Set32u($denom);
|
|
@@ -4994,6 +5018,7 @@ my %writeValueProc = (
|
|
|
4994
5018
|
int16uRev => \&Set16uRev,
|
|
4995
5019
|
int32s => \&Set32s,
|
|
4996
5020
|
int32u => \&Set32u,
|
|
5021
|
+
int64s => \&Set64s,
|
|
4997
5022
|
int64u => \&Set64u,
|
|
4998
5023
|
rational32s => \&SetRational32s,
|
|
4999
5024
|
rational32u => \&SetRational32u,
|
|
@@ -6630,7 +6655,17 @@ sub SetFileTime($$;$$$$)
|
|
|
6630
6655
|
# open file by name if necessary
|
|
6631
6656
|
unless (ref $file) {
|
|
6632
6657
|
# (file will be automatically closed when *FH goes out of scope)
|
|
6633
|
-
$self->Open(\*FH, $file, '+<')
|
|
6658
|
+
unless ($self->Open(\*FH, $file, '+<')) {
|
|
6659
|
+
my $success;
|
|
6660
|
+
if (defined $atime or defined $mtime) {
|
|
6661
|
+
my ($a, $m, $c) = $self->GetFileTime($file);
|
|
6662
|
+
$atime = $a unless defined $atime;
|
|
6663
|
+
$mtime = $m unless defined $mtime;
|
|
6664
|
+
$success = eval { utime($atime, $mtime, $file) } if defined $atime and defined $mtime;
|
|
6665
|
+
}
|
|
6666
|
+
$self->Warn('Error opening file for update') unless $success;
|
|
6667
|
+
return $success;
|
|
6668
|
+
}
|
|
6634
6669
|
$saveFile = $file;
|
|
6635
6670
|
$file = \*FH;
|
|
6636
6671
|
}
|
|
@@ -50,13 +50,13 @@ use Image::ExifTool::Exif;
|
|
|
50
50
|
use Image::ExifTool::GPS;
|
|
51
51
|
require Exporter;
|
|
52
52
|
|
|
53
|
-
$VERSION = '3.
|
|
53
|
+
$VERSION = '3.39';
|
|
54
54
|
@ISA = qw(Exporter);
|
|
55
55
|
@EXPORT_OK = qw(EscapeXML UnescapeXML);
|
|
56
56
|
|
|
57
57
|
sub ProcessXMP($$;$);
|
|
58
58
|
sub WriteXMP($$;$);
|
|
59
|
-
sub CheckXMP(
|
|
59
|
+
sub CheckXMP($$$;$);
|
|
60
60
|
sub ParseXMPElement($$$;$$$$);
|
|
61
61
|
sub DecodeBase64($);
|
|
62
62
|
sub EncodeBase64($;$);
|
|
@@ -201,13 +201,13 @@ my %uri2ns = ( 'http://ns.exiftool.org/1.0/' => 'et' ); # (allow exiftool.org as
|
|
|
201
201
|
ValueConv => 'Image::ExifTool::GPS::ToDegrees($val, 1)',
|
|
202
202
|
ValueConvInv => 'Image::ExifTool::GPS::ToDMS($self, $val, 2, "N")',
|
|
203
203
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
|
|
204
|
-
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1)',
|
|
204
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lat")',
|
|
205
205
|
);
|
|
206
206
|
%longConv = (
|
|
207
207
|
ValueConv => 'Image::ExifTool::GPS::ToDegrees($val, 1)',
|
|
208
208
|
ValueConvInv => 'Image::ExifTool::GPS::ToDMS($self, $val, 2, "E")',
|
|
209
209
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
|
|
210
|
-
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1)',
|
|
210
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lon")',
|
|
211
211
|
);
|
|
212
212
|
%dateTimeInfo = (
|
|
213
213
|
# NOTE: Do NOT put "Groups" here because Groups hash must not be common!
|
|
@@ -467,6 +467,19 @@ my %sCorrectionMask = (
|
|
|
467
467
|
CenterValue => { Writable => 'real', List => 0 },
|
|
468
468
|
PerimeterValue=>{ Writable => 'real', List => 0 },
|
|
469
469
|
);
|
|
470
|
+
my %sCorrectionRangeMask = (
|
|
471
|
+
STRUCT_NAME => 'CorrectionRangeMask',
|
|
472
|
+
NAMESPACE => 'crs',
|
|
473
|
+
Version => { },
|
|
474
|
+
Type => { },
|
|
475
|
+
ColorAmount => { Writable => 'real' },
|
|
476
|
+
LumMin => { Writable => 'real' },
|
|
477
|
+
LumMax => { Writable => 'real' },
|
|
478
|
+
LumFeather => { Writable => 'real' },
|
|
479
|
+
DepthMin => { Writable => 'real' },
|
|
480
|
+
DepthMax => { Writable => 'real' },
|
|
481
|
+
DepthFeather=> { Writable => 'real' },
|
|
482
|
+
);
|
|
470
483
|
my %sCorrection = (
|
|
471
484
|
STRUCT_NAME => 'Correction',
|
|
472
485
|
NAMESPACE => 'crs',
|
|
@@ -491,6 +504,15 @@ my %sCorrection = (
|
|
|
491
504
|
LocalDefringe => { FlatName => 'Defringe', Writable => 'real', List => 0 },
|
|
492
505
|
LocalTemperature => { FlatName => 'Temperature',Writable => 'real', List => 0 },
|
|
493
506
|
LocalTint => { FlatName => 'Tint', Writable => 'real', List => 0 },
|
|
507
|
+
LocalHue => { FlatName => 'Hue', Writable => 'real', List => 0 },
|
|
508
|
+
LocalWhites2012 => { FlatName => 'Whites2012', Writable => 'real', List => 0 },
|
|
509
|
+
LocalBlacks2012 => { FlatName => 'Blacks2012', Writable => 'real', List => 0 },
|
|
510
|
+
LocalDehaze => { FlatName => 'Dehaze', Writable => 'real', List => 0 },
|
|
511
|
+
LocalTexture => { FlatName => 'Texture', Writable => 'real', List => 0 },
|
|
512
|
+
CorrectionRangeMask => {
|
|
513
|
+
FlatName => 'RangeMask',
|
|
514
|
+
Struct => \%sCorrectionRangeMask,
|
|
515
|
+
},
|
|
494
516
|
CorrectionMasks => {
|
|
495
517
|
FlatName => 'Mask',
|
|
496
518
|
Struct => \%sCorrectionMask,
|
|
@@ -2258,7 +2280,7 @@ my %sPantryItem = (
|
|
|
2258
2280
|
Priority => 0,
|
|
2259
2281
|
# prevent this from getting set from a LensID that has been converted
|
|
2260
2282
|
ValueConvInv => q{
|
|
2261
|
-
warn "Expected one or more integer values" if $val =~ /[
|
|
2283
|
+
warn "Expected one or more integer values" if $val =~ /[^-\d ]/;
|
|
2262
2284
|
return $val;
|
|
2263
2285
|
},
|
|
2264
2286
|
},
|
|
@@ -2311,6 +2333,7 @@ my %sPantryItem = (
|
|
|
2311
2333
|
Location => { Groups => { 2 => 'Location' } },
|
|
2312
2334
|
Scene => { Groups => { 2 => 'Other' }, List => 'Bag' },
|
|
2313
2335
|
SubjectCode => { Groups => { 2 => 'Other' }, List => 'Bag' },
|
|
2336
|
+
# Copyright - have seen this in a sample (Jan 2021), but I think it is non-standard
|
|
2314
2337
|
);
|
|
2315
2338
|
|
|
2316
2339
|
# Adobe Lightroom namespace properties (lr) (ref PH)
|
|
@@ -3306,6 +3329,9 @@ NoLoop:
|
|
|
3306
3329
|
} else {
|
|
3307
3330
|
$val = ConvertXMPDate($val, $new) if $new or $fmt eq 'date';
|
|
3308
3331
|
}
|
|
3332
|
+
if ($$et{XmpValidate} and $fmt and $fmt eq 'boolean') {
|
|
3333
|
+
$et->WarnOnce("Boolean value for XMP-$ns:$$tagInfo{Name} should be capitalized",1);
|
|
3334
|
+
}
|
|
3309
3335
|
# protect against large binary data in unknown tags
|
|
3310
3336
|
$$tagInfo{Binary} = 1 if $new and length($val) > 65536;
|
|
3311
3337
|
}
|
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.22.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: 2021-
|
|
12
|
+
date: 2021-03-18 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: exiftool
|
|
@@ -123,20 +123,48 @@ dependencies:
|
|
|
123
123
|
- - ">="
|
|
124
124
|
- !ruby/object:Gem::Version
|
|
125
125
|
version: '0'
|
|
126
|
+
- !ruby/object:Gem::Dependency
|
|
127
|
+
name: rubocop-minitest
|
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
|
129
|
+
requirements:
|
|
130
|
+
- - ">="
|
|
131
|
+
- !ruby/object:Gem::Version
|
|
132
|
+
version: '0'
|
|
133
|
+
type: :development
|
|
134
|
+
prerelease: false
|
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
136
|
+
requirements:
|
|
137
|
+
- - ">="
|
|
138
|
+
- !ruby/object:Gem::Version
|
|
139
|
+
version: '0'
|
|
140
|
+
- !ruby/object:Gem::Dependency
|
|
141
|
+
name: rubocop-rake
|
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
|
143
|
+
requirements:
|
|
144
|
+
- - ">="
|
|
145
|
+
- !ruby/object:Gem::Version
|
|
146
|
+
version: '0'
|
|
147
|
+
type: :development
|
|
148
|
+
prerelease: false
|
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
150
|
+
requirements:
|
|
151
|
+
- - ">="
|
|
152
|
+
- !ruby/object:Gem::Version
|
|
153
|
+
version: '0'
|
|
126
154
|
- !ruby/object:Gem::Dependency
|
|
127
155
|
name: simplecov
|
|
128
156
|
requirement: !ruby/object:Gem::Requirement
|
|
129
157
|
requirements:
|
|
130
|
-
- - "
|
|
158
|
+
- - ">="
|
|
131
159
|
- !ruby/object:Gem::Version
|
|
132
|
-
version: 0
|
|
160
|
+
version: '0'
|
|
133
161
|
type: :development
|
|
134
162
|
prerelease: false
|
|
135
163
|
version_requirements: !ruby/object:Gem::Requirement
|
|
136
164
|
requirements:
|
|
137
|
-
- - "
|
|
165
|
+
- - ">="
|
|
138
166
|
- !ruby/object:Gem::Version
|
|
139
|
-
version: 0
|
|
167
|
+
version: '0'
|
|
140
168
|
- !ruby/object:Gem::Dependency
|
|
141
169
|
name: simplecov-console
|
|
142
170
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -151,6 +179,20 @@ dependencies:
|
|
|
151
179
|
- - ">="
|
|
152
180
|
- !ruby/object:Gem::Version
|
|
153
181
|
version: '0'
|
|
182
|
+
- !ruby/object:Gem::Dependency
|
|
183
|
+
name: simplecov_json_formatter
|
|
184
|
+
requirement: !ruby/object:Gem::Requirement
|
|
185
|
+
requirements:
|
|
186
|
+
- - ">="
|
|
187
|
+
- !ruby/object:Gem::Version
|
|
188
|
+
version: '0'
|
|
189
|
+
type: :development
|
|
190
|
+
prerelease: false
|
|
191
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
192
|
+
requirements:
|
|
193
|
+
- - ">="
|
|
194
|
+
- !ruby/object:Gem::Version
|
|
195
|
+
version: '0'
|
|
154
196
|
- !ruby/object:Gem::Dependency
|
|
155
197
|
name: yard
|
|
156
198
|
requirement: !ruby/object:Gem::Requirement
|