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.
- checksums.yaml +4 -4
- data/bin/Changes +43 -1
- data/bin/META.json +4 -3
- data/bin/META.yml +3 -2
- data/bin/README +2 -2
- data/bin/config_files/pix4d.config +9 -8
- data/bin/exiftool +14 -8
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +1 -1
- data/bin/lib/Image/ExifTool/Canon.pm +8 -3
- data/bin/lib/Image/ExifTool/Exif.pm +5 -2
- data/bin/lib/Image/ExifTool/FujiFilm.pm +5 -1
- data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- data/bin/lib/Image/ExifTool/GoPro.pm +10 -3
- data/bin/lib/Image/ExifTool/LNK.pm +21 -3
- data/bin/lib/Image/ExifTool/Lang/de.pm +2 -1
- data/bin/lib/Image/ExifTool/Lang/fr.pm +2 -1
- data/bin/lib/Image/ExifTool/LigoGPS.pm +15 -7
- data/bin/lib/Image/ExifTool/MakerNotes.pm +3 -3
- data/bin/lib/Image/ExifTool/Nikon.pm +10 -3
- data/bin/lib/Image/ExifTool/Olympus.pm +5 -1
- data/bin/lib/Image/ExifTool/PDF.pm +1 -0
- data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
- data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +56 -14
- data/bin/lib/Image/ExifTool/Plot.pm +2 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +23 -3
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +51 -17
- data/bin/lib/Image/ExifTool/Sigma.pm +30 -4
- data/bin/lib/Image/ExifTool/Sony.pm +3 -3
- data/bin/lib/Image/ExifTool/TagLookup.pm +3738 -3729
- data/bin/lib/Image/ExifTool/TagNames.pod +27 -9
- data/bin/lib/Image/ExifTool/WritePDF.pl +1 -0
- data/bin/lib/Image/ExifTool/Writer.pl +128 -129
- data/bin/lib/Image/ExifTool.pm +11 -8
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- 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.
|
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-
|
5009
|
+
Condition => '$$self{Model} !~ /(K-(1|3|70)|KP)\b/',
|
5005
5010
|
Notes => q{
|
5006
|
-
models other than the K-1
|
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
|
5759
|
-
Format => 'int8u[
|
5760
|
-
|
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
|
5765
|
-
Format => 'int8u[
|
5766
|
-
|
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
|
5771
|
-
Format => 'int8u[
|
5772
|
-
|
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.
|
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($$$);
|
@@ -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')
|
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
|
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) <
|
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,
|
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 ($
|
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 ($
|
3593
|
-
|
3594
|
-
|
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 => $
|
3597
|
-
$et->HandleTag($tagTbl, GPSLongitude => $
|
3598
|
-
$et->HandleTag($tagTbl, GPSSpeed => $
|
3599
|
-
$et->HandleTag($tagTbl, GPSTrack => $
|
3600
|
-
$et->HandleTag($tagTbl, GPSAltitude => $
|
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.
|
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 =>
|
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 =>
|
645
|
-
|
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',
|