exiftool_vendored 13.31.0 → 13.34.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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +56 -1
  3. data/bin/MANIFEST +5 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +47 -46
  7. data/bin/exiftool +114 -89
  8. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -5
  9. data/bin/lib/Image/ExifTool/Canon.pm +19 -2
  10. data/bin/lib/Image/ExifTool/Exif.pm +9 -6
  11. data/bin/lib/Image/ExifTool/FlashPix.pm +4 -159
  12. data/bin/lib/Image/ExifTool/FujiFilm.pm +11 -3
  13. data/bin/lib/Image/ExifTool/Geotag.pm +5 -3
  14. data/bin/lib/Image/ExifTool/GoPro.pm +14 -2
  15. data/bin/lib/Image/ExifTool/LNK.pm +4 -1
  16. data/bin/lib/Image/ExifTool/Lang/cs.pm +0 -1
  17. data/bin/lib/Image/ExifTool/Lang/de.pm +0 -1
  18. data/bin/lib/Image/ExifTool/Lang/fr.pm +0 -1
  19. data/bin/lib/Image/ExifTool/Lang/it.pm +0 -1
  20. data/bin/lib/Image/ExifTool/Lang/ja.pm +0 -1
  21. data/bin/lib/Image/ExifTool/Lang/nl.pm +0 -1
  22. data/bin/lib/Image/ExifTool/Lang/pl.pm +0 -1
  23. data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +0 -1
  24. data/bin/lib/Image/ExifTool/Microsoft.pm +158 -1
  25. data/bin/lib/Image/ExifTool/Minolta.pm +4 -2
  26. data/bin/lib/Image/ExifTool/Nikon.pm +72 -37
  27. data/bin/lib/Image/ExifTool/NikonCustom.pm +40 -10
  28. data/bin/lib/Image/ExifTool/Olympus.pm +254 -34
  29. data/bin/lib/Image/ExifTool/Panasonic.pm +3 -3
  30. data/bin/lib/Image/ExifTool/Pentax.pm +340 -61
  31. data/bin/lib/Image/ExifTool/QuickTime.pm +11 -4
  32. data/bin/lib/Image/ExifTool/README +2 -1
  33. data/bin/lib/Image/ExifTool/Sony.pm +44 -17
  34. data/bin/lib/Image/ExifTool/TNEF.pm +487 -0
  35. data/bin/lib/Image/ExifTool/TagLookup.pm +4380 -4265
  36. data/bin/lib/Image/ExifTool/TagNames.pod +265 -19
  37. data/bin/lib/Image/ExifTool/WriteExif.pl +14 -12
  38. data/bin/lib/Image/ExifTool/Writer.pl +19 -15
  39. data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  40. data/bin/lib/Image/ExifTool.pm +12 -4
  41. data/bin/lib/Image/ExifTool.pod +50 -44
  42. data/bin/perl-Image-ExifTool.spec +46 -45
  43. data/lib/exiftool_vendored/version.rb +1 -1
  44. metadata +3 -2
@@ -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.52';
62
+ $VERSION = '3.55';
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
@@ -747,6 +751,11 @@ my @k3iiiAF = qw(
747
751
  C1 E1 G1 I1 K1 C3 E3 G3 I3 K3 C5 E5 G5
748
752
  I5 K5 C7 E7 G7 I7 K7 C9 E9 G9 I9 K9 A5 M5 B3
749
753
  L3 B5 L5 B7 L7 B1 L1 B9 L9 A3 M3 A7 M7
754
+ D1 F1 H1 J1 D3 F3 H3 J3 D5 F5 H5 J5 D7
755
+ F7 H7 J7 D9 F9 H9 J9 C2 E2 G2 I2 K2 C4
756
+ E4 G4 I4 K4 C6 E6 G6 I6 K6 C8 E8 G8 I8
757
+ K8 B2 L2 B4 L4 B6 L6 B8 L8 A1 M1 A2 M2
758
+ A4 M4 A6 M6 A8 M8 A9 M9
750
759
  );
751
760
 
752
761
  # decoding for Pentax Firmware ID tags - PH
