exiftool_vendored 12.76.1 → 12.81.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 +105 -4
- data/bin/MANIFEST +29 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +4 -3
- data/bin/config_files/acdsee.config +37 -57
- data/bin/config_files/example.config +16 -2
- data/bin/exiftool +102 -31
- data/bin/lib/Image/ExifTool/Canon.pm +12 -9
- data/bin/lib/Image/ExifTool/CanonVRD.pm +8 -2
- data/bin/lib/Image/ExifTool/Exif.pm +52 -4
- data/bin/lib/Image/ExifTool/FujiFilm.pm +14 -5
- data/bin/lib/Image/ExifTool/GPS.pm +5 -3
- data/bin/lib/Image/ExifTool/GeoLang/cs.pm +978 -0
- data/bin/lib/Image/ExifTool/GeoLang/de.pm +1975 -0
- data/bin/lib/Image/ExifTool/GeoLang/en_ca.pm +44 -0
- data/bin/lib/Image/ExifTool/GeoLang/en_gb.pm +124 -0
- data/bin/lib/Image/ExifTool/GeoLang/es.pm +2921 -0
- data/bin/lib/Image/ExifTool/GeoLang/fi.pm +1116 -0
- data/bin/lib/Image/ExifTool/GeoLang/fr.pm +3171 -0
- data/bin/lib/Image/ExifTool/GeoLang/it.pm +2750 -0
- data/bin/lib/Image/ExifTool/GeoLang/ja.pm +10256 -0
- data/bin/lib/Image/ExifTool/GeoLang/ko.pm +4499 -0
- data/bin/lib/Image/ExifTool/GeoLang/nl.pm +1270 -0
- data/bin/lib/Image/ExifTool/GeoLang/pl.pm +3019 -0
- data/bin/lib/Image/ExifTool/GeoLang/ru.pm +18220 -0
- data/bin/lib/Image/ExifTool/GeoLang/sk.pm +441 -0
- data/bin/lib/Image/ExifTool/GeoLang/sv.pm +714 -0
- data/bin/lib/Image/ExifTool/GeoLang/tr.pm +452 -0
- data/bin/lib/Image/ExifTool/GeoLang/zh_cn.pm +2225 -0
- data/bin/lib/Image/ExifTool/GeoLang/zh_tw.pm +72 -0
- data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- data/bin/lib/Image/ExifTool/Geolocation.pm +935 -0
- data/bin/lib/Image/ExifTool/Geotag.pm +14 -2
- data/bin/lib/Image/ExifTool/HtmlDump.pm +2 -1
- data/bin/lib/Image/ExifTool/Import.pm +5 -2
- data/bin/lib/Image/ExifTool/JSON.pm +15 -10
- data/bin/lib/Image/ExifTool/M2TS.pm +32 -4
- data/bin/lib/Image/ExifTool/MWG.pm +1 -0
- data/bin/lib/Image/ExifTool/MacOS.pm +19 -4
- data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
- data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +331 -23
- data/bin/lib/Image/ExifTool/NikonCustom.pm +55 -1
- data/bin/lib/Image/ExifTool/Ogg.pm +3 -2
- data/bin/lib/Image/ExifTool/Olympus.pm +4 -1
- data/bin/lib/Image/ExifTool/OpenEXR.pm +37 -19
- data/bin/lib/Image/ExifTool/PDF.pm +5 -5
- data/bin/lib/Image/ExifTool/PNG.pm +3 -3
- data/bin/lib/Image/ExifTool/Pentax.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +195 -12
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +253 -237
- data/bin/lib/Image/ExifTool/README +6 -5
- data/bin/lib/Image/ExifTool/Sony.pm +1 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4871 -4752
- data/bin/lib/Image/ExifTool/TagNames.pod +722 -383
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +43 -9
- data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +65 -8
- data/bin/lib/Image/ExifTool/XMP.pm +18 -2
- data/bin/lib/Image/ExifTool/XMP2.pl +64 -0
- data/bin/lib/Image/ExifTool.pm +265 -49
- data/bin/lib/Image/ExifTool.pod +63 -25
- data/bin/perl-Image-ExifTool.spec +2 -2
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +22 -2
@@ -148,6 +148,7 @@ sub PrintInvGPSCoordinates($)
|
|
148
148
|
$v[2] = Image::ExifTool::ToFloat($v[2]) * ($below ? -1 : 1) if @v == 3;
|
149
149
|
return "@v";
|
150
150
|
}
|
151
|
+
return $val if $val =~ /^([-+]?\d+(\.\d*)?)\s+([-+]?\d+(\.\d*)?)$/; # already 2 floats?
|
151
152
|
return $val if $val =~ /^([-+]\d+(\.\d*)?){2,3}(CRS.*)?\/?$/; # already in ISO6709 format?
|
152
153
|
return undef;
|
153
154
|
}
|
@@ -356,6 +357,18 @@ sub SetVarInt($$)
|
|
356
357
|
return '';
|
357
358
|
}
|
358
359
|
|
360
|
+
#------------------------------------------------------------------------------
|
361
|
+
# Write Nextbase infi atom (ref PH)
|
362
|
+
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
363
|
+
# Returns: updated infi data
|
364
|
+
sub WriteNextbase($$$)
|
365
|
+
{
|
366
|
+
my ($et, $dirInfo, $tagTablePtr) = @_;
|
367
|
+
$et or return 1;
|
368
|
+
$$et{DEL_GROUP}{Nextbase} and ++$$et{CHANGED}, return '';
|
369
|
+
return ${$$dirInfo{DataPt}};
|
370
|
+
}
|
371
|
+
|
359
372
|
#------------------------------------------------------------------------------
|
360
373
|
# Write Meta Keys to add/delete entries as necessary ('mdta' handler) (ref PH)
|
361
374
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
@@ -772,6 +785,7 @@ sub WriteQuickTime($$$)
|
|
772
785
|
$et or return 1; # allow dummy access to autoload this package
|
773
786
|
my ($mdat, @mdat, @mdatEdit, $edit, $track, $outBuff, $co, $term, $delCount);
|
774
787
|
my (%langTags, $canCreate, $delGrp, %boxPos, %didDir, $writeLast, $err, $atomCount);
|
788
|
+
my ($tag, $lastTag, $errStr);
|
775
789
|
my $outfile = $$dirInfo{OutFile} || return 0;
|
776
790
|
my $raf = $$dirInfo{RAF}; # (will be null for lower-level atoms)
|
777
791
|
my $dataPt = $$dirInfo{DataPt}; # (will be null for top-level atoms)
|
@@ -844,7 +858,10 @@ sub WriteQuickTime($$$)
|
|
844
858
|
}
|
845
859
|
$atomCount = $$tagTablePtr{VARS}{ATOM_COUNT} if $$tagTablePtr{VARS};
|
846
860
|
|
861
|
+
$tag = $lastTag = '';
|
862
|
+
|
847
863
|
for (;;) { # loop through all atoms at this level
|
864
|
+
$lastTag = $tag if $$tagTablePtr{$tag}; # keep track of last known tag
|
848
865
|
if (defined $atomCount and --$atomCount < 0 and $dataPt) {
|
849
866
|
# stop processing now and just copy the rest of the atom
|
850
867
|
Write($outfile, substr($$dataPt, $raf->Tell())) or $rtnVal=$rtnErr, $err=1;
|
@@ -863,15 +880,15 @@ sub WriteQuickTime($$$)
|
|
863
880
|
last;
|
864
881
|
}
|
865
882
|
my $size = Get32u(\$hdr, 0) - 8; # (atom size without 8-byte header)
|
866
|
-
|
883
|
+
$tag = substr($hdr, 4, 4);
|
867
884
|
if ($size == -7) {
|
868
885
|
# read the extended size
|
869
|
-
$raf->Read($buff, 8) == 8 or $
|
886
|
+
$raf->Read($buff, 8) == 8 or $errStr = 'Truncated extended atom', last;
|
870
887
|
$hdr .= $buff;
|
871
888
|
my ($hi, $lo) = unpack('NN', $buff);
|
872
889
|
if ($hi or $lo > 0x7fffffff) {
|
873
890
|
if ($hi > 0x7fffffff) {
|
874
|
-
$
|
891
|
+
$errStr = 'Invalid atom size';
|
875
892
|
last;
|
876
893
|
} elsif (not $et->Options('LargeFileSupport')) {
|
877
894
|
$et->Error('End of processing at large atom (LargeFileSupport not enabled)');
|
@@ -879,7 +896,7 @@ sub WriteQuickTime($$$)
|
|
879
896
|
}
|
880
897
|
}
|
881
898
|
$size = $hi * 4294967296 + $lo - 16;
|
882
|
-
$size < 0 and $
|
899
|
+
$size < 0 and $errStr = 'Invalid extended atom size', last;
|
883
900
|
} elsif ($size == -8) {
|
884
901
|
if ($dataPt) {
|
885
902
|
last if $$dirInfo{DirName} eq 'CanonCNTH'; # (this is normal for Canon CNTH atom)
|
@@ -895,7 +912,7 @@ sub WriteQuickTime($$$)
|
|
895
912
|
}
|
896
913
|
last;
|
897
914
|
} elsif ($size < 0) {
|
898
|
-
$
|
915
|
+
$errStr = 'Invalid atom size';
|
899
916
|
last;
|
900
917
|
}
|
901
918
|
|
@@ -939,11 +956,11 @@ sub WriteQuickTime($$$)
|
|
939
956
|
$tag = PrintableTagID($tag,3);
|
940
957
|
if ($size > $maxReadLen and $got == 0x10000) {
|
941
958
|
my $mb = int($size / 0x100000 + 0.5);
|
942
|
-
$
|
959
|
+
$errStr = "'${tag}' atom is too large for rewriting ($mb MB)";
|
943
960
|
} else {
|
944
|
-
$
|
961
|
+
$errStr = "Truncated '${tag}' atom";
|
945
962
|
}
|
946
|
-
|
963
|
+
last;
|
947
964
|
}
|
948
965
|
}
|
949
966
|
# save the handler type for this track
|
@@ -1433,6 +1450,22 @@ sub WriteQuickTime($$$)
|
|
1433
1450
|
Write($outfile, $hdr, $buff) or $rtnVal=$rtnErr, $err=1, last;
|
1434
1451
|
}
|
1435
1452
|
}
|
1453
|
+
# ($errStr is set if there was an error that could possibly be due to an unknown trailer)
|
1454
|
+
if ($errStr) {
|
1455
|
+
if ($lastTag eq 'mdat' and not $dataPt and not $$tagTablePtr{$tag}) {
|
1456
|
+
my $nvTrail = $et->GetNewValueHash($Image::ExifTool::Extra{Trailer});
|
1457
|
+
if ($$et{DEL_GROUP}{Trailer} or ($nvTrail and not ($$nvTrail{Value} and $$nvTrail{Value}[0]))) {
|
1458
|
+
$errStr =~ s/ is too large.*//;
|
1459
|
+
$et->Warn('Deleted unknown trailer with ' . lcfirst($errStr));
|
1460
|
+
} else {
|
1461
|
+
$et->Warn('Unknown trailer with ' . lcfirst($errStr));
|
1462
|
+
$et->Error('Use "-trailer=" to delete unknown trailer');
|
1463
|
+
}
|
1464
|
+
} else {
|
1465
|
+
$et->Error($errStr);
|
1466
|
+
return $dataPt ? undef : 1;
|
1467
|
+
}
|
1468
|
+
}
|
1436
1469
|
$et->VPrint(0, " [deleting $delCount $dirName tag".($delCount==1 ? '' : 's')."]\n") if $delCount;
|
1437
1470
|
|
1438
1471
|
$createKeys &= ~0x01 unless $$addDirs{Keys}; # (Keys may have been written)
|
@@ -1619,7 +1652,8 @@ sub WriteQuickTime($$$)
|
|
1619
1652
|
if ($isEmpty) {
|
1620
1653
|
$et->VPrint(0,' Deleting ' . join('+', sort map { $emptyMeta{$_} } keys %boxPos)) if %boxPos;
|
1621
1654
|
$$outfile = '';
|
1622
|
-
|
1655
|
+
# (could report a file if editing nothing when it contained an empty Meta atom)
|
1656
|
+
# ++$$et{CHANGED};
|
1623
1657
|
}
|
1624
1658
|
if ($curPath eq 'MOV-Movie-Meta') {
|
1625
1659
|
delete $$addDirs{Keys}; # prevent creation of another Meta for Keys tags
|
@@ -236,7 +236,7 @@ sub CheckXMP($$$;$)
|
|
236
236
|
return 'Not a floating point number';
|
237
237
|
}
|
238
238
|
if ($format eq 'rational') {
|
239
|
-
$$valPtr = join('/', Image::ExifTool::Rationalize($$valPtr));
|
239
|
+
$$valPtr = join('/', Image::ExifTool::Rationalize($$valPtr,0xffffffff));
|
240
240
|
}
|
241
241
|
} elsif ($format eq 'integer') {
|
242
242
|
# make sure the value is integer
|
@@ -137,12 +137,12 @@ my %rawType = (
|
|
137
137
|
# 1) these names must either exist in %dirMap, or be translated in InitWriteDirs())
|
138
138
|
# 2) any dependencies must be added to %excludeGroups
|
139
139
|
my @delGroups = qw(
|
140
|
-
Adobe AFCP APP0 APP1 APP2 APP3 APP4 APP5 APP6 APP7 APP8 APP9 APP10 APP11
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
140
|
+
Adobe AFCP APP0 APP1 APP2 APP3 APP4 APP5 APP6 APP7 APP8 APP9 APP10 APP11 APP12
|
141
|
+
APP13 APP14 APP15 CanonVRD CIFF Ducky EXIF ExifIFD File FlashPix FotoStation
|
142
|
+
GlobParamIFD GPS ICC_Profile IFD0 IFD1 Insta360 InteropIFD IPTC ItemList JFIF
|
143
|
+
Jpeg2000 JUMBF Keys MakerNotes Meta MetaIFD Microsoft MIE MPF Nextbase NikonApp
|
144
|
+
NikonCapture PDF PDF-update PhotoMechanic Photoshop PNG PNG-pHYs PrintIM
|
145
|
+
QuickTime RMETA RSRC SubIFD Trailer UserData XML XML-* XMP XMP-*
|
146
146
|
);
|
147
147
|
# family 2 group names that we can delete
|
148
148
|
my @delGroup2 = qw(
|
@@ -227,7 +227,7 @@ my %allFam0 = (
|
|
227
227
|
|
228
228
|
my @writableMacOSTags = qw(
|
229
229
|
FileCreateDate MDItemFinderComment MDItemFSCreationDate MDItemFSLabel MDItemUserTags
|
230
|
-
XAttrQuarantine
|
230
|
+
XAttrQuarantine XAttrMDItemWhereFroms
|
231
231
|
);
|
232
232
|
|
233
233
|
# min/max values for integer formats
|
@@ -1296,6 +1296,11 @@ sub SetNewValuesFromFile($$;@)
|
|
1296
1296
|
FastScan => $$options{FastScan},
|
1297
1297
|
Filter => $$options{Filter},
|
1298
1298
|
FixBase => $$options{FixBase},
|
1299
|
+
Geolocation => $$options{Geolocation},
|
1300
|
+
GeolocAltNames => $$options{GeolocAltNames},
|
1301
|
+
GeolocFeature => $$options{GeolocFeature},
|
1302
|
+
GeolocMinPop => $$options{GeolocMinPop},
|
1303
|
+
GeolocMaxDist => $$options{GeolocMaxDist},
|
1299
1304
|
GlobalTimeShift => $$options{GlobalTimeShift},
|
1300
1305
|
HexTagIDs => $$options{HexTagIDs},
|
1301
1306
|
IgnoreMinorErrors=>$$options{IgnoreMinorErrors},
|
@@ -1332,6 +1337,11 @@ sub SetNewValuesFromFile($$;@)
|
|
1332
1337
|
XAttrTags => $$options{XAttrTags},
|
1333
1338
|
XMPAutoConv => $$options{XMPAutoConv},
|
1334
1339
|
);
|
1340
|
+
# reset Geolocation option if we aren't copying any geolocation tags
|
1341
|
+
if ($$options{Geolocation} and not grep /\bGeolocation/i, @setTags) {
|
1342
|
+
$self->VPrint(0, '(resetting unnecessary Geolocation option)');
|
1343
|
+
$$srcExifTool{OPTIONS}{Geolocation} = undef;
|
1344
|
+
}
|
1335
1345
|
$$srcExifTool{GLOBAL_TIME_OFFSET} = $$self{GLOBAL_TIME_OFFSET};
|
1336
1346
|
$$srcExifTool{ALT_EXIFTOOL} = $$self{ALT_EXIFTOOL};
|
1337
1347
|
foreach $tag (@setTags) {
|
@@ -2181,7 +2191,7 @@ sub SetSystemTags($$)
|
|
2181
2191
|
$result = $res if $res == 1 or not $result;
|
2182
2192
|
last;
|
2183
2193
|
} elsif ($tag ne 'FileCreateDate') {
|
2184
|
-
$self->WarnOnce('Can only set MDItem tags on
|
2194
|
+
$self->WarnOnce('Can only set MDItem tags on MacOS');
|
2185
2195
|
last;
|
2186
2196
|
}
|
2187
2197
|
}
|
@@ -3783,6 +3793,53 @@ sub GetWriteGroup1($$)
|
|
3783
3793
|
return $self->GetGroup($tagInfo, 1);
|
3784
3794
|
}
|
3785
3795
|
|
3796
|
+
#------------------------------------------------------------------------------
|
3797
|
+
# Get list of tags to write for Geolocate feature
|
3798
|
+
# Inputs: 0) ExifTool ref, 1) group name(s),
|
3799
|
+
# 2) 0=prefer writing City, 1=prefer writing GPS, undef=deleting tags
|
3800
|
+
# Returns: list of tags to write/delete
|
3801
|
+
sub GetGeolocateTags($$;$)
|
3802
|
+
{
|
3803
|
+
my ($self, $wantGroup, $writeGPS) = @_;
|
3804
|
+
my @grps = $wantGroup ? map lc, split(/:/, $wantGroup) : ();
|
3805
|
+
my %grps = map { $_ => $_ } @grps; # lookup for specified groups
|
3806
|
+
$grps{exif} and not $grps{gps} and $grps{gps} = 'gps', push(@grps, 'gps');
|
3807
|
+
my %tagGroups = (
|
3808
|
+
'xmp-iptcext' => [ qw(LocationShownCity LocationShownProvinceState LocationShownCountryCode
|
3809
|
+
LocationShownCountryName LocationShownGPSLatitude LocationShownGPSLongitude) ],
|
3810
|
+
'xmp-photoshop' => [ qw(City State Country) ],
|
3811
|
+
'xmp-iptccore' => [ 'CountryCode' ],
|
3812
|
+
'iptc' => [ qw(City Province-State Country-PrimaryLocationCode Country-PrimaryLocationName) ],
|
3813
|
+
'gps' => [ qw(GPSLatitude GPSLongitude GPSLatitudeRef GPSLongitudeRef) ],
|
3814
|
+
'xmp-exif' => [ qw(GPSLatitude GPSLongitude) ],
|
3815
|
+
'keys' => [ 'GPSCoordinates', 'LocationName' ],
|
3816
|
+
'itemlist' => [ 'GPSCoordinates' ],
|
3817
|
+
'userdata' => [ 'GPSCoordinates' ],
|
3818
|
+
# more general groups not in this lookup: XMP and QuickTime
|
3819
|
+
);
|
3820
|
+
my (@tags, $grp);
|
3821
|
+
# set specific City and GPS tags
|
3822
|
+
foreach $grp (@grps) {
|
3823
|
+
$tagGroups{$grp} and push @tags, map("$grp:$_", @{$tagGroups{$grp}});
|
3824
|
+
}
|
3825
|
+
# set default XMP City tags if necessary
|
3826
|
+
if (not $writeGPS and ($grps{xmp} or (not @tags and not $grps{quicktime}))) {
|
3827
|
+
push @tags, qw(XMP:City XMP:State XMP:CountryCode XMP:Country Keys:LocationName);
|
3828
|
+
}
|
3829
|
+
$writeGPS = 1 unless defined $writeGPS; # (delete both City and GPS)
|
3830
|
+
# set default QuickTime tag if necessary
|
3831
|
+
my $didQT = grep /Coordinates$/, @tags;
|
3832
|
+
if (($grps{quicktime} and not $didQT) or ($writeGPS and not @tags and not $grps{xmp})) {
|
3833
|
+
push @tags, 'QuickTime:GPSCoordinates';
|
3834
|
+
}
|
3835
|
+
# set default GPS tags if necessary
|
3836
|
+
if ($writeGPS) {
|
3837
|
+
push @tags, qw(XMP:GPSLatitude XMP:GPSLongitude) if $grps{xmp} and not $grps{'xmp-exif'};
|
3838
|
+
push @tags, qw(GPSLatitude GPSLongitude GPSLatitudeRef GPSLongitudeRef) if not $wantGroup;
|
3839
|
+
}
|
3840
|
+
return @tags;
|
3841
|
+
}
|
3842
|
+
|
3786
3843
|
#------------------------------------------------------------------------------
|
3787
3844
|
# Get new value hash for specified tagInfo/writeGroup
|
3788
3845
|
# Inputs: 0) ExifTool object reference, 1) reference to tag info hash
|
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
|
|
50
50
|
use Image::ExifTool::GPS;
|
51
51
|
require Exporter;
|
52
52
|
|
53
|
-
$VERSION = '3.
|
53
|
+
$VERSION = '3.64';
|
54
54
|
@ISA = qw(Exporter);
|
55
55
|
@EXPORT_OK = qw(EscapeXML UnescapeXML);
|
56
56
|
|
@@ -171,6 +171,7 @@ my %xmpNS = (
|
|
171
171
|
pmi => 'http://prismstandard.org/namespaces/pmi/2.2/',
|
172
172
|
prm => 'http://prismstandard.org/namespaces/prm/3.0/',
|
173
173
|
acdsee => 'http://ns.acdsee.com/iptc/1.0/',
|
174
|
+
'acdsee-rs'=> 'http://ns.acdsee.com/regions/',
|
174
175
|
digiKam => 'http://www.digikam.org/ns/1.0/',
|
175
176
|
swf => 'http://ns.adobe.com/swf/1.0/',
|
176
177
|
cell => 'http://developer.sonyericsson.com/cell/1.0/',
|
@@ -802,6 +803,10 @@ my %sRangeMask = (
|
|
802
803
|
Name => 'acdsee',
|
803
804
|
SubDirectory => { TagTable => 'Image::ExifTool::XMP::acdsee' },
|
804
805
|
},
|
806
|
+
'acdsee-rs' => {
|
807
|
+
Name => 'acdsee-rs',
|
808
|
+
SubDirectory => { TagTable => 'Image::ExifTool::XMP::ACDSeeRegions' },
|
809
|
+
},
|
805
810
|
digiKam => {
|
806
811
|
Name => 'digiKam',
|
807
812
|
SubDirectory => { TagTable => 'Image::ExifTool::XMP::digiKam' },
|
@@ -2554,7 +2559,17 @@ my %sPantryItem = (
|
|
2554
2559
|
return $val;
|
2555
2560
|
},
|
2556
2561
|
},
|
2557
|
-
ApproximateFocusDistance => {
|
2562
|
+
ApproximateFocusDistance => {
|
2563
|
+
Writable => 'rational',
|
2564
|
+
PrintConv => {
|
2565
|
+
4294967295 => 'infinity',
|
2566
|
+
OTHER => sub {
|
2567
|
+
my ($val, $inv) = @_;
|
2568
|
+
return $val eq 'infinity' ? 4294967295 : $val if $inv;
|
2569
|
+
return $val eq 4294967295 ? 'infinity' : $val;
|
2570
|
+
},
|
2571
|
+
},
|
2572
|
+
}, #PH (LR3)
|
2558
2573
|
# the following new in LR6 (ref forum6497)
|
2559
2574
|
IsMergedPanorama => { Writable => 'boolean' },
|
2560
2575
|
IsMergedHDR => { Writable => 'boolean' },
|
@@ -2572,6 +2587,7 @@ my %sPantryItem = (
|
|
2572
2587
|
EnhanceDenoiseAlreadyApplied => { Writable => 'boolean' }, #forum14760
|
2573
2588
|
EnhanceDenoiseVersion => { }, #forum14760 integer?
|
2574
2589
|
EnhanceDenoiseLumaAmount => { }, #forum14760 integer?
|
2590
|
+
# FujiRatingAlreadyApplied - boolean written by LR classic 13.2 (forum15815)
|
2575
2591
|
);
|
2576
2592
|
|
2577
2593
|
# IPTC Core namespace properties (Iptc4xmpCore) (ref 4)
|
@@ -224,6 +224,7 @@ my %sAppInfo = (
|
|
224
224
|
fileDataRate => { Writable => 'rational' },
|
225
225
|
genre => { },
|
226
226
|
good => { Writable => 'boolean' },
|
227
|
+
pick => { Writable => 'integer' }, #forum15815
|
227
228
|
instrument => { },
|
228
229
|
introTime => { Struct => \%sTime },
|
229
230
|
key => {
|
@@ -403,6 +404,18 @@ my %sLocationDetails = (
|
|
403
404
|
PrintConv => '$val =~ /^(inf|undef)$/ ? $val : "$val m"',
|
404
405
|
PrintConvInv => '$val=~s/\s*m$//;$val',
|
405
406
|
},
|
407
|
+
GPSAltitudeRef => {
|
408
|
+
Writable => 'integer',
|
409
|
+
PrintConv => {
|
410
|
+
OTHER => sub {
|
411
|
+
my ($val, $inv) = @_;
|
412
|
+
return undef unless $inv and $val =~ /^([-+0-9])/;
|
413
|
+
return($1 eq '-' ? 1 : 0);
|
414
|
+
},
|
415
|
+
0 => 'Above Sea Level',
|
416
|
+
1 => 'Below Sea Level',
|
417
|
+
},
|
418
|
+
},
|
406
419
|
);
|
407
420
|
my %sCVTermDetails = (
|
408
421
|
STRUCT_NAME => 'CVTermDetails',
|
@@ -1373,6 +1386,57 @@ my %sSubVersion = (
|
|
1373
1386
|
Snapshots => { List => 'Bag', Binary => 1 },
|
1374
1387
|
);
|
1375
1388
|
|
1389
|
+
# ACDSee region tags (ref BKW)
|
1390
|
+
my %sACDSeeDimensions = (
|
1391
|
+
STRUCT_NAME => 'ACDSeeDimensions',
|
1392
|
+
NAMESPACE => {'acdsee-stDim' => 'http://ns.acdsee.com/sType/Dimensions#'},
|
1393
|
+
'w' => { Writable => 'real' },
|
1394
|
+
'h' => { Writable => 'real' },
|
1395
|
+
'unit' => { },
|
1396
|
+
);
|
1397
|
+
my %sACDSeeArea = (
|
1398
|
+
STRUCT_NAME => 'ACDSeeArea',
|
1399
|
+
NAMESPACE => { 'acdsee-stArea' => 'http://ns.acdsee.com/sType/Area#' },
|
1400
|
+
'x' => { Writable => 'real' },
|
1401
|
+
'y' => { Writable => 'real' },
|
1402
|
+
w => { Writable => 'real' },
|
1403
|
+
h => { Writable => 'real' },
|
1404
|
+
);
|
1405
|
+
my %sACDSeeRegionStruct = (
|
1406
|
+
STRUCT_NAME => 'ACDSeeRegion',
|
1407
|
+
NAMESPACE => 'acdsee-rs',
|
1408
|
+
ALGArea => { Struct => \%sACDSeeArea },
|
1409
|
+
DLYArea => { Struct => \%sACDSeeArea },
|
1410
|
+
Name => { },
|
1411
|
+
NameAssignType => { },
|
1412
|
+
Type => { },
|
1413
|
+
);
|
1414
|
+
%Image::ExifTool::XMP::ACDSeeRegions = (
|
1415
|
+
GROUPS => { 0 => 'XMP', 1 => 'XMP-acdsee-rs', 2 => 'Image' },
|
1416
|
+
NAMESPACE => 'acdsee-rs',
|
1417
|
+
WRITABLE => 'string',
|
1418
|
+
AVOID => 1,
|
1419
|
+
Regions => {
|
1420
|
+
Name => 'RegionInfoACDSee',
|
1421
|
+
FlatName => 'ACDSee',
|
1422
|
+
# the "Struct" entry defines the structure fields
|
1423
|
+
Struct => {
|
1424
|
+
# optional structure name (used for warning messages only)
|
1425
|
+
STRUCT_NAME => 'ACDSeeRegionInfo',
|
1426
|
+
NAMESPACE => 'acdsee-rs',
|
1427
|
+
RegionList => {
|
1428
|
+
FlatName => 'Region',
|
1429
|
+
Struct => \%sACDSeeRegionStruct,
|
1430
|
+
List => 'Bag',
|
1431
|
+
},
|
1432
|
+
AppliedToDimensions => {
|
1433
|
+
FlatName => 'RegionAppliedToDimensions',
|
1434
|
+
Struct => \%sACDSeeDimensions,
|
1435
|
+
},
|
1436
|
+
},
|
1437
|
+
},
|
1438
|
+
);
|
1439
|
+
|
1376
1440
|
# Picture Licensing Universal System namespace properties (xmpPLUS)
|
1377
1441
|
%Image::ExifTool::XMP::xmpPLUS = (
|
1378
1442
|
%xmpTableDefaults,
|