exiftool-vendored.exe 13.30.0 → 13.32.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.exe +0 -0
- package/bin/exiftool_files/exiftool.pl +14 -7
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +11 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +6 -3
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +3 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +10 -3
- package/bin/exiftool_files/lib/Image/ExifTool/LNK.pm +21 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/de.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/fr.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/LigoGPS.pm +14 -6
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +13 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Parrot.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +179 -52
- package/bin/exiftool_files/lib/Image/ExifTool/Plot.pm +2 -3
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +3 -2
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +41 -17
- package/bin/exiftool_files/lib/Image/ExifTool/Sigma.pm +19 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +3760 -3750
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +32 -9
- package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +134 -131
- package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool.pm +6 -4
- package/bin/exiftool_files/windows_exiftool.txt +14 -11
- package/package.json +12 -6
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
# IB) Iliah Borg private communication (LibRaw)
|
|
47
47
|
# JD) Jens Duttke private communication
|
|
48
48
|
# NJ) Niels Kristian Bech Jensen private communication
|
|
49
|
+
# KG) Karsten Gieselmann private communication
|
|
49
50
|
#
|
|
50
51
|
# Notes: See POD documentation at the bottom of this file
|
|
51
52
|
#------------------------------------------------------------------------------
|
|
@@ -58,11 +59,14 @@ use Image::ExifTool::Exif;
|
|
|
58
59
|
use Image::ExifTool::GPS;
|
|
59
60
|
use Image::ExifTool::HP;
|
|
60
61
|
|
|
61
|
-
$VERSION = '3.
|
|
62
|
+
$VERSION = '3.53';
|
|
62
63
|
|
|
63
64
|
sub CryptShutterCount($$);
|
|
64
65
|
sub PrintFilter($$$);
|
|
65
66
|
sub DecodeAFPoints($$$$;$);
|
|
67
|
+
sub AFPointNamesK3III($$;$);
|
|
68
|
+
sub AFPointValuesK3III($$);
|
|
69
|
+
sub AFAreasK3III($$);
|
|
66
70
|
|
|
67
71
|
# pentax lens type codes (ref 4)
|
|
68
72
|
# The first number gives the lens series, and the 2nd gives the model number
|
|
@@ -1148,31 +1152,38 @@ my %binaryDataAttrs = (
|
|
|
1148
1152
|
Notes => 'Pentax models',
|
|
1149
1153
|
Writable => 'int16u',
|
|
1150
1154
|
PrintConvColumns => 2,
|
|
1155
|
+
PrintHex => 1,
|
|
1151
1156
|
PrintConv => { #PH
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1157
|
+
0x00 => 'Normal',
|
|
1158
|
+
0x01 => 'Macro',
|
|
1159
|
+
0x02 => 'Infinity',
|
|
1160
|
+
0x03 => 'Manual',
|
|
1161
|
+
0x04 => 'Super Macro', #JD
|
|
1162
|
+
0x05 => 'Pan Focus',
|
|
1163
|
+
0x06 => 'Auto-area', # (GR III)
|
|
1164
|
+
0x07 => 'Zone Select', # (GR III)
|
|
1165
|
+
0x08 => 'Select', # (GR III)
|
|
1166
|
+
0x09 => 'Pinpoint', # (GR III)
|
|
1167
|
+
0x0a => 'Tracking', # (GR III)
|
|
1168
|
+
0x0b => 'Continuous', # (GR III)
|
|
1169
|
+
0x0c => 'Snap', # (GR III)
|
|
1170
|
+
0x10 => 'AF-S (Focus-priority)', #17
|
|
1171
|
+
0x11 => 'AF-C (Focus-priority)', #17
|
|
1172
|
+
0x12 => 'AF-A (Focus-priority)', #PH (educated guess)
|
|
1173
|
+
0x20 => 'Contrast-detect (Focus-priority)', #PH (K-5)
|
|
1174
|
+
0x21 => 'Tracking Contrast-detect (Focus-priority)', #PH (K-5)
|
|
1169
1175
|
# bit 8 indicates release priority
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
#
|
|
1175
|
-
|
|
1176
|
+
0x110 => 'AF-S (Release-priority)', #PH (K-5,K-3)
|
|
1177
|
+
0x111 => 'AF-C (Release-priority)', #PH (K-5,K-3)
|
|
1178
|
+
0x112 => 'AF-A (Release-priority)', #PH (K-3)
|
|
1179
|
+
0x120 => 'Contrast-detect (Release-priority)', #PH (K-01)
|
|
1180
|
+
# bit 15 indicates macro mode (disabled for MF, and defaults to Select for Snap, Infinity)
|
|
1181
|
+
0x8006 => 'Auto-area (Macro)', # (GR III)
|
|
1182
|
+
0x8007 => 'Zone Select (Macro)', # (GR III)
|
|
1183
|
+
0x8008 => 'Select (Macro)', # (GR III)
|
|
1184
|
+
0x8009 => 'Pinpoint (Macro)', # (GR III)
|
|
1185
|
+
0x800a => 'Tracking (Macro)', # (GR III)
|
|
1186
|
+
0x800b => 'Continuous (Macro)', # (GR III)
|
|
1176
1187
|
},
|
|
1177
1188
|
},{
|
|
1178
1189
|
Name => 'FocusMode',
|
|
@@ -1188,7 +1199,7 @@ my %binaryDataAttrs = (
|
|
|
1188
1199
|
],
|
|
1189
1200
|
0x000e => [{ #29
|
|
1190
1201
|
Name => 'AFPointSelected',
|
|
1191
|
-
Condition => '$$self{Model} =~ /K-1\b/',
|
|
1202
|
+
Condition => '$$self{Model} =~ /(K-1|645Z)\b/', # (NC for 645Z)
|
|
1192
1203
|
Writable => 'int16u',
|
|
1193
1204
|
Notes => 'K-1',
|
|
1194
1205
|
PrintConvColumns => 2,
|
|
@@ -1354,6 +1365,7 @@ my %binaryDataAttrs = (
|
|
|
1354
1365
|
0xfffd => 'Automatic Tracking AF', #JD
|
|
1355
1366
|
0xfffc => 'Face Detect AF', #JD
|
|
1356
1367
|
0xfffb => 'AF Select', #PH (Q select from 25-areas)
|
|
1368
|
+
0xfffa => 'Auto 2', #KarstenGieselmann
|
|
1357
1369
|
0 => 'None', #PH (Q in manual focus mode)
|
|
1358
1370
|
1 => 'Upper-left',
|
|
1359
1371
|
2 => 'Top',
|
|
@@ -1366,16 +1378,20 @@ my %binaryDataAttrs = (
|
|
|
1366
1378
|
9 => 'Lower-left',
|
|
1367
1379
|
10 => 'Bottom',
|
|
1368
1380
|
11 => 'Lower-right',
|
|
1369
|
-
},
|
|
1381
|
+
},{
|
|
1370
1382
|
# (second number exists for K-5II(s) is usually 0, but is 1 for AF.C with
|
|
1371
1383
|
# AFPointMode=='Select' and extended tracking focus points are enabled in the settings)
|
|
1372
|
-
|
|
1384
|
+
# -----
|
|
1385
|
+
#KG: for K-70 and older models with 11 PDAF points (K-S2, K-S1, K-50, K-500, K-30, K-5II(s) )
|
|
1386
|
+
0 => 'Single Point', # Select AF (1-point) in both PDAF and CAF modes
|
|
1387
|
+
1 => 'Expanded Area', # Expanded Area AF in AF-C
|
|
1388
|
+
}],
|
|
1373
1389
|
}],
|
|
1374
1390
|
0x000f => [{ #PH
|
|
1375
1391
|
Name => 'AFPointsInFocus',
|
|
1376
|
-
Condition => '$$self{Model} =~ /K-3\b/',
|
|
1392
|
+
Condition => '$$self{Model} =~ /K-(3|S1|S2)\b/', #KG: valid also for K-S1/S2
|
|
1377
1393
|
Writable => 'int32u',
|
|
1378
|
-
Notes => 'K-3 only',
|
|
1394
|
+
Notes => 'K-3, K-S1 and K-S2 only',
|
|
1379
1395
|
PrintHex => 1,
|
|
1380
1396
|
PrintConv => {
|
|
1381
1397
|
0 => '(none)',
|
|
@@ -2168,7 +2184,7 @@ my %binaryDataAttrs = (
|
|
|
2168
2184
|
11 => 'Flat', #31 (K-70)
|
|
2169
2185
|
# the following values from GR III
|
|
2170
2186
|
256 => 'Standard',
|
|
2171
|
-
257 => 'Vivid',
|
|
2187
|
+
257 => 'Vivid',
|
|
2172
2188
|
258 => 'Monotone',
|
|
2173
2189
|
259 => 'Soft Monotone',
|
|
2174
2190
|
260 => 'Hard Monotone',
|
|
@@ -3096,13 +3112,15 @@ my %binaryDataAttrs = (
|
|
|
3096
3112
|
# 0x0406 - undef[4116] (K-5)
|
|
3097
3113
|
# 0x0407 - undef[3072] (Q DNG)
|
|
3098
3114
|
# 0x0408 - undef[1024] (Q DNG)
|
|
3115
|
+
0x040c => {
|
|
3116
|
+
Name => 'AFInfoK3III',
|
|
3117
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Pentax::AFInfoK3III' },
|
|
3118
|
+
},
|
|
3099
3119
|
0x0e00 => {
|
|
3100
3120
|
Name => 'PrintIM',
|
|
3101
3121
|
Description => 'Print Image Matching',
|
|
3102
3122
|
Writable => 0,
|
|
3103
|
-
SubDirectory => {
|
|
3104
|
-
TagTable => 'Image::ExifTool::PrintIM::Main',
|
|
3105
|
-
},
|
|
3123
|
+
SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main' },
|
|
3106
3124
|
},
|
|
3107
3125
|
);
|
|
3108
3126
|
|
|
@@ -5005,11 +5023,11 @@ my %binaryDataAttrs = (
|
|
|
5005
5023
|
# 0x0a - values: 00,05,0d,15,86,8e,a6,ae
|
|
5006
5024
|
0x0b => { #JD
|
|
5007
5025
|
Name => 'AFPointsInFocus',
|
|
5008
|
-
Condition => '$$self{Model} !~ /(K-(1|3|70)|KP)\b/',
|
|
5026
|
+
Condition => '$$self{Model} !~ /(K-(1|3|70|S1|S2)|KP)\b/', #KG: valid also for K-S1/S2
|
|
5009
5027
|
Notes => q{
|
|
5010
|
-
models other than the K-1, K-3, K-70 and
|
|
5011
|
-
even though a single AFPoint has been selected, in which case the
|
|
5012
|
-
AFPoint is the first reported
|
|
5028
|
+
models other than the K-1, K-3, K-70, KP and K-S1/S2. May report two points
|
|
5029
|
+
in focus even though a single AFPoint has been selected, in which case the
|
|
5030
|
+
selected AFPoint is the first reported
|
|
5013
5031
|
},
|
|
5014
5032
|
PrintConvColumns => 2,
|
|
5015
5033
|
PrintConv => {
|
|
@@ -5042,34 +5060,34 @@ my %binaryDataAttrs = (
|
|
|
5042
5060
|
Format => 'int16uRev[69]',
|
|
5043
5061
|
Unknown => 1,
|
|
5044
5062
|
Notes => 'some unknown values related to each AFPoint',
|
|
5045
|
-
# order is the same as
|
|
5063
|
+
# order is the same as AFPointsSelected below, but there is an additional value for
|
|
5046
5064
|
# each AF point starting at offset 28 in the array (yes, the range overlaps
|
|
5047
5065
|
# with the 1st values)
|
|
5048
5066
|
# (values are int16s stored in reversed byte order)
|
|
5049
5067
|
ValueConv => 'my @a=split " ",$val;$_>32767 and $_-=65536 foreach @a;join " ",@a',
|
|
5050
|
-
PrintConv => \&
|
|
5068
|
+
PrintConv => \&AFPointValuesK3III,
|
|
5051
5069
|
},
|
|
5052
5070
|
0x12a => { # byte has a value of 2 if corresponding AF point is selected
|
|
5053
|
-
Name => 'AFPointsSelected',
|
|
5071
|
+
Name => 'AFPointsSelected', # (should probably be "AFPointSelected", but the bitmask allows multiple points)
|
|
5054
5072
|
Condition => '$$self{Model} eq "PENTAX K-3 Mark III"', # any other models?
|
|
5055
5073
|
Notes => q{
|
|
5056
5074
|
K-3III only. 41 selectable AF points from a total of 101 available in a 13x9
|
|
5057
5075
|
grid. Columns are labelled A-M and rows are 1-9. The center point is G5
|
|
5058
5076
|
},
|
|
5059
5077
|
Format => 'int8u[41]',
|
|
5060
|
-
PrintConv => 'Image::ExifTool::Pentax::
|
|
5078
|
+
PrintConv => 'Image::ExifTool::Pentax::AFPointNamesK3III($val,$self,2)',
|
|
5061
5079
|
},
|
|
5062
5080
|
#
|
|
5063
5081
|
# (maybe not coincidentally, there are 60 unknown bytes
|
|
5064
5082
|
# here, and there are also 60 non-selectable AF points)
|
|
5065
5083
|
#
|
|
5066
5084
|
0x18f => { # byte has a value of 1 if corresponding AF point is ... in focus maybe?
|
|
5067
|
-
# usually the same points as
|
|
5085
|
+
# usually the same points as AFPointsSelected above, but not always
|
|
5068
5086
|
Name => 'AFPointsUnknown',
|
|
5069
5087
|
Condition => '$$self{Model} eq "PENTAX K-3 Mark III"', # any other models?
|
|
5070
5088
|
Unknown => 1,
|
|
5071
5089
|
Format => 'int8u[41]',
|
|
5072
|
-
PrintConv => \&
|
|
5090
|
+
PrintConv => \&AFPointNamesK3III,
|
|
5073
5091
|
},
|
|
5074
5092
|
0x1fa => {
|
|
5075
5093
|
Name => 'LiveView',
|
|
@@ -5096,7 +5114,7 @@ my %binaryDataAttrs = (
|
|
|
5096
5114
|
Name => 'NumCAFPoints',
|
|
5097
5115
|
RawConv => '$$self{NumCAFPoints} = ($val & 0x0f) * ($val >> 4); $val',
|
|
5098
5116
|
ValueConv => '($val >> 4) * ($val & 0x0f)',
|
|
5099
|
-
},
|
|
5117
|
+
},
|
|
5100
5118
|
1.1 => {
|
|
5101
5119
|
Name => 'CAFGridSize',
|
|
5102
5120
|
ValueConv => '($val >> 4) . " " . ($val & 0x0f)', # (width x height)
|
|
@@ -5686,6 +5704,95 @@ my %binaryDataAttrs = (
|
|
|
5686
5704
|
ValueConvInv => '-$val * 2',
|
|
5687
5705
|
},
|
|
5688
5706
|
);
|
|
5707
|
+
|
|
5708
|
+
%Image::ExifTool::Pentax::AFInfoK3III = (
|
|
5709
|
+
%binaryDataAttrs,
|
|
5710
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
5711
|
+
FORMAT => 'int16u',
|
|
5712
|
+
DATAMEMBER => [ 3 ],
|
|
5713
|
+
NOTES => 'AF tags written by the K-3 Mark III, GR III and GR IIIx.',
|
|
5714
|
+
0 => {
|
|
5715
|
+
Name => 'AFInfo',
|
|
5716
|
+
Format => 'int16u[$size/2]',
|
|
5717
|
+
Notes => q{
|
|
5718
|
+
entire AFInfoK3III structure. Provides access to raw numerical values and
|
|
5719
|
+
facilitates the writing of the whole structure
|
|
5720
|
+
},
|
|
5721
|
+
Unknown => 1,
|
|
5722
|
+
},
|
|
5723
|
+
0.1 => {
|
|
5724
|
+
Name => 'AFMode',
|
|
5725
|
+
PrintConv => {
|
|
5726
|
+
0 => 'Phase Detect',
|
|
5727
|
+
2 => 'Contrast Detect',
|
|
5728
|
+
255 => 'Manual Focus',
|
|
5729
|
+
},
|
|
5730
|
+
},
|
|
5731
|
+
1 => {
|
|
5732
|
+
Name => 'AFSelectionMode',
|
|
5733
|
+
PrintHex => 1,
|
|
5734
|
+
PrintConv => {
|
|
5735
|
+
0 => 'Manual Focus',
|
|
5736
|
+
1 => 'Spot',
|
|
5737
|
+
2 => 'Select (5-points)',
|
|
5738
|
+
3 => 'Expanded Area (S)',
|
|
5739
|
+
4 => 'Expanded Area (M)',
|
|
5740
|
+
5 => 'Expanded Area (L)',
|
|
5741
|
+
6 => 'Select (S)',
|
|
5742
|
+
7 => 'Zone Select (21-point)',
|
|
5743
|
+
8 => 'Select XS',
|
|
5744
|
+
0xff => 'Auto Area',
|
|
5745
|
+
# Contrast-detect modes
|
|
5746
|
+
0x2001 => 'Contrast-detect Auto Area',
|
|
5747
|
+
0x2002 => 'Contrast-detect Select', # (GR III)
|
|
5748
|
+
0x2003 => 'Pinpoint', # (GR III)
|
|
5749
|
+
0x2004 => 'Tracking',
|
|
5750
|
+
0x2005 => 'Continuous', # (GR III)
|
|
5751
|
+
0x2006 => 'Face Detection',
|
|
5752
|
+
0x2007 => 'Contrast-detect Select (S)',
|
|
5753
|
+
0x2008 => 'Contrast-detect Select (M)',
|
|
5754
|
+
0x2009 => 'Contrast-detect Select (L)',
|
|
5755
|
+
0x200a => 'Contrast-detect Zone Select', # (GR III)
|
|
5756
|
+
0x200b => 'Contrast-detect Spot',
|
|
5757
|
+
},
|
|
5758
|
+
},
|
|
5759
|
+
3 => {
|
|
5760
|
+
Name => 'NumAFPoints',
|
|
5761
|
+
RawConv => '$$self{NumAFPoints} = $val',
|
|
5762
|
+
},
|
|
5763
|
+
# the data for each AF point consists of 7 int16u values:
|
|
5764
|
+
# the frame width/height, the X/Y position of the focus area,
|
|
5765
|
+
# width/height of the focus area (0/0 for phase-detect modes),
|
|
5766
|
+
# followed by a flags word
|
|
5767
|
+
7 => { # (the same for all areas in my samples, so only extract the first)
|
|
5768
|
+
Name => 'AFFrameSize',
|
|
5769
|
+
Condition => '$$self{NumAFPoints} > 0',
|
|
5770
|
+
Format => 'int16u[2]',
|
|
5771
|
+
Writable => 0,
|
|
5772
|
+
PrintConv => '$val=~s/ /x/; $val',
|
|
5773
|
+
},
|
|
5774
|
+
7.1 => {
|
|
5775
|
+
Name => 'AFAreas',
|
|
5776
|
+
Format => 'int16u[7 * $val{3}]',
|
|
5777
|
+
Notes => q{
|
|
5778
|
+
X,Y position of each AF area, width, with "in-focus" for points in focus,
|
|
5779
|
+
"central" for the center of the selected area, or "peripheral" for points
|
|
5780
|
+
outside the selected area
|
|
5781
|
+
},
|
|
5782
|
+
Writable => 0,
|
|
5783
|
+
List => 1, # (for documentation purposes only)
|
|
5784
|
+
PrintConv => \&AFAreasK3III,
|
|
5785
|
+
},
|
|
5786
|
+
11 => { # (the same for all areas in my samples, so only extract the first)
|
|
5787
|
+
Name => 'AFAreaSize',
|
|
5788
|
+
Condition => '$$self{NumAFPoints} > 0 and $$valPt !~ /^\0\0\0\0/',
|
|
5789
|
+
Notes => 'only for contrast-detect modes',
|
|
5790
|
+
Format => 'int16u[2]',
|
|
5791
|
+
Writable => 0,
|
|
5792
|
+
PrintConv => '$val=~s/ /x/; $val',
|
|
5793
|
+
},
|
|
5794
|
+
);
|
|
5795
|
+
|
|
5689
5796
|
# white balance RGGB levels (ref 28)
|
|
5690
5797
|
%Image::ExifTool::Pentax::WBLevels = (
|
|
5691
5798
|
%binaryDataAttrs,
|
|
@@ -5749,7 +5856,7 @@ my %binaryDataAttrs = (
|
|
|
5749
5856
|
},
|
|
5750
5857
|
);
|
|
5751
5858
|
|
|
5752
|
-
# lens information for
|
|
5859
|
+
# lens information for Pentax Q (ref PH)
|
|
5753
5860
|
# (306 bytes long, I wonder if this contains vignetting information too?)
|
|
5754
5861
|
%Image::ExifTool::Pentax::LensInfoQ = (
|
|
5755
5862
|
%binaryDataAttrs,
|
|
@@ -5792,21 +5899,21 @@ my %binaryDataAttrs = (
|
|
|
5792
5899
|
},
|
|
5793
5900
|
4 => {
|
|
5794
5901
|
Name => 'AFPointsInFocus',
|
|
5795
|
-
Condition => '$$self{Model} =~ /K
|
|
5902
|
+
Condition => '$$self{Model} =~ /K(P|-1|-70)\b/',
|
|
5796
5903
|
Format => 'int8u[int(($val{2}+3)/4)]',
|
|
5797
5904
|
Writable => 0,
|
|
5798
5905
|
PrintConv => 'Image::ExifTool::Pentax::DecodeAFPoints($val,$$self{NumAFPoints},2,0x02)',
|
|
5799
5906
|
},
|
|
5800
5907
|
4.1 => {
|
|
5801
5908
|
Name => 'AFPointsSelected',
|
|
5802
|
-
Condition => '$$self{Model} =~ /K
|
|
5909
|
+
Condition => '$$self{Model} =~ /K(P|-1|-70)\b/',
|
|
5803
5910
|
Format => 'int8u[int(($val{2}+3)/4)]',
|
|
5804
5911
|
Writable => 0,
|
|
5805
5912
|
PrintConv => 'Image::ExifTool::Pentax::DecodeAFPoints($val,$$self{NumAFPoints},2,0x03)',
|
|
5806
5913
|
},
|
|
5807
5914
|
4.2 => {
|
|
5808
5915
|
Name => 'AFPointsSpecial',
|
|
5809
|
-
Condition => '$$self{Model} =~ /K
|
|
5916
|
+
Condition => '$$self{Model} =~ /K(P|-1|-70)\b/',
|
|
5810
5917
|
Format => 'int8u[int(($val{2}+3)/4)]',
|
|
5811
5918
|
Writable => 0,
|
|
5812
5919
|
PrintConv => 'Image::ExifTool::Pentax::DecodeAFPoints($val,$$self{NumAFPoints},2,0x03,0x03)',
|
|
@@ -6437,6 +6544,7 @@ sub DecodeAFPoints($$$$;$)
|
|
|
6437
6544
|
{
|
|
6438
6545
|
my ($val, $num, $bits, $mask, $bitVal) = @_;
|
|
6439
6546
|
my @bytes = split ' ', $val;
|
|
6547
|
+
return '(none)' unless @bytes;
|
|
6440
6548
|
my $i = 1; # (starts at AF point number 1)
|
|
6441
6549
|
my $shift = 8 - $bits;
|
|
6442
6550
|
my $byte = shift @bytes;
|
|
@@ -6459,9 +6567,9 @@ sub DecodeAFPoints($$$$;$)
|
|
|
6459
6567
|
}
|
|
6460
6568
|
|
|
6461
6569
|
#------------------------------------------------------------------------------
|
|
6462
|
-
# Print AF Point names
|
|
6570
|
+
# Print K-3III AF Point names (ref PH)
|
|
6463
6571
|
# Inputs: 0) value, 1) ExifTool ref, 2) optional value to match
|
|
6464
|
-
sub
|
|
6572
|
+
sub AFPointNamesK3III($$;$)
|
|
6465
6573
|
{
|
|
6466
6574
|
my @a = split ' ', $_[0];
|
|
6467
6575
|
my $match = $_[2];
|
|
@@ -6475,10 +6583,10 @@ sub AFPointsK3iii($$;$)
|
|
|
6475
6583
|
}
|
|
6476
6584
|
|
|
6477
6585
|
#------------------------------------------------------------------------------
|
|
6478
|
-
# Print AF point values
|
|
6586
|
+
# Print K-3III AF point values (ref PH)
|
|
6479
6587
|
# Inputs: 0) value, 1) ExifTool ref
|
|
6480
6588
|
# Notes: this is experimental and not well understood
|
|
6481
|
-
sub
|
|
6589
|
+
sub AFPointValuesK3III($$)
|
|
6482
6590
|
{
|
|
6483
6591
|
my @a = split ' ', shift;
|
|
6484
6592
|
my @vals;
|
|
@@ -6497,6 +6605,25 @@ sub AFPointValues($$)
|
|
|
6497
6605
|
return @vals ? join ',', sort @vals : '(none)';
|
|
6498
6606
|
}
|
|
6499
6607
|
|
|
6608
|
+
#------------------------------------------------------------------------------
|
|
6609
|
+
# Print K-3III AF point positions from tag 0x040c (ref KG)
|
|
6610
|
+
# Inputs: 0) raw value, 1) ExifTool ref
|
|
6611
|
+
sub AFAreasK3III($$)
|
|
6612
|
+
{
|
|
6613
|
+
my ($val, $et) = @_;
|
|
6614
|
+
return '(none)' unless $val;
|
|
6615
|
+
my @vals = split ' ', $val;
|
|
6616
|
+
# flags bits: [mask, value, description]
|
|
6617
|
+
my @flags = ([0x10,0x10,'central'],[0x08,0,'peripheral'],[0x04,0x04,'in-focus']);
|
|
6618
|
+
my ($i, @strs);
|
|
6619
|
+
for ($i=0; $i+7<=@vals; $i+=7) {
|
|
6620
|
+
my @a;
|
|
6621
|
+
($vals[$i+6] & $$_[0]) == $$_[1] and push @a, $$_[2] foreach @flags;
|
|
6622
|
+
push @strs, $vals[$i+2] . ',' . $vals[$i+3] . (@a ? '(' . join(',',@a) . ')' : '');
|
|
6623
|
+
}
|
|
6624
|
+
return \@strs;
|
|
6625
|
+
}
|
|
6626
|
+
|
|
6500
6627
|
#------------------------------------------------------------------------------
|
|
6501
6628
|
# Convert Pentax hex-based EV (modulo 8) to real number
|
|
6502
6629
|
# Inputs: 0) value to convert
|
|
@@ -11,7 +11,7 @@ package Image::ExifTool::Plot;
|
|
|
11
11
|
use strict;
|
|
12
12
|
use vars qw($VERSION);
|
|
13
13
|
|
|
14
|
-
$VERSION = '1.
|
|
14
|
+
$VERSION = '1.05';
|
|
15
15
|
|
|
16
16
|
# default plot settings (lower-case settings may be overridden by the user)
|
|
17
17
|
my %defaults = (
|
|
@@ -201,7 +201,7 @@ sub AddPoints($$$)
|
|
|
201
201
|
$$data{$name}[$xmax - $xmin] = $val if $xmax >= $xmin;
|
|
202
202
|
next;
|
|
203
203
|
}
|
|
204
|
-
if ($docNum and $num{$name} < $docNum) {
|
|
204
|
+
if ($docNum and defined $num{$name} and $num{$name} < $docNum) {
|
|
205
205
|
$num{$name} = $docNum; # keep documents synchronized if some tags are missing
|
|
206
206
|
} else {
|
|
207
207
|
$num{$name} = $xmax unless defined $num{$name};
|
|
@@ -321,7 +321,6 @@ sub Draw($$)
|
|
|
321
321
|
foreach (0 .. (($multi[$plotNum] || 1) - 1)) {
|
|
322
322
|
push @{$$self{Name}}, shift(@names);
|
|
323
323
|
}
|
|
324
|
-
warn "@{$$self{Name}}\n";
|
|
325
324
|
undef $min; undef $max;
|
|
326
325
|
foreach ($scat .. (@{$$self{Name}} - 1)) {
|
|
327
326
|
my $dat = $$self{Data}{$$self{Name}[$_]};
|
|
@@ -49,7 +49,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
49
49
|
use Image::ExifTool::Exif;
|
|
50
50
|
use Image::ExifTool::GPS;
|
|
51
51
|
|
|
52
|
-
$VERSION = '3.
|
|
52
|
+
$VERSION = '3.18';
|
|
53
53
|
|
|
54
54
|
sub ProcessMOV($$;$);
|
|
55
55
|
sub ProcessKeys($$$);
|
|
@@ -10522,12 +10522,13 @@ QTLang: foreach $tag (@{$$et{QTLang}}) {
|
|
|
10522
10522
|
for (; $trailer; $trailer=$$trailer[3]) {
|
|
10523
10523
|
next if $lastPos > $$trailer[1]; # skip if we have already processed this as an atom
|
|
10524
10524
|
last unless $raf->Seek($$trailer[1], 0);
|
|
10525
|
-
if ($$trailer[0] eq 'LigoGPS' and $raf->Read($buff, 8) == 8 and $buff =~ /skip$/) {
|
|
10525
|
+
if ($$trailer[0] eq 'LigoGPS' and $raf->Read($buff, 8) == 8 and $buff =~ /skip$/i) {
|
|
10526
10526
|
$ee or $et->Warn('Use the ExtractEmbedded option to decode timed GPS',3), next;
|
|
10527
10527
|
my $len = Get32u(\$buff, 0) - 16;
|
|
10528
10528
|
if ($len > 0 and $raf->Read($buff, $len) == $len and $buff =~ /^LIGOGPSINFO\0/) {
|
|
10529
10529
|
my $tbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
|
|
10530
10530
|
my %dirInfo = ( DataPt => \$buff, DataPos => $$trailer[1] + 8, DirName => 'LigoGPSTrailer' );
|
|
10531
|
+
$et->VerboseDump(\$buff, DataPos => $dirInfo{DataPos});
|
|
10531
10532
|
Image::ExifTool::LigoGPS::ProcessLigoGPS($et, \%dirInfo, $tbl);
|
|
10532
10533
|
} else {
|
|
10533
10534
|
$et->Warn('Unrecognized data in LigoGPS trailer');
|
|
@@ -111,7 +111,7 @@ my %insvLimit = (
|
|
|
111
111
|
The tags below are extracted from timed metadata in QuickTime and other
|
|
112
112
|
formats of video files when the ExtractEmbedded option is used. Although
|
|
113
113
|
most of these tags are combined into the single table below, ExifTool
|
|
114
|
-
currently reads
|
|
114
|
+
currently reads 110 different types of timed GPS metadata from video files.
|
|
115
115
|
},
|
|
116
116
|
GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
|
|
117
117
|
GPSLongitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")' },
|
|
@@ -210,8 +210,8 @@ my %insvLimit = (
|
|
|
210
210
|
ProcessProc => \&ProcessFMAS,
|
|
211
211
|
},
|
|
212
212
|
},{
|
|
213
|
-
Name => 'gpmd_Wolfbox', # Wolfbox G900 Dashcam
|
|
214
|
-
Condition => '$$valPt =~ /^.{136}0{16}HYTH/s',
|
|
213
|
+
Name => 'gpmd_Wolfbox', # Wolfbox G900 Dashcam and Redtiger F9 4K
|
|
214
|
+
Condition => '$$valPt =~ /^.{136}0{16}(HYTH|XXXX)/s',
|
|
215
215
|
SubDirectory => {
|
|
216
216
|
TagTable => 'Image::ExifTool::QuickTime::Stream',
|
|
217
217
|
ProcessProc => \&ProcessWolfbox,
|
|
@@ -317,6 +317,8 @@ my %insvLimit = (
|
|
|
317
317
|
ByteOrder => 'Little-Endian',
|
|
318
318
|
},
|
|
319
319
|
}],
|
|
320
|
+
# (have also seen unknown mett from Google Pixel with MetaType 'application/meta'
|
|
321
|
+
# and 'application/microvideo-image-meta')
|
|
320
322
|
mett => { # Parrot drones and iPhone/Android using ARCore
|
|
321
323
|
Name => 'mett',
|
|
322
324
|
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::mett' },
|
|
@@ -2288,6 +2290,7 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
|
2288
2290
|
$lon = ($lon - 2199.19873715495) / 2;
|
|
2289
2291
|
$ddd = 1;
|
|
2290
2292
|
} elsif (Get32u($dataPt,0) == 0x400000 and abs($lat) <= 90 and abs($lon) <= 180) {
|
|
2293
|
+
$debug and $et->FoundTag(GPSType => '17c');
|
|
2291
2294
|
# Transcend Drive Body Camera 70
|
|
2292
2295
|
# 0000: 00 00 40 00 66 72 65 65 47 50 53 20 4c 00 00 00 [..@.freeGPS L...]
|
|
2293
2296
|
# 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
|
@@ -3567,14 +3570,14 @@ sub ProcessFMAS($$$)
|
|
|
3567
3570
|
}
|
|
3568
3571
|
|
|
3569
3572
|
#------------------------------------------------------------------------------
|
|
3570
|
-
# Process GPS from Wolfbox G900 Dashcam
|
|
3573
|
+
# Process GPS from Wolfbox G900 Dashcam and Redtiger F9 4K
|
|
3571
3574
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
|
3572
3575
|
# Returns: 1 on success
|
|
3573
3576
|
sub ProcessWolfbox($$$)
|
|
3574
3577
|
{
|
|
3575
3578
|
my ($et, $dirInfo, $tagTbl) = @_;
|
|
3576
3579
|
my $dataPt = $$dirInfo{DataPt};
|
|
3577
|
-
return 0 if length($$dataPt) <
|
|
3580
|
+
return 0 if length($$dataPt) < 0xf8;
|
|
3578
3581
|
$et->VerboseDir('Wolfbox', undef, length($$dataPt));
|
|
3579
3582
|
# 0000: 65 00 00 00 00 00 00 00 31 01 01 00 e3 ff 00 00 [e.......1.......]
|
|
3580
3583
|
# 0010: 04 00 00 00 10 00 00 00 2a 00 00 00 00 00 00 00 [........*.......]
|
|
@@ -3593,22 +3596,43 @@ sub ProcessWolfbox($$$)
|
|
|
3593
3596
|
# 00e0: 0a 00 00 00 00 00 00 00 e8 03 00 00 00 00 00 00 [................]
|
|
3594
3597
|
# 00f0: 0a 00 00 00 00 00 00 00 4d 00 00 00 00 00 00 00 [........M.......]
|
|
3595
3598
|
# lat/lon at 0xb0/0xc0 and 0x128/0x138
|
|
3596
|
-
# h/m/s at 0x10 and 0xa0 and 0x148 (the first imprinted on the video,
|
|
3599
|
+
# h/m/s at 0x10 and 0xa0 and 0x148 (the first imprinted on the video, and
|
|
3600
|
+
# the latter 2 presumed UTC, but there is a 1 second offset for the Redtiger)
|
|
3597
3601
|
# spd at 0x48, dir at 0x58, alt at 0xe8
|
|
3602
|
+
# Redtiger F9 4K Dual Front and Rear Mini Dash Cam
|
|
3603
|
+
# 0000: 01 00 00 00 00 00 00 00 f4 ff 5d fe 24 00 00 00 [..........].$...]
|
|
3604
|
+
# 0010: 10 00 00 00 2d 00 00 00 25 00 00 00 00 00 00 00 [....-...%.......]
|
|
3605
|
+
# 0020: 01 00 00 00 00 00 00 00 44 eb 8f 00 00 00 00 00 [........D.......]
|
|
3606
|
+
# 0030: 10 27 00 00 00 00 00 00 1b 94 8a 04 00 00 00 00 [.'..............]
|
|
3607
|
+
# 0040: 10 27 00 00 00 00 00 00 8c 69 00 00 00 00 00 00 [.'.......i......]
|
|
3608
|
+
# 0050: e8 03 00 00 00 00 00 00 ba 47 00 00 00 00 00 00 [.........G......]
|
|
3609
|
+
# 0060: 64 00 00 00 00 00 00 00 19 00 00 00 05 00 00 00 [d...............]
|
|
3610
|
+
# 0070: e9 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
|
3611
|
+
# 0080: 00 00 00 00 00 00 00 00 30 30 30 30 30 30 30 30 [........00000000]
|
|
3612
|
+
# 0090: 30 30 30 30 30 30 30 30 58 58 58 58 00 00 00 00 [00000000XXXX....]
|
|
3613
|
+
# 00a0: 08 00 00 00 2d 00 00 00 24 00 00 00 00 00 00 00 [....-...$.......]
|
|
3614
|
+
# 00b0: 90 eb 8f 00 00 00 00 00 10 27 00 00 00 00 00 00 [.........'......]
|
|
3615
|
+
# 00c0: 20 94 8a 04 00 00 00 00 10 27 00 00 00 00 00 00 [ ........'......]
|
|
3616
|
+
# 00d0: 01 00 00 00 11 00 00 00 40 00 00 00 00 00 00 00 [........@.......]
|
|
3617
|
+
# 00e0: 64 00 00 00 00 00 00 00 8a 00 00 00 00 00 00 00 [d...............]
|
|
3618
|
+
# 00f0: 0a 00 00 00 00 00 00 00 4d 00 00 00 00 00 00 00 [........M.......]
|
|
3598
3619
|
SetByteOrder('II');
|
|
3599
|
-
my ($
|
|
3600
|
-
# offset 0xa0 also stores hh mm ss, but is out by 8 hours!
|
|
3620
|
+
my ($d,$mo,$yr,$h,$m,$s) = unpack('x104V3x44V3',$$dataPt);
|
|
3601
3621
|
my $time = sprintf '%.4d:%.2d:%.2d %.2d:%.2d:%.2dZ', $yr, $mo, $d, $h, $m, $s;
|
|
3602
|
-
my ($
|
|
3603
|
-
|
|
3604
|
-
|
|
3622
|
+
my ($pos, @a);
|
|
3623
|
+
# 0=spd 1=dir 2=lat 3=lon 4=alt
|
|
3624
|
+
foreach $pos (0x48, 0x58, 0xb0, 0xc0, 0xe8) {
|
|
3625
|
+
my $val = Get64s($dataPt, $pos);
|
|
3626
|
+
my $scl = Get64s($dataPt, $pos + 8);
|
|
3627
|
+
push @a, $val / ($scl || 1);
|
|
3628
|
+
}
|
|
3629
|
+
ConvertLatLon($a[2], $a[3]);
|
|
3605
3630
|
$et->HandleTag($tagTbl, GPSDateTime => $time);
|
|
3606
|
-
$et->HandleTag($tagTbl, GPSLatitude => $
|
|
3607
|
-
$et->HandleTag($tagTbl, GPSLongitude => $
|
|
3608
|
-
$et->HandleTag($tagTbl, GPSSpeed => $
|
|
3609
|
-
$et->HandleTag($tagTbl, GPSTrack => $
|
|
3610
|
-
$et->HandleTag($tagTbl, GPSAltitude => $
|
|
3611
|
-
SetByteOrder('MM');
|
|
3631
|
+
$et->HandleTag($tagTbl, GPSLatitude => $a[2]);
|
|
3632
|
+
$et->HandleTag($tagTbl, GPSLongitude => $a[3]);
|
|
3633
|
+
$et->HandleTag($tagTbl, GPSSpeed => $a[0] * $knotsToKph);
|
|
3634
|
+
$et->HandleTag($tagTbl, GPSTrack => $a[1]);
|
|
3635
|
+
$et->HandleTag($tagTbl, GPSAltitude => $a[4]);
|
|
3612
3636
|
return 1;
|
|
3613
3637
|
}
|
|
3614
3638
|
|
|
@@ -19,7 +19,7 @@ use strict;
|
|
|
19
19
|
use vars qw($VERSION %sigmaLensTypes);
|
|
20
20
|
use Image::ExifTool::Exif;
|
|
21
21
|
|
|
22
|
-
$VERSION = '1.
|
|
22
|
+
$VERSION = '1.36';
|
|
23
23
|
|
|
24
24
|
# sigma LensType lookup (ref IB)
|
|
25
25
|
%sigmaLensTypes = (
|
|
@@ -704,6 +704,12 @@ $VERSION = '1.35';
|
|
|
704
704
|
Name => 'PictureMode',
|
|
705
705
|
Notes => 'same as ColorMode, but "Standard" when ColorMode is Sepia or B&W',
|
|
706
706
|
},
|
|
707
|
+
0x0047 => { #forum17338
|
|
708
|
+
Name => 'ExposureCompensation',
|
|
709
|
+
Writable => 'rational64s',
|
|
710
|
+
PrintConv => '$val and $val =~ s/^(\d)/\+$1/; $val',
|
|
711
|
+
PrintConvInv => '$val',
|
|
712
|
+
},
|
|
707
713
|
0x0048 => { #PH
|
|
708
714
|
Name => 'LensApertureRange',
|
|
709
715
|
Condition => '$$self{MakerNoteSigmaVer} >= 3',
|
|
@@ -797,6 +803,10 @@ $VERSION = '1.35';
|
|
|
797
803
|
0x0087 => 'ResolutionMode', #PH (Quattro models)
|
|
798
804
|
0x0088 => 'WhiteBalance', #PH (Quattro models)
|
|
799
805
|
0x008c => 'Firmware', #PH (Quattro models)
|
|
806
|
+
0x0113 => { #forum17338
|
|
807
|
+
Name => 'PictureModeStrength',
|
|
808
|
+
Writable => 'int32s',
|
|
809
|
+
},
|
|
800
810
|
0x011f => { #IB (FP DNG images)
|
|
801
811
|
Name => 'CameraCalibration',
|
|
802
812
|
Writable => 'float',
|
|
@@ -810,6 +820,14 @@ $VERSION = '1.35';
|
|
|
810
820
|
Name => 'WBSettings2',
|
|
811
821
|
SubDirectory => { TagTable => 'Image::ExifTool::Sigma::WBSettings2' },
|
|
812
822
|
},
|
|
823
|
+
0x0138 => { #forum17338
|
|
824
|
+
Name => 'Fade',
|
|
825
|
+
Writable => 'rational64u',
|
|
826
|
+
},
|
|
827
|
+
0x0139 => { #forum17338
|
|
828
|
+
Name => 'Vignette',
|
|
829
|
+
Writable => 'rational64u',
|
|
830
|
+
},
|
|
813
831
|
);
|
|
814
832
|
|
|
815
833
|
# WB settings (ref IB)
|
|
@@ -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.74';
|
|
38
38
|
|
|
39
39
|
sub ProcessSRF($$$);
|
|
40
40
|
sub ProcessSR2($$$);
|
|
@@ -176,6 +176,7 @@ sub PrintInvLensSpec($;$$);
|
|
|
176
176
|
32888 => 'Sony FE 85mm F1.4 GM II', #JR
|
|
177
177
|
32889 => 'Sony FE 28-70mm F2 GM',
|
|
178
178
|
32890 => 'Sony FE 400-800mm F6.3-8 G OSS', #JR
|
|
179
|
+
32891 => 'Sony FE 50-150mm F2 GM', #github335
|
|
179
180
|
|
|
180
181
|
# (comment this out so LensID will report the LensModel, which is more useful)
|
|
181
182
|
# 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
|