exiftool-vendored.exe 13.25.0 → 13.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +254 -254
- package/bin/README.txt +14 -14
- package/bin/exiftool.exe +0 -0
- package/bin/exiftool_files/exiftool.pl +2 -1
- package/bin/exiftool_files/lib/CPAN/Config.pm +98 -98
- package/bin/exiftool_files/lib/Config.pm +111 -111
- package/bin/exiftool_files/lib/Config_git.pl +12 -12
- package/bin/exiftool_files/lib/Config_heavy.pl +1470 -1470
- package/bin/exiftool_files/lib/DynaLoader.pm +761 -761
- package/bin/exiftool_files/lib/Errno.pm +2638 -2638
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +5 -4
- package/bin/exiftool_files/lib/Image/ExifTool/GIMP.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/JPEG.pm +20 -8
- package/bin/exiftool_files/lib/Image/ExifTool/LigoGPS.pm +16 -2
- package/bin/exiftool_files/lib/Image/ExifTool/MPF.pm +5 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +3 -2
- package/bin/exiftool_files/lib/Image/ExifTool/PCAP.pm +5 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +9 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Parrot.pm +54 -7
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +102 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Plot.pm +36 -15
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +78 -12
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +70 -14
- package/bin/exiftool_files/lib/Image/ExifTool/README +12 -2
- package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +15 -6
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +5 -0
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +23 -2
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +149 -92
- package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +2 -0
- package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +3 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +17 -6
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +23 -16
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +5 -1
- package/bin/exiftool_files/lib/Image/ExifTool.pm +7 -3
- package/bin/exiftool_files/lib/Image/ExifTool.pod +13 -12
- package/bin/exiftool_files/lib/Win32/FindFile.pm +82 -82
- package/bin/exiftool_files/lib/Win32API/File/cFile.pc +168 -168
- package/bin/exiftool_files/lib/XSLoader.pm +372 -372
- package/bin/exiftool_files/lib/auto/Compress/Raw/Lzma/autosplit.ix +3 -3
- package/bin/exiftool_files/readme_windows.txt +16 -16
- package/bin/exiftool_files/windows_exiftool.txt +6 -5
- package/package.json +54 -53
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.90';
|
|
92
92
|
|
|
93
93
|
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
|
|
94
94
|
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
|
|
@@ -1410,7 +1410,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
1410
1410
|
},
|
|
1411
1411
|
{
|
|
1412
1412
|
Name => 'CanonCameraInfoR6m2',
|
|
1413
|
-
Condition => '$$self{Model} =~ /\bEOS R6m2$/',
|
|
1413
|
+
Condition => '$$self{Model} =~ /\bEOS (R6m2|R8|R50)$/',
|
|
1414
1414
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoR6m2' },
|
|
1415
1415
|
},
|
|
1416
1416
|
{
|
|
@@ -2053,7 +2053,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2053
2053
|
# 0x4014 (similar to 0x83?)
|
|
2054
2054
|
0x4015 => [{
|
|
2055
2055
|
Name => 'VignettingCorr', # (LensPacket)
|
|
2056
|
-
Condition => '$$valPt =~ /^\0/ and $$valPt !~
|
|
2056
|
+
Condition => '$$valPt =~ /^\0/ and $$valPt !~ /^(\0\0\0\0|\x00\x40\xdc\x05)/', # (data may be all zeros for 60D)
|
|
2057
2057
|
SubDirectory => {
|
|
2058
2058
|
# (the size word is at byte 2 in this structure)
|
|
2059
2059
|
Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart+2,$size)',
|
|
@@ -2061,7 +2061,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2061
2061
|
},
|
|
2062
2062
|
},{
|
|
2063
2063
|
Name => 'VignettingCorrUnknown1',
|
|
2064
|
-
Condition => '$$valPt =~ /^[\x01\x02\x10\x20]/ and $$valPt !~
|
|
2064
|
+
Condition => '$$valPt =~ /^[\x01\x02\x10\x20]/ and $$valPt !~ /^(\0\0\0\0|\x02\x50\x7c\x04)/',
|
|
2065
2065
|
SubDirectory => {
|
|
2066
2066
|
# (the size word is at byte 2 in this structure)
|
|
2067
2067
|
Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart+2,$size)',
|
|
@@ -4758,6 +4758,7 @@ my %ciMaxFocal = (
|
|
|
4758
4758
|
Format => 'int32u',
|
|
4759
4759
|
Notes => 'includes electronic + mechanical shutter',
|
|
4760
4760
|
},
|
|
4761
|
+
# 0x0b5a - related to image stabilization (ref forum17239) (R5)
|
|
4761
4762
|
# 0x0bb7 - counts down during focus stack (ref forum16111)
|
|
4762
4763
|
);
|
|
4763
4764
|
|
|
@@ -260,15 +260,9 @@ sub ProcessJPEG_HDR($$$);
|
|
|
260
260
|
Condition => '$$valPt =~ /^UNICODE\0/',
|
|
261
261
|
Notes => 'PhotoStudio Unicode comment',
|
|
262
262
|
}, {
|
|
263
|
-
Name => '
|
|
263
|
+
Name => 'HDRGainInfo', #PH (NC)
|
|
264
264
|
Condition => '$$valPt =~ /^AROT\0\0.{4}/s',
|
|
265
|
-
|
|
266
|
-
ValueConv => q{
|
|
267
|
-
my $n = unpack('x6N', $val);
|
|
268
|
-
return '<truncated AROT data>' if length($val)-6 < $n * 4;
|
|
269
|
-
my $str = join ' ', unpack("x10V$n", $val);
|
|
270
|
-
return \$str;
|
|
271
|
-
},
|
|
265
|
+
SubDirectory => { TagTable => 'Image::ExifTool::JPEG::HDRGainInfo' },
|
|
272
266
|
}],
|
|
273
267
|
APP11 => [{
|
|
274
268
|
Name => 'JPEG-HDR',
|
|
@@ -347,6 +341,9 @@ sub ProcessJPEG_HDR($$$);
|
|
|
347
341
|
$$valPt =~ /~\0\x04\0zmie~\0\0\x0a.{8}[\x10\x18]\x08$/s
|
|
348
342
|
},
|
|
349
343
|
SubDirectory => { TagTable => 'Image::ExifTool::MIE::Main' },
|
|
344
|
+
}, {
|
|
345
|
+
Name => 'MPF',
|
|
346
|
+
SubDirectory => { TagTable => 'Image::ExifTool::MPF::Main' },
|
|
350
347
|
}, {
|
|
351
348
|
Name => 'Samsung',
|
|
352
349
|
Condition => '$$valPt =~ /QDIOBS$/',
|
|
@@ -382,6 +379,21 @@ sub ProcessJPEG_HDR($$$);
|
|
|
382
379
|
}],
|
|
383
380
|
);
|
|
384
381
|
|
|
382
|
+
# HDR gain information (ref PH)
|
|
383
|
+
%Image::ExifTool::JPEG::HDRGainInfo = (
|
|
384
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
385
|
+
GROUPS => { 0 => 'APP10', 1 => 'AROT', 2 => 'Image' },
|
|
386
|
+
6 => {
|
|
387
|
+
Name => 'HDRGainCurveSize',
|
|
388
|
+
Format => 'int32u',
|
|
389
|
+
},
|
|
390
|
+
10 => {
|
|
391
|
+
Name => 'HDRGainCurve', # (NC)
|
|
392
|
+
Format => 'int32uRev[$val{6}]',
|
|
393
|
+
Binary => 1,
|
|
394
|
+
},
|
|
395
|
+
);
|
|
396
|
+
|
|
385
397
|
# JPS APP3 segment (ref http://paulbourke.net/stereographics/stereoimage/)
|
|
386
398
|
%Image::ExifTool::JPEG::JPS = (
|
|
387
399
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use vars qw($VERSION);
|
|
12
12
|
use Image::ExifTool;
|
|
13
13
|
|
|
14
|
-
$VERSION = '1.
|
|
14
|
+
$VERSION = '1.04';
|
|
15
15
|
|
|
16
16
|
sub ProcessLigoGPS($$$;$);
|
|
17
17
|
sub ProcessLigoJSON($$$);
|
|
@@ -264,6 +264,20 @@ sub ParseLigoGPS($$$;$)
|
|
|
264
264
|
delete $$et{SET_GROUP1};
|
|
265
265
|
}
|
|
266
266
|
|
|
267
|
+
#------------------------------------------------------------------------------
|
|
268
|
+
# Process GKU dashcam trailer containing JSON-format LigoGPS
|
|
269
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
|
270
|
+
# Returns: 1 on success
|
|
271
|
+
sub ProcessGKU($$$;$)
|
|
272
|
+
{
|
|
273
|
+
my ($et, $dirInfo, $tagTbl) = @_;
|
|
274
|
+
my $dataPt = $$dirInfo{DataPt};
|
|
275
|
+
my $pos = unpack('V', $$dataPt);
|
|
276
|
+
return 0 if $pos + 13 > length $$dataPt or substr($$dataPt, $pos, 13) ne 'LIGOGPSINFO {';
|
|
277
|
+
pos($$dataPt) = $pos;
|
|
278
|
+
return ProcessLigoJSON($et, $dirInfo, $tagTbl);
|
|
279
|
+
}
|
|
280
|
+
|
|
267
281
|
#------------------------------------------------------------------------------
|
|
268
282
|
# Process LIGOGPSINFO data (non-JSON format)
|
|
269
283
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
|
@@ -315,7 +329,7 @@ sub ProcessLigoJSON($$$)
|
|
|
315
329
|
my $dataPt = $$dirInfo{DataPt};
|
|
316
330
|
my $dirLen = $$dirInfo{DirLen};
|
|
317
331
|
require Image::ExifTool::Import;
|
|
318
|
-
$et->VerboseDir('LIGO_JSON', undef, length($$dataPt));
|
|
332
|
+
$et->VerboseDir('LIGO_JSON', undef, length($$dataPt) - pos($$dataPt));
|
|
319
333
|
$$et{SET_GROUP1} = 'LIGO';
|
|
320
334
|
while ($$dataPt =~ /LIGOGPSINFO (\{.*?\})/g) {
|
|
321
335
|
my $json = $1;
|
|
@@ -15,7 +15,7 @@ use vars qw($VERSION);
|
|
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
16
|
use Image::ExifTool::Exif;
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.16';
|
|
19
19
|
|
|
20
20
|
sub ProcessMPImageList($$$);
|
|
21
21
|
|
|
@@ -127,11 +127,15 @@ sub ProcessMPImageList($$$);
|
|
|
127
127
|
0x000000 => 'Undefined',
|
|
128
128
|
0x010001 => 'Large Thumbnail (VGA equivalent)',
|
|
129
129
|
0x010002 => 'Large Thumbnail (full HD equivalent)',
|
|
130
|
+
0x010003 => 'Large Thumbnail (4K equivalent)',
|
|
131
|
+
0x010004 => 'Large Thumbnail (8K equivalent)',
|
|
132
|
+
0x010005 => 'Large Thumbnail (16K equivalent)',
|
|
130
133
|
0x020001 => 'Multi-frame Panorama',
|
|
131
134
|
0x020002 => 'Multi-frame Disparity',
|
|
132
135
|
0x020003 => 'Multi-angle',
|
|
133
136
|
0x030000 => 'Baseline MP Primary Image',
|
|
134
137
|
0x040000 => 'Original Preservation Image', # (Exif 3.0)
|
|
138
|
+
0x050000 => 'Gain Map Image',
|
|
135
139
|
},
|
|
136
140
|
},
|
|
137
141
|
4 => {
|
|
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
|
|
|
65
65
|
use Image::ExifTool::GPS;
|
|
66
66
|
use Image::ExifTool::XMP;
|
|
67
67
|
|
|
68
|
-
$VERSION = '4.
|
|
68
|
+
$VERSION = '4.46';
|
|
69
69
|
|
|
70
70
|
sub LensIDConv($$$);
|
|
71
71
|
sub ProcessNikonAVI($$$);
|
|
@@ -552,6 +552,7 @@ sub GetAFPointGrid($$;$);
|
|
|
552
552
|
'21 56 8E 8E 24 24 14 00' => 'Tamron SP AF 300mm f/2.8 LD-IF (60E)',
|
|
553
553
|
'27 54 8E 8E 24 24 1D 02' => 'Tamron SP AF 300mm f/2.8 LD-IF (360E)',
|
|
554
554
|
'E1 40 19 36 2C 35 DF 4E' => 'Tamron 10-24mm f/3.5-4.5 Di II VC HLD (B023)',
|
|
555
|
+
'E1 40 19 36 2C 35 DF 0E' => 'Tamron 10-24mm f/3.5-4.5 Di II VC HLD (B023)', #30
|
|
555
556
|
'F6 3F 18 37 2C 34 84 06' => 'Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical (IF) (B001)',
|
|
556
557
|
'F6 3F 18 37 2C 34 DF 06' => 'Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical (IF) (B001)', #30
|
|
557
558
|
'00 36 1C 2D 34 3C 00 06' => 'Tamron SP AF 11-18mm f/4.5-5.6 Di II LD Aspherical (IF) (A13)',
|
|
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
40
40
|
use Image::ExifTool::Exif;
|
|
41
41
|
use Image::ExifTool::APP12;
|
|
42
42
|
|
|
43
|
-
$VERSION = '2.
|
|
43
|
+
$VERSION = '2.85';
|
|
44
44
|
|
|
45
45
|
sub PrintLensInfo($$$);
|
|
46
46
|
|
|
@@ -113,7 +113,7 @@ my %olympusLensTypes = (
|
|
|
113
113
|
'0 34 00' => 'Olympus Zuiko Digital ED 9-18mm F4.0-5.6', #7
|
|
114
114
|
'0 34 10' => 'Olympus M.Zuiko Digital ED 12-45mm F4.0 Pro', #IB
|
|
115
115
|
'0 35 00' => 'Olympus Zuiko Digital 14-54mm F2.8-3.5 II', #PH
|
|
116
|
-
'0 35 10' => 'Olympus M.Zuiko 100-400mm F5.0-6.3', #IB
|
|
116
|
+
'0 35 10' => 'Olympus M.Zuiko 100-400mm F5.0-6.3', #IB (also OM System M.Zuiko Digital ED 100-400mm F5.0-6.3 IS II", forum2833)
|
|
117
117
|
'0 36 10' => 'Olympus M.Zuiko Digital ED 8-25mm F4 Pro', #IB
|
|
118
118
|
'0 37 10' => 'Olympus M.Zuiko Digital ED 40-150mm F4.0 Pro', #forum3833
|
|
119
119
|
'0 39 10' => 'Olympus M.Zuiko Digital ED 90mm F3.5 Macro IS Pro', #forum3833
|
|
@@ -446,6 +446,7 @@ my %olympusCameraTypes = (
|
|
|
446
446
|
S0095 => 'OM-1', #IB
|
|
447
447
|
S0101 => 'OM-5', #IB
|
|
448
448
|
S0121 => 'OM-1MarkII', #forum15652
|
|
449
|
+
S0123 => 'OM-3', #forum17208
|
|
449
450
|
SR45 => 'D220',
|
|
450
451
|
SR55 => 'D320L',
|
|
451
452
|
SR83 => 'D340L',
|
|
@@ -16,7 +16,7 @@ use strict;
|
|
|
16
16
|
use vars qw($VERSION);
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.01';
|
|
20
20
|
|
|
21
21
|
%Image::ExifTool::PCAP::Main = (
|
|
22
22
|
GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Other' },
|
|
@@ -261,14 +261,14 @@ $VERSION = '1.00';
|
|
|
261
261
|
},
|
|
262
262
|
},
|
|
263
263
|
19373 => {
|
|
264
|
-
Name => '
|
|
264
|
+
Name => 'CustomOption4',
|
|
265
265
|
Binary => 1,
|
|
266
266
|
},
|
|
267
267
|
#
|
|
268
268
|
# "options" tags in Section Header Block
|
|
269
269
|
#
|
|
270
270
|
'SHB-2' => 'Hardware',
|
|
271
|
-
'SHB-3' => '
|
|
271
|
+
'SHB-3' => 'OperatingSystem',
|
|
272
272
|
'SHB-4' => 'UserApplication',
|
|
273
273
|
#
|
|
274
274
|
# "options" tags in Interface Description Block
|
|
@@ -308,8 +308,8 @@ $VERSION = '1.00';
|
|
|
308
308
|
Name => 'Filter',
|
|
309
309
|
ValueConv => 'Get8u(\$val,0) . ": " . substr($val, 1)',
|
|
310
310
|
},
|
|
311
|
-
'IDB-12' => '
|
|
312
|
-
'IDB-13' => { Name => '
|
|
311
|
+
'IDB-12' => 'OperatingSystem',
|
|
312
|
+
'IDB-13' => { Name => 'FrameCheckSequenceLength', Format => 'int8u' },
|
|
313
313
|
'IDB-14' => {
|
|
314
314
|
Name => 'TimeStampOffset',
|
|
315
315
|
Format => 'int64u',
|
|
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
|
|
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
38
38
|
use Image::ExifTool::Exif;
|
|
39
39
|
|
|
40
|
-
$VERSION = '2.
|
|
40
|
+
$VERSION = '2.25';
|
|
41
41
|
|
|
42
42
|
sub ProcessLeicaLEIC($$$);
|
|
43
43
|
sub WhiteBalanceConv($;$$);
|
|
@@ -1436,6 +1436,14 @@ my %shootingMode = (
|
|
|
1436
1436
|
Name => 'NoiseReductionStrength',
|
|
1437
1437
|
Writable => 'rational64s',
|
|
1438
1438
|
},
|
|
1439
|
+
0xde => { #forum17299
|
|
1440
|
+
Name => 'AFAreaSize',
|
|
1441
|
+
Writable => 'rational64u',
|
|
1442
|
+
Notes => 'relative to size of image',
|
|
1443
|
+
Count => 2,
|
|
1444
|
+
PrintConv => '$val =~ /^4194303.999/ ? "n/a" : $val',
|
|
1445
|
+
PrintConvInv => '$val eq "n/a" ? "4194303.999 4194303.999" : $val',
|
|
1446
|
+
},
|
|
1439
1447
|
0xe4 => { #IB
|
|
1440
1448
|
Name => 'LensTypeModel',
|
|
1441
1449
|
Condition => '$format eq "int16u"',
|
|
@@ -15,7 +15,7 @@ use strict;
|
|
|
15
15
|
use vars qw($VERSION);
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.03';
|
|
19
19
|
|
|
20
20
|
sub Process_mett($$$);
|
|
21
21
|
|
|
@@ -61,10 +61,18 @@ sub Process_mett($$$);
|
|
|
61
61
|
Name => 'ARCoreAccel',
|
|
62
62
|
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreAccel', ByteOrder => 'II' },
|
|
63
63
|
},
|
|
64
|
+
'application/arcore-accel-0' => {
|
|
65
|
+
Name => 'ARCoreAccel0',
|
|
66
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreAccel0', ByteOrder => 'II' },
|
|
67
|
+
},
|
|
64
68
|
'application/arcore-gyro' => {
|
|
65
69
|
Name => 'ARCoreGyro',
|
|
66
70
|
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreGyro', ByteOrder => 'II' },
|
|
67
71
|
},
|
|
72
|
+
'application/arcore-gyro-0' => {
|
|
73
|
+
Name => 'ARCoreGyro0',
|
|
74
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreGyro0', ByteOrder => 'II' },
|
|
75
|
+
},
|
|
68
76
|
'application/arcore-video-0' => {
|
|
69
77
|
Name => 'ARCoreVideo',
|
|
70
78
|
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreVideo', ByteOrder => 'II' },
|
|
@@ -684,11 +692,24 @@ sub Process_mett($$$);
|
|
|
684
692
|
# 33: increments slowly (about once every 56 samples or so)
|
|
685
693
|
);
|
|
686
694
|
|
|
695
|
+
# ARCore Accel data (ref PH)
|
|
696
|
+
%Image::ExifTool::Parrot::ARCoreAccel0 = (
|
|
697
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
698
|
+
GROUPS => { 2 => 'Location' },
|
|
699
|
+
NOTES => 'ARCore accelerometer data.',
|
|
700
|
+
FIRST_ENTRY => 0,
|
|
701
|
+
9 => { # (NC)
|
|
702
|
+
Name => 'Accelerometer',
|
|
703
|
+
Format => 'undef[14]',
|
|
704
|
+
RawConv => 'GetFloat(\$val,0) . " " . GetFloat(\$val,5) . " " . GetFloat(\$val,10)',
|
|
705
|
+
},
|
|
706
|
+
);
|
|
707
|
+
|
|
687
708
|
# ARCore Gyro data (ref PH)
|
|
688
709
|
%Image::ExifTool::Parrot::ARCoreGyro = (
|
|
689
710
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
690
711
|
GROUPS => { 2 => 'Location' },
|
|
691
|
-
NOTES => 'ARCore
|
|
712
|
+
NOTES => 'ARCore gyro data.',
|
|
692
713
|
FIRST_ENTRY => 0,
|
|
693
714
|
# 00-04: always 10 34 16 3 29
|
|
694
715
|
4 => {
|
|
@@ -704,6 +725,19 @@ sub Process_mett($$$);
|
|
|
704
725
|
},
|
|
705
726
|
);
|
|
706
727
|
|
|
728
|
+
# ARCore Gyro data (ref PH)
|
|
729
|
+
%Image::ExifTool::Parrot::ARCoreGyro0 = (
|
|
730
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
731
|
+
GROUPS => { 2 => 'Location' },
|
|
732
|
+
NOTES => 'ARCore gyro data.',
|
|
733
|
+
FIRST_ENTRY => 0,
|
|
734
|
+
9 => { # (NC)
|
|
735
|
+
Name => 'Gyroscope',
|
|
736
|
+
Format => 'undef[14]',
|
|
737
|
+
RawConv => 'GetFloat(\$val,0) . " " . GetFloat(\$val,5) . " " . GetFloat(\$val,10)',
|
|
738
|
+
},
|
|
739
|
+
);
|
|
740
|
+
|
|
707
741
|
%Image::ExifTool::Parrot::ARCoreVideo = (
|
|
708
742
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
709
743
|
FIRST_ENTRY => 0,
|
|
@@ -766,11 +800,24 @@ sub Process_mett($$$)
|
|
|
766
800
|
$et->VerboseDir('Parrot mett', undef, $dirEnd);
|
|
767
801
|
|
|
768
802
|
if ($$tagTbl{$metaType}) {
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
803
|
+
# loop through ARCore records
|
|
804
|
+
while ($pos < $dirEnd - 2) {
|
|
805
|
+
last unless substr($$dataPt,$pos,1) eq "\x0a";
|
|
806
|
+
my $len = ord(substr($$dataPt, $pos+1, 1));
|
|
807
|
+
if ($pos + $len + 2 > $dirEnd) {
|
|
808
|
+
$et->Warn("Unexpected length for $metaType record", 1);
|
|
809
|
+
last;
|
|
810
|
+
}
|
|
811
|
+
$len or $len = $dirEnd - $pos - 2; # use entire record if length is 0
|
|
812
|
+
$et->HandleTag($tagTbl, $metaType, undef,
|
|
813
|
+
DataPt => $dataPt,
|
|
814
|
+
DataPos => $dataPos,
|
|
815
|
+
DirStart => $pos,
|
|
816
|
+
DirLen => $len,
|
|
817
|
+
Base => $$dirInfo{Base},
|
|
818
|
+
);
|
|
819
|
+
$pos += $len + 2;
|
|
820
|
+
}
|
|
774
821
|
return 1;
|
|
775
822
|
}
|
|
776
823
|
while ($pos + 4 < $dirEnd) {
|
|
@@ -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.50';
|
|
62
62
|
|
|
63
63
|
sub CryptShutterCount($$);
|
|
64
64
|
sub PrintFilter($$$);
|
|
@@ -558,6 +558,7 @@ my %pentaxModelID = (
|
|
|
558
558
|
0x13254 => 'K-3 Mark III', #IB (Ricoh)
|
|
559
559
|
0x13290 => 'WG-70', # (Ricoh)
|
|
560
560
|
0x1329a => 'GR IIIx', # (Ricoh)
|
|
561
|
+
0x132b8 => 'KF', #github322 (Ricoh)
|
|
561
562
|
0x132d6 => 'K-3 Mark III Monochrome', #github226 (Ricoh)
|
|
562
563
|
);
|
|
563
564
|
|
|
@@ -736,6 +737,18 @@ my %filterSettings = (
|
|
|
736
737
|
52 => ['Toning2', '%+d'], #31 Extract Color (-3-+3)
|
|
737
738
|
);
|
|
738
739
|
|
|
740
|
+
# order of selectable K-3iii AF points. The array looks like this:
|
|
741
|
+
# B1 C1 E1 G1 I1 K1 L1
|
|
742
|
+
# A3 B3 C3 E3 G3 I3 K3 L3 M3
|
|
743
|
+
# A5 B5 C5 E5 G5 I5 K5 L5 M5
|
|
744
|
+
# A7 B7 C7 E7 G7 I7 K7 L7 M7
|
|
745
|
+
# B9 C9 E9 G9 I9 K9 L9
|
|
746
|
+
my @k3iiiAF = qw(
|
|
747
|
+
C1 E1 G1 I1 K1 C3 E3 G3 I3 K3 C5 E5 G5
|
|
748
|
+
I5 K5 C7 E7 G7 I7 K7 C9 E9 G9 I9 K9 A5 M5 B3
|
|
749
|
+
L3 B5 L5 B7 L7 B1 L1 B9 L9 A3 M3 A7 M7
|
|
750
|
+
);
|
|
751
|
+
|
|
739
752
|
# decoding for Pentax Firmware ID tags - PH
|
|
740
753
|
my %pentaxFirmwareID = (
|
|
741
754
|
# the first 2 numbers are the firmware version, I'm not sure what the second 2 mean
|
|
@@ -1943,6 +1956,7 @@ my %binaryDataAttrs = (
|
|
|
1943
1956
|
'18 3' => 'Auto Program (MTF)', #PH (NC)
|
|
1944
1957
|
'18 22' => 'Auto Program (Shallow DOF)', #PH (NC)
|
|
1945
1958
|
'20 22' => 'Blur Control', #PH (Q)
|
|
1959
|
+
'26 0' => 'Shutter and Aperture Priority (TAv)', #PH (K-3III)
|
|
1946
1960
|
'249 0' => 'Movie (TAv)', #31
|
|
1947
1961
|
'250 0' => 'Movie (TAv, Auto Aperture)', #31
|
|
1948
1962
|
'251 0' => 'Movie (Manual)', #31
|
|
@@ -4917,6 +4931,7 @@ my %binaryDataAttrs = (
|
|
|
4917
4931
|
# CalFlag, ContrastFlag, PrecalFlag, SelectSensor
|
|
4918
4932
|
0x00 => { #PH
|
|
4919
4933
|
Name => 'AFPointsUnknown1',
|
|
4934
|
+
Condition => '$$self{Model} !~ /K-3 Mark III/', # (and maybe others?)
|
|
4920
4935
|
Unknown => 1,
|
|
4921
4936
|
Format => 'int16u',
|
|
4922
4937
|
ValueConv => '$self->Options("Unknown") ? $val : $val & 0x7ff',
|
|
@@ -4944,6 +4959,7 @@ my %binaryDataAttrs = (
|
|
|
4944
4959
|
},
|
|
4945
4960
|
0x02 => { #PH
|
|
4946
4961
|
Name => 'AFPointsUnknown2',
|
|
4962
|
+
Condition => '$$self{Model} !~ /K-3 Mark III/', # (and maybe others?)
|
|
4947
4963
|
Unknown => 1,
|
|
4948
4964
|
Format => 'int16u',
|
|
4949
4965
|
ValueConv => '$self->Options("Unknown") ? $val : $val & 0x7ff',
|
|
@@ -5016,6 +5032,41 @@ my %binaryDataAttrs = (
|
|
|
5016
5032
|
20 => 'Mid-right',
|
|
5017
5033
|
},
|
|
5018
5034
|
},
|
|
5035
|
+
0x14 => {
|
|
5036
|
+
Name => 'AFPointValues',
|
|
5037
|
+
Condition => '$$self{Model} eq "PENTAX K-3 Mark III"', # any other models?
|
|
5038
|
+
Format => 'int16uRev[69]',
|
|
5039
|
+
Unknown => 1,
|
|
5040
|
+
Notes => 'some unknown values related to each AFPoint',
|
|
5041
|
+
# order is the same as AFPoints below, but there is an additional value for
|
|
5042
|
+
# each AF point starting at offset 28 in the array (yes, the range overlaps
|
|
5043
|
+
# with the 1st values)
|
|
5044
|
+
# (values are int16s stored in reversed byte order)
|
|
5045
|
+
ValueConv => 'my @a=split " ",$val;$_>32767 and $_-=65536 foreach @a;join " ",@a',
|
|
5046
|
+
PrintConv => \&AFPointValues,
|
|
5047
|
+
},
|
|
5048
|
+
0x12a => { # byte has a value of 2 if corresponding AF point is selected
|
|
5049
|
+
Name => 'AFPointsSelected',
|
|
5050
|
+
Condition => '$$self{Model} eq "PENTAX K-3 Mark III"', # any other models?
|
|
5051
|
+
Notes => q{
|
|
5052
|
+
K-3III only. 41 selectable AF points from a total of 101 available in a 13x9
|
|
5053
|
+
grid. Columns are labelled A-M and rows are 1-9. The center point is G5
|
|
5054
|
+
},
|
|
5055
|
+
Format => 'int8u[41]',
|
|
5056
|
+
PrintConv => 'Image::ExifTool::Pentax::AFPointsK3iii($val,$self,2)',
|
|
5057
|
+
},
|
|
5058
|
+
#
|
|
5059
|
+
# (maybe not coincidentally, there are 60 unknown bytes
|
|
5060
|
+
# here, and there are also 60 non-selectable AF points)
|
|
5061
|
+
#
|
|
5062
|
+
0x18f => { # byte has a value of 1 if corresponding AF point is ... in focus maybe?
|
|
5063
|
+
# usually the same points as AFPoints above, but not always
|
|
5064
|
+
Name => 'AFPointsUnknown',
|
|
5065
|
+
Condition => '$$self{Model} eq "PENTAX K-3 Mark III"', # any other models?
|
|
5066
|
+
Unknown => 1,
|
|
5067
|
+
Format => 'int8u[41]',
|
|
5068
|
+
PrintConv => \&AFPointsK3iii,
|
|
5069
|
+
},
|
|
5019
5070
|
0x1fa => {
|
|
5020
5071
|
Name => 'LiveView',
|
|
5021
5072
|
Notes => 'decoded only for the K-3 III',
|
|
@@ -5739,6 +5790,7 @@ my %binaryDataAttrs = (
|
|
|
5739
5790
|
# more quickly than CameraTemperature when shooting video.)
|
|
5740
5791
|
0x0c => {
|
|
5741
5792
|
Name => 'SensorTemperature', #forum6677 (was CameraTemperature2)
|
|
5793
|
+
Condition => '$$self{Model} !~ /K-3 Mark III/', # (and maybe others?)
|
|
5742
5794
|
Format => 'int16s',
|
|
5743
5795
|
ValueConv => '$val / 10',
|
|
5744
5796
|
ValueConvInv => '$val * 10',
|
|
@@ -5747,6 +5799,7 @@ my %binaryDataAttrs = (
|
|
|
5747
5799
|
},
|
|
5748
5800
|
0x0e => {
|
|
5749
5801
|
Name => 'SensorTemperature2', #forum6677 (was CameraTemperature3)
|
|
5802
|
+
Condition => '$$self{Model} !~ /K-3 Mark III/', # (and maybe others?)
|
|
5750
5803
|
Format => 'int16s',
|
|
5751
5804
|
ValueConv => '$val / 10',
|
|
5752
5805
|
ValueConvInv => '$val * 10',
|
|
@@ -5768,6 +5821,15 @@ my %binaryDataAttrs = (
|
|
|
5768
5821
|
PrintConvInv => '$val=~s/ ?c$//i; $val',
|
|
5769
5822
|
},
|
|
5770
5823
|
# 0x18,0x1a,0x1c,0x1e = int16u[4] BlackPoint - PH
|
|
5824
|
+
0x2a => {
|
|
5825
|
+
Name => 'SensorTemperature',
|
|
5826
|
+
Condition => '$$self{Model} =~ /K-3 Mark III/',
|
|
5827
|
+
Format => 'int16s',
|
|
5828
|
+
ValueConv => '$val / 10',
|
|
5829
|
+
ValueConvInv => '$val * 10',
|
|
5830
|
+
PrintConv => 'sprintf("%.1f C", $val)',
|
|
5831
|
+
PrintConvInv => '$val=~s/ ?c$//i; $val',
|
|
5832
|
+
},
|
|
5771
5833
|
);
|
|
5772
5834
|
|
|
5773
5835
|
# currently unknown info
|
|
@@ -6356,6 +6418,45 @@ sub DecodeAFPoints($$$$;$)
|
|
|
6356
6418
|
return join(',', @bitList);
|
|
6357
6419
|
}
|
|
6358
6420
|
|
|
6421
|
+
#------------------------------------------------------------------------------
|
|
6422
|
+
# Print AF Point names for K-3III (ref PH)
|
|
6423
|
+
# Inputs: 0) value, 1) ExifTool ref, 2) optional value to match
|
|
6424
|
+
sub AFPointsK3iii($$;$)
|
|
6425
|
+
{
|
|
6426
|
+
my @a = split ' ', $_[0];
|
|
6427
|
+
my $match = $_[2];
|
|
6428
|
+
my @pts;
|
|
6429
|
+
if ($match) {
|
|
6430
|
+
$a[$_] == $match and push @pts, $k3iiiAF[$_] || "Unknown($_)" foreach 0..$#a;
|
|
6431
|
+
} else {
|
|
6432
|
+
$a[$_] and push @pts, $k3iiiAF[$_] || "Unknown($_)" foreach 0..$#a;
|
|
6433
|
+
}
|
|
6434
|
+
return @pts ? join ',', sort @pts : '(none)';
|
|
6435
|
+
}
|
|
6436
|
+
|
|
6437
|
+
#------------------------------------------------------------------------------
|
|
6438
|
+
# Print AF point values for K-3III (ref PH)
|
|
6439
|
+
# Inputs: 0) value, 1) ExifTool ref
|
|
6440
|
+
# Notes: this is experimental and not well understood
|
|
6441
|
+
sub AFPointValues($$)
|
|
6442
|
+
{
|
|
6443
|
+
my @a = split ' ', shift;
|
|
6444
|
+
my @vals;
|
|
6445
|
+
# (I really don't understand why Pentax seemed to use 28 instead of 41 for
|
|
6446
|
+
# the first index of the 2nd value, because as it stands there is
|
|
6447
|
+
# overlap between the ranges of the 1st and 2nd values, and there is
|
|
6448
|
+
# no way to tell which is which for cases were multiple points have values)
|
|
6449
|
+
foreach (0 .. $#a) {
|
|
6450
|
+
next unless $a[$_];
|
|
6451
|
+
my $pt = $k3iiiAF[$_] ? $k3iiiAF[$_] . '=' : $k3iiiAF[$_-28] . '=/';
|
|
6452
|
+
push @vals, "$pt$a[$_]";
|
|
6453
|
+
next unless $a[$_ + 28];
|
|
6454
|
+
$vals[-1] .= '/' . $a[$_ + 28];
|
|
6455
|
+
$a[$_ + 28] = undef;
|
|
6456
|
+
}
|
|
6457
|
+
return @vals ? join ',', sort @vals : '(none)';
|
|
6458
|
+
}
|
|
6459
|
+
|
|
6359
6460
|
#------------------------------------------------------------------------------
|
|
6360
6461
|
# Convert Pentax hex-based EV (modulo 8) to real number
|
|
6361
6462
|
# Inputs: 0) value to convert
|
|
@@ -11,7 +11,7 @@ package Image::ExifTool::Plot;
|
|
|
11
11
|
use strict;
|
|
12
12
|
use vars qw($VERSION);
|
|
13
13
|
|
|
14
|
-
$VERSION = '1.
|
|
14
|
+
$VERSION = '1.03';
|
|
15
15
|
|
|
16
16
|
# default plot settings (lower-case settings may be overridden by the user)
|
|
17
17
|
my %defaults = (
|
|
@@ -262,23 +262,35 @@ sub Draw($$)
|
|
|
262
262
|
{
|
|
263
263
|
my ($self, $fp) = @_;
|
|
264
264
|
my ($min, $max, $xmin, $xmax, $name, $style) = @$self{qw(Min Max XMin XMax Name style)};
|
|
265
|
+
my ($plotNum, $multiMulti);
|
|
265
266
|
|
|
266
267
|
if (not defined $min or not defined $xmin) {
|
|
267
268
|
$$self{Error} = 'Nothing to plot';
|
|
268
269
|
return;
|
|
269
270
|
}
|
|
270
|
-
my ($i, $n, %col, %class, $dx, $dy, $dx2, $xAxis, $x, $y, $px, $py, @og);
|
|
271
|
-
my ($noLegend, $xname, $xdat, $xdiff, $diff, %markID, $plotNum);
|
|
272
271
|
my $scat = $$self{type} =~ /^s/ ? 1 : 0;
|
|
273
272
|
my $hist = $$self{type} =~ /^h/ ? [ ] : 0;
|
|
274
|
-
my $multi =
|
|
273
|
+
my $multi = $$self{multi} || 0;
|
|
274
|
+
my @multi = $multi =~ /\d+/g;
|
|
275
|
+
my @names = @$name;
|
|
276
|
+
shift @names if $scat;
|
|
277
|
+
$multi = shift @multi;
|
|
275
278
|
$multi = 0 unless $multi > 0;
|
|
276
279
|
$style or $style = $hist ? 'line+fill' : 'line';
|
|
277
280
|
unless ($style =~ /\b[mpl]/ or ($hist and $style =~ /\bf/)) {
|
|
278
281
|
$$self{Error} = 'Invalid plot Style setting';
|
|
279
282
|
return;
|
|
280
283
|
}
|
|
281
|
-
my $numPlots =
|
|
284
|
+
my $numPlots = 0;
|
|
285
|
+
if ($multi) {
|
|
286
|
+
my $n;
|
|
287
|
+
for ($n=0; $n<scalar(@$name)-$scat; ++$numPlots) {
|
|
288
|
+
$n += ($multi[$numPlots] || 1);
|
|
289
|
+
$multiMulti = 1 if $multi[$numPlots] and $multi[$numPlots] > 1;
|
|
290
|
+
}
|
|
291
|
+
} else {
|
|
292
|
+
$numPlots = 1;
|
|
293
|
+
}
|
|
282
294
|
my @size = @{$$self{size}};
|
|
283
295
|
my $sy = $size[1];
|
|
284
296
|
if ($multi) {
|
|
@@ -293,6 +305,8 @@ sub Draw($$)
|
|
|
293
305
|
<title>$tmp</title>};
|
|
294
306
|
# loop through all plots
|
|
295
307
|
for ($plotNum=0; $plotNum<$numPlots; ++$plotNum) {
|
|
308
|
+
my ($i, $n, %col, %class, $dx, $dy, $dx2, $xAxis, $x, $y, $px, $py, @og);
|
|
309
|
+
my ($noLegend, $xname, $xdat, $xdiff, $diff, %markID);
|
|
296
310
|
if ($numPlots > 1) {
|
|
297
311
|
print $fp "\n<g transform='translate(", ($plotNum % $multi) * $size[0],
|
|
298
312
|
',', int($plotNum/$multi) * $size[1], ")'>";
|
|
@@ -304,14 +318,19 @@ sub Draw($$)
|
|
|
304
318
|
}
|
|
305
319
|
$name = $$self{Name} = [ ];
|
|
306
320
|
push @{$$self{Name}}, $$self{SaveName}[0] if $scat;
|
|
307
|
-
|
|
308
|
-
|
|
321
|
+
foreach (0 .. (($multi[$plotNum] || 1) - 1)) {
|
|
322
|
+
push @{$$self{Name}}, shift(@names);
|
|
323
|
+
}
|
|
324
|
+
warn "@{$$self{Name}}\n";
|
|
309
325
|
undef $min; undef $max;
|
|
310
|
-
foreach (
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
326
|
+
foreach ($scat .. (@{$$self{Name}} - 1)) {
|
|
327
|
+
my $dat = $$self{Data}{$$self{Name}[$_]};
|
|
328
|
+
foreach (@$dat) {
|
|
329
|
+
defined or next;
|
|
330
|
+
defined $min or $min = $max = $_, next;
|
|
331
|
+
$min > $_ and $min = $_;
|
|
332
|
+
$max < $_ and $max = $_;
|
|
333
|
+
}
|
|
315
334
|
}
|
|
316
335
|
}
|
|
317
336
|
my ($data, $title, $xlabel, $ylabel, $cols, $marks, $tpad, $wid) =
|
|
@@ -321,12 +340,12 @@ sub Draw($$)
|
|
|
321
340
|
|
|
322
341
|
# set reasonable default titles and labels
|
|
323
342
|
$xname = shift @name if $scat;
|
|
324
|
-
$title = "$name[0] vs $xname" if $scat and defined $title and not $title and @name == 1;
|
|
343
|
+
$title = "$name[0] vs $xname" if $scat and defined $title and not $title and @name == 1 and not $multi;
|
|
325
344
|
if ($scat || $hist and defined $xlabel and not $xlabel) {
|
|
326
345
|
$xlabel = $$name[0];
|
|
327
346
|
$noLegend = 1 if $hist;
|
|
328
347
|
}
|
|
329
|
-
if (defined $ylabel and not $ylabel and @name == 1) {
|
|
348
|
+
if (defined $ylabel and not $ylabel and @name == 1 and not $multiMulti) {
|
|
330
349
|
$ylabel = $hist ? 'Count' : $name[0];
|
|
331
350
|
$noLegend = 1 unless $hist;
|
|
332
351
|
}
|
|
@@ -645,7 +664,9 @@ Change plot settings.
|
|
|
645
664
|
Title, XLabel, YLabel - plot title and x/y axis labels (no default)
|
|
646
665
|
XMin, XMax - x axis minimum/maximum (autoscaling if not set)
|
|
647
666
|
YMin, YMax - y axis minimum/maximum
|
|
648
|
-
Multi -
|
|
667
|
+
Multi - number of columns when drawing multiple plots,
|
|
668
|
+
followed optional number of datasets for each
|
|
669
|
+
plot (1 by default) using any separator
|
|
649
670
|
Split - flag to split strings of numbers into lists
|
|
650
671
|
(> 1 to split into lists of N items)
|
|
651
672
|
"Grid=darkgray" - grid color
|