exiftool_vendored 11.94.0 → 12.06.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of exiftool_vendored might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/bin/Changes +163 -3
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +32 -32
- data/bin/exiftool +152 -52
- data/bin/lib/Image/ExifTool.pm +166 -115
- data/bin/lib/Image/ExifTool.pod +108 -81
- data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
- data/bin/lib/Image/ExifTool/APE.pm +2 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +13 -7
- data/bin/lib/Image/ExifTool/Canon.pm +6 -3
- data/bin/lib/Image/ExifTool/CanonCustom.pm +82 -16
- data/bin/lib/Image/ExifTool/DPX.pm +56 -2
- data/bin/lib/Image/ExifTool/DarwinCore.pm +16 -3
- data/bin/lib/Image/ExifTool/Exif.pm +15 -6
- data/bin/lib/Image/ExifTool/Font.pm +9 -2
- data/bin/lib/Image/ExifTool/GIF.pm +5 -0
- data/bin/lib/Image/ExifTool/GeoTiff.pm +2 -0
- data/bin/lib/Image/ExifTool/Geotag.pm +69 -21
- data/bin/lib/Image/ExifTool/GoPro.pm +10 -1
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/HtmlDump.pm +2 -2
- data/bin/lib/Image/ExifTool/ID3.pm +91 -12
- data/bin/lib/Image/ExifTool/Lang/de.pm +3 -1
- data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +44 -24
- data/bin/lib/Image/ExifTool/MWG.pm +9 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +3 -2
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +11 -10
- data/bin/lib/Image/ExifTool/Nikon.pm +156 -18
- data/bin/lib/Image/ExifTool/Olympus.pm +34 -17
- data/bin/lib/Image/ExifTool/PNG.pm +14 -3
- data/bin/lib/Image/ExifTool/PPM.pm +5 -5
- data/bin/lib/Image/ExifTool/Panasonic.pm +147 -13
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +33 -0
- data/bin/lib/Image/ExifTool/Parrot.pm +2 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +3 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +2 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +277 -33
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +460 -67
- data/bin/lib/Image/ExifTool/README +21 -20
- data/bin/lib/Image/ExifTool/RIFF.pm +123 -3
- data/bin/lib/Image/ExifTool/RTF.pm +12 -7
- data/bin/lib/Image/ExifTool/Ricoh.pm +19 -1
- data/bin/lib/Image/ExifTool/Shift.pl +1 -0
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +40 -33
- data/bin/lib/Image/ExifTool/Sony.pm +379 -12
- data/bin/lib/Image/ExifTool/TagLookup.pm +1959 -1874
- data/bin/lib/Image/ExifTool/TagNames.pod +346 -55
- data/bin/lib/Image/ExifTool/Validate.pm +4 -4
- data/bin/lib/Image/ExifTool/WriteExif.pl +3 -2
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +26 -15
- data/bin/lib/Image/ExifTool/Writer.pl +52 -23
- data/bin/lib/Image/ExifTool/XMP.pm +41 -4
- data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
- data/bin/lib/Image/ExifTool/ZISRAW.pm +123 -0
- data/bin/perl-Image-ExifTool.spec +31 -31
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +4 -4
@@ -11,7 +11,7 @@ package Image::ExifTool::Lang::de;
|
|
11
11
|
use strict;
|
12
12
|
use vars qw($VERSION);
|
13
13
|
|
14
|
-
$VERSION = '1.
|
14
|
+
$VERSION = '1.36';
|
15
15
|
|
16
16
|
%Image::ExifTool::Lang::de::Translate = (
|
17
17
|
'AEAperture' => 'AE-Blende',
|
@@ -993,7 +993,9 @@ $VERSION = '1.35';
|
|
993
993
|
},
|
994
994
|
},
|
995
995
|
'AdvancedSceneMode' => {
|
996
|
+
Description => 'Erweiteter Szenenmodus',
|
996
997
|
PrintConv => {
|
998
|
+
'Off' => 'Aus',
|
997
999
|
'Creative Macro' => 'Makro kreativ',
|
998
1000
|
'Flower' => 'Blumen',
|
999
1001
|
'HDR B&W' => 'HDR Schwarz-Weiß',
|
@@ -1302,7 +1302,7 @@ $VERSION = '1.16';
|
|
1302
1302
|
'ExifImageHeight' => 'Alto Imagen',
|
1303
1303
|
'ExifImageWidth' => 'Ancho Imagen',
|
1304
1304
|
'ExifOffset' => 'Puntero Exif IFD',
|
1305
|
-
'ExifToolVersion' => 'Versión
|
1305
|
+
'ExifToolVersion' => 'Versión ExifTool',
|
1306
1306
|
'ExifVersion' => 'Versión Exif',
|
1307
1307
|
'ExpandFilm' => 'Película Expandida',
|
1308
1308
|
'ExpandFilterLens' => 'Filtro Objetivo Expandida',
|
@@ -31,7 +31,7 @@ use strict;
|
|
31
31
|
use vars qw($VERSION);
|
32
32
|
use Image::ExifTool qw(:DataAccess :Utils);
|
33
33
|
|
34
|
-
$VERSION = '1.
|
34
|
+
$VERSION = '1.18';
|
35
35
|
|
36
36
|
# program map table "stream_type" lookup (ref 6/1)
|
37
37
|
my %streamType = (
|
@@ -262,7 +262,7 @@ sub ParseAC3Descriptor($$)
|
|
262
262
|
|
263
263
|
#------------------------------------------------------------------------------
|
264
264
|
# Parse PID stream data
|
265
|
-
# Inputs: 0)
|
265
|
+
# Inputs: 0) ExifTool ref, 1) PID number, 2) PID type, 3) PID name, 4) data ref
|
266
266
|
# Returns: 0=stream parsed OK,
|
267
267
|
# 1=stream parsed but we want to parse more of these,
|
268
268
|
# -1=can't parse yet because we don't know the type
|
@@ -313,7 +313,7 @@ sub ProcessM2TS($$)
|
|
313
313
|
my $raf = $$dirInfo{RAF};
|
314
314
|
my ($buff, $pLen, $upkPrefix, $j, $fileType, $eof);
|
315
315
|
my (%pmt, %pidType, %data, %sectLen);
|
316
|
-
my ($startTime, $endTime, $backScan, $maxBack);
|
316
|
+
my ($startTime, $endTime, $fwdTime, $backScan, $maxBack);
|
317
317
|
my $verbose = $et->Options('Verbose');
|
318
318
|
my $out = $et->Options('TextOut');
|
319
319
|
|
@@ -330,7 +330,7 @@ sub ProcessM2TS($$)
|
|
330
330
|
$upkPrefix = 'x4N';
|
331
331
|
}
|
332
332
|
my $prePos = $pLen - 188; # byte position of packet prefix
|
333
|
-
my $readSize = 64 * $pLen; #
|
333
|
+
my $readSize = 64 * $pLen; # size of our read buffer
|
334
334
|
$raf->Seek(0,0); # rewind to start
|
335
335
|
$raf->Read($buff, $readSize) >= $pLen * 4 or return 0; # require at least 4 packets
|
336
336
|
# validate the sync byte in the next 3 packets
|
@@ -351,39 +351,58 @@ sub ProcessM2TS($$)
|
|
351
351
|
my %didPID = ( 1 => 0, 2 => 0, 0x1fff => 0 );
|
352
352
|
my %needPID = ( 0 => 1 ); # lookup for stream PID's that we still need to parse
|
353
353
|
my $pEnd = 0;
|
354
|
-
my $i = 0;
|
355
354
|
|
356
355
|
# parse packets from MPEG-2 Transport Stream
|
357
356
|
for (;;) {
|
358
357
|
|
359
358
|
unless (%needPID) {
|
360
359
|
last unless defined $startTime;
|
361
|
-
# seek backwards
|
362
|
-
|
363
|
-
|
364
|
-
$backScan -= $pLen;
|
365
|
-
last if $backScan < $maxBack;
|
366
|
-
} else {
|
360
|
+
# reconfigure to seek backwards for last PCR
|
361
|
+
unless (defined $backScan) {
|
362
|
+
my $saveTime = $endTime;
|
367
363
|
undef $endTime;
|
368
364
|
last if $et->Options('FastScan');
|
369
|
-
$verbose and print "[Starting backscan for last PCR]\n";
|
370
|
-
#
|
371
|
-
my $fwdPos = $raf->Tell();
|
365
|
+
$verbose and print $out "[Starting backscan for last PCR]\n";
|
366
|
+
# remember how far we got when reading forward through the file
|
367
|
+
my $fwdPos = $raf->Tell() - length($buff) + $pEnd;
|
368
|
+
# determine the position of the last packet relative to the EOF
|
372
369
|
$raf->Seek(0, 2) or last;
|
373
370
|
my $fsize = $raf->Tell();
|
374
|
-
|
375
|
-
$backScan = ($nPack - 1) * $pLen - $fsize;
|
371
|
+
$backScan = int($fsize / $pLen) * $pLen - $fsize;
|
376
372
|
# set limit on how far back we will go
|
377
373
|
$maxBack = $fwdPos - $fsize;
|
378
|
-
|
374
|
+
# scan back a maximum of 512k (have seen last PCR at -276k)
|
375
|
+
my $nMax = int(512000 / $pLen); # max packets to backscan
|
376
|
+
if ($nMax < int(-$maxBack / $pLen)) {
|
377
|
+
$maxBack = $backScan - $nMax * $pLen;
|
378
|
+
} else {
|
379
|
+
# use this time if none found in all remaining packets
|
380
|
+
$fwdTime = $saveTime;
|
381
|
+
}
|
382
|
+
$pEnd = 0;
|
379
383
|
}
|
380
|
-
$raf->Seek($backScan, 2) or last;
|
381
384
|
}
|
382
|
-
my $pos
|
385
|
+
my $pos;
|
383
386
|
# read more if necessary
|
384
|
-
if (
|
385
|
-
|
386
|
-
$pos = $pEnd =
|
387
|
+
if (defined $backScan) {
|
388
|
+
last if defined $endTime;
|
389
|
+
$pos = $pEnd = $pEnd - 2 * $pLen; # step back to previous packet
|
390
|
+
if ($pos < 0) {
|
391
|
+
# read another buffer from end of file
|
392
|
+
last if $backScan <= $maxBack;
|
393
|
+
my $buffLen = $backScan - $maxBack;
|
394
|
+
$buffLen = $readSize if $buffLen > $readSize;
|
395
|
+
$backScan -= $buffLen;
|
396
|
+
$raf->Seek($backScan, 2) or last;
|
397
|
+
$raf->Read($buff, $buffLen) == $buffLen or last;
|
398
|
+
$pos = $pEnd = $buffLen - $pLen;
|
399
|
+
}
|
400
|
+
} else {
|
401
|
+
$pos = $pEnd;
|
402
|
+
if ($pos + $pLen > length $buff) {
|
403
|
+
$raf->Read($buff, $readSize) >= $pLen or $eof = 1, last;
|
404
|
+
$pos = $pEnd = 0;
|
405
|
+
}
|
387
406
|
}
|
388
407
|
$pEnd += $pLen;
|
389
408
|
# decode the packet prefix
|
@@ -404,8 +423,8 @@ sub ProcessM2TS($$)
|
|
404
423
|
# my $continuity_counter = $prefix & 0x0000000f;
|
405
424
|
|
406
425
|
if ($verbose > 1) {
|
426
|
+
my $i = ($raf->Tell() - length($buff) + $pEnd) / $pLen - 1;
|
407
427
|
print $out "Transport packet $i:\n";
|
408
|
-
++$i;
|
409
428
|
$et->VerboseDump(\$buff, Len => $pLen, Addr => $i * $pLen, Start => $pos - $prePos);
|
410
429
|
my $str = $pidName{$pid} ? " ($pidName{$pid})" : '';
|
411
430
|
printf $out " Timecode: 0x%.4x\n", Get32u(\$buff, $pos - $prePos) if $pLen == 192;
|
@@ -646,7 +665,8 @@ sub ProcessM2TS($$)
|
|
646
665
|
}
|
647
666
|
|
648
667
|
# calculate Duration if available
|
649
|
-
|
668
|
+
$endTime = $fwdTime unless defined $endTime;
|
669
|
+
if (defined $startTime and defined $endTime) {
|
650
670
|
$endTime += 0x80000000 * 1200 if $startTime > $endTime; # handle 33-bit wrap
|
651
671
|
$et->HandleTag($tagTablePtr, 'Duration', $endTime - $startTime);
|
652
672
|
}
|
@@ -16,7 +16,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
16
|
use Image::ExifTool::Exif;
|
17
17
|
use Image::ExifTool::XMP;
|
18
18
|
|
19
|
-
$VERSION = '1.
|
19
|
+
$VERSION = '1.24';
|
20
20
|
|
21
21
|
sub RecoverTruncatedIPTC($$$);
|
22
22
|
sub ListToString($);
|
@@ -629,6 +629,14 @@ sub OverwriteStringList($$$$)
|
|
629
629
|
local $_;
|
630
630
|
my ($et, $nvHash, $val, $newValuePt) = @_;
|
631
631
|
my (@new, $delIndex);
|
632
|
+
my $writeMode = $et->Options('WriteMode');
|
633
|
+
if ($writeMode ne 'wcg') {
|
634
|
+
if (defined $val) {
|
635
|
+
$writeMode =~ /w/i or return 0;
|
636
|
+
} else {
|
637
|
+
$writeMode =~ /c/i or return 0;
|
638
|
+
}
|
639
|
+
}
|
632
640
|
if ($$nvHash{DelValue} and defined $val) {
|
633
641
|
# preserve specified old values
|
634
642
|
my $old = StringToList($val, $et);
|
@@ -325,7 +325,7 @@ sub MDItemLocalTime($)
|
|
325
325
|
|
326
326
|
#------------------------------------------------------------------------------
|
327
327
|
# Set MacOS MDItem and XAttr tags from new tag values
|
328
|
-
# Inputs: 0)
|
328
|
+
# Inputs: 0) ExifTool ref, 1) file name, 2) list of tags to set
|
329
329
|
# Returns: 1=something was set OK, 0=didn't try, -1=error (and warning set)
|
330
330
|
# Notes: There may be errors even if 1 is returned
|
331
331
|
sub SetMacOSTags($$$)
|
@@ -49,7 +49,7 @@ use vars qw($VERSION %minoltaLensTypes %minoltaTeleconverters %minoltaColorMode
|
|
49
49
|
use Image::ExifTool qw(:DataAccess :Utils);
|
50
50
|
use Image::ExifTool::Exif;
|
51
51
|
|
52
|
-
$VERSION = '2.
|
52
|
+
$VERSION = '2.84';
|
53
53
|
|
54
54
|
# Full list of product codes for Sony-compatible Minolta lenses
|
55
55
|
# (ref http://www.kb.sony.com/selfservice/documentLink.do?externalId=C1000570)
|
@@ -608,7 +608,8 @@ $VERSION = '2.83';
|
|
608
608
|
103 => 'Light', #JD
|
609
609
|
104 => 'Night View', #JD
|
610
610
|
105 => 'Autumn Leaves', #JD
|
611
|
-
|
611
|
+
255 => 'Off', #JR (new for ILCE-7SM3, July 2020)
|
612
|
+
0xffffffff => 'n/a', #PH
|
612
613
|
);
|
613
614
|
|
614
615
|
%minoltaSceneMode = (
|
@@ -17,7 +17,7 @@ use vars qw($VERSION);
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
18
18
|
use Image::ExifTool::Minolta;
|
19
19
|
|
20
|
-
$VERSION = '1.
|
20
|
+
$VERSION = '1.16';
|
21
21
|
|
22
22
|
sub ProcessMRW($$;$);
|
23
23
|
sub WriteMRW($$;$);
|
@@ -59,10 +59,12 @@ sub WriteMRW($$;$);
|
|
59
59
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
60
60
|
WRITABLE => 1,
|
61
61
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
62
|
+
DATAMEMBER => [ 0 ],
|
62
63
|
FIRST_ENTRY => 0,
|
63
64
|
0 => {
|
64
65
|
Name => 'FirmwareID',
|
65
66
|
Format => 'string[8]',
|
67
|
+
RawConv => '$$self{MinoltaPRD} = 1 if $$self{FILE_TYPE} eq "MRW"; $val', # used in decoding RIF info
|
66
68
|
},
|
67
69
|
8 => {
|
68
70
|
Name => 'SensorHeight',
|
@@ -214,38 +216,37 @@ sub WriteMRW($$;$);
|
|
214
216
|
PrintConv => \%Image::ExifTool::Minolta::sonyColorMode,
|
215
217
|
},
|
216
218
|
],
|
217
|
-
# NOTE:
|
219
|
+
# NOTE: WB_RBLevels up to Custom also apply to Minolta models which write PRD info (ref IB)
|
218
220
|
8 => { #3
|
219
221
|
Name => 'WB_RBLevelsTungsten',
|
220
|
-
Condition => '$$self{Model} eq "DSLR-A100"',
|
222
|
+
Condition => '$$self{Model} eq "DSLR-A100" or $$self{MinoltaPRD}',
|
221
223
|
Format => 'int16u[2]',
|
222
224
|
Notes => 'these WB_RBLevels currently decoded only for the Sony A100',
|
223
225
|
},
|
224
226
|
12 => { #3
|
225
227
|
Name => 'WB_RBLevelsDaylight',
|
226
|
-
Condition => '$$self{Model} eq "DSLR-A100"',
|
228
|
+
Condition => '$$self{Model} eq "DSLR-A100" or $$self{MinoltaPRD}',
|
227
229
|
Format => 'int16u[2]',
|
228
230
|
},
|
229
231
|
16 => { #3
|
230
232
|
Name => 'WB_RBLevelsCloudy',
|
231
|
-
Condition => '$$self{Model} eq "DSLR-A100"',
|
233
|
+
Condition => '$$self{Model} eq "DSLR-A100" or $$self{MinoltaPRD}',
|
232
234
|
Format => 'int16u[2]',
|
233
235
|
},
|
234
236
|
20 => { #3
|
235
237
|
Name => 'WB_RBLevelsCoolWhiteF',
|
236
|
-
Condition => '$$self{Model} eq "DSLR-A100"',
|
238
|
+
Condition => '$$self{Model} eq "DSLR-A100" or $$self{MinoltaPRD}',
|
237
239
|
Format => 'int16u[2]',
|
238
240
|
},
|
239
241
|
24 => { #3
|
240
242
|
Name => 'WB_RBLevelsFlash',
|
241
|
-
Condition => '$$self{Model} eq "DSLR-A100"',
|
243
|
+
Condition => '$$self{Model} eq "DSLR-A100" or $$self{MinoltaPRD}',
|
242
244
|
Format => 'int16u[2]',
|
243
245
|
},
|
244
246
|
28 => { #3
|
245
|
-
Name => '
|
246
|
-
Condition => '$$self{Model} eq "DSLR-A100"',
|
247
|
+
Name => 'WB_RBLevelsCustom', #IB
|
248
|
+
Condition => '$$self{Model} eq "DSLR-A100" or $$self{MinoltaPRD}',
|
247
249
|
Format => 'int16u[2]',
|
248
|
-
Unknown => 1,
|
249
250
|
},
|
250
251
|
32 => { #3
|
251
252
|
Name => 'WB_RBLevelsShade',
|
@@ -62,7 +62,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
62
62
|
use Image::ExifTool::Exif;
|
63
63
|
use Image::ExifTool::GPS;
|
64
64
|
|
65
|
-
$VERSION = '3.
|
65
|
+
$VERSION = '3.86';
|
66
66
|
|
67
67
|
sub LensIDConv($$$);
|
68
68
|
sub ProcessNikonAVI($$$);
|
@@ -297,6 +297,7 @@ sub GetAFPointGrid($$;$);
|
|
297
297
|
'B8 40 2D 44 2C 34 BA 06' => 'AF-S Nikkor 18-35mm f/3.5-4.5G ED',
|
298
298
|
'A0 40 2D 74 2C 3C BB 0E' => 'AF-S DX Nikkor 18-140mm f/3.5-5.6G ED VR', #PH
|
299
299
|
'A1 54 55 55 0C 0C BC 06' => 'AF-S Nikkor 58mm f/1.4G', #IB
|
300
|
+
'A1 48 6E 8E 24 24 DB 4E' => 'AF-S Nikkor 120-300mm f/2.8E FL ED SR VR', #28
|
300
301
|
'A2 40 2D 53 2C 3C BD 0E' => 'AF-S DX Nikkor 18-55mm f/3.5-5.6G VR II',
|
301
302
|
'A4 40 2D 8E 2C 40 BF 0E' => 'AF-S DX Nikkor 18-300mm f/3.5-6.3G ED VR',
|
302
303
|
'A5 4C 44 44 14 14 C0 06' => 'AF-S Nikkor 35mm f/1.8G ED', #35 ("ED" ref 11)
|
@@ -448,6 +449,7 @@ sub GetAFPointGrid($$;$);
|
|
448
449
|
# '92 3E 2D 88 2C 40 4B 0E' (22mm)
|
449
450
|
# '92 40 2D 88 2C 40 4B 0E' (18mm)
|
450
451
|
'26 48 31 49 24 24 1C 02' => 'Sigma 20-40mm F2.8',
|
452
|
+
'7B 48 37 44 18 18 4B 06' => 'Sigma 24-35mm F2.0 DG HSM | A', #30
|
451
453
|
'02 3A 37 50 31 3D 02 00' => 'Sigma 24-50mm F4-5.6 UC',
|
452
454
|
'26 48 37 56 24 24 1C 02' => 'Sigma 24-60mm F2.8 EX DG',
|
453
455
|
'B6 48 37 56 24 24 1C 02' => 'Sigma 24-60mm F2.8 EX DG',
|
@@ -512,6 +514,7 @@ sub GetAFPointGrid($$;$);
|
|
512
514
|
'CE 34 76 A0 38 40 4B 0E' => 'Sigma 150-500mm F5-6.3 DG OS APO HSM', #JD
|
513
515
|
'81 34 76 A6 38 40 4B 0E' => 'Sigma 150-600mm F5-6.3 DG OS HSM | S', #Jaap Voets
|
514
516
|
'82 34 76 A6 38 40 4B 0E' => 'Sigma 150-600mm F5-6.3 DG OS HSM | C',
|
517
|
+
'C4 4C 73 73 14 14 4B 46' => 'Sigma 135mm F1.8 DG HSM | A', #forum3833
|
515
518
|
'26 40 7B A0 34 40 1C 02' => 'Sigma APO 170-500mm F5-6.3 Aspherical RF',
|
516
519
|
'A7 49 80 A0 24 24 4B 06' => 'Sigma APO 200-500mm F2.8 EX DG',
|
517
520
|
'48 3C 8E B0 3C 3C 4B 02' => 'Sigma APO 300-800mm F5.6 EX DG HSM',
|
@@ -578,6 +581,7 @@ sub GetAFPointGrid($$;$);
|
|
578
581
|
'4D 41 3C 8E 2B 40 62 02' => 'Tamron AF 28-300mm f/3.5-6.3 XR Di LD Aspherical (IF) (A061)',
|
579
582
|
'4D 41 3C 8E 2C 40 62 02' => 'Tamron AF 28-300mm f/3.5-6.3 XR LD Aspherical (IF) (185D)',
|
580
583
|
'F9 40 3C 8E 2C 40 40 0E' => 'Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical (IF) Macro (A20)',
|
584
|
+
'C9 3C 44 76 25 31 DF 4E' => 'Tamron 35-150mm f/2.8-4 Di VC OSD (A043)', #30
|
581
585
|
'00 47 53 80 30 3C 00 06' => 'Tamron AF 55-200mm f/4-5.6 Di II LD (A15)',
|
582
586
|
'F7 53 5C 80 24 24 84 06' => 'Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)',
|
583
587
|
'FE 53 5C 80 24 24 84 06' => 'Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)',
|
@@ -652,6 +656,7 @@ sub GetAFPointGrid($$;$);
|
|
652
656
|
'00 40 64 64 2C 2C 00 00' => 'Voigtlander APO-Lanthar 90mm F3.5 SLII Close Focus',
|
653
657
|
#
|
654
658
|
'00 40 2D 2D 2C 2C 00 00' => 'Carl Zeiss Distagon T* 3.5/18 ZF.2',
|
659
|
+
'00 48 27 27 24 24 00 00' => 'Carl Zeiss Distagon T* 2.8/15 ZF.2', #MykytaKozlov
|
655
660
|
'00 48 32 32 24 24 00 00' => 'Carl Zeiss Distagon T* 2.8/21 ZF.2',
|
656
661
|
'00 54 38 38 18 18 00 00' => 'Carl Zeiss Distagon T* 2/25 ZF.2',
|
657
662
|
'00 54 3C 3C 18 18 00 00' => 'Carl Zeiss Distagon T* 2/28 ZF.2',
|
@@ -709,6 +714,7 @@ sub GetAFPointGrid($$;$);
|
|
709
714
|
'00 48 80 80 30 30 00 00' => 'Nikkor 200mm f/4 AiS',
|
710
715
|
'00 40 11 11 2C 2C 00 00' => 'Samyang 8mm f/3.5 Fish-Eye',
|
711
716
|
'00 58 64 64 20 20 00 00' => 'Soligor C/D Macro MC 90mm f/2.5',
|
717
|
+
'4A 58 30 30 14 0C 4D 02' => 'Rokinon 20mm f/1.8 ED AS UMC', #30
|
712
718
|
);
|
713
719
|
|
714
720
|
# text encoding used in LocationInfo (ref PH)
|
@@ -876,6 +882,38 @@ my %afPoints39 = (
|
|
876
882
|
10 => 'E3', 20 => 'B9', 30 => 'D4',
|
877
883
|
);
|
878
884
|
|
885
|
+
# AF point indices for models with 105 focus points, eg. D6 (ref 28)
|
886
|
+
# - 7 rows (A-G) with 15 columns (1-15), center is D8
|
887
|
+
my %afPoints105 = (
|
888
|
+
1 => 'D8', 28 => 'G7', 55 => 'F13', 82 => 'E4',
|
889
|
+
2 => 'C8', 29 => 'D6', 56 => 'G13', 83 => 'F4',
|
890
|
+
3 => 'B8', 30 => 'C6', 57 => 'D14', 84 => 'G4',
|
891
|
+
4 => 'A8', 31 => 'B6', 58 => 'C14', 85 => 'D3',
|
892
|
+
5 => 'E8', 32 => 'A6', 59 => 'B14', 86 => 'C3',
|
893
|
+
6 => 'F8', 33 => 'E6', 60 => 'A14', 87 => 'B3',
|
894
|
+
7 => 'G8', 34 => 'F6', 61 => 'E14', 88 => 'A3',
|
895
|
+
8 => 'D9', 35 => 'G6', 62 => 'F14', 89 => 'E3',
|
896
|
+
9 => 'C9', 36 => 'D11', 63 => 'G14', 90 => 'F3',
|
897
|
+
10 => 'B9', 37 => 'C11', 64 => 'D15', 91 => 'G3',
|
898
|
+
11 => 'A9', 38 => 'B11', 65 => 'C15', 92 => 'D2',
|
899
|
+
12 => 'E9', 39 => 'A11', 66 => 'B15', 93 => 'C2',
|
900
|
+
13 => 'F9', 40 => 'E11', 67 => 'A15', 94 => 'B2',
|
901
|
+
14 => 'G9', 41 => 'F11', 68 => 'E15', 95 => 'A2',
|
902
|
+
15 => 'D10', 42 => 'G11', 69 => 'F15', 96 => 'E2',
|
903
|
+
16 => 'C10', 43 => 'D12', 70 => 'G15', 97 => 'F2',
|
904
|
+
17 => 'B10', 44 => 'C12', 71 => 'D5', 98 => 'G2',
|
905
|
+
18 => 'A10', 45 => 'B12', 72 => 'C5', 99 => 'D1',
|
906
|
+
19 => 'E10', 46 => 'A12', 73 => 'B5', 100 => 'C1',
|
907
|
+
20 => 'F10', 47 => 'E12', 74 => 'A5', 101 => 'B1',
|
908
|
+
21 => 'G10', 48 => 'F12', 75 => 'E5', 102 => 'A1',
|
909
|
+
22 => 'D7', 49 => 'G12', 76 => 'F5', 103 => 'E1',
|
910
|
+
23 => 'C7', 50 => 'D13', 77 => 'G5', 104 => 'F1',
|
911
|
+
24 => 'B7', 51 => 'C13', 78 => 'D4', 105 => 'G1',
|
912
|
+
25 => 'A7', 52 => 'B13', 79 => 'C4',
|
913
|
+
26 => 'E7', 53 => 'A13', 80 => 'B4',
|
914
|
+
27 => 'F7', 54 => 'E13', 81 => 'A4',
|
915
|
+
);
|
916
|
+
|
879
917
|
# AF point indices for models with 135 focus points, eg. 1J1 (ref PH)
|
880
918
|
# - 9 rows (A-I) with 15 columns (1-15), center is E8
|
881
919
|
# - odd columns, columns 2 and 14, and the remaining corner points are
|
@@ -1538,7 +1576,7 @@ my %binaryDataAttrs = (
|
|
1538
1576
|
0x008c => {
|
1539
1577
|
Name => 'ContrastCurve', #JD
|
1540
1578
|
Writable => 'undef',
|
1541
|
-
Flags => [ 'Binary', 'Protected' ],
|
1579
|
+
Flags => [ 'Binary', 'Protected', 'Drop' ], # (drop because not found in Nikon JPEG's)
|
1542
1580
|
},
|
1543
1581
|
# ColorHue: MODE1/MODE1a=sRGB, MODE2=Adobe RGB, MODE3a=more saturated sRGB
|
1544
1582
|
# --> should really be called ColorSpace or ColorMode, but that would conflict with other tags
|
@@ -1693,7 +1731,8 @@ my %binaryDataAttrs = (
|
|
1693
1731
|
SubDirectory => {
|
1694
1732
|
TagTable => 'Image::ExifTool::Nikon::ShotInfoD850',
|
1695
1733
|
DecryptStart => 4,
|
1696
|
-
DecryptLen =>
|
1734
|
+
DecryptLen => 0x2efb + 12,
|
1735
|
+
DecryptMore => 'Get32u(\$data, 0xa0) + 12',
|
1697
1736
|
ByteOrder => 'LittleEndian',
|
1698
1737
|
},
|
1699
1738
|
},
|
@@ -1782,6 +1821,16 @@ my %binaryDataAttrs = (
|
|
1782
1821
|
ByteOrder => 'LittleEndian',
|
1783
1822
|
},
|
1784
1823
|
},
|
1824
|
+
{ # (D6 firmware version 1.00, ref 28)
|
1825
|
+
Condition => '$$valPt =~ /^0246/',
|
1826
|
+
Name => 'ShotInfoD6',
|
1827
|
+
SubDirectory => {
|
1828
|
+
TagTable => 'Image::ExifTool::Nikon::ShotInfo',
|
1829
|
+
DecryptStart => 4,
|
1830
|
+
DecryptLen => 0xa4, # only decrypt the version info & offset fields for now
|
1831
|
+
ByteOrder => 'LittleEndian',
|
1832
|
+
},
|
1833
|
+
},
|
1785
1834
|
{ # (D610 firmware version 1.00)
|
1786
1835
|
Condition => '$$valPt =~ /^0232/',
|
1787
1836
|
Name => 'ShotInfoD610',
|
@@ -1831,6 +1880,7 @@ my %binaryDataAttrs = (
|
|
1831
1880
|
7 => 'Unpacked 12 bits', #IB (padded to 16)
|
1832
1881
|
8 => 'Small', #IB
|
1833
1882
|
9 => 'Packed 12 bits', #IB (2 pixels in 3 bytes)
|
1883
|
+
10 => 'Packed 14 bits', #28 (4 pixels in 7 bytes, eg. D6 uncompressed 14 bit)
|
1834
1884
|
},
|
1835
1885
|
},
|
1836
1886
|
0x0094 => { Name => 'SaturationAdj', Writable => 'int16s' },
|
@@ -3297,6 +3347,7 @@ my %binaryDataAttrs = (
|
|
3297
3347
|
15 => 'Dynamic Area (72 points)', #PH
|
3298
3348
|
16 => 'Group Area (HL)', #28
|
3299
3349
|
17 => 'Group Area (VL)', #28
|
3350
|
+
18 => 'Dynamic Area (49 points)', #28
|
3300
3351
|
128 => 'Single', #PH (1J1,1J2,1J3,1J4,1S1,1S2,1V2,1V3)
|
3301
3352
|
129 => 'Auto (41 points)', #PH (1J1,1J2,1J3,1J4,1S1,1S2,1V1,1V2,1V3,AW1)
|
3302
3353
|
130 => 'Subject Tracking (41 points)', #PH (1J1,1J4,1J3)
|
@@ -3334,6 +3385,10 @@ my %binaryDataAttrs = (
|
|
3334
3385
|
197 => 'Auto', #PH (Z7)
|
3335
3386
|
198 => 'Auto (198)', #PH (Z7) (focus lock with AF-C maybe?)
|
3336
3387
|
199 => 'Auto (focus lock)', #PH (Z7, AF-S)
|
3388
|
+
200 => 'Normal-area AF', #28 (D6)
|
3389
|
+
201 => 'Wide-area AF', #28 (D6)
|
3390
|
+
202 => 'Face-priority AF', #28 (D6)
|
3391
|
+
203 => 'Subject-tracking AF', #28 (D6)
|
3337
3392
|
},
|
3338
3393
|
},
|
3339
3394
|
],
|
@@ -3352,12 +3407,14 @@ my %binaryDataAttrs = (
|
|
3352
3407
|
6 => 'On (105-point)', #PH (1J4/1V3[128/130])
|
3353
3408
|
7 => 'On (153-point)', #PH (D5/D500/D850)
|
3354
3409
|
8 => 'On (81-point)', #38
|
3410
|
+
9 => 'On (105-point)', #28 (D6)
|
3355
3411
|
},
|
3356
3412
|
},
|
3357
3413
|
7 => [
|
3358
3414
|
{ #PH/JD
|
3359
3415
|
Name => 'PrimaryAFPoint',
|
3360
|
-
|
3416
|
+
# PrimaryAFPoint may only be valid for PhaseDetect - certainly true on the D6, possibly other bodies? (ref 28)
|
3417
|
+
Condition => '$$self{PhaseDetectAF} < 2 and $$self{AFInfo2Version} ne "0301"',
|
3361
3418
|
Notes => q{
|
3362
3419
|
models with 51-point AF -- 5 rows (A-E) and 11 columns (1-11): D3, D3S, D3X,
|
3363
3420
|
D4, D4S, D300, D300S, D700, D800, D800e and D810
|
@@ -3492,7 +3549,7 @@ my %binaryDataAttrs = (
|
|
3492
3549
|
8 => [
|
3493
3550
|
{ #JD/PH
|
3494
3551
|
Name => 'AFPointsUsed',
|
3495
|
-
Condition => '$$self{PhaseDetectAF} < 2',
|
3552
|
+
Condition => '$$self{PhaseDetectAF} < 2 and $$self{AFInfo2Version} ne "0301"',
|
3496
3553
|
Notes => q{
|
3497
3554
|
models with 51-point AF -- 5 rows: A1-9, B1-11, C1-11, D1-11, E1-9. Center
|
3498
3555
|
point is C6
|
@@ -3611,6 +3668,8 @@ my %binaryDataAttrs = (
|
|
3611
3668
|
},
|
3612
3669
|
{ #PH
|
3613
3670
|
Name => 'AFPointsUsed',
|
3671
|
+
# version 301 uses a separate field at offset 0x0a for this tag (ref 28)
|
3672
|
+
Condition => '$$self{AFInfo2Version} ne "0301"',
|
3614
3673
|
Format => 'undef[7]',
|
3615
3674
|
ValueConv => 'join(" ", unpack("H2"x7, $val))',
|
3616
3675
|
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
@@ -3618,6 +3677,19 @@ my %binaryDataAttrs = (
|
|
3618
3677
|
PrintConvInv => '$val=~s/Unknown \\((.*)\\)/$1/; $val',
|
3619
3678
|
},
|
3620
3679
|
],
|
3680
|
+
0x0a => { #28 (D6) in any of the 3 Group modes on the D6, the points specify the outer boundaries of the focus point area; otherwise the tag value is consistent with other Nikon bodies
|
3681
|
+
Name => 'AFPointsUsed',
|
3682
|
+
Condition => '$$self{AFInfo2Version} eq "0301" and $$self{PhaseDetectAF} == 9',
|
3683
|
+
Notes => q{
|
3684
|
+
models with 105-point AF -- 7 rows (A-G) and 15 columns (1-15). Center
|
3685
|
+
point is D8
|
3686
|
+
},
|
3687
|
+
Format => 'undef[14]',
|
3688
|
+
ValueConv => 'join(" ", unpack("H2"x14, $val))',
|
3689
|
+
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
3690
|
+
PrintConv => sub { PrintAFPoints(shift, \%afPoints105); },
|
3691
|
+
PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints105); },
|
3692
|
+
},
|
3621
3693
|
0x10 => { #PH (D90 and D5000)
|
3622
3694
|
Name => 'AFImageWidth',
|
3623
3695
|
Condition => '$$self{AFInfo2Version} eq "0100"',
|
@@ -3660,11 +3732,21 @@ my %binaryDataAttrs = (
|
|
3660
3732
|
Format => 'int16u',
|
3661
3733
|
RawConv => '$val ? $val : undef',
|
3662
3734
|
},
|
3663
|
-
0x1c =>
|
3664
|
-
|
3665
|
-
|
3666
|
-
|
3667
|
-
|
3735
|
+
0x1c => [
|
3736
|
+
{ #PH
|
3737
|
+
Name => 'ContrastDetectAFInFocus',
|
3738
|
+
Condition => '$$self{AFInfo2Version} eq "0100"',
|
3739
|
+
PrintConv => { 0 => 'No', 1 => 'Yes' },
|
3740
|
+
},{ #PH (D500, see forum11190)
|
3741
|
+
Name => 'AFPointsSelected',
|
3742
|
+
Condition => '$$self{AFInfo2Version} eq "0101" and $$self{PhaseDetectAF} == 7',
|
3743
|
+
Format => 'undef[20]',
|
3744
|
+
ValueConv => 'join(" ", unpack("H2"x20, $val))',
|
3745
|
+
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
3746
|
+
PrintConv => sub { PrintAFPoints(shift, \%afPoints153); },
|
3747
|
+
PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints153); },
|
3748
|
+
},
|
3749
|
+
],
|
3668
3750
|
# 0x1d - always zero (with or without live view)
|
3669
3751
|
0x2a => { #PH (Z7)
|
3670
3752
|
Name => 'AFImageWidth',
|
@@ -3680,14 +3762,31 @@ my %binaryDataAttrs = (
|
|
3680
3762
|
},
|
3681
3763
|
0x2e => { #PH (Z7)
|
3682
3764
|
Name => 'AFAreaXPosition',
|
3683
|
-
Condition =>
|
3684
|
-
|
3685
|
-
|
3686
|
-
|
3687
|
-
Name => 'AFAreaYPosition',
|
3688
|
-
Condition => '$$self{ContrastDetectAF} == 2 and $$self{AFInfo2Version} =~ /^03/',
|
3765
|
+
Condition => q{
|
3766
|
+
$$self{ContrastDetectAF} == 2 and $$self{AFInfo2Version} =~ /^03/ or
|
3767
|
+
$$self{ContrastDetectAF} == 1 and $$self{AFInfo2Version} =~ /^0301/
|
3768
|
+
},
|
3689
3769
|
Format => 'int16u',
|
3690
3770
|
},
|
3771
|
+
0x30 => [
|
3772
|
+
{ #PH (Z7)
|
3773
|
+
Name => 'AFAreaYPosition',
|
3774
|
+
Condition => q{
|
3775
|
+
$$self{ContrastDetectAF} == 2 and $$self{AFInfo2Version} =~ /^03/ or
|
3776
|
+
$$self{ContrastDetectAF} == 1 and $$self{AFInfo2Version} =~ /^0301/
|
3777
|
+
},
|
3778
|
+
Format => 'int16u',
|
3779
|
+
},{ #PH (D500, see forum11190)
|
3780
|
+
Name => 'AFPointsInFocus',
|
3781
|
+
Condition => '$$self{AFInfo2Version} eq "0101" and $$self{PhaseDetectAF} == 7',
|
3782
|
+
Notes => 'AF points in focus at the time time image was captured',
|
3783
|
+
Format => 'undef[20]',
|
3784
|
+
ValueConv => 'join(" ", unpack("H2"x20, $val))',
|
3785
|
+
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
3786
|
+
PrintConv => sub { PrintAFPoints(shift, \%afPoints153); },
|
3787
|
+
PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints153); },
|
3788
|
+
},
|
3789
|
+
],
|
3691
3790
|
0x32 => { #PH (Z7)
|
3692
3791
|
Name => 'AFAreaWidth',
|
3693
3792
|
Condition => '$$self{AFInfo2Version} =~ /^03/',
|
@@ -3700,6 +3799,19 @@ my %binaryDataAttrs = (
|
|
3700
3799
|
Format => 'int16u',
|
3701
3800
|
RawConv => '$val ? $val : undef',
|
3702
3801
|
},
|
3802
|
+
0x38 => { #28
|
3803
|
+
Name => 'PrimaryAFPoint',
|
3804
|
+
Condition => '$$self{PhaseDetectAF} == 9 and $$self{AFInfo2Version} =~ /^03/',
|
3805
|
+
Notes => q{
|
3806
|
+
Nikon models with 105-point AF -- 7 rows (A-G) and 15 columns (1-15): D6
|
3807
|
+
},
|
3808
|
+
PrintConvColumns => 5,
|
3809
|
+
PrintConv => {
|
3810
|
+
0 => '(none)',
|
3811
|
+
%afPoints105,
|
3812
|
+
1 => 'D8 (Center)',
|
3813
|
+
},
|
3814
|
+
},
|
3703
3815
|
0x44 => [
|
3704
3816
|
{
|
3705
3817
|
Name => 'PrimaryAFPoint',
|
@@ -3799,6 +3911,7 @@ my %binaryDataAttrs = (
|
|
3799
3911
|
# (don't know what the difference between 1 and 2 is)
|
3800
3912
|
1 => 'On (1)',
|
3801
3913
|
2 => 'On (2)',
|
3914
|
+
3 => 'On (Zoom)', #28
|
3802
3915
|
},
|
3803
3916
|
},
|
3804
3917
|
1 => {
|
@@ -3808,6 +3921,7 @@ my %binaryDataAttrs = (
|
|
3808
3921
|
PrintConvInv => '$val eq "n/a" ? 255 : $val',
|
3809
3922
|
},
|
3810
3923
|
2 => {
|
3924
|
+
# when AFFineTune = 3 (indicating a zoom lens), this Tag stores the tuning adjustment for the wide end of the zoom range (ref 28)
|
3811
3925
|
Name => 'AFFineTuneAdj',
|
3812
3926
|
Priority => 0, # so other value takes priority if it exists
|
3813
3927
|
Notes => 'may only be valid for saved lenses',
|
@@ -3815,6 +3929,14 @@ my %binaryDataAttrs = (
|
|
3815
3929
|
PrintConv => '$val > 0 ? "+$val" : $val',
|
3816
3930
|
PrintConvInv => '$val',
|
3817
3931
|
},
|
3932
|
+
3 => {
|
3933
|
+
Name => 'AFFineTuneAdjTele',
|
3934
|
+
# should probably insert a Condition that restricts this to AFFineTune = 3 (ref 28)
|
3935
|
+
Notes => 'only valid for zoom lenses (ie, AFTune=3)',
|
3936
|
+
Format => 'int8s',
|
3937
|
+
PrintConv => '$val > 0 ? "+$val" : $val',
|
3938
|
+
PrintConvInv => '$val',
|
3939
|
+
},
|
3818
3940
|
);
|
3819
3941
|
|
3820
3942
|
# Nikon NEF processing information (ref forum6281)
|
@@ -6249,7 +6371,7 @@ my %nikonFocalConversions = (
|
|
6249
6371
|
# 3 => 'Rotate 180',
|
6250
6372
|
# },
|
6251
6373
|
#},
|
6252
|
-
0x2ea4 => {
|
6374
|
+
0x2ea4 => { #PH
|
6253
6375
|
Name => 'NikonMeteringMode',
|
6254
6376
|
Condition => '$$self{Model} =~ /\bD500\b/', # (didn't seem to work for D5, but I need more samples)
|
6255
6377
|
Notes => 'D500 only',
|
@@ -6626,7 +6748,7 @@ my %nikonFocalConversions = (
|
|
6626
6748
|
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
6627
6749
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
6628
6750
|
VARS => { ID_LABEL => 'Index' },
|
6629
|
-
DATAMEMBER => [ 0x04, 0x58, 0x0fbf ],
|
6751
|
+
DATAMEMBER => [ 0x04, 0x58, 0xa0, 0x0fbf, 0x2efa ],
|
6630
6752
|
IS_SUBDIR => [ 0x1038 ],
|
6631
6753
|
WRITABLE => 1,
|
6632
6754
|
FIRST_ENTRY => 0,
|
@@ -6652,6 +6774,14 @@ my %nikonFocalConversions = (
|
|
6652
6774
|
Hidden => 1,
|
6653
6775
|
RawConv => '$$self{CustomSettingsOffset} = $val || 0x10000000; undef',
|
6654
6776
|
},
|
6777
|
+
0xa0 => {
|
6778
|
+
Name => 'OrientationOffset',
|
6779
|
+
DataMember => 'OrientationOffset',
|
6780
|
+
Format => 'int32u',
|
6781
|
+
Writable => 0,
|
6782
|
+
Hidden => 1,
|
6783
|
+
RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef',
|
6784
|
+
},
|
6655
6785
|
0x0791 => {
|
6656
6786
|
Name => 'PhotoShootingMenuBankImageArea',
|
6657
6787
|
Mask => 0x07,
|
@@ -6691,6 +6821,14 @@ my %nikonFocalConversions = (
|
|
6691
6821
|
TagTable => 'Image::ExifTool::NikonCustom::SettingsD850',
|
6692
6822
|
},
|
6693
6823
|
},
|
6824
|
+
### 0x2efb - OrientationInfo start (D850 firmware 1.01a)
|
6825
|
+
0x2efa => {
|
6826
|
+
Name => 'Hook1',
|
6827
|
+
Hidden => 1,
|
6828
|
+
RawConv => 'undef',
|
6829
|
+
# account for variable location of OrientationInfo data
|
6830
|
+
Hook => '$varSize = $$self{OrientationOffset} - 0x2efb',
|
6831
|
+
},
|
6694
6832
|
0x2efb => { #28
|
6695
6833
|
Name => 'RollAngle',
|
6696
6834
|
Format => 'fixed32u',
|