@@ -1148,31 +1157,38 @@ my %binaryDataAttrs = (
1148
1157
  Notes => 'Pentax models',
1149
1158
  Writable => 'int16u',
1150
1159
  PrintConvColumns => 2,
1160
+ PrintHex => 1,
1151
1161
  PrintConv => { #PH
1152
- 0 => 'Normal',
1153
- 1 => 'Macro',
1154
- 2 => 'Infinity',
1155
- 3 => 'Manual',
1156
- 4 => 'Super Macro', #JD
1157
- 5 => 'Pan Focus',
1158
- 6 => 'Auto-area', # (GR III)
1159
- 8 => 'Select', # (GR III)
1160
- 9 => 'Pinpoint', # (GR III)
1161
- 10 => 'Tracking', # (GR III)
1162
- 11 => 'Continuous', # (GR III)
1163
- 12 => 'Snap', # (GR III)
1164
- 16 => 'AF-S (Focus-priority)', #17
1165
- 17 => 'AF-C (Focus-priority)', #17
1166
- 18 => 'AF-A (Focus-priority)', #PH (educated guess)
1167
- 32 => 'Contrast-detect (Focus-priority)', #PH (K-5)
1168
- 33 => 'Tracking Contrast-detect (Focus-priority)', #PH (K-5)
1162
+ 0x00 => 'Normal',
1163
+ 0x01 => 'Macro',
1164
+ 0x02 => 'Infinity',
1165
+ 0x03 => 'Manual',
1166
+ 0x04 => 'Super Macro', #JD
1167
+ 0x05 => 'Pan Focus',
1168
+ 0x06 => 'Auto-area', # (GR III)
1169
+ 0x07 => 'Zone Select', # (GR III)
1170
+ 0x08 => 'Select', # (GR III)
1171
+ 0x09 => 'Pinpoint', # (GR III)
1172
+ 0x0a => 'Tracking', # (GR III)
1173
+ 0x0b => 'Continuous', # (GR III)
1174
+ 0x0c => 'Snap', # (GR III)
1175
+ 0x10 => 'AF-S (Focus-priority)', #17
1176
+ 0x11 => 'AF-C (Focus-priority)', #17
1177
+ 0x12 => 'AF-A (Focus-priority)', #PH (educated guess)
1178
+ 0x20 => 'Contrast-detect (Focus-priority)', #PH (K-5)
1179
+ 0x21 => 'Tracking Contrast-detect (Focus-priority)', #PH (K-5)
1169
1180
  # bit 8 indicates release priority
1170
- 272 => 'AF-S (Release-priority)', #PH (K-5,K-3)
1171
- 273 => 'AF-C (Release-priority)', #PH (K-5,K-3)
1172
- 274 => 'AF-A (Release-priority)', #PH (K-3)
1173
- 288 => 'Contrast-detect (Release-priority)', #PH (K-01)
1174
- # 32777 (0x8009) - seen for Ricoh GR III
1175
- # 32779 (0x800b) - seen for Ricoh GR III
1181
+ 0x110 => 'AF-S (Release-priority)', #PH (K-5,K-3)
1182
+ 0x111 => 'AF-C (Release-priority)', #PH (K-5,K-3)
1183
+ 0x112 => 'AF-A (Release-priority)', #PH (K-3)
1184
+ 0x120 => 'Contrast-detect (Release-priority)', #PH (K-01)
1185
+ # bit 15 indicates macro mode (disabled for MF, and defaults to Select for Snap, Infinity)
1186
+ 0x8006 => 'Auto-area (Macro)', # (GR III)
1187
+ 0x8007 => 'Zone Select (Macro)', # (GR III)
1188
+ 0x8008 => 'Select (Macro)', # (GR III)
1189
+ 0x8009 => 'Pinpoint (Macro)', # (GR III)
1190
+ 0x800a => 'Tracking (Macro)', # (GR III)
1191
+ 0x800b => 'Continuous (Macro)', # (GR III)
1176
1192
  },
1177
1193
  },{
1178
1194
  Name => 'FocusMode',
@@ -1188,7 +1204,7 @@ my %binaryDataAttrs = (
1188
1204
  ],
1189
1205
  0x000e => [{ #29
1190
1206
  Name => 'AFPointSelected',
1191
- Condition => '$$self{Model} =~ /K-1\b/',
1207
+ Condition => '$$self{Model} =~ /(K-1|645Z)\b/', # (NC for 645Z)
1192
1208
  Writable => 'int16u',
1193
1209
  Notes => 'K-1',
1194
1210
  PrintConvColumns => 2,
@@ -1367,16 +1383,20 @@ my %binaryDataAttrs = (
1367
1383
  9 => 'Lower-left',
1368
1384
  10 => 'Bottom',
1369
1385
  11 => 'Lower-right',
1370
- },
1386
+ },{
1371
1387
  # (second number exists for K-5II(s) is usually 0, but is 1 for AF.C with
1372
1388
  # AFPointMode=='Select' and extended tracking focus points are enabled in the settings)
1373
- ],
1389
+ # -----
1390
+ #KG: for K-70 and older models with 11 PDAF points (K-S2, K-S1, K-50, K-500, K-30, K-5II(s) )
1391
+ 0 => 'Single Point', # Select AF (1-point) in both PDAF and CAF modes
1392
+ 1 => 'Expanded Area', # Expanded Area AF in AF-C
1393
+ }],
1374
1394
  }],
