exiftool-vendored.pl 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.
Files changed (34) hide show
  1. package/bin/Changes +35 -0
  2. package/bin/META.json +2 -2
  3. package/bin/META.yml +2 -2
  4. package/bin/README +2 -2
  5. package/bin/exiftool +23 -12
  6. package/bin/lib/Image/ExifTool/BuildTagLookup.pm +3 -3
  7. package/bin/lib/Image/ExifTool/Canon.pm +11 -4
  8. package/bin/lib/Image/ExifTool/Exif.pm +6 -3
  9. package/bin/lib/Image/ExifTool/FujiFilm.pm +3 -0
  10. package/bin/lib/Image/ExifTool/GoPro.pm +10 -3
  11. package/bin/lib/Image/ExifTool/LNK.pm +21 -3
  12. package/bin/lib/Image/ExifTool/Lang/de.pm +2 -1
  13. package/bin/lib/Image/ExifTool/Lang/fr.pm +2 -1
  14. package/bin/lib/Image/ExifTool/LigoGPS.pm +14 -6
  15. package/bin/lib/Image/ExifTool/Nikon.pm +13 -5
  16. package/bin/lib/Image/ExifTool/Olympus.pm +2 -1
  17. package/bin/lib/Image/ExifTool/PDF.pm +1 -0
  18. package/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
  19. package/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  20. package/bin/lib/Image/ExifTool/Pentax.pm +179 -52
  21. package/bin/lib/Image/ExifTool/Plot.pm +2 -3
  22. package/bin/lib/Image/ExifTool/QuickTime.pm +3 -2
  23. package/bin/lib/Image/ExifTool/QuickTimeStream.pl +41 -17
  24. package/bin/lib/Image/ExifTool/Sigma.pm +19 -1
  25. package/bin/lib/Image/ExifTool/Sony.pm +2 -1
  26. package/bin/lib/Image/ExifTool/TagLookup.pm +3760 -3750
  27. package/bin/lib/Image/ExifTool/TagNames.pod +32 -9
  28. package/bin/lib/Image/ExifTool/WritePDF.pl +1 -0
  29. package/bin/lib/Image/ExifTool/Writer.pl +134 -131
  30. package/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  31. package/bin/lib/Image/ExifTool.pm +6 -4
  32. package/bin/perl-Image-ExifTool.spec +1 -1
  33. package/bin/windows_exiftool.txt +14 -11
  34. package/package.json +12 -5
@@ -56,7 +56,7 @@ sub Process_mett($$$);
56
56
  Name => 'ParrotAutomation',
57
57
  SubDirectory => { TagTable => 'Image::ExifTool::Parrot::Automation' },
58
58
  },
59
- # timed metadata written by ARCore (see forum13653)
59
+ # MetaType of timed metadata written by ARCore (see forum13653)
60
60
  'application/arcore-accel' => {
61
61
  Name => 'ARCoreAccel',
62
62
  SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreAccel', ByteOrder => 'II' },
@@ -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.51';
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
- 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)
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
- 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
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 KP. May report two points in focus
5011
- even though a single AFPoint has been selected, in which case the selected
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 AFPoints below, but there is an additional value for
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 => \&AFPointValues,
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::AFPointsK3iii($val,$self,2)',
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 AFPoints above, but not always
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 => \&AFPointsK3iii,
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 Penax Q (ref PH)
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-1\b/',
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-1\b/',
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-1\b/',
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 for K-3III (ref PH)
6570
+ # Print K-3III AF Point names (ref PH)
6463
6571
  # Inputs: 0) value, 1) ExifTool ref, 2) optional value to match
6464
- sub AFPointsK3iii($$;$)
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 for K-3III (ref PH)
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 AFPointValues($$)
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.03';
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.17';
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 107 different types of timed GPS metadata from video files.
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) < 0xc8;
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, the latter 2 presumed UTC)
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 ($spd,$dir,$d,$mo,$yr,$h,$m,$s) = unpack('x72Vx12Vx12V3x44V3',$$dataPt);
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 ($lat, $lon) = (Get32s($dataPt, 0xb0) / 1e5, Get32s($dataPt, 0xc0) / 1e5);
3603
- my $alt = Get32s($dataPt, 0xe8);
3604
- ConvertLatLon($lat, $lon);
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 => $lat);
3607
- $et->HandleTag($tagTbl, GPSLongitude => $lon);
3608
- $et->HandleTag($tagTbl, GPSSpeed => $spd * $knotsToKph / 100);
3609
- $et->HandleTag($tagTbl, GPSTrack => $dir / 100);
3610
- $et->HandleTag($tagTbl, GPSAltitude => $alt / 10); # (NC)
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.35';
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.73';
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)