exiftool_vendored 13.29.0 → 13.31.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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +43 -1
  3. data/bin/META.json +4 -3
  4. data/bin/META.yml +3 -2
  5. data/bin/README +2 -2
  6. data/bin/config_files/pix4d.config +9 -8
  7. data/bin/exiftool +14 -8
  8. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +1 -1
  9. data/bin/lib/Image/ExifTool/Canon.pm +8 -3
  10. data/bin/lib/Image/ExifTool/Exif.pm +5 -2
  11. data/bin/lib/Image/ExifTool/FujiFilm.pm +5 -1
  12. data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  13. data/bin/lib/Image/ExifTool/GoPro.pm +10 -3
  14. data/bin/lib/Image/ExifTool/LNK.pm +21 -3
  15. data/bin/lib/Image/ExifTool/Lang/de.pm +2 -1
  16. data/bin/lib/Image/ExifTool/Lang/fr.pm +2 -1
  17. data/bin/lib/Image/ExifTool/LigoGPS.pm +15 -7
  18. data/bin/lib/Image/ExifTool/MakerNotes.pm +3 -3
  19. data/bin/lib/Image/ExifTool/Nikon.pm +10 -3
  20. data/bin/lib/Image/ExifTool/Olympus.pm +5 -1
  21. data/bin/lib/Image/ExifTool/PDF.pm +1 -0
  22. data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
  23. data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  24. data/bin/lib/Image/ExifTool/Pentax.pm +56 -14
  25. data/bin/lib/Image/ExifTool/Plot.pm +2 -3
  26. data/bin/lib/Image/ExifTool/QuickTime.pm +23 -3
  27. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +51 -17
  28. data/bin/lib/Image/ExifTool/Sigma.pm +30 -4
  29. data/bin/lib/Image/ExifTool/Sony.pm +3 -3
  30. data/bin/lib/Image/ExifTool/TagLookup.pm +3738 -3729
  31. data/bin/lib/Image/ExifTool/TagNames.pod +27 -9
  32. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -0
  33. data/bin/lib/Image/ExifTool/Writer.pl +128 -129
  34. data/bin/lib/Image/ExifTool.pm +11 -8
  35. data/bin/perl-Image-ExifTool.spec +1 -1
  36. data/lib/exiftool_vendored/version.rb +1 -1
  37. metadata +2 -2
@@ -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' },
@@ -58,7 +58,7 @@ use Image::ExifTool::Exif;
58
58
  use Image::ExifTool::GPS;
59
59
  use Image::ExifTool::HP;
60
60
 
61
- $VERSION = '3.50';
61
+ $VERSION = '3.52';
62
62
 
63
63
  sub CryptShutterCount($$);
64
64
  sub PrintFilter($$$);
@@ -1263,7 +1263,7 @@ my %binaryDataAttrs = (
1263
1263
  }],
