exiftool-vendored.exe 12.78.0 → 12.82.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.
- package/bin/exiftool_files/Changes +80 -3
- package/bin/exiftool_files/README +3 -2
- package/bin/exiftool_files/config_files/acdsee.config +37 -57
- package/bin/exiftool_files/config_files/example.config +6 -0
- package/bin/exiftool_files/exiftool.pl +70 -26
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +44 -31
- package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +21 -5
- package/bin/exiftool_files/lib/Image/ExifTool/GM.pm +543 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/cs.pm +978 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/de.pm +1975 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/en_ca.pm +44 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/en_gb.pm +124 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/es.pm +2921 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/fi.pm +1116 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/fr.pm +3171 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/it.pm +2750 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/ja.pm +10256 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/ko.pm +4499 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/nl.pm +1270 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/pl.pm +3019 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/ru.pm +18220 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/sk.pm +441 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/sv.pm +714 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/tr.pm +452 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/zh_cn.pm +2225 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/zh_tw.pm +72 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.pm +867 -146
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +13 -1
- package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +7 -2
- package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +32 -4
- package/bin/exiftool_files/lib/Image/ExifTool/MakerNotes.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Microsoft.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +331 -22
- package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +55 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/OpenEXR.pm +37 -19
- package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +40 -24
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +61 -30
- package/bin/exiftool_files/lib/Image/ExifTool/README +8 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +4820 -4750
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +1000 -615
- package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +31 -8
- package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +58 -2
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +20 -3
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +64 -0
- package/bin/exiftool_files/lib/Image/ExifTool.pm +210 -97
- package/bin/exiftool_files/lib/Image/ExifTool.pod +44 -18
- package/package.json +3 -3
|
@@ -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
|
}
|
|
@@ -784,6 +785,7 @@ sub WriteQuickTime($$$)
|
|
|
784
785
|
$et or return 1; # allow dummy access to autoload this package
|
|
785
786
|
my ($mdat, @mdat, @mdatEdit, $edit, $track, $outBuff, $co, $term, $delCount);
|
|
786
787
|
my (%langTags, $canCreate, $delGrp, %boxPos, %didDir, $writeLast, $err, $atomCount);
|
|
788
|
+
my ($tag, $lastTag, $errStr);
|
|
787
789
|
my $outfile = $$dirInfo{OutFile} || return 0;
|
|
788
790
|
my $raf = $$dirInfo{RAF}; # (will be null for lower-level atoms)
|
|
789
791
|
my $dataPt = $$dirInfo{DataPt}; # (will be null for top-level atoms)
|
|
@@ -856,7 +858,10 @@ sub WriteQuickTime($$$)
|
|
|
856
858
|
}
|
|
857
859
|
$atomCount = $$tagTablePtr{VARS}{ATOM_COUNT} if $$tagTablePtr{VARS};
|
|
858
860
|
|
|
861
|
+
$tag = $lastTag = '';
|
|
862
|
+
|
|
859
863
|
for (;;) { # loop through all atoms at this level
|
|
864
|
+
$lastTag = $tag if $$tagTablePtr{$tag}; # keep track of last known tag
|
|
860
865
|
if (defined $atomCount and --$atomCount < 0 and $dataPt) {
|
|
861
866
|
# stop processing now and just copy the rest of the atom
|
|
862
867
|
Write($outfile, substr($$dataPt, $raf->Tell())) or $rtnVal=$rtnErr, $err=1;
|
|
@@ -875,15 +880,15 @@ sub WriteQuickTime($$$)
|
|
|
875
880
|
last;
|
|
876
881
|
}
|
|
877
882
|
my $size = Get32u(\$hdr, 0) - 8; # (atom size without 8-byte header)
|
|
878
|
-
|
|
883
|
+
$tag = substr($hdr, 4, 4);
|
|
879
884
|
if ($size == -7) {
|
|
880
885
|
# read the extended size
|
|
881
|
-
$raf->Read($buff, 8) == 8 or $
|
|
886
|
+
$raf->Read($buff, 8) == 8 or $errStr = 'Truncated extended atom', last;
|
|
882
887
|
$hdr .= $buff;
|
|
883
888
|
my ($hi, $lo) = unpack('NN', $buff);
|
|
884
889
|
if ($hi or $lo > 0x7fffffff) {
|
|
885
890
|
if ($hi > 0x7fffffff) {
|
|
886
|
-
$
|
|
891
|
+
$errStr = 'Invalid atom size';
|
|
887
892
|
last;
|
|
888
893
|
} elsif (not $et->Options('LargeFileSupport')) {
|
|
889
894
|
$et->Error('End of processing at large atom (LargeFileSupport not enabled)');
|
|
@@ -891,7 +896,7 @@ sub WriteQuickTime($$$)
|
|
|
891
896
|
}
|
|
892
897
|
}
|
|
893
898
|
$size = $hi * 4294967296 + $lo - 16;
|
|
894
|
-
$size < 0 and $
|
|
899
|
+
$size < 0 and $errStr = 'Invalid extended atom size', last;
|
|
895
900
|
} elsif ($size == -8) {
|
|
896
901
|
if ($dataPt) {
|
|
897
902
|
last if $$dirInfo{DirName} eq 'CanonCNTH'; # (this is normal for Canon CNTH atom)
|
|
@@ -907,7 +912,7 @@ sub WriteQuickTime($$$)
|
|
|
907
912
|
}
|
|
908
913
|
last;
|
|
909
914
|
} elsif ($size < 0) {
|
|
910
|
-
$
|
|
915
|
+
$errStr = 'Invalid atom size';
|
|
911
916
|
last;
|
|
912
917
|
}
|
|
913
918
|
|
|
@@ -951,11 +956,11 @@ sub WriteQuickTime($$$)
|
|
|
951
956
|
$tag = PrintableTagID($tag,3);
|
|
952
957
|
if ($size > $maxReadLen and $got == 0x10000) {
|
|
953
958
|
my $mb = int($size / 0x100000 + 0.5);
|
|
954
|
-
$
|
|
959
|
+
$errStr = "'${tag}' atom is too large for rewriting ($mb MB)";
|
|
955
960
|
} else {
|
|
956
|
-
$
|
|
961
|
+
$errStr = "Truncated '${tag}' atom";
|
|
957
962
|
}
|
|
958
|
-
|
|
963
|
+
last;
|
|
959
964
|
}
|
|
960
965
|
}
|
|
961
966
|
# save the handler type for this track
|
|
@@ -1445,6 +1450,24 @@ sub WriteQuickTime($$$)
|
|
|
1445
1450
|
Write($outfile, $hdr, $buff) or $rtnVal=$rtnErr, $err=1, last;
|
|
1446
1451
|
}
|
|
1447
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' or $lastTag eq 'moov') and not $dataPt and (not $$tagTablePtr{$tag} or
|
|
1456
|
+
ref $$tagTablePtr{$tag} eq 'HASH' and $$tagTablePtr{$tag}{Unknown}))
|
|
1457
|
+
{
|
|
1458
|
+
my $nvTrail = $et->GetNewValueHash($Image::ExifTool::Extra{Trailer});
|
|
1459
|
+
if ($$et{DEL_GROUP}{Trailer} or ($nvTrail and not ($$nvTrail{Value} and $$nvTrail{Value}[0]))) {
|
|
1460
|
+
$errStr =~ s/ is too large.*//;
|
|
1461
|
+
$et->Warn('Deleted unknown trailer with ' . lcfirst($errStr));
|
|
1462
|
+
} else {
|
|
1463
|
+
$et->Warn('Unknown trailer with ' . lcfirst($errStr));
|
|
1464
|
+
$et->Error('Use "-trailer=" to delete unknown trailer');
|
|
1465
|
+
}
|
|
1466
|
+
} else {
|
|
1467
|
+
$et->Error($errStr);
|
|
1468
|
+
return $dataPt ? undef : 1;
|
|
1469
|
+
}
|
|
1470
|
+
}
|
|
1448
1471
|
$et->VPrint(0, " [deleting $delCount $dirName tag".($delCount==1 ? '' : 's')."]\n") if $delCount;
|
|
1449
1472
|
|
|
1450
1473
|
$createKeys &= ~0x01 unless $$addDirs{Keys}; # (Keys may have been written)
|
|
@@ -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
|
|
@@ -1297,6 +1297,10 @@ sub SetNewValuesFromFile($$;@)
|
|
|
1297
1297
|
Filter => $$options{Filter},
|
|
1298
1298
|
FixBase => $$options{FixBase},
|
|
1299
1299
|
Geolocation => $$options{Geolocation},
|
|
1300
|
+
GeolocAltNames => $$options{GeolocAltNames},
|
|
1301
|
+
GeolocFeature => $$options{GeolocFeature},
|
|
1302
|
+
GeolocMinPop => $$options{GeolocMinPop},
|
|
1303
|
+
GeolocMaxDist => $$options{GeolocMaxDist},
|
|
1300
1304
|
GlobalTimeShift => $$options{GlobalTimeShift},
|
|
1301
1305
|
HexTagIDs => $$options{HexTagIDs},
|
|
1302
1306
|
IgnoreMinorErrors=>$$options{IgnoreMinorErrors},
|
|
@@ -1333,6 +1337,11 @@ sub SetNewValuesFromFile($$;@)
|
|
|
1333
1337
|
XAttrTags => $$options{XAttrTags},
|
|
1334
1338
|
XMPAutoConv => $$options{XMPAutoConv},
|
|
1335
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
|
+
}
|
|
1336
1345
|
$$srcExifTool{GLOBAL_TIME_OFFSET} = $$self{GLOBAL_TIME_OFFSET};
|
|
1337
1346
|
$$srcExifTool{ALT_EXIFTOOL} = $$self{ALT_EXIFTOOL};
|
|
1338
1347
|
foreach $tag (@setTags) {
|
|
@@ -3158,8 +3167,8 @@ sub PushValue($$$;$)
|
|
|
3158
3167
|
# Inputs: 0) ExifTool object ref, 1) string with embedded tag names,
|
|
3159
3168
|
# 2) reference to list of found tags or undef to use FOUND_TAGS, 3) Options:
|
|
3160
3169
|
# undef - set missing tags to ''
|
|
3161
|
-
# 'Error' - issue minor error on missing tag (and return undef)
|
|
3162
|
-
# 'Warn' - issue minor warning on missing tag (and return undef)
|
|
3170
|
+
# 'Error' - issue minor error on missing tag (and return undef if error sent)
|
|
3171
|
+
# 'Warn' - issue minor warning on missing tag (and return undef if warning sent)
|
|
3163
3172
|
# 'Silent' - just return undef on missing tag (no errors/warnings)
|
|
3164
3173
|
# Hash ref - defined to interpolate as variables in string instead of values
|
|
3165
3174
|
# --> receives tag/value pairs for interpolation of the variables
|
|
@@ -3784,6 +3793,53 @@ sub GetWriteGroup1($$)
|
|
|
3784
3793
|
return $self->GetGroup($tagInfo, 1);
|
|
3785
3794
|
}
|
|
3786
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
|
+
|
|
3787
3843
|
#------------------------------------------------------------------------------
|
|
3788
3844
|
# Get new value hash for specified tagInfo/writeGroup
|
|
3789
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.65';
|
|
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/',
|
|
@@ -282,11 +283,12 @@ my %recognizedAttrs = (
|
|
|
282
283
|
# NOTE: this lookup is duplicated in TagLookup.pm!!
|
|
283
284
|
%specialStruct = (
|
|
284
285
|
STRUCT_NAME => 1, # [optional] name of structure
|
|
285
|
-
NAMESPACE => 1, # [mandatory] namespace prefix used for fields of this structure
|
|
286
|
+
NAMESPACE => 1, # [mandatory for XMP] namespace prefix used for fields of this structure
|
|
286
287
|
NOTES => 1, # [optional] notes for documentation about this structure
|
|
287
288
|
TYPE => 1, # [optional] rdf:type resource for struct (if used, the StructType flag
|
|
288
289
|
# will be set automatically for all derived flattened tags when writing)
|
|
289
290
|
GROUPS => 1, # [optional] specifies family group 2 name for the structure
|
|
291
|
+
SORT_ORDER => 1, # [optional] order for sorting fields in documentation
|
|
290
292
|
);
|
|
291
293
|
# XMP structures (each structure is similar to a tag table so we can
|
|
292
294
|
# recurse through them in SetPropertyPath() as if they were tag tables)
|
|
@@ -802,6 +804,10 @@ my %sRangeMask = (
|
|
|
802
804
|
Name => 'acdsee',
|
|
803
805
|
SubDirectory => { TagTable => 'Image::ExifTool::XMP::acdsee' },
|
|
804
806
|
},
|
|
807
|
+
'acdsee-rs' => {
|
|
808
|
+
Name => 'acdsee-rs',
|
|
809
|
+
SubDirectory => { TagTable => 'Image::ExifTool::XMP::ACDSeeRegions' },
|
|
810
|
+
},
|
|
805
811
|
digiKam => {
|
|
806
812
|
Name => 'digiKam',
|
|
807
813
|
SubDirectory => { TagTable => 'Image::ExifTool::XMP::digiKam' },
|
|
@@ -2554,7 +2560,17 @@ my %sPantryItem = (
|
|
|
2554
2560
|
return $val;
|
|
2555
2561
|
},
|
|
2556
2562
|
},
|
|
2557
|
-
ApproximateFocusDistance => {
|
|
2563
|
+
ApproximateFocusDistance => {
|
|
2564
|
+
Writable => 'rational',
|
|
2565
|
+
PrintConv => {
|
|
2566
|
+
4294967295 => 'infinity',
|
|
2567
|
+
OTHER => sub {
|
|
2568
|
+
my ($val, $inv) = @_;
|
|
2569
|
+
return $val eq 'infinity' ? 4294967295 : $val if $inv;
|
|
2570
|
+
return $val eq 4294967295 ? 'infinity' : $val;
|
|
2571
|
+
},
|
|
2572
|
+
},
|
|
2573
|
+
}, #PH (LR3)
|
|
2558
2574
|
# the following new in LR6 (ref forum6497)
|
|
2559
2575
|
IsMergedPanorama => { Writable => 'boolean' },
|
|
2560
2576
|
IsMergedHDR => { Writable => 'boolean' },
|
|
@@ -2572,6 +2588,7 @@ my %sPantryItem = (
|
|
|
2572
2588
|
EnhanceDenoiseAlreadyApplied => { Writable => 'boolean' }, #forum14760
|
|
2573
2589
|
EnhanceDenoiseVersion => { }, #forum14760 integer?
|
|
2574
2590
|
EnhanceDenoiseLumaAmount => { }, #forum14760 integer?
|
|
2591
|
+
# FujiRatingAlreadyApplied - boolean written by LR classic 13.2 (forum15815)
|
|
2575
2592
|
);
|
|
2576
2593
|
|
|
2577
2594
|
# 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,
|