1375
1395
  0x000f => [{ #PH
1376
1396
  Name => 'AFPointsInFocus',
1377
- Condition => '$$self{Model} =~ /K-3\b/',
1397
+ Condition => '$$self{Model} =~ /K-(3|S1|S2)\b/', #KG: valid also for K-S1/S2
1378
1398
  Writable => 'int32u',
1379
- Notes => 'K-3 only',
1399
+ Notes => 'K-3, K-S1 and K-S2 only',
1380
1400
  PrintHex => 1,
1381
1401
  PrintConv => {
1382
1402
  0 => '(none)',
@@ -1957,6 +1977,8 @@ my %binaryDataAttrs = (
1957
1977
  '18 3' => 'Auto Program (MTF)', #PH (NC)
1958
1978
  '18 22' => 'Auto Program (Shallow DOF)', #PH (NC)
1959
1979
  '20 22' => 'Blur Control', #PH (Q)
1980
+ '24 0' => 'Aperture Priority (Adv.Hyp)', #KG
1981
+ '25 0' => 'Manual Exposure (Adv.Hyp)', #KG
1960
1982
  '26 0' => 'Shutter and Aperture Priority (TAv)', #PH (K-3III)
1961
1983
  '249 0' => 'Movie (TAv)', #31
1962
1984
  '250 0' => 'Movie (TAv, Auto Aperture)', #31
@@ -1978,10 +2000,13 @@ my %binaryDataAttrs = (
1978
2000
  Count => 4,
1979
2001
  PrintConv => [{
1980
2002
  0 => 'Single-frame', # (also Interval Shooting for K-01 - PH)
1981
- 1 => 'Continuous', # (K-5 Hi)
1982
- 2 => 'Continuous (Lo)', #PH (K-5)
2003
+ 1 => 'Continuous', #KG *ist D, *ist Ds, *ist DS2, K110D, K10D, K100D, K100D Super, K20D, Ricoh GR III / GR IIIx
2004
+ #KG Hi: K200D, K-x, K-7, K-r, K-5, K-01, K-5 II, K-5 IIs, K-30, K-500, K-50, K-S1, K-S2, K-70
2005
+ #KG High: K-3, K-3 II, K-1, K-1 II, KP, K-3 III, K-3 III Mono
2006
+ 2 => 'Continuous (Lo)', #KG all models listed under 'Hi'
1983
2007
  3 => 'Burst', #PH (K20D)
1984
- 4 => 'Continuous (Medium)', #PH (K-3)
2008
+ 4 => 'Continuous (Medium)', #KG all models listed under 'High'
2009
+ 5 => 'Continuous (Low)', #KG all models listed under 'High'
1985
2010
  255 => 'Video', #PH (K-x)
1986
2011
  },{
1987
2012
  0 => 'No Timer',
@@ -2169,7 +2194,7 @@ my %binaryDataAttrs = (
2169
2194
  11 => 'Flat', #31 (K-70)
2170
2195
  # the following values from GR III
2171
2196
  256 => 'Standard',
2172
- 257 => 'Vivid',
2197
+ 257 => 'Vivid',
2173
2198
  258 => 'Monotone',
2174
2199
  259 => 'Soft Monotone',
2175
2200
  260 => 'Hard Monotone',
@@ -2989,7 +3014,7 @@ my %binaryDataAttrs = (
2989
3014
  }],
2990
3015
  0x022b => [{
2991
3016
  Name => 'LevelInfoK3III',
2992
- Condition => '$$self{Model} eq "PENTAX K-3 Mark III"',
3017
+ Condition => '$$self{Model} =~ /K-3 Mark III/',
2993
3018
  SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LevelInfoK3III' },
2994
3019
  },{ #PH (K-5)
2995
3020
  Name => 'LevelInfo',
@@ -3097,13 +3122,20 @@ my %binaryDataAttrs = (
3097
3122
  # 0x0406 - undef[4116] (K-5)
3098
3123
  # 0x0407 - undef[3072] (Q DNG)
3099
3124
  # 0x0408 - undef[1024] (Q DNG)
3125
+ 0x040b => {
3126
+ Name => 'FaceInfoK3III',
3127
+ # undef[1640] (actually int32u[410], K3III)
3128
+ SubDirectory => { TagTable => 'Image::ExifTool::Pentax::FaceInfoK3III' },
3129
+ },
3130
+ 0x040c => {
3131
+ Name => 'AFInfoK3III',
3132
+ SubDirectory => { TagTable => 'Image::ExifTool::Pentax::AFInfoK3III' },
3133
+ },
3100
3134
  0x0e00 => {
3101
3135
  Name => 'PrintIM',
3102
3136
  Description => 'Print Image Matching',
3103
3137
  Writable => 0,
3104
- SubDirectory => {
3105
- TagTable => 'Image::ExifTool::PrintIM::Main',
3106
- },
3138
+ SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main' },
3107
3139
  },
3108
3140
  );
3109
3141
 
@@ -5006,11 +5038,11 @@ my %binaryDataAttrs = (
5006
5038
  # 0x0a - values: 00,05,0d,15,86,8e,a6,ae
5007
5039
  0x0b => { #JD
5008
5040
  Name => 'AFPointsInFocus',
5009
- Condition => '$$self{Model} !~ /(K-(1|3|70)|KP)\b/',
5041
+ Condition => '$$self{Model} !~ /(K-(1|3|70|S1|S2)|KP)\b/', #KG: valid also for K-S1/S2
5010
5042
  Notes => q{
5011
- models other than the K-1, K-3, K-70 and KP. May report two points in focus
5012
- even though a single AFPoint has been selected, in which case the selected
5013
- AFPoint is the first reported
5043
+ models other than the K-1, K-3, K-70, KP and K-S1/S2. May report two points
5044
+ in focus even though a single AFPoint has been selected, in which case the
5045
+ selected AFPoint is the first reported
5014
5046
  },
5015
5047
  PrintConvColumns => 2,
5016
5048
  PrintConv => {
@@ -5039,43 +5071,46 @@ my %binaryDataAttrs = (
5039
5071
  },
5040
5072
  0x14 => {
5041
5073
  Name => 'AFPointValues',
5042
- Condition => '$$self{Model} eq "PENTAX K-3 Mark III"', # any other models?
5074
+ Condition => '$$self{Model} =~ /K-3 Mark III/', #KG
5043
5075
  Format => 'int16uRev[69]',
5044
5076
  Unknown => 1,
5045
5077
  Notes => 'some unknown values related to each AFPoint',
5046
- # order is the same as AFPoints below, but there is an additional value for
5078
+ # order is the same as AFPointsSelected below, but there is an additional value for
5047
5079
  # each AF point starting at offset 28 in the array (yes, the range overlaps
5048
5080
  # with the 1st values)
5049
5081
  # (values are int16s stored in reversed byte order)
5050
5082
  ValueConv => 'my @a=split " ",$val;$_>32767 and $_-=65536 foreach @a;join " ",@a',
5051
- PrintConv => \&AFPointValues,
5083
+ PrintConv => \&AFPointValuesK3III,
5052
5084
  },
5053
- 0x12a => { # byte has a value of 2 if corresponding AF point is selected
5054
- Name => 'AFPointsSelected',
5055
- Condition => '$$self{Model} eq "PENTAX K-3 Mark III"', # any other models?
5085
+ 0x12a => {
5086
+ Name => 'AFPointsSelected', # (should probably be "AFPointSelected", but the bitmask allows multiple points)
5087
+ Condition => '$$self{Model} =~ /K-3 Mark III/',
5056
5088
  Notes => q{
5057
5089
  K-3III only. 41 selectable AF points from a total of 101 available in a 13x9
5058
- grid. Columns are labelled A-M and rows are 1-9. The center point is G5
5090
+ grid. Columns are labelled A-M and rows are 1-9. The center point is G5. The
5091
+ exact meaning of this tag is not fully understood, although it does seem
5092
+ related to the selected AF point
5059
5093
  },
5060
- Format => 'int8u[41]',
5061
- PrintConv => 'Image::ExifTool::Pentax::AFPointsK3iii($val,$self,2)',
5094
+ Format => 'int8u[101]',
5095
+ # value of 1 means "selected point", and 2 means "center of selected area"
5096
+ PrintConv => \&AFPointNamesK3III,
5062
5097
  },
5063
5098
  #
5064
5099
  # (maybe not coincidentally, there are 60 unknown bytes
5065
5100
  # here, and there are also 60 non-selectable AF points)
5066
5101
  #
5067
5102
  0x18f => { # byte has a value of 1 if corresponding AF point is ... in focus maybe?
5068
- # usually the same points as AFPoints above, but not always
5103
+ # usually the same points as AFPointsSelected above, but not always
5069
5104
  Name => 'AFPointsUnknown',
5070
- Condition => '$$self{Model} eq "PENTAX K-3 Mark III"', # any other models?
5105
+ Condition => '$$self{Model} =~ /K-3 Mark III/', #KG
5071
5106
  Unknown => 1,
5072
- Format => 'int8u[41]',
5073
- PrintConv => \&AFPointsK3iii,
5107
+ Format => 'int8u[101]',
5108
+ PrintConv => \&AFPointNamesK3III,
5074
5109
  },
5075
5110
  0x1fa => {
5076
5111
  Name => 'LiveView',
5077
5112
  Notes => 'decoded only for the K-3 III',
5078
- Condition => '$$self{Model} eq "PENTAX K-3 Mark III"', # and other models?
5113
+ Condition => '$$self{Model} =~ /K-3 Mark III/', #KG
5079
5114
  PrintConv => { 0 => 'Off', 1 => 'On' },
5080
5115
  },
5081
5116
  0x1fd => {
@@ -5084,6 +5119,54 @@ my %binaryDataAttrs = (
5084
5119
  Condition => '$$self{Model} eq "PENTAX K-3 II"',
5085
5120
  PrintConv => { 0 => 'Off', 1 => 'Short', 2 => 'Medium', 3 => 'Long' },
5086
5121
  },
5122
+ 0x021f => { #KG
5123
+ Name => 'FirstFrameActionInAFC',
5124
+ Condition => '$$self{Model} =~ /K-3 Mark III/',
5125
+ PrintConv => {
5126
+ '0' => 'Auto',
5127
+ '1' => 'Release Priority',
5128
+ '2' => 'Focus Priority',
5129
+ # there is at least another value '3' but I couldn't figure out the
5130
+ # meaning. However, this occurs for a few AF-S captures, so it has
5131
+ # no real practical meaning.
5132
+ },
5133
+ },
5134
+ 0x0220 => { #KG
5135
+ Name => 'ActionInAFCCont',
5136
+ Condition => '$$self{Model} =~ /K-3 Mark III/',
5137
+ PrintConv => {
5138
+ '0' => 'Auto',
5139
+ '1' => 'Focus Priority',
5140
+ '2' => 'FPS Priority',
5141
+ },
5142
+ },
5143
+ 545 => { #KG
5144
+ Name => 'AFCHold',
5145
+ Condition => '$$self{Model} =~ /K-3 Mark III/',
5146
+ Mask => 0x03,
5147
+ PrintConv => { 0 => 'Low', 1 => 'Medium', 2 => 'High', 3 => 'Off' },
5148
+ },
5149
+ 545.1 => { #KG
5150
+ Name => 'AFCSensitivity',
5151
+ Condition => '$$self{Model} =~ /K-3 Mark III/',
5152
+ Mask => 0x0c,
5153
+ PrintConv => '5 - $val',
5154
+ PrintConvInv => '5 - $val',
5155
+ },
5156
+ 545.2 => { #KG
5157
+ Name => 'AFCPointTracking',
5158
+ Condition => '$$self{Model} =~ /K-3 Mark III/',
5159
+ Mask => 0x70,
5160
+ PrintConv => { 0 => 'Type 1', 1 => 'Type 2', 2 => 'Type 3' },
5161
+ },
5162
+ 0x0960 => { #KG
5163
+ Name => 'SubjectRecognition',
5164
+ Condition => '$$self{Model} =~ /K-3 Mark III/',
5165
+ PrintConv => {
5166
+ 0 => 'Off',
5167
+ 1 => 'On',
5168
+ },
5169
+ },
5087
5170
  );
5088
5171
 
5089
5172
  # AF information for K-01 and later (ref Karsten Gieselmann private communication)
@@ -5097,7 +5180,7 @@ my %binaryDataAttrs = (
5097
5180
  Name => 'NumCAFPoints',
5098
5181
  RawConv => '$$self{NumCAFPoints} = ($val & 0x0f) * ($val >> 4); $val',
5099
5182
  ValueConv => '($val >> 4) * ($val & 0x0f)',
5100
- },
5183
+ },
5101
5184
  1.1 => {
5102
5185
  Name => 'CAFGridSize',
5103
5186
  ValueConv => '($val >> 4) . " " . ($val & 0x0f)', # (width x height)
@@ -5687,6 +5770,175 @@ my %binaryDataAttrs = (
5687
5770
  ValueConvInv => '-$val * 2',
5688
5771
  },
5689
5772
  );
5773
+
5774
+ %Image::ExifTool::Pentax::FaceInfoK3III = (
5775
+ %binaryDataAttrs,
5776
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
5777
+ FORMAT => 'int32u',
5778
+ DATAMEMBER => [ 6, 8 ],
5779
+ 0.1 => {
5780
+ Name => 'FaceInfoK3III',
5781
+ Format => 'int32u[$size/4]',
5782
+ Notes => q{
5783
+ entire FaceInfoK3III structure. Provides access to raw numerical values and
5784
+ facilitates the writing of the whole structure
5785
+ },
5786
+ Unknown => 1,
5787
+ },
5788
+ 0 => { Name => 'FaceImageSize', Format => 'int32u[2]' },
5789
+ 2 => { Name => 'CAFArea', Format => 'int32u[4]', Notes => 'top, left, width, height' },
5790
+ 6 => { Name => 'FacesDetectedA', RawConv => '$$self{FacesA} = $val' },
5791
+ 8 => { Name => 'FacesDetectedB', RawConv => '$$self{FacesA} = $val' },
5792
+ 10 => { Name => 'Face1AArea', Condition => '$$self{FacesA} >= 1', Format => 'int32u[4]' },
5793
+ 14 => { Name => 'Face1AEye1', Condition => '$$self{FacesA} >= 1', Format => 'int32u[4]' },
5794
+ 18 => { Name => 'Face1AEye2', Condition => '$$self{FacesA} >= 1', Format => 'int32u[4]' },
5795
+ 30 => { Name => 'Face2AArea', Condition => '$$self{FacesA} >= 2', Format => 'int32u[4]' },
5796
+ 34 => { Name => 'Face2AEye1', Condition => '$$self{FacesA} >= 2', Format => 'int32u[4]' },
5797
+ 38 => { Name => 'Face2AEye2', Condition => '$$self{FacesA} >= 2', Format => 'int32u[4]' },
5798
+ 50 => { Name => 'Face3AArea', Condition => '$$self{FacesA} >= 3', Format => 'int32u[4]' },
5799
+ 54 => { Name => 'Face3AEye1', Condition => '$$self{FacesA} >= 3', Format => 'int32u[4]' },
5800
+ 58 => { Name => 'Face3AEye2', Condition => '$$self{FacesA} >= 3', Format => 'int32u[4]' },
5801
+ 70 => { Name => 'Face4AArea', Condition => '$$self{FacesA} >= 4', Format => 'int32u[4]' },
5802
+ 74 => { Name => 'Face4AEye1', Condition => '$$self{FacesA} >= 4', Format => 'int32u[4]' },
5803
+ 78 => { Name => 'Face4AEye2', Condition => '$$self{FacesA} >= 4', Format => 'int32u[4]' },
5804
+ 90 => { Name => 'Face5AArea', Condition => '$$self{FacesA} >= 5', Format => 'int32u[4]' },
5805
+ 94 => { Name => 'Face5AEye1', Condition => '$$self{FacesA} >= 5', Format => 'int32u[4]' },
5806
+ 98 => { Name => 'Face5AEye2', Condition => '$$self{FacesA} >= 5', Format => 'int32u[4]' },
5807
+ 110 => { Name => 'Face6AArea', Condition => '$$self{FacesA} >= 6', Format => 'int32u[4]' },
5808
+ 114 => { Name => 'Face6AEye1', Condition => '$$self{FacesA} >= 6', Format => 'int32u[4]' },
5809
+ 118 => { Name => 'Face6AEye2', Condition => '$$self{FacesA} >= 6', Format => 'int32u[4]' },
5810
+ 130 => { Name => 'Face7AArea', Condition => '$$self{FacesA} >= 7', Format => 'int32u[4]' },
5811
+ 134 => { Name => 'Face7AEye1', Condition => '$$self{FacesA} >= 7', Format => 'int32u[4]' },
5812
+ 138 => { Name => 'Face7AEye2', Condition => '$$self{FacesA} >= 7', Format => 'int32u[4]' },
5813
+ 150 => { Name => 'Face8AArea', Condition => '$$self{FacesA} >= 8', Format => 'int32u[4]' },
5814
+ 154 => { Name => 'Face8AEye1', Condition => '$$self{FacesA} >= 8', Format => 'int32u[4]' },
5815
+ 158 => { Name => 'Face8AEye2', Condition => '$$self{FacesA} >= 8', Format => 'int32u[4]' },
5816
+ 170 => { Name => 'Face9AArea', Condition => '$$self{FacesA} >= 9', Format => 'int32u[4]' },
5817
+ 174 => { Name => 'Face9AEye1', Condition => '$$self{FacesA} >= 9', Format => 'int32u[4]' },
5818
+ 178 => { Name => 'Face9AEye2', Condition => '$$self{FacesA} >= 9', Format => 'int32u[4]' },
5819
+ 190 => { Name => 'Face10AArea',Condition => '$$self{FacesA} >= 10', Format => 'int32u[4]' },
5820
+ 194 => { Name => 'Face10AEye1',Condition => '$$self{FacesA} >= 10', Format => 'int32u[4]' },
5821
+ 198 => { Name => 'Face10AEye2',Condition => '$$self{FacesA} >= 10', Format => 'int32u[4]' },
5822
+ 210 => { Name => 'Face1BArea', Condition => '$$self{FacesA} >= 1', Format => 'int32u[4]' },
5823
+ 214 => { Name => 'Face1BEye1', Condition => '$$self{FacesA} >= 1', Format => 'int32u[4]' },
5824
+ 218 => { Name => 'Face1BEye2', Condition => '$$self{FacesA} >= 1', Format => 'int32u[4]' },
5825
+ 230 => { Name => 'Face2BArea', Condition => '$$self{FacesA} >= 2', Format => 'int32u[4]' },
5826
+ 234 => { Name => 'Face2BEye1', Condition => '$$self{FacesA} >= 2', Format => 'int32u[4]' },
5827
+ 238 => { Name => 'Face2BEye2', Condition => '$$self{FacesA} >= 2', Format => 'int32u[4]' },
5828
+ 250 => { Name => 'Face3BArea', Condition => '$$self{FacesA} >= 3', Format => 'int32u[4]' },
5829
+ 254 => { Name => 'Face3BEye1', Condition => '$$self{FacesA} >= 3', Format => 'int32u[4]' },
5830
+ 258 => { Name => 'Face3BEye2', Condition => '$$self{FacesA} >= 3', Format => 'int32u[4]' },
5831
+ 270 => { Name => 'Face4BArea', Condition => '$$self{FacesA} >= 4', Format => 'int32u[4]' },
5832
+ 274 => { Name => 'Face4BEye1', Condition => '$$self{FacesA} >= 4', Format => 'int32u[4]' },
5833
+ 278 => { Name => 'Face4BEye2', Condition => '$$self{FacesA} >= 4', Format => 'int32u[4]' },
5834
+ 290 => { Name => 'Face5BArea', Condition => '$$self{FacesA} >= 5', Format => 'int32u[4]' },
5835
+ 294 => { Name => 'Face5BEye1', Condition => '$$self{FacesA} >= 5', Format => 'int32u[4]' },
5836
+ 298 => { Name => 'Face5BEye2', Condition => '$$self{FacesA} >= 5', Format => 'int32u[4]' },
5837
+ 310 => { Name => 'Face6BArea', Condition => '$$self{FacesA} >= 6', Format => 'int32u[4]' },
5838
+ 314 => { Name => 'Face6BEye1', Condition => '$$self{FacesA} >= 6', Format => 'int32u[4]' },
5839
+ 318 => { Name => 'Face6BEye2', Condition => '$$self{FacesA} >= 6', Format => 'int32u[4]' },
5840
+ 330 => { Name => 'Face7BArea', Condition => '$$self{FacesA} >= 7', Format => 'int32u[4]' },
5841
+ 334 => { Name => 'Face7BEye1', Condition => '$$self{FacesA} >= 7', Format => 'int32u[4]' },
5842
+ 338 => { Name => 'Face7BEye2', Condition => '$$self{FacesA} >= 7', Format => 'int32u[4]' },
5843
+ 350 => { Name => 'Face8BArea', Condition => '$$self{FacesA} >= 8', Format => 'int32u[4]' },
5844
+ 354 => { Name => 'Face8BEye1', Condition => '$$self{FacesA} >= 8', Format => 'int32u[4]' },
5845
+ 358 => { Name => 'Face8BEye2', Condition => '$$self{FacesA} >= 8', Format => 'int32u[4]' },
5846
+ 370 => { Name => 'Face9BArea', Condition => '$$self{FacesA} >= 9', Format => 'int32u[4]' },
5847
+ 374 => { Name => 'Face9BEye1', Condition => '$$self{FacesA} >= 9', Format => 'int32u[4]' },
5848
+ 378 => { Name => 'Face9BEye2', Condition => '$$self{FacesA} >= 9', Format => 'int32u[4]' },
5849
+ 390 => { Name => 'Face10BArea',Condition => '$$self{FacesA} >= 10', Format => 'int32u[4]' },
5850
+ 394 => { Name => 'Face10BEye1',Condition => '$$self{FacesA} >= 10', Format => 'int32u[4]' },
5851
+ 398 => { Name => 'Face10BEye2',Condition => '$$self{FacesA} >= 10', Format => 'int32u[4]' },
5852
+ );
5853
+
5854
+ %Image::ExifTool::Pentax::AFInfoK3III = (
5855
+ %binaryDataAttrs,
5856
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5857
+ FORMAT => 'int16u',
5858
+ DATAMEMBER => [ 3 ],
5859
+ NOTES => 'AF tags written by the K-3 Mark III, GR III and GR IIIx.',
5860
+ 0 => {
5861
+ Name => 'AFInfo',
5862
+ Format => 'int16u[$size/2]',
5863
+ Notes => q{
5864
+ entire AFInfoK3III structure. Provides access to raw numerical values and
5865
+ facilitates the writing of the whole structure
5866
+ },
5867
+ Unknown => 1,
5868
+ },
5869
+ 0.1 => {
5870
+ Name => 'AFMode',
5871
+ PrintConv => {
5872
+ 0 => 'Phase Detect',
5873
+ 2 => 'Contrast Detect',
5874
+ 255 => 'Manual Focus',
5875
+ },
5876
+ },
5877
+ 1 => {
5878
+ Name => 'AFSelectionMode',
5879
+ PrintHex => 1,
5880
+ PrintConv => {
5881
+ 0 => 'Manual Focus',
5882
+ 1 => 'Spot',
5883
+ 2 => 'Select (5-points)',
5884
+ 3 => 'Expanded Area (S)',
5885
+ 4 => 'Expanded Area (M)',
5886
+ 5 => 'Expanded Area (L)',
5887
+ 6 => 'Select (S)',
5888
+ 7 => 'Zone Select (21-point)',
5889
+ 8 => 'Select XS',
5890
+ 0xff => 'Auto Area',
5891
+ # Contrast-detect modes
5892
+ 0x2001 => 'Contrast-detect Auto Area',
5893
+ 0x2002 => 'Contrast-detect Select', # (GR III)
5894
+ 0x2003 => 'Pinpoint', # (GR III)
5895
+ 0x2004 => 'Tracking',
5896
+ 0x2005 => 'Continuous', # (GR III)
5897
+ 0x2006 => 'Face Detection',
5898
+ 0x2007 => 'Contrast-detect Select (S)',
5899
+ 0x2008 => 'Contrast-detect Select (M)',
5900
+ 0x2009 => 'Contrast-detect Select (L)',
5901
+ 0x200a => 'Contrast-detect Zone Select', # (GR III)
5902
+ 0x200b => 'Contrast-detect Spot',
5903
+ },
5904
+ },
5905
+ 3 => {
5906
+ Name => 'NumAFPoints',
5907
+ RawConv => '$$self{NumAFPoints} = $val',
5908
+ },
5909
+ # the data for each AF point consists of 7 int16u values:
5910
+ # the frame width/height, the X/Y position of the focus area,
5911
+ # width/height of the focus area (0/0 for phase-detect modes),
5912
+ # followed by a flags word
5913
+ 7 => { # (the same for all areas in my samples, so only extract the first)
5914
+ Name => 'AFFrameSize',
5915
+ Condition => '$$self{NumAFPoints} > 0',
5916
+ Format => 'int16u[2]',
5917
+ Writable => 0,
5918
+ PrintConv => '$val=~s/ /x/; $val',
5919
+ },
5920
+ 7.1 => {
5921
+ Name => 'AFAreas',
5922
+ Format => 'int16u[7 * $val{3}]',
5923
+ Notes => q{
5924
+ X,Y position of each AF area, width, with "in-focus" for points in focus,
5925
+ "central" for the center of the selected area, or "peripheral" for points
5926
+ outside the selected area
5927
+ },
5928
+ Writable => 0,
5929
+ List => 1, # (for documentation purposes only)
5930
+ PrintConv => \&AFAreasK3III,
5931
+ },
5932
+ 11 => { # (the same for all areas in my samples, so only extract the first)
5933
+ Name => 'AFAreaSize',
5934
+ Condition => '$$self{NumAFPoints} > 0 and $$valPt !~ /^\0\0\0\0/',
5935
+ Notes => 'only for contrast-detect modes',
5936
+ Format => 'int16u[2]',
5937
+ Writable => 0,
5938
+ PrintConv => '$val=~s/ /x/; $val',
5939
+ },
5940
+ );
5941
+
5690
5942
  # white balance RGGB levels (ref 28)
5691
5943
  %Image::ExifTool::Pentax::WBLevels = (
5692
5944
  %binaryDataAttrs,
@@ -5750,7 +6002,7 @@ my %binaryDataAttrs = (
5750
6002
  },
5751
6003
  );
5752
6004
 
5753
- # lens information for Penax Q (ref PH)
6005
+ # lens information for Pentax Q (ref PH)
5754
6006
  # (306 bytes long, I wonder if this contains vignetting information too?)
5755
6007
  %Image::ExifTool::Pentax::LensInfoQ = (
5756
6008
  %binaryDataAttrs,
@@ -5824,6 +6076,14 @@ my %binaryDataAttrs = (
5824
6076
  K-500. It is currently not known where the corresponding temperature
5825
6077
  sensors are located in the camera.
5826
6078
  },
6079
+ 0x0a => { #KG
6080
+ Name => 'ShotNumber',
6081
+ Condition => '$$self{Model} =~ /K-3 Mark III/',
6082
+ # The exact same method to detect this tag with a similar set of files
6083
+ # does not reveal anything for K-1. Is this only available for K-3-III ?
6084
+ # Internal representation starts at 0 for the 1st shot
6085
+ ValueConv => '$val+1',
6086
+ },
5827
6087
  # (it would be nice to know where these temperature sensors are located,
5828
6088
  # but since according to the manual the Slow Shutter Speed NR Auto mode
5829
6089
  # is based on "internal temperature", my guess is that there must be
@@ -6461,9 +6721,9 @@ sub DecodeAFPoints($$$$;$)
6461
6721
  }
6462
6722
 
6463
6723
  #------------------------------------------------------------------------------
6464
- # Print AF Point names for K-3III (ref PH)
6724
+ # Print K-3III AF Point names (ref PH)
6465
6725
  # Inputs: 0) value, 1) ExifTool ref, 2) optional value to match
6466
- sub AFPointsK3iii($$;$)
6726
+ sub AFPointNamesK3III($$;$)
6467
6727
  {
6468
6728
  my @a = split ' ', $_[0];
6469
6729
  my $match = $_[2];
@@ -6477,10 +6737,10 @@ sub AFPointsK3iii($$;$)
6477
6737
  }
6478
6738
 
6479
6739
  #------------------------------------------------------------------------------
6480
- # Print AF point values for K-3III (ref PH)
6740
+ # Print K-3III AF point values (ref PH)
6481
6741
  # Inputs: 0) value, 1) ExifTool ref
6482
6742
  # Notes: this is experimental and not well understood
6483
- sub AFPointValues($$)
6743
+ sub AFPointValuesK3III($$)
6484
6744
  {
6485
6745
  my @a = split ' ', shift;
6486
6746
  my @vals;
@@ -6499,6 +6759,25 @@ sub AFPointValues($$)
6499
6759
  return @vals ? join ',', sort @vals : '(none)';
6500
6760
  }
6501
6761
 
6762
+ #------------------------------------------------------------------------------
6763
+ # Print K-3III AF point positions from tag 0x040c (ref KG)
6764
+ # Inputs: 0) raw value, 1) ExifTool ref
6765
+ sub AFAreasK3III($$)
6766
+ {
6767
+ my ($val, $et) = @_;
6768
+ return '(none)' unless $val;
6769
+ my @vals = split ' ', $val;
6770
+ # flags bits: [mask, value, description]
6771
+ my @flags = ([0x10,0x10,'central'],[0x08,0,'peripheral'],[0x04,0x04,'in-focus']);
6772
+ my ($i, @strs);
6773
+ for ($i=0; $i+7<=@vals; $i+=7) {
6774
+ my @a;
6775
+ ($vals[$i+6] & $$_[0]) == $$_[1] and push @a, $$_[2] foreach @flags;
6776
+ push @strs, $vals[$i+2] . ',' . $vals[$i+3] . (@a ? '(' . join(',',@a) . ')' : '');
6777
+ }
6778
+ return \@strs;
6779
+ }
6780
+
6502
6781
  #------------------------------------------------------------------------------
6503
6782
  # Convert Pentax hex-based EV (modulo 8) to real number
6504
6783
  # Inputs: 0) value to convert
@@ -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.18';
52
+ $VERSION = '3.19';
53
53
 
54
54
  sub ProcessMOV($$;$);
55
55
  sub ProcessKeys($$$);
@@ -2379,7 +2379,14 @@ my %userDefined = (
2379
2379
  # saut - 4 bytes all zero (Samsung SM-N900T)
2380
2380
  # smrd - string "TRUEBLUE" (Samsung SM-C101, etc)
2381
2381
  # ---- Sigma ----
2382
- SIGM => {
2382
+ SIGM => [{
2383
+ Name => 'SigmaEXIF',
2384
+ Condition => '$$valPt =~ /^(II\x2a\0|MM\0\x2a)/',
2385
+ SubDirectory => {
2386
+ TagTable => 'Image::ExifTool::Exif::Main',
2387
+ ProcessProc => \&Image::ExifTool::ProcessTIFF, # (because ProcessMOV is default)
2388
+ },
2389
+ },{
2383
2390
  Name => 'PreviewImage',
2384
2391
  # 32-byte header followed by preview image. Length at offset 6 in header
2385
2392
  Condition => 'length($$valPt) > 0x20 and length($$valPt) == unpack("x6V",$$valPt) + 0x20',
@@ -2396,7 +2403,7 @@ my %userDefined = (
2396
2403
  }
2397
2404
  return $pt;
2398
2405
  },
2399
- },
2406
+ }],
2400
2407
  # ---- TomTom Bandit Action Cam ----
2401
2408
  TTMD => {
2402
2409
  Name => 'TomTomMetaData',
@@ -2937,7 +2944,7 @@ my %userDefined = (
2937
2944
  Writable => 'int8u',
2938
2945
  Protected => 1,
2939
2946
  PrintConv => {
2940
- 0 => 'Horizontal (Normal)',
2947
+ 0 => 'Horizontal (normal)',
2941
2948
  1 => 'Rotate 270 CW',
2942
2949
  2 => 'Rotate 180',
2943
2950
  3 => 'Rotate 90 CW',
@@ -802,7 +802,8 @@ numerical, and generated automatically otherwise.
802
802
  Shift : [Writable tags only] Specifies type of shift to apply if this
803
803
  value may be shifted. Set to 'Time' for shifting date/time
804
804
  tags, or '0' to prevent tag from being shifted or
805
- conditionally deleted.
805
+ conditionally deleted. May not be used for Writable Composite
806
+ tags.
806
807
 
807
808
  Writable : Indicates this tag can be written (or not written if Writable
808
809
  is set to zero), and for EXIF and QuickTime tables gives