1264
1264
  },{
1265
1265
  Name => 'AFPointSelected',
1266
- Condition => '$$self{Model} =~ /K-3\b/',
1266
+ Condition => '$$self{Model} =~ /(K-3|KP)\b/',
1267
1267
  Writable => 'int16u',
1268
1268
  Notes => 'K-3',
1269
1269
  PrintConvColumns => 2,
@@ -1354,6 +1354,7 @@ my %binaryDataAttrs = (
1354
1354
  0xfffd => 'Automatic Tracking AF', #JD
1355
1355
  0xfffc => 'Face Detect AF', #JD
1356
1356
  0xfffb => 'AF Select', #PH (Q select from 25-areas)
1357
+ 0xfffa => 'Auto 2', #KarstenGieselmann
1357
1358
  0 => 'None', #PH (Q in manual focus mode)
1358
1359
  1 => 'Upper-left',
1359
1360
  2 => 'Top',
@@ -3038,6 +3039,10 @@ my %binaryDataAttrs = (
3038
3039
  # 0x0236 - undef[52] (Q)
3039
3040
  # 0x0237 - undef[11] possibly related to smart effect setting? (Q)
3040
3041
  # 0x0238 - undef[9] (Q)
3042
+ 0x0238 => { #KarstenGieselmann
3043
+ Name => 'CAFPointInfo',
3044
+ SubDirectory => { TagTable => 'Image::ExifTool::Pentax::CAFPointInfo' },
3045
+ },
3041
3046
  0x0239 => { #PH
3042
3047
  Name => 'LensInfoQ',
3043
3048
  SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensInfoQ' },
@@ -5001,10 +5006,10 @@ my %binaryDataAttrs = (
5001
5006
  # 0x0a - values: 00,05,0d,15,86,8e,a6,ae
5002
5007
  0x0b => { #JD
5003
5008
  Name => 'AFPointsInFocus',
5004
- Condition => '$$self{Model} !~ /K-[13]\b/',
5009
+ Condition => '$$self{Model} !~ /(K-(1|3|70)|KP)\b/',
5005
5010
  Notes => q{
5006
- models other than the K-1 and K-3. May report two points in focus even
5007
- though a single AFPoint has been selected, in which case the selected
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
5008
5013
  AFPoint is the first reported
5009
5014
  },
5010
5015
  PrintConvColumns => 2,
@@ -5081,6 +5086,37 @@ my %binaryDataAttrs = (
5081
5086
  },
5082
5087
  );
5083
5088
 
5089
+ # AF information for K-01 and later (ref Karsten Gieselmann private communication)
5090
+ %Image::ExifTool::Pentax::CAFPointInfo = (
5091
+ %binaryDataAttrs,
5092
+ FIRST_ENTRY => 0,
5093
+ DATAMEMBER => [ 1 ],
5094
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5095
+ NOTES => 'Contrast-detect AF-point information for the K-01 and later models.',
5096
+ 1 => {
5097
+ Name => 'NumCAFPoints',
5098
+ RawConv => '$$self{NumCAFPoints} = ($val & 0x0f) * ($val >> 4); $val',
5099
+ ValueConv => '($val >> 4) * ($val & 0x0f)',
5100
+ },
5101
+ 1.1 => {
5102
+ Name => 'CAFGridSize',
5103
+ ValueConv => '($val >> 4) . " " . ($val & 0x0f)', # (width x height)
5104
+ PrintConv => '$val =~ tr/ /x/; $val',
5105
+ },
5106
+ 2 => {
5107
+ Name => 'CAFPointsInFocus',
5108
+ Format => 'int8u[int(($val{1}+3)/4)]',
5109
+ Writable => 0,
5110
+ PrintConv => 'Image::ExifTool::Pentax::DecodeAFPoints($val,$$self{NumCAFPoints},2,0x02)',
5111
+ },
5112
+ 2.1 => {
5113
+ Name => 'CAFPointsSelected',
5114
+ Format => 'int8u[int(($val{1}+3)/4)]',
5115
+ Writable => 0,
5116
+ PrintConv => 'Image::ExifTool::Pentax::DecodeAFPoints($val,$$self{NumCAFPoints},2,0x03)',
5117
+ },
5118
+ );
5119
+
5084
5120
  # Kelvin white balance information (ref 28, topic 4834)
5085
5121
  %Image::ExifTool::Pentax::KelvinWB = (
5086
5122
  %binaryDataAttrs,
@@ -5747,29 +5783,34 @@ my %binaryDataAttrs = (
5747
5783
  %Image::ExifTool::Pentax::AFPointInfo = (
5748
5784
  %binaryDataAttrs,
5749
5785
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5786
+ DATAMEMBER => [ 2 ],
5750
5787
  NOTES => 'AF point information written by the K-1.',
5751
5788
  # 0 - int16u: 1 (version?)
5752
5789
  2 => {
5753
5790
  Name => 'NumAFPoints',
5754
5791
  Format => 'int16u',
5792
+ RawConv => '$$self{NumAFPoints} = $val',
5755
5793
  },
5756
5794
  4 => {
5757
5795
  Name => 'AFPointsInFocus',
5758
- Condition => '$$self{Model} =~ /K-1\b/',
5759
- Format => 'int8u[9]',
5760
- PrintConv => 'Image::ExifTool::Pentax::DecodeAFPoints($val,33,2,0x02)',
5796
+ Condition => '$$self{Model} =~ /K(P|-1|-70)\b/',
5797
+ Format => 'int8u[int(($val{2}+3)/4)]',
5798
+ Writable => 0,
5799
+ PrintConv => 'Image::ExifTool::Pentax::DecodeAFPoints($val,$$self{NumAFPoints},2,0x02)',
5761
5800
  },
5762
5801
  4.1 => {
5763
5802
  Name => 'AFPointsSelected',
5764
- Condition => '$$self{Model} =~ /K-1\b/',
5765
- Format => 'int8u[9]',
5766
- PrintConv => 'Image::ExifTool::Pentax::DecodeAFPoints($val,33,2,0x03)',
5803
+ Condition => '$$self{Model} =~ /K(P|-1|-70)\b/',
5804
+ Format => 'int8u[int(($val{2}+3)/4)]',
5805
+ Writable => 0,
5806
+ PrintConv => 'Image::ExifTool::Pentax::DecodeAFPoints($val,$$self{NumAFPoints},2,0x03)',
5767
5807
  },
5768
5808
  4.2 => {
5769
5809
  Name => 'AFPointsSpecial',
5770
- Condition => '$$self{Model} =~ /K-1\b/',
5771
- Format => 'int8u[9]',
5772
- PrintConv => 'Image::ExifTool::Pentax::DecodeAFPoints($val,33,2,0x03,0x03)',
5810
+ Condition => '$$self{Model} =~ /K(P|-1|-70)\b/',
5811
+ Format => 'int8u[int(($val{2}+3)/4)]',
5812
+ Writable => 0,
5813
+ PrintConv => 'Image::ExifTool::Pentax::DecodeAFPoints($val,$$self{NumAFPoints},2,0x03,0x03)',
5773
5814
  },
5774
5815
  );
5775
5816
 
@@ -6397,6 +6438,7 @@ sub DecodeAFPoints($$$$;$)
6397
6438
  {
6398
6439
  my ($val, $num, $bits, $mask, $bitVal) = @_;
6399
6440
  my @bytes = split ' ', $val;
6441
+ return '(none)' unless @bytes;
6400
6442
  my $i = 1; # (starts at AF point number 1)
6401
6443
  my $shift = 8 - $bits;
6402
6444
  my $byte = shift @bytes;
@@ -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.16';
52
+ $VERSION = '3.18';
53
53
 
54
54
  sub ProcessMOV($$;$);
55
55
  sub ProcessKeys($$$);
@@ -2378,6 +2378,25 @@ my %userDefined = (
2378
2378
  # @etc - 4 bytes all zero (Samsung WB30F)
2379
2379
  # saut - 4 bytes all zero (Samsung SM-N900T)
2380
2380
  # smrd - string "TRUEBLUE" (Samsung SM-C101, etc)
2381
+ # ---- Sigma ----
2382
+ SIGM => {
2383
+ Name => 'PreviewImage',
2384
+ # 32-byte header followed by preview image. Length at offset 6 in header
2385
+ Condition => 'length($$valPt) > 0x20 and length($$valPt) == unpack("x6V",$$valPt) + 0x20',
2386
+ Groups => { 2 => 'Preview' },
2387
+ SetBase => 1, # so $$self{BASE} will be set for correct offsets in verbose/html dumps
2388
+ RawConv => q{
2389
+ $val = substr($val, 0x20);
2390
+ my $pt = $self->ValidateImage(\$val, $tag);
2391
+ if ($pt) {
2392
+ $$self{BASE} += 0x20;
2393
+ $$self{DOC_NUM} = ++$$self{DOC_COUNT};
2394
+ $self->ExtractInfo($pt, { ReEntry => 1 });
2395
+ $$self{DOC_NUM} = 0;
2396
+ }
2397
+ return $pt;
2398
+ },
2399
+ },
2381
2400
  # ---- TomTom Bandit Action Cam ----
2382
2401
  TTMD => {
2383
2402
  Name => 'TomTomMetaData',
@@ -9380,7 +9399,7 @@ sub HandleItemInfo($)
9380
9399
  $et->ProcessDirectory(\%dirInfo, $subTable, $proc);
9381
9400
  delete $$et{DOC_NUM};
9382
9401
  }
9383
- $raf->Seek($curPos, 0) or $et->Warn('Seek error'), last; # seek back to original position
9402
+ $raf->Seek($curPos, 0) or $et->Warn('Seek error'); # seek back to original position
9384
9403
  pop @{$$et{PATH}};
9385
9404
  }
9386
9405
  # process the item properties now that we should know their associations and document numbers
@@ -10503,12 +10522,13 @@ QTLang: foreach $tag (@{$$et{QTLang}}) {
10503
10522
  for (; $trailer; $trailer=$$trailer[3]) {
10504
10523
  next if $lastPos > $$trailer[1]; # skip if we have already processed this as an atom
10505
10524
  last unless $raf->Seek($$trailer[1], 0);
10506
- 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) {
10507
10526
  $ee or $et->Warn('Use the ExtractEmbedded option to decode timed GPS',3), next;
10508
10527
  my $len = Get32u(\$buff, 0) - 16;
10509
10528
  if ($len > 0 and $raf->Read($buff, $len) == $len and $buff =~ /^LIGOGPSINFO\0/) {
10510
10529
  my $tbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
10511
10530
  my %dirInfo = ( DataPt => \$buff, DataPos => $$trailer[1] + 8, DirName => 'LigoGPSTrailer' );
10531
+ $et->VerboseDump(\$buff, DataPos => $dirInfo{DataPos});
10512
10532
  Image::ExifTool::LigoGPS::ProcessLigoGPS($et, \%dirInfo, $tbl);
10513
10533
  } else {
10514
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' },
@@ -2287,6 +2289,17 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
2287
2289
  $lat = ($lat - 187.982162849635) / 3;
2288
2290
  $lon = ($lon - 2199.19873715495) / 2;
2289
2291
  $ddd = 1;
2292
+ } elsif (Get32u($dataPt,0) == 0x400000 and abs($lat) <= 90 and abs($lon) <= 180) {
2293
+ $debug and $et->FoundTag(GPSType => '17c');
2294
+ # Transcend Drive Body Camera 70
2295
+ # 0000: 00 00 40 00 66 72 65 65 47 50 53 20 4c 00 00 00 [..@.freeGPS L...]
2296
+ # 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
2297
+ # 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
2298
+ # 0030: 09 00 00 00 26 00 00 00 15 00 00 00 e9 07 00 00 [....&...........]
2299
+ # 0040: 05 00 00 00 10 00 00 00 41 53 45 00 6c 59 ee 41 [........ASE.lY.A]
2300
+ # 0050: 9f 1a f7 41 3c 6b 0f 41 9a 99 99 43 00 00 00 00 [...A<k.A...C....]
2301
+ $ddd = 1; # already in decimal degrees
2302
+ $spd /= $knotsToKph; # already in km/h
2290
2303
  } else {
2291
2304
  $debug and $et->FoundTag(GPSType => 17);
2292
2305
  }
@@ -3557,14 +3570,14 @@ sub ProcessFMAS($$$)
3557
3570
  }
3558
3571
 
3559
3572
  #------------------------------------------------------------------------------
3560
- # Process GPS from Wolfbox G900 Dashcam
3573
+ # Process GPS from Wolfbox G900 Dashcam and Redtiger F9 4K
3561
3574
  # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
3562
3575
  # Returns: 1 on success
3563
3576
  sub ProcessWolfbox($$$)
3564
3577
  {
3565
3578
  my ($et, $dirInfo, $tagTbl) = @_;
3566
3579
  my $dataPt = $$dirInfo{DataPt};
3567
- return 0 if length($$dataPt) < 0xc8;
3580
+ return 0 if length($$dataPt) < 0xf8;
3568
3581
  $et->VerboseDir('Wolfbox', undef, length($$dataPt));
3569
3582
  # 0000: 65 00 00 00 00 00 00 00 31 01 01 00 e3 ff 00 00 [e.......1.......]
3570
3583
  # 0010: 04 00 00 00 10 00 00 00 2a 00 00 00 00 00 00 00 [........*.......]
@@ -3583,22 +3596,43 @@ sub ProcessWolfbox($$$)
3583
3596
  # 00e0: 0a 00 00 00 00 00 00 00 e8 03 00 00 00 00 00 00 [................]
3584
3597
  # 00f0: 0a 00 00 00 00 00 00 00 4d 00 00 00 00 00 00 00 [........M.......]
3585
3598
  # lat/lon at 0xb0/0xc0 and 0x128/0x138
3586
- # 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)
3587
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.......]
3588
3619
  SetByteOrder('II');
3589
- my ($spd,$dir,$d,$mo,$yr,$h,$m,$s) = unpack('x72Vx12Vx12V3x44V3',$$dataPt);
3590
- # offset 0xa0 also stores hh mm ss, but is out by 8 hours!
3620
+ my ($d,$mo,$yr,$h,$m,$s) = unpack('x104V3x44V3',$$dataPt);
3591
3621
  my $time = sprintf '%.4d:%.2d:%.2d %.2d:%.2d:%.2dZ', $yr, $mo, $d, $h, $m, $s;
3592
- my ($lat, $lon) = (Get32s($dataPt, 0xb0) / 1e5, Get32s($dataPt, 0xc0) / 1e5);
3593
- my $alt = Get32s($dataPt, 0xe8);
3594
- 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]);
3595
3630
  $et->HandleTag($tagTbl, GPSDateTime => $time);
3596
- $et->HandleTag($tagTbl, GPSLatitude => $lat);
3597
- $et->HandleTag($tagTbl, GPSLongitude => $lon);
3598
- $et->HandleTag($tagTbl, GPSSpeed => $spd * $knotsToKph / 100);
3599
- $et->HandleTag($tagTbl, GPSTrack => $dir / 100);
3600
- $et->HandleTag($tagTbl, GPSAltitude => $alt / 10); # (NC)
3601
- 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]);
3602
3636
  return 1;
3603
3637
  }
3604
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.34';
22
+ $VERSION = '1.36';
23
23
 
24
24
  # sigma LensType lookup (ref IB)
25
25
  %sigmaLensTypes = (
@@ -412,7 +412,12 @@ $VERSION = '1.34';
412
412
  Name => 'Software',
413
413
  Priority => 0,
414
414
  },
415
- 0x0019 => 'AutoBracket',
415
+ 0x0019 => {
416
+ Name => 'AutoBracket',
417
+ # (some models don't have spaces around "of")
418
+ PrintConv => '$val =~ s/(\d)of(\d)/$1 of $2/; $val',
419
+ PrintConvInv => '$val',
420
+ },
416
421
  0x001a => [ #PH
417
422
  {
418
423
  Name => 'PreviewImageStart',
@@ -641,8 +646,11 @@ $VERSION = '1.34';
641
646
  },
642
647
  0x0033 => { #PH
643
648
  Name => 'ExposureTime2',
644
- Condition => '$$self{Model} !~ / (SD1|SD9|SD15|Merrill|Quattro|fp)$/',
645
- Notes => 'models other than the SD1, SD9, SD15 and Merrill/Quattro models',
649
+ Condition => q{
650
+ $$self{Model} !~ / (SD1|SD9|SD15|Merrill|Quattro|fp)$/ and
651
+ $$self{MakerNoteSigmaVer} < 4
652
+ },
653
+ Notes => 'only valid for some models',
646
654
  ValueConv => '$val * 1e-6',
647
655
  ValueConvInv => 'int($val * 1e6 + 0.5)',
648
656
  PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
@@ -696,6 +704,12 @@ $VERSION = '1.34';
696
704
  Name => 'PictureMode',
697
705
  Notes => 'same as ColorMode, but "Standard" when ColorMode is Sepia or B&W',
698
706
  },
707
+ 0x0047 => { #forum17338
708
+ Name => 'ExposureCompensation',
709
+ Writable => 'rational64s',
710
+ PrintConv => '$val and $val =~ s/^(\d)/\+$1/; $val',
711
+ PrintConvInv => '$val',
712
+ },
699
713
  0x0048 => { #PH
700
714
  Name => 'LensApertureRange',
701
715
  Condition => '$$self{MakerNoteSigmaVer} >= 3',
@@ -789,6 +803,10 @@ $VERSION = '1.34';
789
803
  0x0087 => 'ResolutionMode', #PH (Quattro models)
790
804
  0x0088 => 'WhiteBalance', #PH (Quattro models)
791
805
  0x008c => 'Firmware', #PH (Quattro models)
806
+ 0x0113 => { #forum17338
807
+ Name => 'PictureModeStrength',
808
+ Writable => 'int32s',
809
+ },
792
810
  0x011f => { #IB (FP DNG images)
793
811
  Name => 'CameraCalibration',
794
812
  Writable => 'float',
@@ -802,6 +820,14 @@ $VERSION = '1.34';
802
820
  Name => 'WBSettings2',
803
821
  SubDirectory => { TagTable => 'Image::ExifTool::Sigma::WBSettings2' },
804
822
  },
823
+ 0x0138 => { #forum17338
824
+ Name => 'Fade',
825
+ Writable => 'rational64u',
826
+ },
827
+ 0x0139 => { #forum17338
828
+ Name => 'Vignette',
829
+ Writable => 'rational64u',
830
+ },
805
831
  );
806
832
 
807
833
  # WB settings (ref IB)
@@ -10604,7 +10604,7 @@ my %isoSetting2010 = (
10604
10604
  0x800b => { Name => 'Sony_rtmd_0x800b', Format => 'int16u', %hidUnk }, # (ZoomRingPosition?, forum14315)
10605
10605
  # 0x8100 - 16 bytes starting with 0x060e2b340401
10606
10606
  0x8100 => { Name => 'Sony_rtmd_0x8100', Format => 'int8u', %hidUnk },
10607
- 0x8101 => { Name => 'Sony_rtmd_0x8101', Format => 'int8u', %hidUnk }, # seen: 0,1
10607
+ 0x8101 => { Name => 'Sony_rtmd_0x8101', Format => 'int8u', %hidUnk }, # seen: 0,1,2
10608
10608
  0x8104 => { Name => 'Sony_rtmd_0x8104', Format => 'int16u', %hidUnk }, # seen: 35616
10609
10609
  0x8105 => { Name => 'Sony_rtmd_0x8105', Format => 'int16u', %hidUnk }, # seen: 20092
10610
10610
  0x8106 => { Name => 'Sony_rtmd_0x8106', Format => 'int32u', %hidUnk }, # seen: "25 1","24000 1001" frame rate?
@@ -10625,7 +10625,7 @@ my %isoSetting2010 = (
10625
10625
  Format => 'int16u',
10626
10626
  },
10627
10627
  0x810d => { Name => 'Sony_rtmd_0x810d', Format => 'int8u', %hidUnk }, # seen: 0,1
10628
- 0x8115 => { Name => 'Sony_rtmd_0x8115', Format => 'int16u', %hidUnk }, # seen: 100
10628
+ 0x8115 => { Name => 'Sony_rtmd_0x8115', Format => 'int16u', %hidUnk }, # seen: 100 - ISO
10629
10629
  # 0x8300 - container for other tags in this format
10630
10630
  0x8500 => {
10631
10631
  Name => 'GPSVersionID',
@@ -10703,7 +10703,7 @@ my %isoSetting2010 = (
10703
10703
  },
10704
10704
  0xe000 => { Name => 'Sony_rtmd_0xe000', Format => 'int8u', %hidUnk }, # (16 bytes)
10705
10705
  0xe300 => { Name => 'Sony_rtmd_0xe300', Format => 'int8u', %hidUnk }, # seen: 0,1
10706
- 0xe301 => { Name => 'Sony_rtmd_0xe301', Format => 'int32u', %hidUnk }, # seen: 100,1600,12800
10706
+ 0xe301 => { Name => 'Sony_rtmd_0xe301', Format => 'int32u', %hidUnk }, # seen: 100,1600,12800 - ISO
10707
10707
  0xe302 => { Name => 'Sony_rtmd_0xe302', Format => 'int8u', %hidUnk }, # seen: 1
10708
10708
  0xe303 => { #forum12218
10709
10709
  Name => 'WhiteBalance',