exiftool_vendored 13.36.0 → 13.37.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 +23 -0
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/build_geolocation +7 -3
- data/bin/exiftool +2 -2
- data/bin/lib/Image/ExifTool/Audible.pm +1 -1
- data/bin/lib/Image/ExifTool/BMP.pm +1 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +15 -8
- data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
- data/bin/lib/Image/ExifTool/Canon.pm +59 -5
- data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
- data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
- data/bin/lib/Image/ExifTool/DJI.pm +5 -5
- data/bin/lib/Image/ExifTool/DV.pm +1 -1
- data/bin/lib/Image/ExifTool/EXE.pm +3 -2
- data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIR.pm +3 -3
- data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
- data/bin/lib/Image/ExifTool/FujiFilm.pm +5 -4
- data/bin/lib/Image/ExifTool/GIF.pm +1 -1
- data/bin/lib/Image/ExifTool/GM.pm +1 -1
- data/bin/lib/Image/ExifTool/Geolocation.pm +3 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +10 -2
- data/bin/lib/Image/ExifTool/GoPro.pm +5 -5
- data/bin/lib/Image/ExifTool/Google.pm +804 -0
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
- data/bin/lib/Image/ExifTool/ID3.pm +3 -3
- data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/JSON.pm +1 -1
- data/bin/lib/Image/ExifTool/LIF.pm +1 -1
- data/bin/lib/Image/ExifTool/LNK.pm +2 -2
- data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +2 -2
- data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/MWG.pm +1 -1
- data/bin/lib/Image/ExifTool/MXF.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +2 -2
- data/bin/lib/Image/ExifTool/MakerNotes.pm +30 -7
- data/bin/lib/Image/ExifTool/Microsoft.pm +4 -4
- data/bin/lib/Image/ExifTool/Nikon.pm +4 -4
- data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
- data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +2 -1
- data/bin/lib/Image/ExifTool/Other.pm +1 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +18 -7
- data/bin/lib/Image/ExifTool/Protobuf.pm +12 -6
- data/bin/lib/Image/ExifTool/Qualcomm.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +30 -8
- data/bin/lib/Image/ExifTool/README +7 -6
- data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
- data/bin/lib/Image/ExifTool/Reconyx.pm +375 -91
- data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
- data/bin/lib/Image/ExifTool/Shortcuts.pm +8 -5
- data/bin/lib/Image/ExifTool/Sony.pm +18 -3
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +3 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +5745 -5695
- data/bin/lib/Image/ExifTool/TagNames.pod +662 -509
- data/bin/lib/Image/ExifTool/Text.pm +1 -1
- data/bin/lib/Image/ExifTool/Trailer.pm +1 -1
- data/bin/lib/Image/ExifTool/WPG.pm +1 -1
- data/bin/lib/Image/ExifTool/WTV.pm +1 -1
- data/bin/lib/Image/ExifTool/XMP.pm +31 -30
- data/bin/lib/Image/ExifTool/XMP2.pl +0 -482
- data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
- data/bin/lib/Image/ExifTool/iWork.pm +1 -1
- data/bin/lib/Image/ExifTool.pm +4 -4
- data/bin/lib/Image/ExifTool.pod +3 -3
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +4 -6
@@ -19,7 +19,7 @@ $VERSION = '1.05';
|
|
19
19
|
|
20
20
|
# Text tags
|
21
21
|
%Image::ExifTool::Text::Main = (
|
22
|
-
VARS => {
|
22
|
+
VARS => { ID_FMT => 'none' },
|
23
23
|
GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Document' },
|
24
24
|
NOTES => q{
|
25
25
|
Although basic text files contain no metadata, the following tags are
|
@@ -16,7 +16,7 @@ $VERSION = '1.01';
|
|
16
16
|
|
17
17
|
%Image::ExifTool::Trailer::Vivo = (
|
18
18
|
GROUPS => { 0 => 'Trailer', 1 => 'Vivo', 2 => 'Image' },
|
19
|
-
VARS => {
|
19
|
+
VARS => { ID_FMT => 'none' },
|
20
20
|
NOTES => 'Information written in JPEG trailer by some Vivo phones.',
|
21
21
|
# (don't know for sure what type of image this is, but it is in JPEG format)
|
22
22
|
HDRImage => {
|
@@ -23,7 +23,7 @@ sub PrintRecord($$$);
|
|
23
23
|
# WPG metadata
|
24
24
|
%Image::ExifTool::WPG::Main = (
|
25
25
|
GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' },
|
26
|
-
VARS => {
|
26
|
+
VARS => { ID_FMT => 'none' },
|
27
27
|
NOTES => 'Tags extracted from WordPerfect Graphics (WPG) images.',
|
28
28
|
WPGVersion => { },
|
29
29
|
ImageWidthInches => { PrintConv => 'sprintf("%.2f",$val)' },
|
@@ -52,7 +52,7 @@ my %bool = ( PrintConv => { 0 => 'No', 1 => 'Yes' }, PrintConvColumns => 2 );
|
|
52
52
|
GROUPS => { 0 => 'WTV', 1 => 'WTV', 2 => 'Video' },
|
53
53
|
PROCESS_PROC => \&ProcessMetadata,
|
54
54
|
NOTES => 'ExifTool will extract any tag found, even if not in this table.',
|
55
|
-
VARS => {
|
55
|
+
VARS => { ID_FMT => 'none' },
|
56
56
|
'Duration' => {
|
57
57
|
Name => 'Duration',
|
58
58
|
ValueConv => '$val/1e7',
|
@@ -862,35 +862,43 @@ my %sRangeMask = (
|
|
862
862
|
},
|
863
863
|
GAudio => {
|
864
864
|
Name => 'GAudio',
|
865
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
865
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GAudio' },
|
866
866
|
},
|
867
867
|
GImage => {
|
868
868
|
Name => 'GImage',
|
869
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
869
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GImage' },
|
870
870
|
},
|
871
871
|
GPano => {
|
872
872
|
Name => 'GPano',
|
873
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
873
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GPano' },
|
874
|
+
},
|
875
|
+
GContainer => {
|
876
|
+
Name => 'GContainer',
|
877
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GContainer' },
|
874
878
|
},
|
875
879
|
GSpherical => {
|
876
880
|
Name => 'GSpherical',
|
877
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
881
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GSpherical' },
|
878
882
|
},
|
879
883
|
GDepth => {
|
880
884
|
Name => 'GDepth',
|
881
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
885
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GDepth' },
|
882
886
|
},
|
883
887
|
GFocus => {
|
884
888
|
Name => 'GFocus',
|
885
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
889
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GFocus' },
|
886
890
|
},
|
887
891
|
GCamera => {
|
888
892
|
Name => 'GCamera',
|
889
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
893
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GCamera' },
|
890
894
|
},
|
891
895
|
GCreations => {
|
892
896
|
Name => 'GCreations',
|
893
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
897
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::GCreations' },
|
898
|
+
},
|
899
|
+
Device => {
|
900
|
+
Name => 'Device',
|
901
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Google::Device' },
|
894
902
|
},
|
895
903
|
dwc => {
|
896
904
|
Name => 'dwc',
|
@@ -908,10 +916,6 @@ my %sRangeMask = (
|
|
908
916
|
Name => 'LImage',
|
909
917
|
SubDirectory => { TagTable => 'Image::ExifTool::XMP::LImage' },
|
910
918
|
},
|
911
|
-
Device => {
|
912
|
-
Name => 'Device',
|
913
|
-
SubDirectory => { TagTable => 'Image::ExifTool::XMP::Device' },
|
914
|
-
},
|
915
919
|
sdc => {
|
916
920
|
Name => 'sdc',
|
917
921
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::sdc' },
|
@@ -948,10 +952,6 @@ my %sRangeMask = (
|
|
948
952
|
Name => 'seal',
|
949
953
|
SubDirectory => { TagTable => 'Image::ExifTool::XMP::seal' },
|
950
954
|
},
|
951
|
-
GContainer => {
|
952
|
-
Name => 'GContainer',
|
953
|
-
SubDirectory => { TagTable => 'Image::ExifTool::XMP::GContainer' },
|
954
|
-
},
|
955
955
|
);
|
956
956
|
|
957
957
|
# hack to allow XML containing Dublin Core metadata to be handled like XMP (eg. EPUB - see ZIP.pm)
|
@@ -3665,6 +3665,10 @@ NoLoop:
|
|
3665
3665
|
# protect against large binary data in unknown tags
|
3666
3666
|
$$tagInfo{Binary} = 1 if $new and length($val) > 65536;
|
3667
3667
|
}
|
3668
|
+
if ($$et{OPTIONS}{Verbose}) {
|
3669
|
+
my $tagID = join('/',@$props);
|
3670
|
+
$et->VerboseInfo($tagID, $tagInfo, Value => $rawVal || $val);
|
3671
|
+
}
|
3668
3672
|
# store the value for this tag
|
3669
3673
|
my $key = $et->FoundTag($tagInfo, $val) or return 0;
|
3670
3674
|
# save original components of rational numbers (used when copying)
|
@@ -3683,21 +3687,17 @@ NoLoop:
|
|
3683
3687
|
# set group1 dynamically according to the namespace
|
3684
3688
|
$et->SetGroup($key, "$$tagTablePtr{GROUPS}{0}-$ns");
|
3685
3689
|
}
|
3686
|
-
if ($$et{OPTIONS}{Verbose}) {
|
3687
|
-
|
3688
|
-
|
3689
|
-
|
3690
|
-
|
3691
|
-
|
3692
|
-
|
3693
|
-
|
3694
|
-
$props = '';
|
3695
|
-
}
|
3696
|
-
my $g1 = $et->GetGroup($key, 1);
|
3697
|
-
$et->VPrint(0, $$et{INDENT}, "[adding $g1:$tag]$props\n");
|
3690
|
+
if ($added and $$et{OPTIONS}{Verbose}) {
|
3691
|
+
my $props;
|
3692
|
+
if (@$added > 1) {
|
3693
|
+
$$tagInfo{Flat} = 0; # this is a flattened tag
|
3694
|
+
my @props = map { $$_[0] } @$added;
|
3695
|
+
$props = ' (' . join('/',@props) . ')';
|
3696
|
+
} else {
|
3697
|
+
$props = '';
|
3698
3698
|
}
|
3699
|
-
my $
|
3700
|
-
$et->
|
3699
|
+
my $g1 = $et->GetGroup($key, 1);
|
3700
|
+
$et->VPrint(0, $$et{INDENT}, "[adding $g1:$tag]$props\n");
|
3701
3701
|
}
|
3702
3702
|
# allow read-only subdirectories (eg. embedded base64 XMP/IPTC in NKSC files)
|
3703
3703
|
if ($$tagInfo{SubDirectory} and not $$et{IsWriting}) {
|
@@ -3710,6 +3710,7 @@ NoLoop:
|
|
3710
3710
|
DirName => $$subdir{DirName} || $$tagInfo{Name},
|
3711
3711
|
DataPt => $dataPt,
|
3712
3712
|
DirLen => length $$dataPt,
|
3713
|
+
TagInfo => $tagInfo,
|
3713
3714
|
IgnoreProp => $$subdir{IgnoreProp}, # (allow XML to ignore specified properties)
|
3714
3715
|
IsExtended => 1, # (hack to avoid Duplicate warning for embedded XMP)
|
3715
3716
|
NoStruct => 1, # (don't try to build structures since this isn't true XMP)
|
@@ -79,79 +79,6 @@ my %sTimecode = (
|
|
79
79
|
timeValue => { },
|
80
80
|
value => { Writable => 'integer', Notes => 'only in XMP 2008 spec; an error?' },
|
81
81
|
);
|
82
|
-
my %sPose = (
|
83
|
-
STRUCT_NAME => 'Pose',
|
84
|
-
NAMESPACE => { Pose => 'http://ns.google.com/photos/dd/1.0/pose/' },
|
85
|
-
PositionX => { Writable => 'real', Groups => { 2 => 'Location' } },
|
86
|
-
PositionY => { Writable => 'real', Groups => { 2 => 'Location' } },
|
87
|
-
PositionZ => { Writable => 'real', Groups => { 2 => 'Location' } },
|
88
|
-
RotationX => { Writable => 'real', Groups => { 2 => 'Location' } },
|
89
|
-
RotationY => { Writable => 'real', Groups => { 2 => 'Location' } },
|
90
|
-
RotationZ => { Writable => 'real', Groups => { 2 => 'Location' } },
|
91
|
-
RotationW => { Writable => 'real', Groups => { 2 => 'Location' } },
|
92
|
-
Timestamp => {
|
93
|
-
Writable => 'integer',
|
94
|
-
Shift => 'Time',
|
95
|
-
Groups => { 2 => 'Time' },
|
96
|
-
ValueConv => 'ConvertUnixTime($val / 1000, 1, 3)',
|
97
|
-
ValueConvInv => 'int(GetUnixTime($val, 1) * 1000)',
|
98
|
-
PrintConv => '$self->ConvertDateTime($val)',
|
99
|
-
PrintConvInv => '$self->InverseDateTime($val,undef,1)',
|
100
|
-
},
|
101
|
-
);
|
102
|
-
my %sEarthPose = (
|
103
|
-
STRUCT_NAME => 'EarthPose',
|
104
|
-
NAMESPACE => { EarthPose => 'http://ns.google.com/photos/dd/1.0/earthpose/' },
|
105
|
-
Latitude => {
|
106
|
-
Writable => 'real',
|
107
|
-
Groups => { 2 => 'Location' },
|
108
|
-
ValueConv => 'Image::ExifTool::GPS::ToDegrees($val, 1)',
|
109
|
-
ValueConvInv => '$val',
|
110
|
-
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
|
111
|
-
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lat")',
|
112
|
-
},
|
113
|
-
Longitude => {
|
114
|
-
Writable => 'real',
|
115
|
-
Groups => { 2 => 'Location' },
|
116
|
-
ValueConv => 'Image::ExifTool::GPS::ToDegrees($val, 1)',
|
117
|
-
ValueConvInv => '$val',
|
118
|
-
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
|
119
|
-
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lon")',
|
120
|
-
},
|
121
|
-
Altitude => {
|
122
|
-
Writable => 'real',
|
123
|
-
Groups => { 2 => 'Location' },
|
124
|
-
PrintConv => '"$val m"',
|
125
|
-
PrintConvInv => '$val=~s/\s*m$//;$val',
|
126
|
-
},
|
127
|
-
RotationX => { Writable => 'real', Groups => { 2 => 'Location' } },
|
128
|
-
RotationY => { Writable => 'real', Groups => { 2 => 'Location' } },
|
129
|
-
RotationZ => { Writable => 'real', Groups => { 2 => 'Location' } },
|
130
|
-
RotationW => { Writable => 'real', Groups => { 2 => 'Location' } },
|
131
|
-
Timestamp => {
|
132
|
-
Writable => 'integer',
|
133
|
-
Shift => 'Time',
|
134
|
-
Groups => { 2 => 'Time' },
|
135
|
-
ValueConv => 'ConvertUnixTime($val / 1000, 1, 3)',
|
136
|
-
ValueConvInv => 'int(GetUnixTime($val, 1) * 1000)',
|
137
|
-
PrintConv => '$self->ConvertDateTime($val)',
|
138
|
-
PrintConvInv => '$self->InverseDateTime($val,undef,1)',
|
139
|
-
},
|
140
|
-
);
|
141
|
-
my %sVendorInfo = (
|
142
|
-
STRUCT_NAME => 'VendorInfo',
|
143
|
-
NAMESPACE => { VendorInfo => 'http://ns.google.com/photos/dd/1.0/vendorinfo/' },
|
144
|
-
Model => { },
|
145
|
-
Manufacturer => { },
|
146
|
-
Notes => { },
|
147
|
-
);
|
148
|
-
my %sAppInfo = (
|
149
|
-
STRUCT_NAME => 'AppInfo',
|
150
|
-
NAMESPACE => { AppInfo => 'http://ns.google.com/photos/dd/1.0/appinfo/' },
|
151
|
-
Application => { },
|
152
|
-
Version => { },
|
153
|
-
ItemURI => { },
|
154
|
-
);
|
155
82
|
|
156
83
|
# camera-raw defaults
|
157
84
|
%Image::ExifTool::XMP::crd = (
|
@@ -1760,414 +1687,6 @@ my %sACDSeeRegionStruct = (
|
|
1760
1687
|
ConfidenceLevel => { Writable => 'integer' },
|
1761
1688
|
);
|
1762
1689
|
|
1763
|
-
# Google audio namespace
|
1764
|
-
%Image::ExifTool::XMP::GAudio = (
|
1765
|
-
%xmpTableDefaults,
|
1766
|
-
GROUPS => { 1 => 'XMP-GAudio', 2 => 'Audio' },
|
1767
|
-
NAMESPACE => 'GAudio',
|
1768
|
-
Data => {
|
1769
|
-
Name => 'AudioData',
|
1770
|
-
ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
|
1771
|
-
ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)',
|
1772
|
-
},
|
1773
|
-
Mime => { Name => 'AudioMimeType' },
|
1774
|
-
);
|
1775
|
-
|
1776
|
-
# Google image namespace
|
1777
|
-
%Image::ExifTool::XMP::GImage = (
|
1778
|
-
%xmpTableDefaults,
|
1779
|
-
GROUPS => { 1 => 'XMP-GImage', 2 => 'Image' },
|
1780
|
-
NAMESPACE => 'GImage',
|
1781
|
-
Data => {
|
1782
|
-
Name => 'ImageData',
|
1783
|
-
ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
|
1784
|
-
ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)',
|
1785
|
-
},
|
1786
|
-
Mime => { Name => 'ImageMimeType' },
|
1787
|
-
);
|
1788
|
-
|
1789
|
-
# Google panorama namespace properties
|
1790
|
-
# (ref https://exiftool.org/forum/index.php/topic,4569.0.html)
|
1791
|
-
%Image::ExifTool::XMP::GPano = (
|
1792
|
-
%xmpTableDefaults,
|
1793
|
-
GROUPS => { 1 => 'XMP-GPano', 2 => 'Image' },
|
1794
|
-
NAMESPACE => 'GPano',
|
1795
|
-
NOTES => q{
|
1796
|
-
Panorama tags written by Google Photosphere. See
|
1797
|
-
L<https://developers.google.com/panorama/metadata/> for the specification.
|
1798
|
-
},
|
1799
|
-
UsePanoramaViewer => { Writable => 'boolean' },
|
1800
|
-
CaptureSoftware => { },
|
1801
|
-
StitchingSoftware => { },
|
1802
|
-
ProjectionType => { },
|
1803
|
-
PoseHeadingDegrees => { Writable => 'real' },
|
1804
|
-
PosePitchDegrees => { Writable => 'real' },
|
1805
|
-
PoseRollDegrees => { Writable => 'real' },
|
1806
|
-
InitialViewHeadingDegrees => { Writable => 'real' },
|
1807
|
-
InitialViewPitchDegrees => { Writable => 'real' },
|
1808
|
-
InitialViewRollDegrees => { Writable => 'real' },
|
1809
|
-
InitialHorizontalFOVDegrees => { Writable => 'real' },
|
1810
|
-
InitialVerticalFOVDegrees => { Writable => 'real' },
|
1811
|
-
FirstPhotoDate => { %dateTimeInfo, Groups => { 2 => 'Time' } },
|
1812
|
-
LastPhotoDate => { %dateTimeInfo, Groups => { 2 => 'Time' } },
|
1813
|
-
SourcePhotosCount => { Writable => 'integer' },
|
1814
|
-
ExposureLockUsed => { Writable => 'boolean' },
|
1815
|
-
CroppedAreaImageWidthPixels => { Writable => 'real' },
|
1816
|
-
CroppedAreaImageHeightPixels => { Writable => 'real' },
|
1817
|
-
FullPanoWidthPixels => { Writable => 'real' },
|
1818
|
-
FullPanoHeightPixels => { Writable => 'real' },
|
1819
|
-
CroppedAreaLeftPixels => { Writable => 'real' },
|
1820
|
-
CroppedAreaTopPixels => { Writable => 'real' },
|
1821
|
-
InitialCameraDolly => { Writable => 'real' },
|
1822
|
-
# (the following have been observed, but are not in the specification)
|
1823
|
-
LargestValidInteriorRectLeft => { Writable => 'real' },
|
1824
|
-
LargestValidInteriorRectTop => { Writable => 'real' },
|
1825
|
-
LargestValidInteriorRectWidth => { Writable => 'real' },
|
1826
|
-
LargestValidInteriorRectHeight => { Writable => 'real' },
|
1827
|
-
);
|
1828
|
-
|
1829
|
-
# Google Spherical Images namespace (ref https://github.com/google/spatial-media/blob/master/docs/spherical-video-rfc.md)
|
1830
|
-
%Image::ExifTool::XMP::GSpherical = (
|
1831
|
-
%xmpTableDefaults,
|
1832
|
-
GROUPS => { 1 => 'XMP-GSpherical', 2 => 'Image' },
|
1833
|
-
WRITE_GROUP => 'GSpherical', # write in special location for video files
|
1834
|
-
NAMESPACE => 'GSpherical',
|
1835
|
-
AVOID => 1,
|
1836
|
-
NOTES => q{
|
1837
|
-
Not actually XMP. These RDF/XML tags are used in Google spherical MP4
|
1838
|
-
videos. These tags are written into the video track of MOV/MP4 files, and
|
1839
|
-
not at the top level like other XMP tags. See
|
1840
|
-
L<https://github.com/google/spatial-media/blob/master/docs/spherical-video-rfc.md>
|
1841
|
-
for the specification.
|
1842
|
-
},
|
1843
|
-
# (avoid due to conflicts with XMP-GPano tags)
|
1844
|
-
Spherical => { Writable => 'boolean' },
|
1845
|
-
Stitched => { Writable => 'boolean' },
|
1846
|
-
StitchingSoftware => { },
|
1847
|
-
ProjectionType => { },
|
1848
|
-
StereoMode => { },
|
1849
|
-
SourceCount => { Writable => 'integer' },
|
1850
|
-
InitialViewHeadingDegrees => { Writable => 'real' },
|
1851
|
-
InitialViewPitchDegrees => { Writable => 'real' },
|
1852
|
-
InitialViewRollDegrees => { Writable => 'real' },
|
1853
|
-
Timestamp => {
|
1854
|
-
Name => 'TimeStamp',
|
1855
|
-
Groups => { 2 => 'Time' },
|
1856
|
-
Writable => 'integer',
|
1857
|
-
Shift => 'Time',
|
1858
|
-
ValueConv => 'ConvertUnixTime($val)', #(NC)
|
1859
|
-
ValueConvInv => 'GetUnixTime($val)',
|
1860
|
-
PrintConv => '$self->ConvertDateTime($val)',
|
1861
|
-
PrintConvInv => '$self->InverseDateTime($val)',
|
1862
|
-
},
|
1863
|
-
FullPanoWidthPixels => { Writable => 'integer' },
|
1864
|
-
FullPanoHeightPixels => { Writable => 'integer' },
|
1865
|
-
CroppedAreaImageWidthPixels => { Writable => 'integer' },
|
1866
|
-
CroppedAreaImageHeightPixels=> { Writable => 'integer' },
|
1867
|
-
CroppedAreaLeftPixels => { Writable => 'integer' },
|
1868
|
-
CroppedAreaTopPixels => { Writable => 'integer' },
|
1869
|
-
);
|
1870
|
-
|
1871
|
-
# Google depthmap information (ref https://developers.google.com/depthmap-metadata/reference)
|
1872
|
-
%Image::ExifTool::XMP::GDepth = (
|
1873
|
-
GROUPS => { 0 => 'XMP', 1 => 'XMP-GDepth', 2 => 'Image' },
|
1874
|
-
NAMESPACE => 'GDepth',
|
1875
|
-
AVOID => 1, # (too many potential tag name conflicts)
|
1876
|
-
NOTES => q{
|
1877
|
-
Google depthmap information. See
|
1878
|
-
L<https://developers.google.com/depthmap-metadata/> for the specification.
|
1879
|
-
},
|
1880
|
-
WRITABLE => 'string', # (default to string-type tags)
|
1881
|
-
PRIORITY => 0,
|
1882
|
-
Format => {
|
1883
|
-
PrintConv => {
|
1884
|
-
RangeInverse => 'RangeInverse',
|
1885
|
-
RangeLinear => 'RangeLinear',
|
1886
|
-
},
|
1887
|
-
},
|
1888
|
-
Near => { Writable => 'real' },
|
1889
|
-
Far => { Writable => 'real' },
|
1890
|
-
Mime => { },
|
1891
|
-
Data => {
|
1892
|
-
Name => 'DepthImage',
|
1893
|
-
ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
|
1894
|
-
ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)',
|
1895
|
-
},
|
1896
|
-
Units => { },
|
1897
|
-
MeasureType => {
|
1898
|
-
PrintConv => {
|
1899
|
-
OpticalAxis => 'OpticalAxis',
|
1900
|
-
OpticalRay => 'OpticalRay',
|
1901
|
-
},
|
1902
|
-
},
|
1903
|
-
ConfidenceMime => { },
|
1904
|
-
Confidence => {
|
1905
|
-
ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
|
1906
|
-
ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)',
|
1907
|
-
},
|
1908
|
-
Manufacturer=> { },
|
1909
|
-
Model => { },
|
1910
|
-
Software => { },
|
1911
|
-
ImageWidth => { Writable => 'real' },
|
1912
|
-
ImageHeight => { Writable => 'real' },
|
1913
|
-
);
|
1914
|
-
|
1915
|
-
# Google focus namespace
|
1916
|
-
%Image::ExifTool::XMP::GFocus = (
|
1917
|
-
%xmpTableDefaults,
|
1918
|
-
GROUPS => { 1 => 'XMP-GFocus', 2 => 'Image' },
|
1919
|
-
NAMESPACE => 'GFocus',
|
1920
|
-
NOTES => 'Focus information found in Google depthmap images.',
|
1921
|
-
BlurAtInfinity => { Writable => 'real' },
|
1922
|
-
FocalDistance => { Writable => 'real' },
|
1923
|
-
FocalPointX => { Writable => 'real' },
|
1924
|
-
FocalPointY => { Writable => 'real' },
|
1925
|
-
);
|
1926
|
-
|
1927
|
-
# Google camera namespace (ref PH)
|
1928
|
-
%Image::ExifTool::XMP::GCamera = (
|
1929
|
-
%xmpTableDefaults,
|
1930
|
-
GROUPS => { 1 => 'XMP-GCamera', 2 => 'Camera' },
|
1931
|
-
NAMESPACE => 'GCamera',
|
1932
|
-
NOTES => 'Camera information found in Google panorama images.',
|
1933
|
-
BurstID => { },
|
1934
|
-
BurstPrimary => { },
|
1935
|
-
PortraitNote => { },
|
1936
|
-
PortraitRequest => {
|
1937
|
-
Notes => 'HDRPlus (HDRP) data', #NealKrawetz
|
1938
|
-
ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
|
1939
|
-
ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)',
|
1940
|
-
},
|
1941
|
-
PortraitVersion => { },
|
1942
|
-
SpecialTypeID => { List => 'Bag' },
|
1943
|
-
PortraitNote => { },
|
1944
|
-
DisableAutoCreation => { List => 'Bag' },
|
1945
|
-
DisableSuggestedAction => { List => 'Bag' }, #forum16147
|
1946
|
-
hdrp_makernote => {
|
1947
|
-
Name => 'HDRPMakerNote',
|
1948
|
-
# decoded data starts with the following bytes, but nothing yet is known about its contents:
|
1949
|
-
# 48 44 52 50 02 ef 64 35 6d 5e 70 1e 2c ea e3 4c [HDRP..d5m^p.,..L]
|
1950
|
-
ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
|
1951
|
-
ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)',
|
1952
|
-
},
|
1953
|
-
MicroVideo => { Writable => 'integer' },
|
1954
|
-
MicroVideoVersion => { Writable => 'integer' },
|
1955
|
-
MicroVideoOffset => { Writable => 'integer' },
|
1956
|
-
MicroVideoPresentationTimestampUs => { Writable => 'integer' },
|
1957
|
-
shot_log_data => { #forum14108
|
1958
|
-
Name => 'ShotLogData',
|
1959
|
-
ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
|
1960
|
-
ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)',
|
1961
|
-
},
|
1962
|
-
HdrPlusMakernote => {
|
1963
|
-
ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
|
1964
|
-
ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)',
|
1965
|
-
},
|
1966
|
-
MotionPhoto => { Writable => 'integer' },
|
1967
|
-
MotionPhotoVersion => { Writable => 'integer' },
|
1968
|
-
MotionPhotoPresentationTimestampUs => { Writable => 'integer' },
|
1969
|
-
);
|
1970
|
-
|
1971
|
-
# Google creations namespace (ref PH)
|
1972
|
-
%Image::ExifTool::XMP::GCreations = (
|
1973
|
-
%xmpTableDefaults,
|
1974
|
-
GROUPS => { 1 => 'XMP-GCreations', 2 => 'Camera' },
|
1975
|
-
NAMESPACE => 'GCreations',
|
1976
|
-
NOTES => 'Google creations tags.',
|
1977
|
-
CameraBurstID => { },
|
1978
|
-
Type => { Avoid => 1 },
|
1979
|
-
);
|
1980
|
-
|
1981
|
-
# Google depth-map Device namespace (ref 13)
|
1982
|
-
%Image::ExifTool::XMP::Device = (
|
1983
|
-
%xmpTableDefaults,
|
1984
|
-
GROUPS => { 1 => 'XMP-Device', 2 => 'Camera' },
|
1985
|
-
NAMESPACE => { Device => 'http://ns.google.com/photos/dd/1.0/device/' },
|
1986
|
-
NOTES => q{
|
1987
|
-
Google depth-map Device tags. See
|
1988
|
-
L<https://developer.android.com/training/camera2/Dynamic-depth-v1.0.pdf> for
|
1989
|
-
the specification.
|
1990
|
-
},
|
1991
|
-
Container => {
|
1992
|
-
Struct => {
|
1993
|
-
STRUCT_NAME => 'DeviceContainer',
|
1994
|
-
NAMESPACE => { Container => 'http://ns.google.com/photos/dd/1.0/container/' },
|
1995
|
-
Directory => {
|
1996
|
-
List => 'Seq',
|
1997
|
-
Struct => {
|
1998
|
-
STRUCT_NAME => 'DeviceDirectory',
|
1999
|
-
NAMESPACE => { Container => 'http://ns.google.com/photos/dd/1.0/container/' },
|
2000
|
-
Item => {
|
2001
|
-
Struct => {
|
2002
|
-
STRUCT_NAME => 'DeviceItem',
|
2003
|
-
NAMESPACE => { Item => 'http://ns.google.com/photos/dd/1.0/item/' },
|
2004
|
-
# use this as a key to process Google trailer
|
2005
|
-
Mime => { RawConv => '$$self{ProcessGoogleTrailer} = $val' },
|
2006
|
-
Length => { Writable => 'integer' },
|
2007
|
-
Padding => { Writable => 'integer' },
|
2008
|
-
DataURI => { },
|
2009
|
-
},
|
2010
|
-
},
|
2011
|
-
},
|
2012
|
-
}
|
2013
|
-
},
|
2014
|
-
},
|
2015
|
-
Profiles => {
|
2016
|
-
List => 'Seq',
|
2017
|
-
FlatName => '',
|
2018
|
-
Struct => {
|
2019
|
-
STRUCT_NAME => 'DeviceProfiles',
|
2020
|
-
NAMESPACE => { Device => 'http://ns.google.com/photos/dd/1.0/device/' },
|
2021
|
-
Profile => {
|
2022
|
-
Struct => {
|
2023
|
-
STRUCT_NAME => 'DeviceProfile',
|
2024
|
-
NAMESPACE => { Profile => 'http://ns.google.com/photos/dd/1.0/profile/' },
|
2025
|
-
CameraIndices => { List => 'Seq', Writable => 'integer' },
|
2026
|
-
Type => { },
|
2027
|
-
},
|
2028
|
-
},
|
2029
|
-
},
|
2030
|
-
},
|
2031
|
-
Cameras => {
|
2032
|
-
List => 'Seq',
|
2033
|
-
FlatName => '',
|
2034
|
-
Struct => {
|
2035
|
-
STRUCT_NAME => 'DeviceCameras',
|
2036
|
-
NAMESPACE => { Device => 'http://ns.google.com/photos/dd/1.0/device/' },
|
2037
|
-
Camera => {
|
2038
|
-
Struct => {
|
2039
|
-
STRUCT_NAME => 'DeviceCamera',
|
2040
|
-
NAMESPACE => { Camera => 'http://ns.google.com/photos/dd/1.0/camera/' },
|
2041
|
-
DepthMap => {
|
2042
|
-
Struct => {
|
2043
|
-
STRUCT_NAME => 'DeviceDepthMap',
|
2044
|
-
NAMESPACE => { DepthMap => 'http://ns.google.com/photos/dd/1.0/depthmap/' },
|
2045
|
-
ConfidenceURI => { },
|
2046
|
-
DepthURI => { },
|
2047
|
-
Far => { Writable => 'real' },
|
2048
|
-
Format => { },
|
2049
|
-
ItemSemantic=> { },
|
2050
|
-
MeasureType => { },
|
2051
|
-
Near => { Writable => 'real' },
|
2052
|
-
Units => { },
|
2053
|
-
Software => { },
|
2054
|
-
FocalTableEntryCount => { Writable => 'integer' },
|
2055
|
-
FocalTable => { }, # (base64)
|
2056
|
-
},
|
2057
|
-
},
|
2058
|
-
Image => {
|
2059
|
-
Struct => {
|
2060
|
-
STRUCT_NAME => 'DeviceImage',
|
2061
|
-
NAMESPACE => { Image => 'http://ns.google.com/photos/dd/1.0/image/' },
|
2062
|
-
ItemSemantic=> { },
|
2063
|
-
ItemURI => { },
|
2064
|
-
},
|
2065
|
-
},
|
2066
|
-
ImagingModel => {
|
2067
|
-
Struct => {
|
2068
|
-
STRUCT_NAME => 'DeviceImagingModel',
|
2069
|
-
NAMESPACE => { ImagingModel => 'http://ns.google.com/photos/dd/1.0/imagingmodel/' },
|
2070
|
-
Distortion => { }, # (base64)
|
2071
|
-
DistortionCount => { Writable => 'integer' },
|
2072
|
-
FocalLengthX => { Writable => 'real' },
|
2073
|
-
FocalLengthY => { Writable => 'real' },
|
2074
|
-
ImageHeight => { Writable => 'integer' },
|
2075
|
-
ImageWidth => { Writable => 'integer' },
|
2076
|
-
PixelAspectRatio=> { Writable => 'real' },
|
2077
|
-
PrincipalPointX => { Writable => 'real' },
|
2078
|
-
PrincipalPointY => { Writable => 'real' },
|
2079
|
-
Skew => { Writable => 'real' },
|
2080
|
-
},
|
2081
|
-
},
|
2082
|
-
PointCloud => {
|
2083
|
-
Struct => {
|
2084
|
-
STRUCT_NAME => 'DevicePointCloud',
|
2085
|
-
NAMESPACE => { PointCloud => 'http://ns.google.com/photos/dd/1.0/pointcloud/' },
|
2086
|
-
PointCloud => { Writable => 'integer' },
|
2087
|
-
Points => { },
|
2088
|
-
Metric => { Writable => 'boolean' },
|
2089
|
-
},
|
2090
|
-
},
|
2091
|
-
Pose => { Struct => \%sPose },
|
2092
|
-
LightEstimate => {
|
2093
|
-
Struct => {
|
2094
|
-
STRUCT_NAME => 'DeviceLightEstimate',
|
2095
|
-
NAMESPACE => { LightEstimate => 'http://ns.google.com/photos/dd/1.0/lightestimate/' },
|
2096
|
-
ColorCorrectionR => { Writable => 'real' },
|
2097
|
-
ColorCorrectionG => { Writable => 'real' },
|
2098
|
-
ColorCorrectionB => { Writable => 'real' },
|
2099
|
-
PixelIntensity => { Writable => 'real' },
|
2100
|
-
},
|
2101
|
-
},
|
2102
|
-
VendorInfo => { Struct => \%sVendorInfo },
|
2103
|
-
AppInfo => { Struct => \%sAppInfo },
|
2104
|
-
Trait => { },
|
2105
|
-
},
|
2106
|
-
},
|
2107
|
-
},
|
2108
|
-
},
|
2109
|
-
VendorInfo => { Struct => \%sVendorInfo },
|
2110
|
-
AppInfo => { Struct => \%sAppInfo },
|
2111
|
-
EarthPos => { Struct => \%sEarthPose },
|
2112
|
-
Pose => { Struct => \%sPose },
|
2113
|
-
Planes => {
|
2114
|
-
List => 'Seq',
|
2115
|
-
FlatName => '',
|
2116
|
-
Struct => {
|
2117
|
-
STRUCT_NAME => 'DevicePlanes',
|
2118
|
-
NAMESPACE => { Device => 'http://ns.google.com/photos/dd/1.0/device/' },
|
2119
|
-
Plane => {
|
2120
|
-
Struct => {
|
2121
|
-
STRUCT_NAME => 'DevicePlane',
|
2122
|
-
NAMESPACE => { Plane => 'http://ns.google.com/photos/dd/1.0/plane/' },
|
2123
|
-
Pose => { Struct => \%sPose },
|
2124
|
-
ExtentX => { Writable => 'real' },
|
2125
|
-
ExtentZ => { Writable => 'real' },
|
2126
|
-
BoundaryVertexCount => { Writable => 'integer' },
|
2127
|
-
Boundary => { },
|
2128
|
-
},
|
2129
|
-
},
|
2130
|
-
},
|
2131
|
-
},
|
2132
|
-
);
|
2133
|
-
|
2134
|
-
# Google container tags (ref https://developer.android.com/guide/topics/media/platform/hdr-image-format)
|
2135
|
-
# NOTE: The namespace prefix used by ExifTool is 'GContainer' instead of 'Container'
|
2136
|
-
# dueo to a conflict with Google's depth-map Device 'Container' namespace!
|
2137
|
-
# (see ../pics/GooglePixel8Pro.jpg sample image)
|
2138
|
-
%Image::ExifTool::XMP::GContainer = (
|
2139
|
-
%xmpTableDefaults,
|
2140
|
-
GROUPS => { 1 => 'XMP-GContainer', 2 => 'Image' },
|
2141
|
-
NAMESPACE => 'GContainer',
|
2142
|
-
NOTES => q{
|
2143
|
-
Google Container namespace. ExifTool uses the prefix 'GContainer' instead
|
2144
|
-
of 'Container' to avoid a conflict with the Google Device Container
|
2145
|
-
namespace.
|
2146
|
-
},
|
2147
|
-
Directory => {
|
2148
|
-
Name => 'ContainerDirectory',
|
2149
|
-
FlatName => 'Directory',
|
2150
|
-
List => 'Seq',
|
2151
|
-
Struct => {
|
2152
|
-
STRUCT_NAME => 'Directory',
|
2153
|
-
Item => {
|
2154
|
-
Namespace => 'GContainer',
|
2155
|
-
Struct => {
|
2156
|
-
STRUCT_NAME => 'Item',
|
2157
|
-
# (use 'GItem' to avoid conflict with Google Device Container Item)
|
2158
|
-
NAMESPACE => { GItem => 'http://ns.google.com/photos/1.0/container/item/'},
|
2159
|
-
Mime => { RawConv => '$$self{ProcessGoogleTrailer} = $val' },
|
2160
|
-
Semantic => { },
|
2161
|
-
Length => { Writable => 'integer' },
|
2162
|
-
Label => { },
|
2163
|
-
Padding => { Writable => 'integer' },
|
2164
|
-
URI => { },
|
2165
|
-
},
|
2166
|
-
},
|
2167
|
-
},
|
2168
|
-
},
|
2169
|
-
);
|
2170
|
-
|
2171
1690
|
# Getty Images namespace (ref PH)
|
2172
1691
|
%Image::ExifTool::XMP::GettyImages = (
|
2173
1692
|
%xmpTableDefaults,
|
@@ -2415,7 +1934,6 @@ sub Init_crd($)
|
|
2415
1934
|
}
|
2416
1935
|
}
|
2417
1936
|
|
2418
|
-
|
2419
1937
|
1; #end
|
2420
1938
|
|
2421
1939
|
__END__
|