exiftool-vendored.pl 12.43.0 → 12.44.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/Changes +17 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +2 -2
- package/bin/exiftool +3 -3
- package/bin/lib/Image/ExifTool/DarwinCore.pm +1 -0
- package/bin/lib/Image/ExifTool/FlashPix.pm +9 -1
- package/bin/lib/Image/ExifTool/FujiFilm.pm +3 -1
- package/bin/lib/Image/ExifTool/GPS.pm +21 -1
- package/bin/lib/Image/ExifTool/Motorola.pm +8 -2
- package/bin/lib/Image/ExifTool/Nikon.pm +65 -24
- package/bin/lib/Image/ExifTool/Parrot.pm +95 -2
- package/bin/lib/Image/ExifTool/QuickTime.pm +7 -1
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +5 -2
- package/bin/lib/Image/ExifTool/README +3 -1
- package/bin/lib/Image/ExifTool/Sony.pm +7 -1
- package/bin/lib/Image/ExifTool/TagLookup.pm +22 -7
- package/bin/lib/Image/ExifTool/TagNames.pod +59 -13
- package/bin/lib/Image/ExifTool/Writer.pl +2 -2
- package/bin/lib/Image/ExifTool.pm +1 -1
- package/bin/perl-Image-ExifTool.spec +1 -1
- package/bin/pp_build_exe.args +4 -4
- package/package.json +1 -1
package/bin/Changes
CHANGED
|
@@ -7,6 +7,22 @@ RSS feed: https://exiftool.org/rss.xml
|
|
|
7
7
|
Note: The most recent production release is Version 12.42. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
July 21, 2022 - Version 12.44
|
|
11
|
+
|
|
12
|
+
- Added a few new Sony lenses (thanks Jos Roost)
|
|
13
|
+
- Decode Accelerometer and Gyroscope data from ARCore videos
|
|
14
|
+
- Decode a couple of new Motorola tags (thanks Neal Krawetz)
|
|
15
|
+
- Decode FujiFilm FirmwareVersion (thanks Justin Arkinson)
|
|
16
|
+
- Decode MetaType for timed metadata in videos
|
|
17
|
+
- Decode a number of new Nikon Z tags (thanks Warren Hatch)
|
|
18
|
+
- Extract more types of embedded images from FlashPix-format files
|
|
19
|
+
- Made Composite GPSLatitude and GPSLongitude writable for setting GPS
|
|
20
|
+
coordinates and reference directions with one assignment
|
|
21
|
+
- Fixed bug introduced in 12.39 which broke extraction of timed GPS from some
|
|
22
|
+
INNOVV videos
|
|
23
|
+
- Fixed bug introduced in 12.43 which broke extraction of timed GPSDateTime
|
|
24
|
+
from Insta360 videos
|
|
25
|
+
|
|
10
26
|
July 6, 2022 - Version 12.43
|
|
11
27
|
|
|
12
28
|
- Added the ability to geotag from Google Takeout JSON files
|
|
@@ -99,6 +115,7 @@ Jan. 13, 2022 - Version 12.39
|
|
|
99
115
|
- Added a new Pentax LensType (thanks Christian Shulz)
|
|
100
116
|
- Added a couple of new Nikon LensID's
|
|
101
117
|
- Added support for Nikon NKSC sidecar files
|
|
118
|
+
- Decode another type of timed GPS from MP4 videos
|
|
102
119
|
- Decode more tags for the Nikon Z7 and Z9 (thanks Warren Hatch)
|
|
103
120
|
- Decode a couple more FLIR tags
|
|
104
121
|
- Extract ZIP file comments
|
package/bin/META.json
CHANGED
package/bin/META.yml
CHANGED
package/bin/README
CHANGED
|
@@ -107,8 +107,8 @@ your home directory, then you would type the following commands in a
|
|
|
107
107
|
terminal window to extract and run ExifTool:
|
|
108
108
|
|
|
109
109
|
cd ~/Desktop
|
|
110
|
-
gzip -dc Image-ExifTool-12.
|
|
111
|
-
cd Image-ExifTool-12.
|
|
110
|
+
gzip -dc Image-ExifTool-12.44.tar.gz | tar -xf -
|
|
111
|
+
cd Image-ExifTool-12.44
|
|
112
112
|
./exiftool t/images/ExifTool.jpg
|
|
113
113
|
|
|
114
114
|
Note: These commands extract meta information from one of the test images.
|
package/bin/exiftool
CHANGED
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use warnings;
|
|
12
12
|
require 5.004;
|
|
13
13
|
|
|
14
|
-
my $version = '12.
|
|
14
|
+
my $version = '12.44';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
17
|
BEGIN {
|
|
@@ -663,7 +663,7 @@ for (;;) {
|
|
|
663
663
|
}
|
|
664
664
|
$group = $2;
|
|
665
665
|
shift;
|
|
666
|
-
$group =~ /IFD/i and Warn("Can't list tags for specific IFD\n"), next;
|
|
666
|
+
$group =~ /IFD/i and Warn("Can't list tags for specific IFD\n"), $helped=1, next;
|
|
667
667
|
$group =~ /^(all|\*)$/ and undef $group;
|
|
668
668
|
} else {
|
|
669
669
|
$pass or next;
|
|
@@ -5467,7 +5467,7 @@ with this command:
|
|
|
5467
5467
|
|
|
5468
5468
|
produces output like this:
|
|
5469
5469
|
|
|
5470
|
-
-- Generated by ExifTool 12.
|
|
5470
|
+
-- Generated by ExifTool 12.44 --
|
|
5471
5471
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5472
5472
|
(f/5.6, 1/60s, ISO 100)
|
|
5473
5473
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -298,6 +298,7 @@ my %fpxFileType = (
|
|
|
298
298
|
%Image::ExifTool::FlashPix::Main = (
|
|
299
299
|
PROCESS_PROC => \&ProcessFPXR,
|
|
300
300
|
GROUPS => { 2 => 'Image' },
|
|
301
|
+
VARS => { LONG_TAGS => 0 },
|
|
301
302
|
NOTES => q{
|
|
302
303
|
The FlashPix file format, introduced in 1996, was developed by Kodak,
|
|
303
304
|
Hewlett-Packard and Microsoft. Internally the FPX file structure mimics
|
|
@@ -480,6 +481,12 @@ my %fpxFileType = (
|
|
|
480
481
|
return $val;
|
|
481
482
|
},
|
|
482
483
|
},
|
|
484
|
+
IeImg => {
|
|
485
|
+
Name => 'EmbeddedImage',
|
|
486
|
+
Notes => 'embedded images in Scene7 vignette VNT files',
|
|
487
|
+
Groups => { 2 => 'Preview' },
|
|
488
|
+
Binary => 1,
|
|
489
|
+
},
|
|
483
490
|
);
|
|
484
491
|
|
|
485
492
|
# Summary Information properties
|
|
@@ -2255,7 +2262,8 @@ sub ProcessFPX($$)
|
|
|
2255
2262
|
# remove instance number or class ID from tag if necessary
|
|
2256
2263
|
$tagInfo = $et->GetTagInfo($tagTablePtr, $1) if
|
|
2257
2264
|
($tag =~ /(.*) \d{6}$/s and $$tagTablePtr{$1}) or
|
|
2258
|
-
($tag =~ /(.*)_[0-9a-f]{16}$/s and $$tagTablePtr{$1})
|
|
2265
|
+
($tag =~ /(.*)_[0-9a-f]{16}$/s and $$tagTablePtr{$1}) or
|
|
2266
|
+
($tag =~ /(.*)_[0-9]{4}$/s and $$tagTablePtr{$1}); # IeImg instances
|
|
2259
2267
|
}
|
|
2260
2268
|
|
|
2261
2269
|
my $lSib = Get32u(\$dir, $pos + 0x44); # left sibling
|
|
@@ -31,7 +31,7 @@ use vars qw($VERSION);
|
|
|
31
31
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
32
32
|
use Image::ExifTool::Exif;
|
|
33
33
|
|
|
34
|
-
$VERSION = '1.
|
|
34
|
+
$VERSION = '1.82';
|
|
35
35
|
|
|
36
36
|
sub ProcessFujiDir($$$);
|
|
37
37
|
sub ProcessFaceRec($$$);
|
|
@@ -763,6 +763,8 @@ my %faceCategories = (
|
|
|
763
763
|
},
|
|
764
764
|
PrintConvInv => '$val=~/(0x[0-9a-f]+)/i; hex $1',
|
|
765
765
|
},
|
|
766
|
+
0x1447 => { Name => 'FirmwareVersion', Writable => 'string' },
|
|
767
|
+
0x1448 => { Name => 'FirmwareVersion2', Writable => 'string' },
|
|
766
768
|
0x3803 => { #forum10037
|
|
767
769
|
Name => 'VideoRecordingMode',
|
|
768
770
|
Groups => { 2 => 'Video' },
|
|
@@ -12,7 +12,7 @@ use strict;
|
|
|
12
12
|
use vars qw($VERSION);
|
|
13
13
|
use Image::ExifTool::Exif;
|
|
14
14
|
|
|
15
|
-
$VERSION = '1.
|
|
15
|
+
$VERSION = '1.54';
|
|
16
16
|
|
|
17
17
|
my %coordConv = (
|
|
18
18
|
ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)',
|
|
@@ -360,21 +360,41 @@ my %coordConv = (
|
|
|
360
360
|
# which must therefore require this module as necessary
|
|
361
361
|
GPSLatitude => {
|
|
362
362
|
SubDoc => 1, # generate for all sub-documents
|
|
363
|
+
Writable => 1,
|
|
364
|
+
Avoid => 1,
|
|
365
|
+
Priority => 1, # (necessary because Avoid sets default Priority to 0)
|
|
363
366
|
Require => {
|
|
364
367
|
0 => 'GPS:GPSLatitude',
|
|
365
368
|
1 => 'GPS:GPSLatitudeRef',
|
|
366
369
|
},
|
|
370
|
+
WriteAlso => {
|
|
371
|
+
'GPS:GPSLatitude' => '$val',
|
|
372
|
+
'GPS:GPSLatitudeRef' => '$val < 0 ? "S" : "N"',
|
|
373
|
+
},
|
|
367
374
|
ValueConv => '$val[1] =~ /^S/i ? -$val[0] : $val[0]',
|
|
368
375
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
|
|
376
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lat")',
|
|
369
377
|
},
|
|
370
378
|
GPSLongitude => {
|
|
371
379
|
SubDoc => 1, # generate for all sub-documents
|
|
380
|
+
Writable => 1,
|
|
381
|
+
Avoid => 1,
|
|
382
|
+
Priority => 1,
|
|
383
|
+
Require => {
|
|
384
|
+
0 => 'GPS:GPSLongitude',
|
|
385
|
+
1 => 'GPS:GPSLongitudeRef',
|
|
386
|
+
},
|
|
387
|
+
WriteAlso => {
|
|
388
|
+
'GPS:GPSLongitude' => '$val',
|
|
389
|
+
'GPS:GPSLongitudeRef' => '$val < 0 ? "W" : "E"',
|
|
390
|
+
},
|
|
372
391
|
Require => {
|
|
373
392
|
0 => 'GPS:GPSLongitude',
|
|
374
393
|
1 => 'GPS:GPSLongitudeRef',
|
|
375
394
|
},
|
|
376
395
|
ValueConv => '$val[1] =~ /^W/i ? -$val[0] : $val[0]',
|
|
377
396
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
|
|
397
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lon")',
|
|
378
398
|
},
|
|
379
399
|
GPSAltitude => {
|
|
380
400
|
SubDoc => [1,3], # generate for sub-documents if Desire 1 or 3 has a chance to exist
|
|
@@ -14,7 +14,7 @@ use strict;
|
|
|
14
14
|
use vars qw($VERSION);
|
|
15
15
|
use Image::ExifTool::Exif;
|
|
16
16
|
|
|
17
|
-
$VERSION = '1.
|
|
17
|
+
$VERSION = '1.02';
|
|
18
18
|
|
|
19
19
|
# Motorola makernotes tags (ref PH)
|
|
20
20
|
%Image::ExifTool::Motorola::Main = (
|
|
@@ -54,7 +54,12 @@ $VERSION = '1.01';
|
|
|
54
54
|
# 0x6400 - string: 'AUTO','ON','OFF'
|
|
55
55
|
# 0x6401 - string: 'HDR'
|
|
56
56
|
# 0x6410 - string: 'NO','YES'
|
|
57
|
-
# 0x6420 - int32s: 0 (only exists in HDR images?)
|
|
57
|
+
# 0x6420 - int32s for some models: 0 (only exists in HDR images?)
|
|
58
|
+
0x6420 => { #forum13731
|
|
59
|
+
Condition => '$format eq "string"',
|
|
60
|
+
Name => 'CustomRendered',
|
|
61
|
+
Writable => 'string',
|
|
62
|
+
},
|
|
58
63
|
# 0x6430 - float
|
|
59
64
|
# 0x6431 - int8u: 0,1
|
|
60
65
|
# 0x6432 - int8u: 0,79,100
|
|
@@ -89,6 +94,7 @@ $VERSION = '1.01';
|
|
|
89
94
|
# 0x64c2,0x64c3 - int32s
|
|
90
95
|
# 0x64c4 - int32s
|
|
91
96
|
# 0x64c5 - int32u
|
|
97
|
+
0x64d0 => { Name => 'DriveMode', Writable => 'string' }, #forum13731
|
|
92
98
|
# 0x6500 - int8u: 1
|
|
93
99
|
# 0x6501 - string: 'Luma-Chroma Plane','Chroma only' or int8u: 0
|
|
94
100
|
# 0x6502 - string: 'Luma-Chroma Plane','Chroma only','' or int8u: 1,255
|
|
@@ -63,7 +63,7 @@ use Image::ExifTool::Exif;
|
|
|
63
63
|
use Image::ExifTool::GPS;
|
|
64
64
|
use Image::ExifTool::XMP;
|
|
65
65
|
|
|
66
|
-
$VERSION = '4.
|
|
66
|
+
$VERSION = '4.08';
|
|
67
67
|
|
|
68
68
|
sub LensIDConv($$$);
|
|
69
69
|
sub ProcessNikonAVI($$$);
|
|
@@ -2081,7 +2081,7 @@ my %base64coord = (
|
|
|
2081
2081
|
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ9',
|
|
2082
2082
|
DecryptStart => 4,
|
|
2083
2083
|
# TODO: eventually set the length dynamically according to actual offsets!
|
|
2084
|
-
DecryptLen => 0xec4b +
|
|
2084
|
+
DecryptLen => 0xec4b + 1907, # decoded thru end of Offset26
|
|
2085
2085
|
ByteOrder => 'LittleEndian',
|
|
2086
2086
|
},
|
|
2087
2087
|
},
|
|
@@ -4867,7 +4867,7 @@ my %nikonFocalConversions = (
|
|
|
4867
4867
|
%binaryDataAttrs,
|
|
4868
4868
|
NOTES => 'Tags found in the encrypted LensData from cameras such as the Z6 and Z7.',
|
|
4869
4869
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
4870
|
-
DATAMEMBER => [ 0x03, 0x2f ],
|
|
4870
|
+
DATAMEMBER => [ 0x03, 0x2f, 0x35, 0x4c, 0x56 ],
|
|
4871
4871
|
0x00 => {
|
|
4872
4872
|
Name => 'LensDataVersion',
|
|
4873
4873
|
Format => 'string[4]',
|
|
@@ -4893,12 +4893,12 @@ my %nikonFocalConversions = (
|
|
|
4893
4893
|
%nikonApertureConversions,
|
|
4894
4894
|
},
|
|
4895
4895
|
# --> another extra byte at position 0x08 in this version of LensData (PH)
|
|
4896
|
-
0x09 => {
|
|
4897
|
-
|
|
4898
|
-
|
|
4899
|
-
|
|
4900
|
-
|
|
4901
|
-
},
|
|
4896
|
+
#0x09 => {
|
|
4897
|
+
# Name => 'FocusPosition', #28 - this appears to be copied from an older version of LensData and is no longer valid. Text with Z9 and Z7_2 with a variety of lenses
|
|
4898
|
+
# Condition => '$$self{OldLensData}',
|
|
4899
|
+
# PrintConv => 'sprintf("0x%02x", $val)',
|
|
4900
|
+
# PrintConvInv => '$val',
|
|
4901
|
+
#},
|
|
4902
4902
|
0x0b => {
|
|
4903
4903
|
Notes => 'this focus distance is approximate, and not very accurate for some lenses',
|
|
4904
4904
|
Name => 'FocusDistance',
|
|
@@ -4957,7 +4957,8 @@ my %nikonFocalConversions = (
|
|
|
4957
4957
|
%nikonApertureConversions,
|
|
4958
4958
|
},
|
|
4959
4959
|
#
|
|
4960
|
-
# ---- new LensData tags used by Nikkor Z
|
|
4960
|
+
# ---- new LensData tags used by Nikkor Z cameras (ref PH/28). ----
|
|
4961
|
+
# (some fields are strictly for Z-series lenses, others apply to legacy F-mount as well, ref 28)
|
|
4961
4962
|
#
|
|
4962
4963
|
0x2f => { # look forward to see if new lens data exists...
|
|
4963
4964
|
Name => 'NewLensData',
|
|
@@ -4965,7 +4966,7 @@ my %nikonFocalConversions = (
|
|
|
4965
4966
|
RawConv => '$$self{NewLensData} = 1 unless $val =~ /^.\0+$/s; undef',
|
|
4966
4967
|
Hidden => 1,
|
|
4967
4968
|
},
|
|
4968
|
-
0x30 => {
|
|
4969
|
+
0x30 => { #PH
|
|
4969
4970
|
Name => 'LensID',
|
|
4970
4971
|
Condition => '$$self{NewLensData}',
|
|
4971
4972
|
Notes => 'tags from here onward used for Nikkor Z lenses only',
|
|
@@ -4991,9 +4992,22 @@ my %nikonFocalConversions = (
|
|
|
4991
4992
|
27 => 'Nikkor Z MC 50mm f/2.8', #IB
|
|
4992
4993
|
28 => 'Nikkor Z 100-400mm f/4.5-5.6 VR S', #28
|
|
4993
4994
|
29 => 'Nikkor Z 28mm f/2.8', #IB
|
|
4995
|
+
30 => 'Nikkor Z 400mm f/2.8 TC VR S', #28
|
|
4996
|
+
31 => 'Nikkor Z 24-120 f/4', #28
|
|
4997
|
+
32 => 'Nikkor Z 800mm f/6.3 VR S', #28
|
|
4994
4998
|
},
|
|
4995
4999
|
},
|
|
4996
|
-
|
|
5000
|
+
0x35 => { #28
|
|
5001
|
+
Name => 'LensMountType',
|
|
5002
|
+
RawConv => '$$self{LensMountType} = $val', # 0=> DSLR lens via FTZ style adapter; 1=> Native Z lens;
|
|
5003
|
+
Format => 'int8u',
|
|
5004
|
+
Unknown => 1,
|
|
5005
|
+
PrintConv => {
|
|
5006
|
+
0 => 'F-mount Lens',
|
|
5007
|
+
1 => 'Z-mount Lens',
|
|
5008
|
+
},
|
|
5009
|
+
},
|
|
5010
|
+
0x36 => { #PH
|
|
4997
5011
|
Name => 'MaxAperture',
|
|
4998
5012
|
Condition => '$$self{NewLensData}',
|
|
4999
5013
|
Format => 'int16u',
|
|
@@ -5003,7 +5017,7 @@ my %nikonFocalConversions = (
|
|
|
5003
5017
|
PrintConv => 'sprintf("%.1f",$val)',
|
|
5004
5018
|
PrintConvInv => '$val',
|
|
5005
5019
|
},
|
|
5006
|
-
0x38 => {
|
|
5020
|
+
0x38 => { #PH
|
|
5007
5021
|
Name => 'FNumber',
|
|
5008
5022
|
Condition => '$$self{NewLensData}',
|
|
5009
5023
|
Format => 'int16u',
|
|
@@ -5013,7 +5027,7 @@ my %nikonFocalConversions = (
|
|
|
5013
5027
|
PrintConv => 'sprintf("%.1f",$val)',
|
|
5014
5028
|
PrintConvInv => '$val',
|
|
5015
5029
|
},
|
|
5016
|
-
0x3c => {
|
|
5030
|
+
0x3c => { #PH
|
|
5017
5031
|
Name => 'FocalLength',
|
|
5018
5032
|
Condition => '$$self{NewLensData}',
|
|
5019
5033
|
Format => 'int16u',
|
|
@@ -5021,14 +5035,36 @@ my %nikonFocalConversions = (
|
|
|
5021
5035
|
PrintConv => '"$val mm"',
|
|
5022
5036
|
PrintConvInv => '$val=~s/\s*mm$//;$val',
|
|
5023
5037
|
},
|
|
5024
|
-
|
|
5025
|
-
Name => '
|
|
5026
|
-
|
|
5027
|
-
|
|
5038
|
+
0x4c => { #28
|
|
5039
|
+
Name => 'FocusDistanceRangeWidth', #reflects the number of discrete absolute lens positions that are mapped to the reported FocusDistance. Will be 1 near CFD reflecting very narrow focus distance bands (i.e., quite accurate). Near Infinity will be something like 32. Note: 0 at infinity.
|
|
5040
|
+
Format => 'int8u',
|
|
5041
|
+
Condition => '$$self{NewLensData} and $$self{LensMountType} == 1',
|
|
5042
|
+
RawConv => '$$self{FocusDistanceRangeWidth} = $val',
|
|
5043
|
+
Unknown => 1,
|
|
5044
|
+
},
|
|
5045
|
+
0x4e => { #28
|
|
5046
|
+
Name => 'FocusDistance',
|
|
5047
|
+
Format => 'int16u',
|
|
5048
|
+
Condition => '$$self{NewLensData} and $$self{LensMountType} == 1',
|
|
5049
|
+
RawConv => '$val = $val/256', # 1st byte is the fractional component. This byte was not previously considered in the legacy calculation (which only used the 2nd byte). When 2nd byte < 80; distance is < 1 meter
|
|
5028
5050
|
ValueConv => '0.01 * 10**($val/40)', # in m
|
|
5029
5051
|
ValueConvInv => '$val>0 ? 40*log($val*100)/log(10) : 0',
|
|
5030
|
-
PrintConv =>
|
|
5031
|
-
|
|
5052
|
+
PrintConv => q{
|
|
5053
|
+
$$self{FocusDistanceRangeWidth} == 0 ? "Inf" : $val < 1 ? $val < 0.35 ? sprintf("%.4f m", $val): sprintf("%.3f m", $val): sprintf("%.2f m", $val), #distances less than 35mm are quite accurate with increasingly less precision past 1m
|
|
5054
|
+
},
|
|
5055
|
+
},
|
|
5056
|
+
0x56 => { #28
|
|
5057
|
+
Name => 'LensDriveEnd', # byte contains: 1 at CFD/MOD; 2 at Infinity; 0 otherwise
|
|
5058
|
+
Condition => '$$self{NewLensData} and $$self{LensMountType} == 1',
|
|
5059
|
+
Format => 'int8u',
|
|
5060
|
+
RawConv => 'unless ($$self{FocusDistanceRangeWidth} == 0 ) { if ($val == 0 ) {$$self{LensDriveEnd} = "No"} else { $$self{LensDriveEnd} = "CFD"}; } else{ $$self{LensDriveEnd} = "Inf"}',
|
|
5061
|
+
Unknown => 1,
|
|
5062
|
+
},
|
|
5063
|
+
0x5a => { #28
|
|
5064
|
+
Name => 'LensPositionAbsolute', # <=0 at infinity. Typical value at CFD might be 58000. Only valid for Z-mount lenses.
|
|
5065
|
+
Condition => '$$self{NewLensData} and $$self{LensMountType} == 1',
|
|
5066
|
+
Format => 'int32s',
|
|
5067
|
+
Unknown => 1,
|
|
5032
5068
|
},
|
|
5033
5069
|
);
|
|
5034
5070
|
|
|
@@ -8753,13 +8789,18 @@ my %nikonFocalConversions = (
|
|
|
8753
8789
|
6 => '+08:00 (Beijing, Honk Kong, Sinapore)',
|
|
8754
8790
|
10 => '+05:45 (Kathmandu)',
|
|
8755
8791
|
11 => '+05:30 (New Dehli)',
|
|
8792
|
+
12 => '+05:00 (Islamabad)',
|
|
8793
|
+
13 => '+04:30 (Kabul)',
|
|
8794
|
+
14 => '+04:00 (Abu Dhabi)',
|
|
8795
|
+
15 => '+03:30 (Tehran)',
|
|
8756
8796
|
16 => '+03:00 (Moscow, Nairobi)',
|
|
8757
|
-
15 => '+02:00 (Athens)',
|
|
8758
|
-
16 => '+01:00 (Madrid, Paris, Berlin)',
|
|
8759
8797
|
17 => '+02:00 (Athens, Helsinki)',
|
|
8760
|
-
18 => '+
|
|
8761
|
-
19 => '+00:00',
|
|
8798
|
+
18 => '+01:00 (Madrid, Paris, Berlin)',
|
|
8799
|
+
19 => '+00:00 (London)',
|
|
8800
|
+
20 => '-01:00 (Azores)',
|
|
8801
|
+
21 => '-02:00 (Fernando de Noronha)',
|
|
8762
8802
|
22 => '-03:00 (Buenos Aires, Sao Paulo)',
|
|
8803
|
+
23 => '-03:30 (Newfoundland)',
|
|
8763
8804
|
24 => '-04:00 (Manaus, Caracas)',
|
|
8764
8805
|
25 => '-05:00 (New York, Toronto, Lima)',
|
|
8765
8806
|
26 => '-06:00 (Chicago, Mexico City)',
|
|
@@ -13,8 +13,9 @@ package Image::ExifTool::Parrot;
|
|
|
13
13
|
|
|
14
14
|
use strict;
|
|
15
15
|
use vars qw($VERSION);
|
|
16
|
+
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
17
|
|
|
17
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.02';
|
|
18
19
|
|
|
19
20
|
sub Process_mett($$$);
|
|
20
21
|
|
|
@@ -22,7 +23,10 @@ sub Process_mett($$$);
|
|
|
22
23
|
%Image::ExifTool::Parrot::mett = (
|
|
23
24
|
PROCESS_PROC => \&Process_mett,
|
|
24
25
|
# put the 'P' records first in the documentation
|
|
25
|
-
VARS => {
|
|
26
|
+
VARS => {
|
|
27
|
+
SORT_PROC => sub { my ($a,$b)=@_; $a=~s/P/A/; $b=~s/P/A/; $a cmp $b },
|
|
28
|
+
LONG_TAGS => 1
|
|
29
|
+
},
|
|
26
30
|
NOTES => q{
|
|
27
31
|
Streaming metadata found in Parrot drone videos. See
|
|
28
32
|
L<https://developer.parrot.com/docs/pdraw/metadata.html> for the
|
|
@@ -52,6 +56,23 @@ sub Process_mett($$$);
|
|
|
52
56
|
Name => 'ParrotAutomation',
|
|
53
57
|
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::Automation' },
|
|
54
58
|
},
|
|
59
|
+
# timed metadata written by ARCore (see forum13653)
|
|
60
|
+
'application/arcore-accel' => {
|
|
61
|
+
Name => 'ARCoreAccel',
|
|
62
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreAccel', ByteOrder => 'II' },
|
|
63
|
+
},
|
|
64
|
+
'application/arcore-gyro' => {
|
|
65
|
+
Name => 'ARCoreGyro',
|
|
66
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreGyro', ByteOrder => 'II' },
|
|
67
|
+
},
|
|
68
|
+
'application/arcore-video-0' => {
|
|
69
|
+
Name => 'ARCoreVideo',
|
|
70
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreVideo', ByteOrder => 'II' },
|
|
71
|
+
},
|
|
72
|
+
'application/arcore-custom-event' => {
|
|
73
|
+
Name => 'ARCoreCustom',
|
|
74
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreCustom', ByteOrder => 'II' },
|
|
75
|
+
},
|
|
55
76
|
);
|
|
56
77
|
|
|
57
78
|
# tags found in the Parrot 'mett' V1 timed metadata (ref 1) [untested]
|
|
@@ -630,6 +651,69 @@ sub Process_mett($$$);
|
|
|
630
651
|
},
|
|
631
652
|
);
|
|
632
653
|
|
|
654
|
+
# ARCore Accel data (ref PH)
|
|
655
|
+
%Image::ExifTool::Parrot::ARCoreAccel = (
|
|
656
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
657
|
+
GROUPS => { 2 => 'Location' },
|
|
658
|
+
NOTES => 'ARCore accelerometer data.',
|
|
659
|
+
FIRST_ENTRY => 0,
|
|
660
|
+
# 00-04: always 10 34 16 1 29
|
|
661
|
+
4 => {
|
|
662
|
+
Name => 'AccelerometerUnknown',
|
|
663
|
+
Format => 'undef[16]',
|
|
664
|
+
Unknown => 1,
|
|
665
|
+
ValueConv => 'join " ", unpack("Cx4Cx4Cx4C", $val)',
|
|
666
|
+
},
|
|
667
|
+
5 => { # (NC)
|
|
668
|
+
Name => 'Accelerometer',
|
|
669
|
+
Format => 'undef[14]',
|
|
670
|
+
RawConv => 'GetFloat(\$val,0) . " " . GetFloat(\$val,5) . " " . GetFloat(\$val,10)',
|
|
671
|
+
},
|
|
672
|
+
# 05-08: float Accelerometer X
|
|
673
|
+
# 09: 37
|
|
674
|
+
# 10-13: float Accelerometer Y
|
|
675
|
+
# 14: 45
|
|
676
|
+
# 15-18: float Accelerometer Z
|
|
677
|
+
# 19: 48
|
|
678
|
+
# 20-24: 128-255
|
|
679
|
+
# 25: 246 then 247
|
|
680
|
+
# 26: 188
|
|
681
|
+
# 27: 2
|
|
682
|
+
# 28: 56
|
|
683
|
+
# 29-32: 128-255
|
|
684
|
+
# 33: increments slowly (about once every 56 samples or so)
|
|
685
|
+
);
|
|
686
|
+
|
|
687
|
+
# ARCore Gyro data (ref PH)
|
|
688
|
+
%Image::ExifTool::Parrot::ARCoreGyro = (
|
|
689
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
690
|
+
GROUPS => { 2 => 'Location' },
|
|
691
|
+
NOTES => 'ARCore accelerometer data.',
|
|
692
|
+
FIRST_ENTRY => 0,
|
|
693
|
+
# 00-04: always 10 34 16 3 29
|
|
694
|
+
4 => {
|
|
695
|
+
Name => 'GyroscopeUnknown',
|
|
696
|
+
Format => 'undef[16]',
|
|
697
|
+
Unknown => 1, # always "29 37 45 48" in my sample, just like AccelerometerUnknown
|
|
698
|
+
ValueConv => 'join " ", unpack("Cx4Cx4Cx4C", $val)',
|
|
699
|
+
},
|
|
700
|
+
5 => { # (NC)
|
|
701
|
+
Name => 'Gyroscope',
|
|
702
|
+
Format => 'undef[14]',
|
|
703
|
+
RawConv => 'GetFloat(\$val,0) . " " . GetFloat(\$val,5) . " " . GetFloat(\$val,10)',
|
|
704
|
+
},
|
|
705
|
+
);
|
|
706
|
+
|
|
707
|
+
%Image::ExifTool::Parrot::ARCoreVideo = (
|
|
708
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
709
|
+
FIRST_ENTRY => 0,
|
|
710
|
+
);
|
|
711
|
+
|
|
712
|
+
%Image::ExifTool::Parrot::ARCoreCustom = (
|
|
713
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
714
|
+
FIRST_ENTRY => 0,
|
|
715
|
+
);
|
|
716
|
+
|
|
633
717
|
%Image::ExifTool::Parrot::Composite = (
|
|
634
718
|
GPSDateTime => {
|
|
635
719
|
Description => 'GPS Date/Time',
|
|
@@ -677,9 +761,18 @@ sub Process_mett($$$)
|
|
|
677
761
|
my $dataPos = $$dirInfo{DataPos};
|
|
678
762
|
my $dirEnd = length $$dataPt;
|
|
679
763
|
my $pos = $$dirInfo{DirStart} || 0;
|
|
764
|
+
my $metaType = $$et{MetaType} || '';
|
|
680
765
|
|
|
681
766
|
$et->VerboseDir('Parrot mett', undef, $dirEnd);
|
|
682
767
|
|
|
768
|
+
if ($$tagTbl{$metaType}) {
|
|
769
|
+
$et->HandleTag($tagTbl, $metaType, undef,
|
|
770
|
+
DataPt => $dataPt,
|
|
771
|
+
DataPos => $dataPos,
|
|
772
|
+
Base => $$dirInfo{Base},
|
|
773
|
+
);
|
|
774
|
+
return 1;
|
|
775
|
+
}
|
|
683
776
|
while ($pos + 4 < $dirEnd) {
|
|
684
777
|
my ($id, $nwords) = unpack("x${pos}a2n", $$dataPt);
|
|
685
778
|
my $size;
|
|
@@ -47,7 +47,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
47
47
|
use Image::ExifTool::Exif;
|
|
48
48
|
use Image::ExifTool::GPS;
|
|
49
49
|
|
|
50
|
-
$VERSION = '2.
|
|
50
|
+
$VERSION = '2.75';
|
|
51
51
|
|
|
52
52
|
sub ProcessMOV($$;$);
|
|
53
53
|
sub ProcessKeys($$$);
|
|
@@ -7516,6 +7516,12 @@ my %eeBox2 = (
|
|
|
7516
7516
|
Format => 'undef[4]',
|
|
7517
7517
|
RawConv => '$$self{MetaFormat} = $val',
|
|
7518
7518
|
},
|
|
7519
|
+
8 => { # starts at 8 for MetaFormat eq 'camm', and 17 for 'mett'
|
|
7520
|
+
Name => 'MetaType',
|
|
7521
|
+
Format => 'undef[$size-8]',
|
|
7522
|
+
# may start at various locations!
|
|
7523
|
+
RawConv => '$$self{MetaType} = ($val=~/(application[^\0]+)/ ? $1 : undef)',
|
|
7524
|
+
},
|
|
7519
7525
|
#
|
|
7520
7526
|
# Observed offsets for child atoms of various MetaFormat types:
|
|
7521
7527
|
#
|
|
@@ -1527,7 +1527,7 @@ sub ProcessFreeGPS($$$)
|
|
|
1527
1527
|
$spd = $9 * $knotsToKph if length $9;
|
|
1528
1528
|
$trk = $10 if length $10;
|
|
1529
1529
|
|
|
1530
|
-
} elsif ($$dataPt =~ /^.{64}[\x01-\x0c]\0{3}[\x01-\x1f]\0{3}A[NS][EW]\0/s) {
|
|
1530
|
+
} elsif ($$dataPt =~ /^.{64}[\x01-\x0c]\0{3}[\x01-\x1f]\0{3}A[NS][EW]\0{5}/s) {
|
|
1531
1531
|
|
|
1532
1532
|
# Akaso V1 dascham
|
|
1533
1533
|
# 0000: 00 00 80 00 66 72 65 65 47 50 53 20 78 00 00 00 [....freeGPS x...]
|
|
@@ -1624,6 +1624,9 @@ sub ProcessFreeGPS($$$)
|
|
|
1624
1624
|
# 0000: 00 00 80 00 66 72 65 65 47 50 53 20 4c 00 00 00 [....freeGPS L...]
|
|
1625
1625
|
# 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
|
1626
1626
|
# 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
|
1627
|
+
# 0030: 10 00 00 00 2d 00 00 00 14 00 00 00 11 00 00 00 [....-...........]
|
|
1628
|
+
# 0040: 0c 00 00 00 1f 00 00 00 41 4e 45 00 5d 9a a9 45 [........ANE.]..E]
|
|
1629
|
+
# 0050: ab 1e e5 44 ec 51 f0 40 b8 5e a5 43 00 00 00 00 [...D.Q.@.^.C....]
|
|
1627
1630
|
# (records are same structure as Type 3 Novatek GPS in ProcessFreeGPS2() below)
|
|
1628
1631
|
($hr,$min,$sec,$yr,$mon,$day,$stat,$latRef,$lonRef,$lat,$lon,$spd,$trk) =
|
|
1629
1632
|
unpack('x48V6a1a1a1x1V4', $$dataPt);
|
|
@@ -2700,7 +2703,7 @@ sub ProcessInsta360($;$)
|
|
|
2700
2703
|
$a[$_] = GetDouble(\$a[$_], 0) foreach 4,6,8,9,10;
|
|
2701
2704
|
$a[4] = -abs($a[4]) if $a[5] eq 'S'; # (abs just in case it was already signed)
|
|
2702
2705
|
$a[6] = -abs($a[6]) if $a[7] ne 'E';
|
|
2703
|
-
$et->HandleTag($tagTbl,
|
|
2706
|
+
$et->HandleTag($tagTbl, GPSDateTime => Image::ExifTool::ConvertUnixTime($a[0]) . 'Z');
|
|
2704
2707
|
$et->HandleTag($tagTbl, GPSLatitude => $a[4]);
|
|
2705
2708
|
$et->HandleTag($tagTbl, GPSLongitude => $a[6]);
|
|
2706
2709
|
$et->HandleTag($tagTbl, GPSSpeed => $a[8] * $mpsToKph);
|
|
@@ -395,7 +395,9 @@ numerical, and generated automatically otherwise.
|
|
|
395
395
|
be accessible.
|
|
396
396
|
|
|
397
397
|
'Hidden' - set to hide tag from the TagName documentation.
|
|
398
|
-
Also suppresses verbose output of a BinaryData tag.
|
|
398
|
+
Also suppresses verbose output of a BinaryData tag. The
|
|
399
|
+
RawConv of a Hidden tag should return undef so the tag value
|
|
400
|
+
is not seen by the user.
|
|
399
401
|
|
|
400
402
|
'IsComposite' - flag set for Composite tags
|
|
401
403
|
|
|
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
34
34
|
use Image::ExifTool::Exif;
|
|
35
35
|
use Image::ExifTool::Minolta;
|
|
36
36
|
|
|
37
|
-
$VERSION = '3.
|
|
37
|
+
$VERSION = '3.51';
|
|
38
38
|
|
|
39
39
|
sub ProcessSRF($$$);
|
|
40
40
|
sub ProcessSR2($$$);
|
|
@@ -154,7 +154,12 @@ sub PrintInvLensSpec($;$$);
|
|
|
154
154
|
32866 => 'Sony FE 24mm F2.8 G', #IB
|
|
155
155
|
32867 => 'Sony FE 40mm F2.5 G', #IB
|
|
156
156
|
32868 => 'Sony FE 50mm F2.5 G', #IB
|
|
157
|
+
32871 => 'Sony FE PZ 16-35mm F4 G', #JR
|
|
158
|
+
32873 => 'Sony E PZ 10-20mm F4 G', #JR
|
|
157
159
|
32874 => 'Sony FE 70-200mm F2.8 GM OSS II', #IB
|
|
160
|
+
32875 => 'Sony FE 24-70mm F2.8 GM II', #JR
|
|
161
|
+
32876 => 'Sony E 11mm F1.8', #JR
|
|
162
|
+
32877 => 'Sony E 15mm F1.4 G', #JR
|
|
158
163
|
|
|
159
164
|
# (comment this out so LensID will report the LensModel, which is more useful)
|
|
160
165
|
# 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
|
|
@@ -245,6 +250,7 @@ sub PrintInvLensSpec($;$$);
|
|
|
245
250
|
50530 => 'Sigma 24mm F2 DG DN | C', #JR (021)
|
|
246
251
|
50531 => 'Sigma 18-50mm F2.8 DC DN | C', #IB/JR (021)
|
|
247
252
|
50532 => 'Sigma 20mm F2 DG DN | C', #JR (022)
|
|
253
|
+
50533 => 'Sigma 16-28mm F2.8 DG DN | C', #JR (022)
|
|
248
254
|
|
|
249
255
|
50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
|
|
250
256
|
50993 => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB
|
|
@@ -2043,7 +2043,7 @@ my %tagLookup = (
|
|
|
2043
2043
|
'customrawhighlightpoint' => { 109 => 0x51 },
|
|
2044
2044
|
'customrawshadow' => { 109 => 0x85 },
|
|
2045
2045
|
'customrawshadowpoint' => { 109 => 0x52 },
|
|
2046
|
-
'customrendered' => { 119 => 0xa401, 484 => 'CustomRendered' },
|
|
2046
|
+
'customrendered' => { 119 => 0xa401, 191 => 0x6420, 484 => 'CustomRendered' },
|
|
2047
2047
|
'customsaturation' => { 109 => 0x4d, 297 => 0x503 },
|
|
2048
2048
|
'customsettingsalldefault' => { 279 => '0.2', 288 => '0.2' },
|
|
2049
2049
|
'customsettingsbank' => { 279 => '0.1', 280 => '0.1', 282 => '0.1', 283 => '0.1', 288 => '0.1', 292 => '0.2', 293 => '0.2', 295 => 0x1 },
|
|
@@ -2345,7 +2345,7 @@ my %tagLookup = (
|
|
|
2345
2345
|
'drangepriority' => { 127 => 0x1443 },
|
|
2346
2346
|
'drangepriorityauto' => { 127 => 0x1444 },
|
|
2347
2347
|
'drangepriorityfixed' => { 127 => 0x1445 },
|
|
2348
|
-
'drivemode' => { 113 => 0x3103, 125 => '0.1', 181 => 0x6, 184 => 0x1e, 187 => 0xe, 297 => 0x600, 355 => 0x34, 387 => 0x1002, 397 => 0x3, 407 => 0x4, 408 => 0x7e, 409 => 0x34 },
|
|
2348
|
+
'drivemode' => { 113 => 0x3103, 125 => '0.1', 181 => 0x6, 184 => 0x1e, 187 => 0xe, 191 => 0x64d0, 297 => 0x600, 355 => 0x34, 387 => 0x1002, 397 => 0x3, 407 => 0x4, 408 => 0x7e, 409 => 0x34 },
|
|
2349
2349
|
'drivemode2' => { 184 => 0xa, 336 => 0x7, 418 => 0xe, 425 => 0x1 },
|
|
2350
2350
|
'drivemodesetting' => { 409 => 0x4 },
|
|
2351
2351
|
'drivespeed' => { 125 => '0.2' },
|
|
@@ -2742,7 +2742,8 @@ my %tagLookup = (
|
|
|
2742
2742
|
'firmwarename' => { 394 => 0xa001 },
|
|
2743
2743
|
'firmwarerevision' => { 19 => 0xa4, 64 => 0x1e, 385 => 0x0 },
|
|
2744
2744
|
'firmwarerevision2' => { 385 => 0xc },
|
|
2745
|
-
'firmwareversion' => { 7 => 0x10b, 11 => 0x136, 14 => 0xff, 15 => 0x107, 138 => [0x415,0xce5], 154 => 0x57, 156 => 'FirmwareVersion', 318 => 0x320, 320 => 0x2, 322 => 0x3109, 355 => 0x230, 380 => ['CNFV','FIRM'], 382 => 0x18, 383 => 0x2a, 387 => 0x2 },
|
|
2745
|
+
'firmwareversion' => { 7 => 0x10b, 11 => 0x136, 14 => 0xff, 15 => 0x107, 127 => 0x1447, 138 => [0x415,0xce5], 154 => 0x57, 156 => 'FirmwareVersion', 318 => 0x320, 320 => 0x2, 322 => 0x3109, 355 => 0x230, 380 => ['CNFV','FIRM'], 382 => 0x18, 383 => 0x2a, 387 => 0x2 },
|
|
2746
|
+
'firmwareversion2' => { 127 => 0x1448 },
|
|
2746
2747
|
'firmwareversions' => { 364 => 0x301 },
|
|
2747
2748
|
'firstphotodate' => { 466 => 'FirstPhotoDate' },
|
|
2748
2749
|
'firstpublicationdate' => { 307 => 'FirstPublicationDate' },
|
|
@@ -2884,9 +2885,10 @@ my %tagLookup = (
|
|
|
2884
2885
|
'focusbracketstepsize' => { 297 => 0x308 },
|
|
2885
2886
|
'focuscontinuous' => { 34 => 0x20 },
|
|
2886
2887
|
'focusdisplayaiservoandmf' => { 84 => 0x515 },
|
|
2887
|
-
'focusdistance' => { 163 => 'FocusDistance', 181 => 0x13, 187 => 0x49bb, 219 => 0x9, 220 => 0xa, 224 => [0xb,
|
|
2888
|
+
'focusdistance' => { 163 => 'FocusDistance', 181 => 0x13, 187 => 0x49bb, 219 => 0x9, 220 => 0xa, 224 => [0xb,0x4e], 300 => 0x305, 314 => 0x0, 318 => 0x304, 319 => 0x304 },
|
|
2888
2889
|
'focusdistancelower' => { 7 => 0x45, 9 => 0x8e, 11 => 0x45, 13 => 0x56, 14 => 0x45, 15 => 0x45, 16 => 0x52, 17 => 0x52, 18 => 0x56, 20 => 0x52, 21 => 0x8e, 22 => 0x59, 23 => 0x57, 24 => 0x8e, 25 => 0x94, 26 => 0x95, 27 => 0xa7, 28 => 0x56, 29 => 0xa7, 57 => 0x15, 77 => 0x14 },
|
|
2889
2890
|
'focusdistancerange' => { 1 => 0xc },
|
|
2891
|
+
'focusdistancerangewidth' => { 224 => 0x4c },
|
|
2890
2892
|
'focusdistanceupper' => { 7 => 0x43, 9 => 0x8c, 11 => 0x43, 13 => 0x54, 14 => 0x43, 15 => 0x43, 16 => 0x50, 17 => 0x50, 18 => 0x54, 20 => 0x50, 21 => 0x8c, 22 => 0x57, 23 => 0x55, 24 => 0x8c, 25 => 0x92, 26 => 0x93, 27 => 0xa5, 28 => 0x54, 29 => 0xa5, 57 => 0x14, 77 => 0x13 },
|
|
2891
2893
|
'focusholdbutton' => { 184 => 0x44 },
|
|
2892
2894
|
'focusinfoversion' => { 300 => 0x0 },
|
|
@@ -2904,7 +2906,7 @@ my %tagLookup = (
|
|
|
2904
2906
|
'focuspointlock' => { 295 => 0x1d3 },
|
|
2905
2907
|
'focuspointpersistence' => { 295 => 0x105 },
|
|
2906
2908
|
'focuspointwrap' => { 279 => '2.2', 280 => '2.2', 282 => '2.1', 283 => '2.1', 287 => '1.1', 288 => '2.2', 289 => '1.1', 292 => '2.2', 293 => '2.1', 294 => '2.5', 295 => 0x16 },
|
|
2907
|
-
'focusposition' => { 219 => 0x8, 220 => 0x8,
|
|
2909
|
+
'focusposition' => { 219 => 0x8, 220 => 0x8, 355 => 0x10, 418 => 0x9bb },
|
|
2908
2910
|
'focusposition2' => { 425 => [0x29,0x2b,0x2f], 445 => 0x2d, 448 => 0x20 },
|
|
2909
2911
|
'focuspositionhorizontal' => { 194 => 0x43 },
|
|
2910
2912
|
'focuspositionvertical' => { 194 => 0x45 },
|
|
@@ -3054,9 +3056,9 @@ my %tagLookup = (
|
|
|
3054
3056
|
'gpshpositioningerror' => { 130 => 0x1f, 484 => 'GPSHPositioningError' },
|
|
3055
3057
|
'gpsimgdirection' => { 130 => 0x11, 484 => 'GPSImgDirection' },
|
|
3056
3058
|
'gpsimgdirectionref' => { 130 => 0x10, 484 => 'GPSImgDirectionRef' },
|
|
3057
|
-
'gpslatitude' => { 116 => 'GpsLatitude', 130 => 0x2, 160 => 'Latitude', 484 => 'GPSLatitude' },
|
|
3059
|
+
'gpslatitude' => { 114 => 'GPS-GPSLatitude', 116 => 'GpsLatitude', 130 => 0x2, 160 => 'Latitude', 484 => 'GPSLatitude' },
|
|
3058
3060
|
'gpslatituderef' => { 130 => 0x1 },
|
|
3059
|
-
'gpslongitude' => { 116 => 'GpsLongitude', 130 => 0x4, 160 => 'Longitude', 484 => 'GPSLongitude' },
|
|
3061
|
+
'gpslongitude' => { 114 => 'GPS-GPSLongitude', 116 => 'GpsLongitude', 130 => 0x4, 160 => 'Longitude', 484 => 'GPSLongitude' },
|
|
3060
3062
|
'gpslongituderef' => { 130 => 0x3 },
|
|
3061
3063
|
'gpslongtitude' => { 116 => 'GpsLongtitude' },
|
|
3062
3064
|
'gpsmapdatum' => { 130 => 0x12, 160 => 'Datum', 484 => 'GPSMapDatum' },
|
|
@@ -3754,6 +3756,7 @@ my %tagLookup = (
|
|
|
3754
3756
|
'lenscorrectionsettings' => { 483 => 'LensCorrectionSettings' },
|
|
3755
3757
|
'lensdistortinfo' => { 475 => 'LensDistortInfo' },
|
|
3756
3758
|
'lensdistortionparams' => { 302 => 0x206 },
|
|
3759
|
+
'lensdriveend' => { 224 => 0x56 },
|
|
3757
3760
|
'lensdrivenoaf' => { 84 => 0x505 },
|
|
3758
3761
|
'lensdrivewhenafimpossible' => { 2 => 0xb },
|
|
3759
3762
|
'lense-mountversion' => { 409 => 0x3f0, 454 => 0xd },
|
|
@@ -3778,6 +3781,8 @@ my %tagLookup = (
|
|
|
3778
3781
|
'lensmodulationoptimizer' => { 127 => 0x1045 },
|
|
3779
3782
|
'lensmount' => { 409 => 0x99, 433 => 0x1892, 435 => 0x18be, 436 => 0x18ee, 437 => 0x17f2, 439 => 0x105, 440 => 0x105, 450 => 0x604, 451 => 0x5e },
|
|
3780
3783
|
'lensmount2' => { 454 => 0x8 },
|
|
3784
|
+
'lensmounttype' => { 224 => 0x35 },
|
|
3785
|
+
'lenspositionabsolute' => { 224 => 0x5a },
|
|
3781
3786
|
'lensprofilechromaticaberrationscale' => { 478 => 'LensProfileChromaticAberrationScale', 480 => 'LensProfileChromaticAberrationScale' },
|
|
3782
3787
|
'lensprofiledigest' => { 478 => 'LensProfileDigest', 480 => 'LensProfileDigest' },
|
|
3783
3788
|
'lensprofiledistortionscale' => { 478 => 'LensProfileDistortionScale', 480 => 'LensProfileDistortionScale' },
|
|
@@ -4725,6 +4730,7 @@ my %tagLookup = (
|
|
|
4725
4730
|
'occurrenceorganismquantity' => { 118 => [\'Occurrence','OccurrenceOrganismQuantity'] },
|
|
4726
4731
|
'occurrenceorganismquantitytype' => { 118 => [\'Occurrence','OccurrenceOrganismQuantityType'] },
|
|
4727
4732
|
'occurrenceothercatalognumbers' => { 118 => [\'Occurrence','OccurrenceOtherCatalogNumbers'] },
|
|
4733
|
+
'occurrencepathway' => { 118 => [\'Occurrence','OccurrencePathway'] },
|
|
4728
4734
|
'occurrencepreparations' => { 118 => [\'Occurrence','OccurrencePreparations'] },
|
|
4729
4735
|
'occurrencepreviousidentifications' => { 118 => [\'Occurrence','OccurrencePreviousIdentifications'] },
|
|
4730
4736
|
'occurrencerecordedby' => { 118 => [\'Occurrence','OccurrenceRecordedBy'] },
|
|
@@ -7117,6 +7123,7 @@ my %tagExists = (
|
|
|
7117
7123
|
'acceldata' => 1,
|
|
7118
7124
|
'accelerometermatrix' => 1,
|
|
7119
7125
|
'accelerometertime' => 1,
|
|
7126
|
+
'accelerometerunknown' => 1,
|
|
7120
7127
|
'accelmode' => 1,
|
|
7121
7128
|
'accelypr' => 1,
|
|
7122
7129
|
'accessdate' => 1,
|
|
@@ -7291,6 +7298,10 @@ my %tagExists = (
|
|
|
7291
7298
|
'appname' => 1,
|
|
7292
7299
|
'archivallocation' => 1,
|
|
7293
7300
|
'archivedfilename' => 1,
|
|
7301
|
+
'arcoreaccel' => 1,
|
|
7302
|
+
'arcorecustom' => 1,
|
|
7303
|
+
'arcoregyro' => 1,
|
|
7304
|
+
'arcorevideo' => 1,
|
|
7294
7305
|
'ardronefile' => 1,
|
|
7295
7306
|
'ardronetelemetry' => 1,
|
|
7296
7307
|
'artist2' => 1,
|
|
@@ -9102,6 +9113,7 @@ my %tagExists = (
|
|
|
9102
9113
|
'gyro360fly' => 1,
|
|
9103
9114
|
'gyromode' => 1,
|
|
9104
9115
|
'gyroscope' => 1,
|
|
9116
|
+
'gyroscopeunknown' => 1,
|
|
9105
9117
|
'gyroypr' => 1,
|
|
9106
9118
|
'handler' => 1,
|
|
9107
9119
|
'handlerclass' => 1,
|
|
@@ -10022,6 +10034,7 @@ my %tagExists = (
|
|
|
10022
10034
|
'metaimagesize' => 1,
|
|
10023
10035
|
'metarelation' => 1,
|
|
10024
10036
|
'metasampledesc' => 1,
|
|
10037
|
+
'metatype' => 1,
|
|
10025
10038
|
'metdata' => 1,
|
|
10026
10039
|
'meterinfo' => 1,
|
|
10027
10040
|
'meteringbutton' => 1,
|
|
@@ -12171,6 +12184,8 @@ my %tagExists = (
|
|
|
12171
12184
|
my %compositeModules = (
|
|
12172
12185
|
'filenumber' => 'Image::ExifTool::Canon',
|
|
12173
12186
|
'flash' => 'Image::ExifTool::XMP',
|
|
12187
|
+
'gpslatitude' => 'Image::ExifTool::GPS',
|
|
12188
|
+
'gpslongitude' => 'Image::ExifTool::GPS',
|
|
12174
12189
|
'gpsposition' => 'Image::ExifTool::Exif',
|
|
12175
12190
|
'jpgfromraw' => 'Image::ExifTool::Exif',
|
|
12176
12191
|
'originaldecisiondata' => 'Image::ExifTool::Canon',
|
|
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
|
|
|
12
12
|
=head1 TAG TABLES
|
|
13
13
|
|
|
14
14
|
The tables listed below give the names of all tags recognized by ExifTool.
|
|
15
|
-
They contain a total of
|
|
15
|
+
They contain a total of 25816 tags, with 16503 unique tag names.
|
|
16
16
|
|
|
17
17
|
B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
|
|
18
18
|
table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
|
|
@@ -11209,6 +11209,8 @@ Tags extracted from FLIR Public image Format (FPF) files.
|
|
|
11209
11209
|
0x1444 DRangePriorityAuto int16u
|
|
11210
11210
|
0x1445 DRangePriorityFixed int16u
|
|
11211
11211
|
0x1446 FlickerReduction int32u
|
|
11212
|
+
0x1447 FirmwareVersion string
|
|
11213
|
+
0x1448 FirmwareVersion2 string
|
|
11212
11214
|
0x3803 VideoRecordingMode int32u
|
|
11213
11215
|
0x3804 PeripheralLighting int16u
|
|
11214
11216
|
0x3806 VideoCompression int16u
|
|
@@ -13445,6 +13447,8 @@ DiMAGE X and Xt.
|
|
|
13445
13447
|
------ -------- --------
|
|
13446
13448
|
0x5500 BuildNumber string
|
|
13447
13449
|
0x5501 SerialNumber string
|
|
13450
|
+
0x6420 CustomRendered string
|
|
13451
|
+
0x64d0 DriveMode string
|
|
13448
13452
|
0x665e Sensor string
|
|
13449
13453
|
0x6705 ManufactureDate string
|
|
13450
13454
|
|
|
@@ -14555,7 +14559,6 @@ Tags found in the encrypted LensData from cameras such as the Z6 and Z7.
|
|
|
14555
14559
|
0 LensDataVersion no
|
|
14556
14560
|
4 ExitPupilPosition int8u
|
|
14557
14561
|
5 AFAperture int8u
|
|
14558
|
-
9 FocusPosition int8u
|
|
14559
14562
|
11 FocusDistance int8u
|
|
14560
14563
|
12 FocalLength int8u
|
|
14561
14564
|
13 LensIDNumber int8u
|
|
@@ -14567,10 +14570,14 @@ Tags found in the encrypted LensData from cameras such as the Z6 and Z7.
|
|
|
14567
14570
|
19 MCUVersion int8u
|
|
14568
14571
|
20 EffectiveMaxAperture int8u
|
|
14569
14572
|
48 LensID int16u
|
|
14573
|
+
53 LensMountType? int8u
|
|
14570
14574
|
54 MaxAperture int16u
|
|
14571
14575
|
56 FNumber int16u
|
|
14572
14576
|
60 FocalLength int16u
|
|
14573
|
-
|
|
14577
|
+
76 FocusDistanceRangeWidth? int8u
|
|
14578
|
+
78 FocusDistance int16u~
|
|
14579
|
+
86 LensDriveEnd? int8u
|
|
14580
|
+
90 LensPositionAbsolute? int32s
|
|
14574
14581
|
|
|
14575
14582
|
=head3 Nikon LensDataUnknown Tags
|
|
14576
14583
|
|
|
@@ -21676,6 +21683,7 @@ specification.
|
|
|
21676
21683
|
'Contents' Contents XMP
|
|
21677
21684
|
'Current User' CurrentUser no
|
|
21678
21685
|
'ICC Profile 0001' ICC_Profile ICC_Profile
|
|
21686
|
+
'IeImg' EmbeddedImage no
|
|
21679
21687
|
'Preview' PreviewImage no
|
|
21680
21688
|
'Property' PreviewInfo FlashPix PreviewInfo
|
|
21681
21689
|
'Subimage 0000 Header' SubimageHdr FlashPix SubimageHdr
|
|
@@ -23905,6 +23913,7 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
|
|
|
23905
23913
|
OccurrenceOrganismQuantity string_
|
|
23906
23914
|
OccurrenceOrganismQuantityType string_
|
|
23907
23915
|
OccurrenceOtherCatalogNumbers string_
|
|
23916
|
+
OccurrencePathway string_
|
|
23908
23917
|
OccurrencePreparations string_
|
|
23909
23918
|
OccurrencePreviousIdentifications string_
|
|
23910
23919
|
OccurrenceRecordedBy string_
|
|
@@ -24137,6 +24146,7 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
|
|
|
24137
24146
|
OrganismQuantity string
|
|
24138
24147
|
OrganismQuantityType string
|
|
24139
24148
|
OtherCatalogNumbers string
|
|
24149
|
+
Pathway string
|
|
24140
24150
|
Preparations string
|
|
24141
24151
|
PreviousIdentifications string
|
|
24142
24152
|
RecordNumber string
|
|
@@ -28798,6 +28808,7 @@ MP4 metadata sample description.
|
|
|
28798
28808
|
Tag ID Tag Name Writable
|
|
28799
28809
|
------ -------- --------
|
|
28800
28810
|
0x0004 MetaFormat no
|
|
28811
|
+
0x0008 MetaType no
|
|
28801
28812
|
'btrt' BitrateInfo QuickTime Bitrate
|
|
28802
28813
|
'keys' Keys QuickTime Keys
|
|
28803
28814
|
|
|
@@ -29295,14 +29306,19 @@ Streaming metadata found in Parrot drone videos. See
|
|
|
29295
29306
|
L<https://developer.parrot.com/docs/pdraw/metadata.html> for the
|
|
29296
29307
|
specification.
|
|
29297
29308
|
|
|
29298
|
-
Tag ID
|
|
29299
|
-
------
|
|
29300
|
-
'P1'
|
|
29301
|
-
'P2'
|
|
29302
|
-
'P3'
|
|
29303
|
-
'E1'
|
|
29304
|
-
'E2'
|
|
29305
|
-
'E3'
|
|
29309
|
+
Tag ID Tag Name Writable
|
|
29310
|
+
------ -------- --------
|
|
29311
|
+
'P1' ParrotV1 Parrot V1
|
|
29312
|
+
'P2' ParrotV2 Parrot V2
|
|
29313
|
+
'P3' ParrotV3 Parrot V3
|
|
29314
|
+
'E1' ParrotTimeStamp Parrot TimeStamp
|
|
29315
|
+
'E2' ParrotFollowMe Parrot FollowMe
|
|
29316
|
+
'E3' ParrotAutomation Parrot Automation
|
|
29317
|
+
'application/arcore-accel' ARCoreAccel Parrot ARCoreAccel
|
|
29318
|
+
'application/arcore-custom-event'
|
|
29319
|
+
ARCoreCustom Parrot ARCoreCustom
|
|
29320
|
+
'application/arcore-gyro' ARCoreGyro Parrot ARCoreGyro
|
|
29321
|
+
'application/arcore-video-0' ARCoreVideo Parrot ARCoreVideo
|
|
29306
29322
|
|
|
29307
29323
|
=head3 Parrot V1 Tags
|
|
29308
29324
|
|
|
@@ -29430,6 +29446,36 @@ Parrot streaming metadata automation extension.
|
|
|
29430
29446
|
28 AutomationAnimation no
|
|
29431
29447
|
29 AutomationFlags no
|
|
29432
29448
|
|
|
29449
|
+
=head3 Parrot ARCoreAccel Tags
|
|
29450
|
+
|
|
29451
|
+
ARCore accelerometer data.
|
|
29452
|
+
|
|
29453
|
+
Index1 Tag Name Writable
|
|
29454
|
+
------ -------- --------
|
|
29455
|
+
4 AccelerometerUnknown? no
|
|
29456
|
+
5 Accelerometer no
|
|
29457
|
+
|
|
29458
|
+
=head3 Parrot ARCoreCustom Tags
|
|
29459
|
+
|
|
29460
|
+
Index1 Tag Name Writable
|
|
29461
|
+
------ -------- --------
|
|
29462
|
+
[no tags known]
|
|
29463
|
+
|
|
29464
|
+
=head3 Parrot ARCoreGyro Tags
|
|
29465
|
+
|
|
29466
|
+
ARCore accelerometer data.
|
|
29467
|
+
|
|
29468
|
+
Index1 Tag Name Writable
|
|
29469
|
+
------ -------- --------
|
|
29470
|
+
4 GyroscopeUnknown? no
|
|
29471
|
+
5 Gyroscope no
|
|
29472
|
+
|
|
29473
|
+
=head3 Parrot ARCoreVideo Tags
|
|
29474
|
+
|
|
29475
|
+
Index1 Tag Name Writable
|
|
29476
|
+
------ -------- --------
|
|
29477
|
+
[no tags known]
|
|
29478
|
+
|
|
29433
29479
|
=head2 Matroska Tags
|
|
29434
29480
|
|
|
29435
29481
|
The following tags are extracted from Matroska multimedia container files.
|
|
@@ -37236,14 +37282,14 @@ values, may created via the ExifTool configuration file.
|
|
|
37236
37282
|
GPSDestLongitude GPS:GPSDestLongitude no
|
|
37237
37283
|
GPS:GPSDestLongitudeRef
|
|
37238
37284
|
GPSDestLongitudeRef XMP-exif:GPSDestLongitude no
|
|
37239
|
-
GPSLatitude GPS:GPSLatitude
|
|
37285
|
+
GPSLatitude GPS:GPSLatitude yes/
|
|
37240
37286
|
GPS:GPSLatitudeRef
|
|
37241
37287
|
GPSLatitude QuickTime:GPSCoordinates no
|
|
37242
37288
|
GPSLatitude QuickTime:LocationInformation no
|
|
37243
37289
|
GPSLatitude Sony:GPSLatitude no
|
|
37244
37290
|
Sony:GPSLatitudeRef
|
|
37245
37291
|
GPSLatitudeRef XMP-exif:GPSLatitude no
|
|
37246
|
-
GPSLongitude GPS:GPSLongitude
|
|
37292
|
+
GPSLongitude GPS:GPSLongitude yes/
|
|
37247
37293
|
GPS:GPSLongitudeRef
|
|
37248
37294
|
GPSLongitude QuickTime:GPSCoordinates no
|
|
37249
37295
|
GPSLongitude QuickTime:LocationInformation no
|
|
@@ -975,7 +975,7 @@ TAG: foreach $tagInfo (@matchingTags) {
|
|
|
975
975
|
} else {
|
|
976
976
|
$wgrp = '';
|
|
977
977
|
}
|
|
978
|
-
foreach $wtag (keys %{$$tagInfo{WriteAlso}}) {
|
|
978
|
+
foreach $wtag (sort keys %{$$tagInfo{WriteAlso}}) {
|
|
979
979
|
my ($n,$e) = $self->SetNewValue($wgrp . $wtag, undef, Replace=>2);
|
|
980
980
|
$numSet += $n;
|
|
981
981
|
}
|
|
@@ -1123,7 +1123,7 @@ WriteAlso:
|
|
|
1123
1123
|
$wgrp = '';
|
|
1124
1124
|
}
|
|
1125
1125
|
local $SIG{'__WARN__'} = \&SetWarning;
|
|
1126
|
-
foreach $wtag (keys %$writeAlso) {
|
|
1126
|
+
foreach $wtag (sort keys %$writeAlso) {
|
|
1127
1127
|
my %opts = (
|
|
1128
1128
|
Type => 'ValueConv',
|
|
1129
1129
|
Protected => $protected | 0x02,
|
|
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
|
|
|
29
29
|
%jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
|
|
30
30
|
%static_vars);
|
|
31
31
|
|
|
32
|
-
$VERSION = '12.
|
|
32
|
+
$VERSION = '12.44';
|
|
33
33
|
$RELEASE = '';
|
|
34
34
|
@ISA = qw(Exporter);
|
|
35
35
|
%EXPORT_TAGS = (
|
package/bin/pp_build_exe.args
CHANGED
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
# 10) Copy zip archive to web servers.
|
|
22
22
|
# 11) Update zip file version in link and text of html/index.html.
|
|
23
23
|
#------------------------------------------------------------------------------
|
|
24
|
-
-T exiftool-12.
|
|
25
|
-
#--info=FileVersion=12.4.
|
|
26
|
-
#--info=ProductVersion=12.4.
|
|
27
|
-
##"--info=Build Date=2022:07:06
|
|
24
|
+
-T exiftool-12.44
|
|
25
|
+
#--info=FileVersion=12.4.4.0
|
|
26
|
+
#--info=ProductVersion=12.4.4.0
|
|
27
|
+
##"--info=Build Date=2022:07:21 06:23:10-04:00"
|
|
28
28
|
##"--info=Bundled Perl Version=ActivePerl 5.24.0"
|
|
29
29
|
##"--info=LegalCopyright=Copyright (c) 2003-2022, Phil Harvey"
|
|
30
30
|
##"--info=ProductName=ExifTool"
|