exiftool-vendored.exe 12.26.0 → 12.33.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/bin/exiftool_files/Changes +119 -4
- package/bin/exiftool_files/README +44 -43
- package/bin/exiftool_files/arg_files/xmp2exif.args +2 -1
- package/bin/exiftool_files/config_files/convert_regions.config +25 -14
- package/bin/exiftool_files/config_files/example.config +1 -1
- package/bin/exiftool_files/exiftool.pl +79 -66
- package/bin/exiftool_files/fmt_files/gpx.fmt +1 -1
- package/bin/exiftool_files/fmt_files/gpx_wpt.fmt +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +11 -3
- package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +331 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +26 -7
- package/bin/exiftool_files/lib/Image/ExifTool/DPX.pm +13 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +98 -4
- package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +35 -10
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +13 -2
- package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +16 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +15 -3
- package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +7 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +60 -26
- package/bin/exiftool_files/lib/Image/ExifTool/LIF.pm +153 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/nl.pm +60 -59
- package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +103 -7
- package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +14 -3
- package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +10 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +9 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Other.pm +93 -0
- package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +9 -12
- package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +7 -6
- package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +14 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +27 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Photoshop.pm +6 -0
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +105 -24
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +203 -121
- package/bin/exiftool_files/lib/Image/ExifTool/README +5 -2
- package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +6 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +47 -10
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +85 -34
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +65 -5
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +153 -32
- package/bin/exiftool_files/lib/Image/ExifTool/Torrent.pm +18 -11
- package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/WritePNG.pl +2 -0
- package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +8 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +3 -0
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +21 -4
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ZISRAW.pm +121 -2
- package/bin/exiftool_files/lib/Image/ExifTool.pm +8867 -8835
- package/bin/exiftool_files/lib/Image/ExifTool.pod +58 -56
- package/package.json +3 -3
|
@@ -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.21';
|
|
35
35
|
|
|
36
36
|
# program map table "stream_type" lookup (ref 6/1)
|
|
37
37
|
my %streamType = (
|
|
@@ -113,6 +113,8 @@ my %noSyntax = (
|
|
|
113
113
|
0xff => 1, # program_stream_directory
|
|
114
114
|
);
|
|
115
115
|
|
|
116
|
+
my $knotsToKph = 1.852; # knots --> km/h
|
|
117
|
+
|
|
116
118
|
# information extracted from the MPEG-2 transport stream
|
|
117
119
|
%Image::ExifTool::M2TS::Main = (
|
|
118
120
|
GROUPS => { 2 => 'Video' },
|
|
@@ -327,7 +329,90 @@ sub ParsePID($$$$$)
|
|
|
327
329
|
my $tbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
|
|
328
330
|
Image::ExifTool::QuickTime::ProcessFreeGPS($et, { DataPt => \$dat }, $tbl);
|
|
329
331
|
$more = 1;
|
|
332
|
+
} elsif ($$dataPt =~ /^A([NS])([EW])\0/s) {
|
|
333
|
+
# INNOVV TS video (same format is INNOVV MP4)
|
|
334
|
+
SetByteOrder('II');
|
|
335
|
+
my $tagTbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
|
|
336
|
+
while ($$dataPt =~ /(A[NS][EW]\0.{28})/g) {
|
|
337
|
+
my $dat = $1;
|
|
338
|
+
my $lat = abs(GetFloat(\$dat, 4)); # (abs just to be safe)
|
|
339
|
+
my $lon = abs(GetFloat(\$dat, 8)); # (abs just to be safe)
|
|
340
|
+
my $spd = GetFloat(\$dat, 12) * $knotsToKph;
|
|
341
|
+
my $trk = GetFloat(\$dat, 16);
|
|
342
|
+
my @acc = unpack('x20V3', $dat);
|
|
343
|
+
map { $_ = $_ - 4294967296 if $_ >= 0x80000000 } @acc;
|
|
344
|
+
Image::ExifTool::QuickTime::ConvertLatLon($lat, $lon);
|
|
345
|
+
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
|
346
|
+
$et->HandleTag($tagTbl, GPSLatitude => abs($lat) * (substr($dat,1,1) eq 'S' ? -1 : 1));
|
|
347
|
+
$et->HandleTag($tagTbl, GPSLongitude => abs($lon) * (substr($dat,2,1) eq 'W' ? -1 : 1));
|
|
348
|
+
$et->HandleTag($tagTbl, GPSSpeed => $spd);
|
|
349
|
+
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
|
350
|
+
$et->HandleTag($tagTbl, GPSTrack => $trk);
|
|
351
|
+
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
|
352
|
+
$et->HandleTag($tagTbl, Accelerometer => "@acc");
|
|
353
|
+
}
|
|
354
|
+
SetByteOrder('MM');
|
|
355
|
+
$more = 1;
|
|
356
|
+
} elsif ($$dataPt =~ /^\$(GPSINFO|GSNRINFO),/) {
|
|
357
|
+
# $GPSINFO,0x0004,2021.08.09 13:27:36,2341.54561,12031.70135,8.0,51,153,0,0,\x0d
|
|
358
|
+
# $GSNRINFO,0.01,0.04,0.25\0
|
|
359
|
+
$$dataPt =~ tr/\x0d/\x0a/;
|
|
360
|
+
$$dataPt =~ tr/\0//d;
|
|
361
|
+
my $tagTbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
|
|
362
|
+
my @lines = split /\x0a/, $$dataPt;
|
|
363
|
+
my ($line, $lastTime);
|
|
364
|
+
foreach $line (@lines) {
|
|
365
|
+
if ($line =~ /^\$GPSINFO/) {
|
|
366
|
+
my @a = split /,/, $lines[0];
|
|
367
|
+
next unless @a > 7;
|
|
368
|
+
# ignore duplicate fixes
|
|
369
|
+
next if $lastTime and $a[2] eq $lastTime;
|
|
370
|
+
$lastTime = $a[2];
|
|
371
|
+
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
|
372
|
+
$a[2] =~ tr/./:/;
|
|
373
|
+
# (untested, and probably doesn't work for S/W hemispheres)
|
|
374
|
+
my ($lat, $lon) = @a[3,4];
|
|
375
|
+
Image::ExifTool::QuickTime::ConvertLatLon($lat, $lon);
|
|
376
|
+
# $a[0] - flags? values: '0x0001','0x0004','0x0008','0x0010'
|
|
377
|
+
$et->HandleTag($tagTbl, GPSDateTime => $a[2]);
|
|
378
|
+
$et->HandleTag($tagTbl, GPSLatitude => $lat);
|
|
379
|
+
$et->HandleTag($tagTbl, GPSLongitude => $lon);
|
|
380
|
+
$et->HandleTag($tagTbl, GPSSpeed => $a[5]);
|
|
381
|
+
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
|
382
|
+
# $a[6] - values: 48-60
|
|
383
|
+
$et->HandleTag($tagTbl, GPSTrack => $a[7]);
|
|
384
|
+
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
|
385
|
+
# #a[8,9] - always 0
|
|
386
|
+
} elsif ($line =~ /^\$GSNRINFO/) {
|
|
387
|
+
my @a = split /,/, $line;
|
|
388
|
+
shift @a;
|
|
389
|
+
$et->HandleTag($tagTbl, Accelerometer => "@a");
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
$more = 1;
|
|
393
|
+
} elsif ($$dataPt =~ /^.{44}A\0{3}.{4}([NS])\0{3}.{4}([EW])\0{3}/s and length($$dataPt) >= 84) {
|
|
394
|
+
#forum11320
|
|
395
|
+
SetByteOrder('II');
|
|
396
|
+
my $tagTbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
|
|
397
|
+
my $lat = abs(GetFloat($dataPt, 48)); # (abs just to be safe)
|
|
398
|
+
my $lon = abs(GetFloat($dataPt, 56)); # (abs just to be safe)
|
|
399
|
+
my $spd = GetFloat($dataPt, 64);
|
|
400
|
+
my $trk = GetFloat($dataPt, 68);
|
|
401
|
+
$et->WarnOnce('GPSLatitude/Longitude encryption is not yet known, so these will be wrong');
|
|
402
|
+
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
|
403
|
+
my @date = unpack('x32V3x28V3', $$dataPt);
|
|
404
|
+
$date[3] += 2000;
|
|
405
|
+
$et->HandleTag($tagTbl, GPSDateTime => sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d', @date[3..5,0..2]));
|
|
406
|
+
$et->HandleTag($tagTbl, GPSLatitude => abs($lat) * ($1 eq 'S' ? -1 : 1));
|
|
407
|
+
$et->HandleTag($tagTbl, GPSLongitude => abs($lon) * ($2 eq 'W' ? -1 : 1));
|
|
408
|
+
$et->HandleTag($tagTbl, GPSSpeed => $spd);
|
|
409
|
+
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
|
410
|
+
$et->HandleTag($tagTbl, GPSTrack => $trk);
|
|
411
|
+
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
|
412
|
+
SetByteOrder('MM');
|
|
413
|
+
$more = 1;
|
|
330
414
|
}
|
|
415
|
+
delete $$et{DOC_NUM};
|
|
331
416
|
}
|
|
332
417
|
return $more;
|
|
333
418
|
}
|
|
@@ -379,14 +464,21 @@ sub ProcessM2TS($$)
|
|
|
379
464
|
);
|
|
380
465
|
my %didPID = ( 1 => 0, 2 => 0, 0x1fff => 0 );
|
|
381
466
|
my %needPID = ( 0 => 1 ); # lookup for stream PID's that we still need to parse
|
|
467
|
+
# PID's that may contain GPS info
|
|
468
|
+
my %gpsPID = (
|
|
469
|
+
0x0300 => 1, # Novatek INNOVV
|
|
470
|
+
0x01e4 => 1, # vsys a6l dashcam
|
|
471
|
+
);
|
|
382
472
|
my $pEnd = 0;
|
|
383
473
|
|
|
384
|
-
# scan entire file for GPS
|
|
385
|
-
# (some dashcams write
|
|
474
|
+
# scan entire file for GPS programs if ExtractEmbedded option is 3 or higher
|
|
475
|
+
# (some dashcams write these programs but don't include it in the PMT)
|
|
386
476
|
if (($et->Options('ExtractEmbedded') || 0) > 2) {
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
477
|
+
foreach (keys %gpsPID) {
|
|
478
|
+
$needPID{$_} = 1;
|
|
479
|
+
$pidType{$_} = -1;
|
|
480
|
+
$pidName{$_} ='unregistered dashcam GPS';
|
|
481
|
+
}
|
|
390
482
|
}
|
|
391
483
|
|
|
392
484
|
# parse packets from MPEG-2 Transport Stream
|
|
@@ -675,7 +767,11 @@ sub ProcessM2TS($$)
|
|
|
675
767
|
}
|
|
676
768
|
$data{$pid} = substr($buff, $pos, $pEnd-$pos);
|
|
677
769
|
} else {
|
|
678
|
-
|
|
770
|
+
unless (defined $data{$pid}) {
|
|
771
|
+
# (vsys a6l dashcam GPS record doesn't have a start indicator)
|
|
772
|
+
next unless $gpsPID{$pid};
|
|
773
|
+
$data{$pid} = '';
|
|
774
|
+
}
|
|
679
775
|
# accumulate data for each elementary stream
|
|
680
776
|
$data{$pid} .= substr($buff, $pos, $pEnd-$pos);
|
|
681
777
|
}
|
|
@@ -52,7 +52,7 @@ my %mdDateInfo = (
|
|
|
52
52
|
NOTES => q{
|
|
53
53
|
MDItem tags are extracted using the "mdls" utility. They are extracted if
|
|
54
54
|
any "MDItem*" tag or the MacOS group is specifically requested, or by
|
|
55
|
-
setting the L<MDItemTags|../ExifTool.html#MDItemTags>
|
|
55
|
+
setting the API L<MDItemTags|../ExifTool.html#MDItemTags> option to 1 or the API L<RequestAll|../ExifTool.html#RequestAll> option to 2 or
|
|
56
56
|
higher. Note that these tags do not necessarily reflect the current
|
|
57
57
|
metadata of a file -- it may take some time for the MacOS mdworker daemon to
|
|
58
58
|
index the file after a metadata change.
|
|
@@ -244,7 +244,7 @@ my %mdDateInfo = (
|
|
|
244
244
|
NOTES => q{
|
|
245
245
|
XAttr tags are extracted using the "xattr" utility. They are extracted if
|
|
246
246
|
any "XAttr*" tag or the MacOS group is specifically requested, or by setting
|
|
247
|
-
the L<XAttrTags|../ExifTool.html#XAttrTags>
|
|
247
|
+
the API L<XAttrTags|../ExifTool.html#XAttrTags> option to 1 or the API L<RequestAll|../ExifTool.html#RequestAll> option to 2 or higher.
|
|
248
248
|
And they are extracted by default from MacOS "._" files when reading
|
|
249
249
|
these files directly.
|
|
250
250
|
},
|
|
@@ -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 = '
|
|
65
|
+
$VERSION = '4.00';
|
|
66
66
|
|
|
67
67
|
sub LensIDConv($$$);
|
|
68
68
|
sub ProcessNikonAVI($$$);
|
|
@@ -272,6 +272,7 @@ sub GetAFPointGrid($$;$);
|
|
|
272
272
|
'9F 58 44 44 14 14 A1 06' => 'AF-S DX Nikkor 35mm f/1.8G', #27
|
|
273
273
|
'A0 54 50 50 0C 0C A2 06' => 'AF-S Nikkor 50mm f/1.4G',
|
|
274
274
|
'A1 40 18 37 2C 34 A3 06' => 'AF-S DX Nikkor 10-24mm f/3.5-4.5G ED',
|
|
275
|
+
'A1 40 2D 53 2C 3C CB 86' => 'AF-P DX Nikkor 18-55mm f/3.5-5.6G', #30
|
|
275
276
|
'A2 48 5C 80 24 24 A4 0E' => 'AF-S Nikkor 70-200mm f/2.8G ED VR II',
|
|
276
277
|
'A3 3C 29 44 30 30 A5 0E' => 'AF-S Nikkor 16-35mm f/4G ED VR',
|
|
277
278
|
'A4 54 37 37 0C 0C A6 06' => 'AF-S Nikkor 24mm f/1.4G ED',
|
|
@@ -495,6 +496,7 @@ sub GetAFPointGrid($$;$);
|
|
|
495
496
|
'02 46 5C 82 25 25 02 00' => 'Sigma 70-210mm F2.8 APO', #JD
|
|
496
497
|
'02 40 5C 82 2C 35 02 00' => 'Sigma APO 70-210mm F3.5-4.5',
|
|
497
498
|
'26 3C 5C 82 30 3C 1C 02' => 'Sigma 70-210mm F4-5.6 UC-II',
|
|
499
|
+
'02 3B 5C 82 30 3C 02 00' => 'Sigma Zoom-K 70-210mm F4-5.6', #30
|
|
498
500
|
'26 3C 5C 8E 30 3C 1C 02' => 'Sigma 70-300mm F4-5.6 DG Macro',
|
|
499
501
|
'56 3C 5C 8E 30 3C 1C 02' => 'Sigma 70-300mm F4-5.6 APO Macro Super II',
|
|
500
502
|
'E0 3C 5C 8E 30 3C 4B 06' => 'Sigma 70-300mm F4-5.6 APO DG Macro HSM', #22
|
|
@@ -554,6 +556,7 @@ sub GetAFPointGrid($$;$);
|
|
|
554
556
|
'F3 54 2B 50 24 24 84 0E' => 'Tamron SP AF 17-50mm f/2.8 XR Di II VC LD Aspherical (IF) (B005)',
|
|
555
557
|
'00 3F 2D 80 2B 40 00 06' => 'Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) (A14)',
|
|
556
558
|
'00 3F 2D 80 2C 40 00 06' => 'Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro (A14)',
|
|
559
|
+
'EC 3E 3C 8E 2C 40 DF 0E' => 'Tamron 28-300mm f/3.5-6.3 Di VC PZD A010', #30
|
|
557
560
|
'00 40 2D 80 2C 40 00 06' => 'Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro (A14NII)', #NJ
|
|
558
561
|
'FC 40 2D 80 2C 40 DF 06' => 'Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro (A14NII)', #PH (NC)
|
|
559
562
|
'E6 40 2D 80 2C 40 DF 0E' => 'Tamron 18-200mm f/3.5-6.3 Di II VC (B018)', #Tanel (removed AF designation, ref 37)
|
|
@@ -595,6 +598,7 @@ sub GetAFPointGrid($$;$);
|
|
|
595
598
|
'00 48 5C 8E 30 3C 00 06' => 'Tamron AF 70-300mm f/4-5.6 Di LD Macro 1:2 (A17NII)', #JD
|
|
596
599
|
'F1 47 5C 8E 30 3C DF 0E' => 'Tamron SP 70-300mm f/4-5.6 Di VC USD (A005)',
|
|
597
600
|
'CF 47 5C 8E 31 3D DF 0E' => 'Tamron SP 70-300mm f/4-5.6 Di VC USD (A030)', #forum9773
|
|
601
|
+
'CC 44 68 98 34 41 DF 0E' => 'Tamron 100-400mm f/4.5-6.3 Di VC USD', #30
|
|
598
602
|
'EB 40 76 A6 38 40 DF 0E' => 'Tamron SP AF 150-600mm f/5-6.3 VC USD (A011)',
|
|
599
603
|
'E3 40 76 A6 38 40 DF 4E' => 'Tamron SP 150-600mm f/5-6.3 Di VC USD G2', #30
|
|
600
604
|
'20 3C 80 98 3D 3D 1E 02' => 'Tamron AF 200-400mm f/5.6 LD IF (75D)',
|
|
@@ -612,6 +616,7 @@ sub GetAFPointGrid($$;$);
|
|
|
612
616
|
'7A 48 1C 29 24 24 7E 06' => 'Tokina AT-X 116 PRO DX II (AF 11-16mm f/2.8)',
|
|
613
617
|
'80 48 1C 29 24 24 7A 06' => 'Tokina atx-i 11-16mm F2.8 CF', #exiv2 issue 1078
|
|
614
618
|
'7A 48 1C 30 24 24 7E 06' => 'Tokina AT-X 11-20 F2.8 PRO DX (AF 11-20mm f/2.8)',
|
|
619
|
+
'8B 48 1C 30 24 24 85 06' => 'Tokina AT-X 11-20 F2.8 PRO DX (AF 11-20mm f/2.8)', #forum12687
|
|
615
620
|
'00 3C 1F 37 30 30 00 06' => 'Tokina AT-X 124 AF PRO DX (AF 12-24mm f/4)',
|
|
616
621
|
'7A 3C 1F 37 30 30 7E 06.2' => 'Tokina AT-X 124 AF PRO DX II (AF 12-24mm f/4)',
|
|
617
622
|
'7A 3C 1F 3C 30 30 7E 06' => 'Tokina AT-X 12-28 PRO DX (AF 12-28mm f/4)',
|
|
@@ -718,6 +723,9 @@ sub GetAFPointGrid($$;$);
|
|
|
718
723
|
'00 40 11 11 2C 2C 00 00' => 'Samyang 8mm f/3.5 Fish-Eye',
|
|
719
724
|
'00 58 64 64 20 20 00 00' => 'Soligor C/D Macro MC 90mm f/2.5',
|
|
720
725
|
'4A 58 30 30 14 0C 4D 02' => 'Rokinon 20mm f/1.8 ED AS UMC', #30
|
|
726
|
+
#
|
|
727
|
+
'A0 56 44 44 14 14 A2 06' => 'Sony FE 35mm F1.8', #IB (Techart adapter)
|
|
728
|
+
'A0 37 5C 8E 34 3C A2 06' => 'Sony FE 70-300mm F4.5-5.6 G OSS', #IB (Techart adapter)
|
|
721
729
|
);
|
|
722
730
|
|
|
723
731
|
# text encoding used in LocationInfo (ref PH)
|
|
@@ -4720,6 +4728,9 @@ my %nikonFocalConversions = (
|
|
|
4720
4728
|
21 => 'Nikkor Z 50mm f/1.2 S', #IB
|
|
4721
4729
|
22 => 'Nikkor Z 24-50mm f/4-6.3', #IB
|
|
4722
4730
|
23 => 'Nikkor Z 14-24mm f/2.8 S', #IB
|
|
4731
|
+
24 => 'Nikkor Z MC 105mm f/2.8 VR S', #IB
|
|
4732
|
+
27 => 'Nikkor Z MC 50mm f/2.8', #IB
|
|
4733
|
+
29 => 'Nikkor Z 28mm f/2.8', #IB
|
|
4723
4734
|
},
|
|
4724
4735
|
},
|
|
4725
4736
|
0x36 => {
|
|
@@ -8492,8 +8503,8 @@ my %nikonFocalConversions = (
|
|
|
8492
8503
|
# 0x02 - undef[148]
|
|
8493
8504
|
# 0x03 - undef[284]
|
|
8494
8505
|
# 0x04 - undef[148,212]
|
|
8495
|
-
# 0x05 - undef[84]
|
|
8496
|
-
# 0x06 - undef[116]
|
|
8506
|
+
# 0x05 - undef[84] (barrel distortion params at offsets 0x14,0x1c,0x24, ref 28)
|
|
8507
|
+
# 0x06 - undef[116] (vignette correction params at offsets 0x24,0x34,0x44, ref 28)
|
|
8497
8508
|
# 0x07 - undef[104]
|
|
8498
8509
|
# 0x08 - undef[24]
|
|
8499
8510
|
# 0x09 - undef[36]
|
|
@@ -17,7 +17,7 @@ use strict;
|
|
|
17
17
|
use vars qw($VERSION);
|
|
18
18
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
19
19
|
|
|
20
|
-
$VERSION = '1.
|
|
20
|
+
$VERSION = '1.04';
|
|
21
21
|
|
|
22
22
|
sub ProcessNikonSettings($$$);
|
|
23
23
|
|
|
@@ -592,7 +592,7 @@ my %infoD6 = (
|
|
|
592
592
|
},
|
|
593
593
|
},
|
|
594
594
|
0x026 => { Name => 'AF-AssistIlluminator', PrintConv => \%onOff }, # CSa11 (Z7_2)
|
|
595
|
-
|
|
595
|
+
0x027 => { Name => 'ManualFocusRingInAFMode', PrintConv => \%onOff }, # CSa12 (D6,Z7_2) capability documented in manual, but visibility (& ability to test) requires a compatible lens
|
|
596
596
|
0x029 => { Name => 'ISOStepSize', PrintConv => \%thirdHalfFull }, # CSb1 (D6)
|
|
597
597
|
0x02a => { Name => 'ExposureControlStepSize', PrintConv => \%thirdHalfFull }, # CSb2 (D6), CSb1 (Z7_2)
|
|
598
598
|
0x02b => { # CSb4 (D6), CSb2 (Z7_2)
|
|
@@ -1920,6 +1920,14 @@ my %infoD6 = (
|
|
|
1920
1920
|
},
|
|
1921
1921
|
},
|
|
1922
1922
|
0x170 => { Name => 'PreferSubSelectorCenter', PrintConv => \%offOn }, # CSf13 (D6 firmware v1.2.0)
|
|
1923
|
+
0x171 => { # CSb8 (D6 firmware v1.3.0)
|
|
1924
|
+
Name => 'KeepExposureWithTeleconverter',
|
|
1925
|
+
PrintConv => {
|
|
1926
|
+
1 => 'Off',
|
|
1927
|
+
2 => 'Shutter Speed',
|
|
1928
|
+
3 => 'ISO',
|
|
1929
|
+
},
|
|
1930
|
+
},
|
|
1923
1931
|
0x174 => { # CSa17-d (D6 firmware v1.2.0)
|
|
1924
1932
|
Name => 'FocusPointSelectionSpeed',
|
|
1925
1933
|
PrintConv => {
|
|
@@ -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.75';
|
|
44
44
|
|
|
45
45
|
sub PrintLensInfo($$$);
|
|
46
46
|
|
|
@@ -113,6 +113,8 @@ 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
|
|
117
|
+
'0 36 10' => 'Olympus M.Zuiko Digital ED 8-25mm F4 Pro', #IB
|
|
116
118
|
# Sigma lenses
|
|
117
119
|
'1 01 00' => 'Sigma 18-50mm F3.5-5.6 DC', #8
|
|
118
120
|
'1 01 10' => 'Sigma 30mm F2.8 EX DN', #NJ
|
|
@@ -138,7 +140,6 @@ my %olympusLensTypes = (
|
|
|
138
140
|
'1 15 00' => 'Sigma 10-20mm F4.0-5.6 EX DC HSM', #11
|
|
139
141
|
'1 16 00' => 'Sigma APO 70-200mm F2.8 II EX DG Macro HSM', #11
|
|
140
142
|
'1 17 00' => 'Sigma 50mm F1.4 EX DG HSM', #11
|
|
141
|
-
'1 18 60' => 'Test',
|
|
142
143
|
# Panasonic/Leica lenses
|
|
143
144
|
'2 01 00' => 'Leica D Vario Elmarit 14-50mm F2.8-3.5 Asph.', #11
|
|
144
145
|
'2 01 10' => 'Lumix G Vario 14-45mm F3.5-5.6 Asph. Mega OIS', #16
|
|
@@ -183,6 +184,7 @@ my %olympusLensTypes = (
|
|
|
183
184
|
'2 36 10' => 'Leica DG Elmarit 200mm F2.8 Power OIS', #IB
|
|
184
185
|
'2 37 10' => 'Leica DG Vario-Elmarit 50-200mm F2.8-4 Asph. Power OIS', #IB
|
|
185
186
|
'2 38 10' => 'Leica DG Vario-Summilux 10-25mm F1.7 Asph.', #IB
|
|
187
|
+
'2 40 10' => 'Leica DG Vario-Summilux 25-50mm F1.7 Asph.', #IB (H-X2550)
|
|
186
188
|
'3 01 00' => 'Leica D Vario Elmarit 14-50mm F2.8-3.5 Asph.', #11
|
|
187
189
|
'3 02 00' => 'Leica D Summilux 25mm F1.4 Asph.', #11
|
|
188
190
|
# Tamron lenses
|
|
@@ -429,6 +431,7 @@ my %olympusCameraTypes = (
|
|
|
429
431
|
S0085 => 'E-PL10', #IB
|
|
430
432
|
S0089 => 'E-M5MarkIII',
|
|
431
433
|
S0092 => 'E-M1MarkIII', #IB
|
|
434
|
+
S0093 => 'E-P7', #IB
|
|
432
435
|
SR45 => 'D220',
|
|
433
436
|
SR55 => 'D320L',
|
|
434
437
|
SR83 => 'D340L',
|
|
@@ -3606,6 +3609,10 @@ my %indexInfo = (
|
|
|
3606
3609
|
Format => 'string[24]',
|
|
3607
3610
|
Groups => { 2 => 'Time' },
|
|
3608
3611
|
},
|
|
3612
|
+
0x17f => {
|
|
3613
|
+
Name => 'LensModel',
|
|
3614
|
+
Format => 'string[32]'
|
|
3615
|
+
},
|
|
3609
3616
|
);
|
|
3610
3617
|
|
|
3611
3618
|
# yet a different "thmb" atom format (PH, E-M5)
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#------------------------------------------------------------------------------
|
|
2
|
+
# File: Other.pm
|
|
3
|
+
#
|
|
4
|
+
# Description: Read meta information from other uncommon formats
|
|
5
|
+
#
|
|
6
|
+
# Revisions: 2021/07/16 - P. Harvey Created
|
|
7
|
+
#
|
|
8
|
+
# References: 1) PFM - http://www.pauldebevec.com/Research/HDR/PFM/
|
|
9
|
+
#------------------------------------------------------------------------------
|
|
10
|
+
|
|
11
|
+
package Image::ExifTool::Other;
|
|
12
|
+
|
|
13
|
+
use strict;
|
|
14
|
+
use vars qw($VERSION);
|
|
15
|
+
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
|
+
use Image::ExifTool::Exif;
|
|
17
|
+
|
|
18
|
+
$VERSION = '1.00';
|
|
19
|
+
|
|
20
|
+
# Other info
|
|
21
|
+
%Image::ExifTool::Other::PFM = (
|
|
22
|
+
GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' },
|
|
23
|
+
VARS => { NO_ID => 1 },
|
|
24
|
+
NOTES => q{
|
|
25
|
+
Tags extracted from Portable FloatMap images. See
|
|
26
|
+
L<http://www.pauldebevec.com/Research/HDR/PFM/> for the specification.
|
|
27
|
+
},
|
|
28
|
+
ColorSpace => { PrintConv => { PF => 'RGB', 'Pf' => 'Monochrome'} },
|
|
29
|
+
ImageWidth => { },
|
|
30
|
+
ImageHeight => { },
|
|
31
|
+
ByteOrder => { PrintConv => '$val > 0 ? "Big-endian" : "Little-endian"' },
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
#------------------------------------------------------------------------------
|
|
35
|
+
# Extract information from a Portable FloatMap image
|
|
36
|
+
# Inputs: 0) ExifTool object reference, 1) dirInfo reference
|
|
37
|
+
# Returns: 1 on success, 0 if this wasn't a valid PFM file
|
|
38
|
+
sub ProcessPFM2($$)
|
|
39
|
+
{
|
|
40
|
+
my ($et, $dirInfo) = @_;
|
|
41
|
+
my $raf = $$dirInfo{RAF};
|
|
42
|
+
my $buff;
|
|
43
|
+
return 0 unless $raf->Read($buff, 256) and $buff =~ /^(P[Ff])\x0a(\d+) (\d+)\x0a([-+0-9.]+)\x0a/;
|
|
44
|
+
$et->SetFileType('PFM', 'image/x-pfm');
|
|
45
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::Other::PFM');
|
|
46
|
+
$et->HandleTag($tagTablePtr, ColorSpace => $1);
|
|
47
|
+
$et->HandleTag($tagTablePtr, ImageWidth => $2);
|
|
48
|
+
$et->HandleTag($tagTablePtr, ImageHeight => $3);
|
|
49
|
+
$et->HandleTag($tagTablePtr, ByteOrder => $4);
|
|
50
|
+
# hack to set proper file description (extension is the same for Printer Font Metrics files)
|
|
51
|
+
$Image::ExifTool::static_vars{OverrideFileDescription}{PFM} = 'Portable FloatMap',
|
|
52
|
+
return 1;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
1; # end
|
|
56
|
+
|
|
57
|
+
__END__
|
|
58
|
+
|
|
59
|
+
=head1 NAME
|
|
60
|
+
|
|
61
|
+
Image::ExifTool::Other - Read meta information from other uncommon formats
|
|
62
|
+
|
|
63
|
+
=head1 SYNOPSIS
|
|
64
|
+
|
|
65
|
+
This module is used by Image::ExifTool
|
|
66
|
+
|
|
67
|
+
=head1 DESCRIPTION
|
|
68
|
+
|
|
69
|
+
This module contains routines required by Image::ExifTool to extract
|
|
70
|
+
information from Portable FloatMap (PFM) images.
|
|
71
|
+
|
|
72
|
+
=head1 AUTHOR
|
|
73
|
+
|
|
74
|
+
Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
|
|
75
|
+
|
|
76
|
+
This library is free software; you can redistribute it and/or modify it
|
|
77
|
+
under the same terms as Perl itself.
|
|
78
|
+
|
|
79
|
+
=head1 REFERENCES
|
|
80
|
+
|
|
81
|
+
=over 4
|
|
82
|
+
|
|
83
|
+
=item PFM L<http://www.pauldebevec.com/Research/HDR/PFM/>
|
|
84
|
+
|
|
85
|
+
=back
|
|
86
|
+
|
|
87
|
+
=head1 SEE ALSO
|
|
88
|
+
|
|
89
|
+
L<Image::ExifTool::TagNames/Other Tags>,
|
|
90
|
+
L<Image::ExifTool(3pm)|Image::ExifTool>
|
|
91
|
+
|
|
92
|
+
=cut
|
|
93
|
+
|
|
@@ -21,7 +21,7 @@ use vars qw($VERSION $AUTOLOAD $lastFetched);
|
|
|
21
21
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
22
22
|
require Exporter;
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.53';
|
|
25
25
|
|
|
26
26
|
sub FetchObject($$$$);
|
|
27
27
|
sub ExtractObject($$;$$);
|
|
@@ -280,7 +280,10 @@ my %supportedFilter = (
|
|
|
280
280
|
ConvertToDict => 1,
|
|
281
281
|
},
|
|
282
282
|
Cs1 => {
|
|
283
|
-
SubDirectory => { TagTable => 'Image::ExifTool::PDF::
|
|
283
|
+
SubDirectory => { TagTable => 'Image::ExifTool::PDF::ICCBased' },
|
|
284
|
+
},
|
|
285
|
+
CS0 => {
|
|
286
|
+
SubDirectory => { TagTable => 'Image::ExifTool::PDF::ICCBased' },
|
|
284
287
|
},
|
|
285
288
|
);
|
|
286
289
|
|
|
@@ -291,14 +294,7 @@ my %supportedFilter = (
|
|
|
291
294
|
},
|
|
292
295
|
);
|
|
293
296
|
|
|
294
|
-
# tags in PDF Cs1
|
|
295
|
-
%Image::ExifTool::PDF::Cs1 = (
|
|
296
|
-
_stream => {
|
|
297
|
-
SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' },
|
|
298
|
-
},
|
|
299
|
-
);
|
|
300
|
-
|
|
301
|
-
# tags in PDF ICCBased dictionary
|
|
297
|
+
# tags in PDF ICCBased, Cs1 and CS0 dictionaries
|
|
302
298
|
%Image::ExifTool::PDF::ICCBased = (
|
|
303
299
|
_stream => {
|
|
304
300
|
SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' },
|
|
@@ -1989,16 +1985,17 @@ sub ProcessDict($$$$;$$)
|
|
|
1989
1985
|
} else {
|
|
1990
1986
|
$val = ReadPDFValue($val);
|
|
1991
1987
|
}
|
|
1992
|
-
# convert from UTF-16 (big endian) to UTF-8 or Latin if necessary
|
|
1993
|
-
# unless this is binary data (hex-encoded strings would not have been converted)
|
|
1994
1988
|
if (ref $val) {
|
|
1995
1989
|
if (ref $val eq 'ARRAY') {
|
|
1990
|
+
delete $$et{LIST_TAGS}{$tagInfo} if $$tagInfo{List};
|
|
1996
1991
|
my $v;
|
|
1997
1992
|
foreach $v (@$val) {
|
|
1998
1993
|
$et->FoundTag($tagInfo, $v);
|
|
1999
1994
|
}
|
|
2000
1995
|
}
|
|
2001
1996
|
} elsif (defined $val) {
|
|
1997
|
+
# convert from UTF-16 (big endian) to UTF-8 or Latin if necessary
|
|
1998
|
+
# unless this is binary data (hex-encoded strings would not have been converted)
|
|
2002
1999
|
my $format = $$tagInfo{Format} || $$tagInfo{Writable} || 'string';
|
|
2003
2000
|
$val = ConvertPDFDate($val) if $format eq 'date';
|
|
2004
2001
|
if (not $$tagInfo{Binary} and $val =~ /[\x18-\x1f\x80-\xff]/) {
|
|
@@ -36,7 +36,7 @@ use strict;
|
|
|
36
36
|
use vars qw($VERSION $AUTOLOAD %stdCase);
|
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
38
38
|
|
|
39
|
-
$VERSION = '1.
|
|
39
|
+
$VERSION = '1.59';
|
|
40
40
|
|
|
41
41
|
sub ProcessPNG_tEXt($$$);
|
|
42
42
|
sub ProcessPNG_iTXt($$$);
|
|
@@ -89,7 +89,7 @@ $Image::ExifTool::PNG::colorType = -1;
|
|
|
89
89
|
|
|
90
90
|
# data and text chunk types
|
|
91
91
|
my %isDatChunk = ( IDAT => 1, JDAT => 1, JDAA => 1 );
|
|
92
|
-
my %isTxtChunk = ( tEXt => 1, zTXt => 1, iTXt => 1 );
|
|
92
|
+
my %isTxtChunk = ( tEXt => 1, zTXt => 1, iTXt => 1, eXIf => 1 );
|
|
93
93
|
|
|
94
94
|
# chunks that we shouldn't move other chunks across (ref 3)
|
|
95
95
|
my %noLeapFrog = ( SAVE => 1, SEEK => 1, IHDR => 1, JHDR => 1, IEND => 1, MEND => 1,
|
|
@@ -478,6 +478,8 @@ my %unreg = ( Notes => 'unregistered' );
|
|
|
478
478
|
if the L<Compress|../ExifTool.html#Compress> option is used and Compress::Zlib is available. Raw profile
|
|
479
479
|
information is always created as compressed zTXt if Compress::Zlib is
|
|
480
480
|
available, or tEXt otherwise. Standard XMP is written as uncompressed iTXt.
|
|
481
|
+
User-defined tags may set an 'iTXt' flag in the tag definition to be written
|
|
482
|
+
only as iTXt.
|
|
481
483
|
|
|
482
484
|
Alternate languages are accessed by suffixing the tag name with a '-',
|
|
483
485
|
followed by an RFC 3066 language code (eg. "PNG:Comment-fr", or
|
|
@@ -1382,9 +1384,8 @@ sub ProcessPNG($$)
|
|
|
1382
1384
|
# to add it as a text profile chunk if this isn't successful
|
|
1383
1385
|
# (ie. if Compress::Zlib wasn't available)
|
|
1384
1386
|
Add_iCCP($et, $outfile);
|
|
1385
|
-
AddChunks($et, $outfile) or $err = 1;
|
|
1386
|
-
|
|
1387
|
-
AddChunks($et, $outfile, 'IFD0') if $chunk eq $endChunk;
|
|
1387
|
+
AddChunks($et, $outfile) or $err = 1; # add all text chunks
|
|
1388
|
+
AddChunks($et, $outfile, 'IFD0') or $err = 1; # and eXIf chunk
|
|
1388
1389
|
} elsif ($chunk eq 'PLTE') {
|
|
1389
1390
|
# iCCP chunk must come before PLTE (and IDAT, handled above)
|
|
1390
1391
|
# (ignore errors -- will add later as text profile if this fails)
|
|
@@ -1444,7 +1445,7 @@ sub ProcessPNG($$)
|
|
|
1444
1445
|
} else {
|
|
1445
1446
|
$msg = 'fixed';
|
|
1446
1447
|
}
|
|
1447
|
-
$et->WarnOnce("Text chunk(s) found after $$et{FileType} $wasDat ($msg)", 1);
|
|
1448
|
+
$et->WarnOnce("Text/EXIF chunk(s) found after $$et{FileType} $wasDat ($msg)", 1);
|
|
1448
1449
|
}
|
|
1449
1450
|
# read chunk data and CRC
|
|
1450
1451
|
unless ($raf->Read($dbuf,$len)==$len and $raf->Read($cbuf, 4)==4) {
|
|
@@ -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.16';
|
|
41
41
|
|
|
42
42
|
sub ProcessLeicaLEIC($$$);
|
|
43
43
|
sub WhiteBalanceConv($;$$);
|
|
@@ -449,7 +449,7 @@ my %shootingMode = (
|
|
|
449
449
|
same as the number printed on the camera body
|
|
450
450
|
},
|
|
451
451
|
PrintConv => q{
|
|
452
|
-
return $val unless $val=~/^([A-Z]
|
|
452
|
+
return $val unless $val=~/^([A-Z][0-9A-Z]{2})(\d{2})(\d{2})(\d{2})(\d{4})/;
|
|
453
453
|
my $yr = $2 + ($2 < 70 ? 2000 : 1900);
|
|
454
454
|
return "($1) $yr:$3:$4 no. $5";
|
|
455
455
|
},
|
|
@@ -1423,7 +1423,18 @@ my %shootingMode = (
|
|
|
1423
1423
|
Name => 'NoiseReductionStrength',
|
|
1424
1424
|
Writable => 'rational64s',
|
|
1425
1425
|
},
|
|
1426
|
-
|
|
1426
|
+
0xe4 => { #IB
|
|
1427
|
+
Name => 'LensTypeModel',
|
|
1428
|
+
Condition => '$format eq "int16u"',
|
|
1429
|
+
Writable => 'int16u',
|
|
1430
|
+
RawConv => q{
|
|
1431
|
+
return undef unless $val;
|
|
1432
|
+
require Image::ExifTool::Olympus; # (to load Composite LensID)
|
|
1433
|
+
return $val;
|
|
1434
|
+
},
|
|
1435
|
+
ValueConv => '$_=sprintf("%.4x",$val); s/(..)(..)/$2 $1/; $_',
|
|
1436
|
+
ValueConvInv => '$val =~ s/(..) (..)/$2$1/; hex($val)',
|
|
1437
|
+
},
|
|
1427
1438
|
0x0e00 => {
|
|
1428
1439
|
Name => 'PrintIM',
|
|
1429
1440
|
Description => 'Print Image Matching',
|
|
@@ -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.39';
|
|
62
62
|
|
|
63
63
|
sub CryptShutterCount($$);
|
|
64
64
|
sub PrintFilter($$$);
|
|
@@ -340,6 +340,7 @@ sub DecodeAFPoints($$$$;$);
|
|
|
340
340
|
'8 64' => 'HD PENTAX-D FA* 50mm F1.4 SDM AW', #27
|
|
341
341
|
'8 65' => 'HD PENTAX-D FA 70-210mm F4 ED SDM WR', #PH
|
|
342
342
|
'8 66' => 'HD PENTAX-D FA 85mm F1.4 ED SDM AW', #James O'Neill
|
|
343
|
+
'8 195' => 'HD PENTAX DA* 16-50mm F2.8 ED PLM AW', #27
|
|
343
344
|
'8 196' => 'HD PENTAX-DA* 11-18mm F2.8 ED DC AW', #29
|
|
344
345
|
'8 197' => 'HD PENTAX-DA 55-300mm F4.5-6.3 ED PLM WR RE', #29
|
|
345
346
|
'8 198' => 'smc PENTAX-DA L 18-50mm F4-5.6 DC WR RE', #29
|
|
@@ -2223,6 +2224,7 @@ my %binaryDataAttrs = (
|
|
|
2223
2224
|
17 => '17 (K-70)', #29
|
|
2224
2225
|
18 => '18 (KP)', #PH
|
|
2225
2226
|
19 => '19 (GR III)', #PH
|
|
2227
|
+
20 => '20 (K-3III)', #PH
|
|
2226
2228
|
},
|
|
2227
2229
|
},
|
|
2228
2230
|
0x0067 => { #PH (K-5)
|
|
@@ -2455,6 +2457,7 @@ my %binaryDataAttrs = (
|
|
|
2455
2457
|
'2 0' => 'Standard',
|
|
2456
2458
|
'3 0' => 'Fast',
|
|
2457
2459
|
# '1 108' - seen for GR III
|
|
2460
|
+
# '3 84' - seen for K-3III
|
|
2458
2461
|
},
|
|
2459
2462
|
},
|
|
2460
2463
|
0x007b => { #PH (K-5)
|
|
@@ -2598,8 +2601,9 @@ my %binaryDataAttrs = (
|
|
|
2598
2601
|
},
|
|
2599
2602
|
},
|
|
2600
2603
|
},
|
|
2601
|
-
0x0095 => { #31
|
|
2604
|
+
0x0095 => [{ #31
|
|
2602
2605
|
Name => 'SkinToneCorrection',
|
|
2606
|
+
Condition => '$count == 2',
|
|
2603
2607
|
Writable => 'int8s',
|
|
2604
2608
|
Count => 2,
|
|
2605
2609
|
PrintConv => {
|
|
@@ -2607,7 +2611,15 @@ my %binaryDataAttrs = (
|
|
|
2607
2611
|
'1 1' => 'On (type 1)',
|
|
2608
2612
|
'1 2' => 'On (type 2)',
|
|
2609
2613
|
},
|
|
2610
|
-
},
|
|
2614
|
+
},{
|
|
2615
|
+
Name => 'SkinToneCorrection',
|
|
2616
|
+
Condition => '$count == 3',
|
|
2617
|
+
Writable => 'int8s',
|
|
2618
|
+
Count => 3,
|
|
2619
|
+
PrintConv => {
|
|
2620
|
+
'0 0 0' => 'Off',
|
|
2621
|
+
},
|
|
2622
|
+
}],
|
|
2611
2623
|
0x0096 => { #31
|
|
2612
2624
|
Name => 'ClarityControl',
|
|
2613
2625
|
Writable => 'int8s',
|
|
@@ -2843,8 +2855,18 @@ my %binaryDataAttrs = (
|
|
|
2843
2855
|
# High: 0000000238c0e960fde0f9203140f5a0fce0f1e031403f00e600fb00f7803760f120fc60ef403460
|
|
2844
2856
|
# Very High:000000023d20e520fdc0f7203420f4c0fb60ee6036404400e120fae0f5403aa0f020fac0eb403a00
|
|
2845
2857
|
},
|
|
2846
|
-
|
|
2847
|
-
|
|
2858
|
+
0x021c => { #IB
|
|
2859
|
+
Name => 'ColorMatrixA2',
|
|
2860
|
+
Format => 'int16s',
|
|
2861
|
+
Writable => 'undef',
|
|
2862
|
+
Count => 9,
|
|
2863
|
+
},
|
|
2864
|
+
0x021d => { #IB
|
|
2865
|
+
Name => 'ColorMatrixB2',
|
|
2866
|
+
Format => 'int16s',
|
|
2867
|
+
Writable => 'undef',
|
|
2868
|
+
Count => 9,
|
|
2869
|
+
},
|
|
2848
2870
|
# 0x021e - undef[8] (K-5, Q)
|
|
2849
2871
|
0x021f => { #JD
|
|
2850
2872
|
Name => 'AFInfo',
|
|
@@ -988,6 +988,12 @@ sub ProcessPhotoshop($$$)
|
|
|
988
988
|
$size += 1 if $size & 0x01; # size is padded to an even # bytes
|
|
989
989
|
$pos += $size;
|
|
990
990
|
}
|
|
991
|
+
# warn about incorrect IPTCDigest
|
|
992
|
+
if ($$et{VALUE}{IPTCDigest} and $$et{VALUE}{CurrentIPTCDigest} and
|
|
993
|
+
$$et{VALUE}{IPTCDigest} ne $$et{VALUE}{CurrentIPTCDigest})
|
|
994
|
+
{
|
|
995
|
+
$et->WarnOnce('IPTCDigest is not current. XMP may be out of sync');
|
|
996
|
+
}
|
|
991
997
|
delete $$et{LOW_PRIORITY_DIR}{'*'};
|
|
992
998
|
return $success;
|
|
993
999
|
}
|