exiftool_vendored 13.33.0 → 13.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/Changes +54 -5
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/Makefile.PL +1 -0
- data/bin/README +2 -2
- data/bin/exiftool +77 -67
- data/bin/lib/Image/ExifTool/Canon.pm +37 -5
- data/bin/lib/Image/ExifTool/DJI.pm +54 -3
- data/bin/lib/Image/ExifTool/Exif.pm +5 -4
- data/bin/lib/Image/ExifTool/FujiFilm.pm +89 -31
- data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- data/bin/lib/Image/ExifTool/M2TS.pm +2 -4
- data/bin/lib/Image/ExifTool/Minolta.pm +3 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +3 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +45 -26
- data/bin/lib/Image/ExifTool/Pentax.pm +71 -9
- data/bin/lib/Image/ExifTool/Protobuf.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
- data/bin/lib/Image/ExifTool/README +2 -1
- data/bin/lib/Image/ExifTool/RIFF.pm +5 -3
- data/bin/lib/Image/ExifTool/Sony.pm +42 -16
- data/bin/lib/Image/ExifTool/TagLookup.pm +13 -3
- data/bin/lib/Image/ExifTool/TagNames.pod +44 -12
- data/bin/lib/Image/ExifTool/Writer.pl +6 -5
- data/bin/lib/Image/ExifTool/XMP.pm +8 -2
- data/bin/lib/Image/ExifTool/XMP2.pl +1 -1
- data/bin/lib/Image/ExifTool.pm +4 -1
- data/bin/lib/Image/ExifTool.pod +5 -0
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
@@ -31,7 +31,7 @@ use vars qw($VERSION);
|
|
31
31
|
use Image::ExifTool qw(:DataAccess :Utils);
|
32
32
|
use Image::ExifTool::Exif;
|
33
33
|
|
34
|
-
$VERSION = '1.
|
34
|
+
$VERSION = '1.99';
|
35
35
|
|
36
36
|
sub ProcessFujiDir($$$);
|
37
37
|
sub ProcessFaceRec($$$);
|
@@ -426,6 +426,16 @@ my %faceCategories = (
|
|
426
426
|
0x300 => 'DR (Dynamic Range priority)',
|
427
427
|
},
|
428
428
|
},
|
429
|
+
0x1037 => { #forum17591
|
430
|
+
Name => 'MultipleExposure',
|
431
|
+
Writable => 'int16u', # (NC)
|
432
|
+
PrintConv => {
|
433
|
+
1 => 'Additive',
|
434
|
+
2 => 'Average',
|
435
|
+
3 => 'Light',
|
436
|
+
4 => 'Dark',
|
437
|
+
},
|
438
|
+
},
|
429
439
|
0x1040 => { #8
|
430
440
|
Name => 'ShadowTone',
|
431
441
|
Writable => 'int32s',
|
@@ -586,16 +596,44 @@ my %faceCategories = (
|
|
586
596
|
Name => 'SequenceNumber',
|
587
597
|
Writable => 'int16u',
|
588
598
|
},
|
599
|
+
0x1102 => { #forum17602
|
600
|
+
Name => 'WhiteBalanceBracketing',
|
601
|
+
Writable => 'int16u', # (NC)
|
602
|
+
PrintHex => 1,
|
603
|
+
PrintConv => {
|
604
|
+
0x01ff => '+/- 1',
|
605
|
+
0x02ff => '+/- 2',
|
606
|
+
0x03ff => '+/- 3',
|
607
|
+
},
|
608
|
+
},
|
589
609
|
0x1103 => {
|
590
610
|
Name => 'DriveSettings',
|
591
611
|
SubDirectory => { TagTable => 'Image::ExifTool::FujiFilm::DriveSettings' },
|
592
612
|
},
|
593
613
|
0x1105 => { Name => 'PixelShiftShots', Writable => 'int16u' }, #IB
|
594
614
|
0x1106 => { Name => 'PixelShiftOffset', Writable => 'rational64s', Count => 2 }, #IB
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
615
|
+
0x1150 => {
|
616
|
+
Name => 'CompositeImageMode',
|
617
|
+
Writable => 'int32u',
|
618
|
+
PrintConv => {
|
619
|
+
0 => 'n/a', #PH
|
620
|
+
1 => 'Pro Low-light', #7
|
621
|
+
2 => 'Pro Focus', #7
|
622
|
+
32 => 'Panorama', #PH
|
623
|
+
128 => 'HDR', #forum10799
|
624
|
+
1024 => 'Multi-exposure', #forum17591
|
625
|
+
},
|
626
|
+
},
|
627
|
+
0x1151 => {
|
628
|
+
Name => 'CompositeImageCount1',
|
629
|
+
Writable => 'int16u',
|
630
|
+
# Pro Low-light - val=4 (number of pictures taken?); Pro Focus - val=2,3 (ref 7); HDR - val=3 (forum10799)
|
631
|
+
},
|
632
|
+
0x1152 => {
|
633
|
+
Name => 'CompositeImageCount2',
|
634
|
+
Writable => 'int16u',
|
635
|
+
# Pro Low-light - val=1,3,4 (stacked pictures used?); Pro Focus - val=1,2 (ref 7); HDR - val=3 (forum10799)
|
636
|
+
},
|
599
637
|
0x1153 => { #forum7668
|
600
638
|
Name => 'PanoramaAngle',
|
601
639
|
Writable => 'int16u',
|
@@ -605,8 +643,8 @@ my %faceCategories = (
|
|
605
643
|
Writable => 'int16u',
|
606
644
|
PrintConv => {
|
607
645
|
1 => 'Right',
|
608
|
-
2 => 'Up',
|
609
|
-
3 => 'Left',
|
646
|
+
2 => 'Up', # (or Left?, forum17591)
|
647
|
+
3 => 'Left', # (or Up?, forum17591)
|
610
648
|
4 => 'Down',
|
611
649
|
},
|
612
650
|
},
|
@@ -1558,20 +1596,21 @@ my %faceCategories = (
|
|
1558
1596
|
TAG_PREFIX => 'MRAW',
|
1559
1597
|
NOTES => q{
|
1560
1598
|
Tags extracted from the M-RAW header of multi-image RAF files. The family 1
|
1561
|
-
group name for these tags is "M-RAW".
|
1562
|
-
|
1563
|
-
|
1564
|
-
|
1565
|
-
|
1566
|
-
|
1567
|
-
|
1568
|
-
|
1569
|
-
|
1570
|
-
|
1571
|
-
|
1572
|
-
|
1573
|
-
|
1574
|
-
|
1599
|
+
group name for these tags is "M-RAW". Additional metadata may be extracted
|
1600
|
+
from the embedded RAW images with the ExtractEmbedded option.
|
1601
|
+
},
|
1602
|
+
0x2001 => { Name => 'RawImageNumber', Format => 'int32u' },
|
1603
|
+
# 0x2003 - seen "0 100", "-300 100" and "300 100" for a sequence of 3 images
|
1604
|
+
0x2003 => { Name => 'ExposureCompensation', Format => 'rational32s', Unknown => 1, Hidden => 1, PrintConv => 'sprintf("%+.2f",$val)' },
|
1605
|
+
# 0x2004 - (same value as 3 in all my samples)
|
1606
|
+
0x2004 => { Name => 'ExposureCompensation2', Format => 'rational32s', Unknown => 1, Hidden => 1, PrintConv => 'sprintf("%+.2f",$val)' },
|
1607
|
+
# 0x2005 - seen "10 1600", "10 6800", "10 200", "10 35000" etc
|
1608
|
+
0x2005 => { Name => 'ExposureTime', Format => 'rational64u', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)' },
|
1609
|
+
# 0x2006 - seen "450 100", "400 100" (all images in RAF have same value)
|
1610
|
+
0x2006 => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)' },
|
1611
|
+
# 0x2007 - seen 200, 125, 250, 2000
|
1612
|
+
0x2007 => 'ISO',
|
1613
|
+
# 0x2008 - seen 0, 65536
|
1575
1614
|
);
|
1576
1615
|
|
1577
1616
|
#------------------------------------------------------------------------------
|
@@ -1684,6 +1723,7 @@ sub ProcessFujiDir($$$)
|
|
1684
1723
|
sub ProcessMRAW($$$)
|
1685
1724
|
{
|
1686
1725
|
my ($et, $dirInfo, $tagTablePtr) = @_;
|
1726
|
+
return 1 if $$et{DOC_NUM};
|
1687
1727
|
my $dataPt = $$dirInfo{DataPt};
|
1688
1728
|
my $dataPos = $$dirInfo{DataPos};
|
1689
1729
|
my $dataLen = length $$dataPt;
|
@@ -1697,15 +1737,16 @@ sub ProcessMRAW($$$)
|
|
1697
1737
|
my $pos = 44;
|
1698
1738
|
my ($i, $n);
|
1699
1739
|
for ($n=0; ; ++$n) {
|
1700
|
-
$pos
|
1701
|
-
my $end = $pos + $size;
|
1740
|
+
my $end = $pos + 16 + $size;
|
1702
1741
|
last if $end > $dataLen;
|
1742
|
+
my $rafStart = Get64u($dataPt, $pos);
|
1743
|
+
my $rafLen = Get64u($dataPt, $pos+8);
|
1744
|
+
$pos += 16; # skip offset/size fields
|
1703
1745
|
$$et{DOC_NUM} = ++$$et{DOC_COUNT} if $pos > 60;
|
1704
1746
|
$et->VPrint(0, "$$et{INDENT}(Raw image $n parameters: $size bytes, $num entries)\n");
|
1705
1747
|
for ($i=0; $i<$num; ++$i) {
|
1706
1748
|
last if $pos + 4 > $end;
|
1707
|
-
|
1708
|
-
my $tag = Get8u($dataPt, $pos+1);
|
1749
|
+
my $tag = Get16u($dataPt, $pos);
|
1709
1750
|
my $size = Get16u($dataPt, $pos+2);
|
1710
1751
|
$pos += 4;
|
1711
1752
|
last if $pos + $size > $end;
|
@@ -1717,6 +1758,21 @@ sub ProcessMRAW($$$)
|
|
1717
1758
|
);
|
1718
1759
|
$pos += $size;
|
1719
1760
|
}
|
1761
|
+
if ($rafStart and $et->Options('ExtractEmbedded')) {
|
1762
|
+
if ($et->Options('Verbose')) {
|
1763
|
+
my $msg = sprintf("$$et{INDENT}(RAW image $n data: Start=0x%x, Length=0x%x)\n",$rafStart,$rafLen);
|
1764
|
+
$et->VPrint(0, $msg);
|
1765
|
+
}
|
1766
|
+
my $raf = $$et{RAF};
|
1767
|
+
my $tell = $raf->Tell();
|
1768
|
+
my $order = GetByteOrder();
|
1769
|
+
my $fujiWidth = $$et{FujiWidth};
|
1770
|
+
$raf->Seek($rafStart, 0) or next;
|
1771
|
+
ProcessRAF($et, { RAF => $raf, Base => $rafStart });
|
1772
|
+
$$et{FujiWidth} = $fujiWidth;
|
1773
|
+
SetByteOrder($order);
|
1774
|
+
$raf->Seek($tell, 0);
|
1775
|
+
}
|
1720
1776
|
}
|
1721
1777
|
delete $$et{DOC_NUM};
|
1722
1778
|
return 1;
|
@@ -1870,6 +1926,7 @@ sub ProcessRAF($$)
|
|
1870
1926
|
my ($buff, $jpeg, $warn, $offset);
|
1871
1927
|
|
1872
1928
|
my $raf = $$dirInfo{RAF};
|
1929
|
+
my $base = $$dirInfo{Base} || 0;
|
1873
1930
|
$raf->Read($buff,0x70) == 0x70 or return 0;
|
1874
1931
|
$buff =~ /^FUJIFILM/ or return 0;
|
1875
1932
|
# get position and size of M-RAW header and jpeg preview
|
@@ -1877,13 +1934,13 @@ sub ProcessRAF($$)
|
|
1877
1934
|
my ($jpos, $jlen) = unpack('x84NN', $buff);
|
1878
1935
|
$jpos & 0x8000 and return 0;
|
1879
1936
|
if ($jpos) {
|
1880
|
-
$raf->Seek($jpos, 0)
|
1937
|
+
$raf->Seek($jpos+$base, 0) or return 0;
|
1881
1938
|
$raf->Read($jpeg, $jlen) == $jlen or return 0;
|
1882
1939
|
}
|
1883
1940
|
SetByteOrder('MM');
|
1884
|
-
$et->SetFileType();
|
1941
|
+
$et->SetFileType() unless $$et{DOC_NUM};
|
1885
1942
|
my $tbl = GetTagTable('Image::ExifTool::FujiFilm::RAFHeader');
|
1886
|
-
$et->ProcessDirectory({ DataPt => \$buff, DirName => 'RAFHeader' }, $tbl);
|
1943
|
+
$et->ProcessDirectory({ DataPt => \$buff, DirName => 'RAFHeader', Base => $base }, $tbl);
|
1887
1944
|
|
1888
1945
|
# extract information from embedded JPEG
|
1889
1946
|
my %dirInfo = (
|
@@ -1891,21 +1948,22 @@ sub ProcessRAF($$)
|
|
1891
1948
|
RAF => File::RandomAccess->new(\$jpeg),
|
1892
1949
|
);
|
1893
1950
|
if ($jpos) {
|
1894
|
-
$$et{BASE} += $jpos;
|
1951
|
+
$$et{BASE} += $jpos + $base;
|
1895
1952
|
my $ok = $et->ProcessJPEG(\%dirInfo);
|
1896
|
-
$$et{BASE} -= $jpos;
|
1953
|
+
$$et{BASE} -= $jpos + $base;
|
1897
1954
|
$et->FoundTag('PreviewImage', \$jpeg) if $ok;
|
1898
1955
|
}
|
1899
1956
|
# extract information from Fuji RAF and TIFF directories
|
1900
1957
|
my ($rafNum, $ifdNum) = ('','');
|
1901
1958
|
foreach $offset (0x48, 0x5c, 0x64, 0x78, 0x80) {
|
1902
1959
|
last if $jpos and $offset >= $jpos;
|
1903
|
-
unless ($raf->Seek($offset, 0) and $raf->Read($buff, 8)) {
|
1960
|
+
unless ($raf->Seek($offset+$base, 0) and $raf->Read($buff, 8)) {
|
1904
1961
|
$warn = 1;
|
1905
1962
|
last;
|
1906
1963
|
}
|
1907
1964
|
my ($start, $len) = unpack('N2',$buff);
|
1908
1965
|
next unless $start;
|
1966
|
+
$start += $base;
|
1909
1967
|
if ($offset == 0x64 or $offset == 0x80) {
|
1910
1968
|
# parse FujiIFD directory
|
1911
1969
|
%dirInfo = (
|
Binary file
|
@@ -32,7 +32,7 @@ use strict;
|
|
32
32
|
use vars qw($VERSION);
|
33
33
|
use Image::ExifTool qw(:DataAccess :Utils);
|
34
34
|
|
35
|
-
$VERSION = '1.
|
35
|
+
$VERSION = '1.30';
|
36
36
|
|
37
37
|
# program map table "stream_type" lookup (ref 6/1/9)
|
38
38
|
my %streamType = (
|
@@ -557,7 +557,7 @@ sub ProcessM2TS($$)
|
|
557
557
|
{
|
558
558
|
my ($et, $dirInfo) = @_;
|
559
559
|
my $raf = $$dirInfo{RAF};
|
560
|
-
my ($buff, $pLen, $
|
560
|
+
my ($buff, $pLen, $j, $fileType, $eof);
|
561
561
|
my (%pmt, %pidType, %data, %sectLen, %packLen, %fromStart);
|
562
562
|
my ($startTime, $endTime, $fwdTime, $backScan, $maxBack);
|
563
563
|
my $verbose = $et->Options('Verbose');
|
@@ -570,10 +570,8 @@ sub ProcessM2TS($$)
|
|
570
570
|
unless ($1) {
|
571
571
|
$pLen = 188; # no timecode
|
572
572
|
$fileType = 'M2T'; # (just as a way to tell there is no timecode)
|
573
|
-
$upkPrefix = 'N';
|
574
573
|
} else {
|
575
574
|
$pLen = 192; # 188-byte transport packet + leading 4-byte timecode (ref 4)
|
576
|
-
$upkPrefix = 'x4N';
|
577
575
|
}
|
578
576
|
my $prePos = $pLen - 188; # byte position of packet prefix
|
579
577
|
my $readSize = 64 * $pLen; # size of our read buffer
|
@@ -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.89';
|
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)
|
@@ -603,6 +603,8 @@ $VERSION = '2.88';
|
|
603
603
|
19 => 'Vivid 2', #JR (7SM3)
|
604
604
|
20 => 'IN', #JR (7SM3)
|
605
605
|
21 => 'SH', #JR (7SM3)
|
606
|
+
22 => 'FL2', #JR (ILME-FX2)
|
607
|
+
23 => 'FL3', #JR (ILME-FX2)
|
606
608
|
100 => 'Neutral', #JD
|
607
609
|
101 => 'Clear', #JD
|
608
610
|
102 => 'Deep', #JD
|
@@ -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.51';
|
69
69
|
|
70
70
|
sub LensIDConv($$$);
|
71
71
|
sub ProcessNikonAVI($$$);
|
@@ -583,6 +583,7 @@ sub GetAFPointGrid($$;$);
|
|
583
583
|
'0E 4A 31 48 23 2D 0E 02' => 'Tamron SP AF 20-40mm f/2.7-3.5 (166D)',
|
584
584
|
'FE 48 37 5C 24 24 DF 0E' => 'Tamron SP 24-70mm f/2.8 Di VC USD (A007)', #24
|
585
585
|
'CE 47 37 5C 25 25 DF 4E' => 'Tamron SP 24-70mm f/2.8 Di VC USD G2 (A032)', #forum9110
|
586
|
+
'CE 00 37 5C 25 25 DF 4E' => 'Tamron SP 24-70mm f/2.8 Di VC USD G2 (A032)', #github345
|
586
587
|
'45 41 37 72 2C 3C 48 02' => 'Tamron SP AF 24-135mm f/3.5-5.6 AD Aspherical (IF) Macro (190D)',
|
587
588
|
'33 54 3C 5E 24 24 62 02' => 'Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical (IF) Macro (A09)',
|
588
589
|
'FA 54 3C 5E 24 24 84 06' => 'Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical (IF) Macro (A09NII)', #JD
|
@@ -723,6 +724,7 @@ sub GetAFPointGrid($$;$);
|
|
723
724
|
'9F 48 48 48 24 24 A1 06' => 'Yongnuo YN40mm F2.8N', #30
|
724
725
|
'9F 54 68 68 18 18 A2 06' => 'Yongnuo YN100mm F2N', #30
|
725
726
|
'9F 4C 44 44 18 18 A1 06' => 'Yongnuo YN35mm F2', #30
|
727
|
+
'9F 4D 50 50 14 14 A0 06' => 'Yongnuo YN50mm F1.8N', #30
|
726
728
|
#
|
727
729
|
'02 40 44 5C 2C 34 02 00' => 'Exakta AF 35-70mm 1:3.5-4.5 MC',
|
728
730
|
#
|
@@ -41,7 +41,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
41
41
|
use Image::ExifTool::Exif;
|
42
42
|
use Image::ExifTool::APP12;
|
43
43
|
|
44
|
-
$VERSION = '2.
|
44
|
+
$VERSION = '2.90';
|
45
45
|
|
46
46
|
sub PrintLensInfo($$$);
|
47
47
|
|
@@ -117,6 +117,7 @@ my %olympusLensTypes = (
|
|
117
117
|
'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)
|
118
118
|
'0 36 10' => 'Olympus M.Zuiko Digital ED 8-25mm F4 Pro', #IB
|
119
119
|
'0 37 10' => 'Olympus M.Zuiko Digital ED 40-150mm F4.0 Pro', #forum3833
|
120
|
+
'0 38 10' => 'Olympus M.Zuiko Digital ED 20mm F1.4 Pro',
|
120
121
|
'0 39 10' => 'Olympus M.Zuiko Digital ED 90mm F3.5 Macro IS Pro', #forum3833
|
121
122
|
'0 40 10' => 'Olympus M.Zuiko Digital ED 150-600mm F5.0-6.3', #forum15652
|
122
123
|
# Sigma lenses
|
@@ -1944,14 +1945,14 @@ my %indexInfo = (
|
|
1944
1945
|
0x201 => 'Airplanes; Passenger/Transport Plane Found',
|
1945
1946
|
0x202 => 'Airplanes; Small Plane/Fighter Jet Found',
|
1946
1947
|
0x203 => 'Airplanes; Helicopter Found',
|
1947
|
-
0x300 => 'Trains
|
1948
|
-
0x301 => 'Trains
|
1949
|
-
0x400 => 'Birds
|
1950
|
-
0x401 => 'Birds Object Found',
|
1951
|
-
0x500 => 'Dogs & Cats
|
1952
|
-
0x501 => 'Dogs & Cats
|
1953
|
-
0x600 => 'Human
|
1954
|
-
0x601 => 'Human
|
1948
|
+
0x300 => 'Trains; Object Not Found',
|
1949
|
+
0x301 => 'Trains; Object Found',
|
1950
|
+
0x400 => 'Birds; Object Not Found',
|
1951
|
+
0x401 => 'Birds; Object Found',
|
1952
|
+
0x500 => 'Dogs & Cats; Object Not Found',
|
1953
|
+
0x501 => 'Dogs & Cats; Object Found',
|
1954
|
+
0x600 => 'Human; Object Not Found',
|
1955
|
+
0x601 => 'Human; Object Found',
|
1955
1956
|
},
|
1956
1957
|
},
|
1957
1958
|
0x030a => {
|
@@ -2252,12 +2253,15 @@ my %indexInfo = (
|
|
2252
2253
|
5 => 'i-Enhance', #11
|
2253
2254
|
6 => 'e-Portrait', #23
|
2254
2255
|
7 => 'Color Creator', #23
|
2256
|
+
8 => 'Underwater', #7
|
2255
2257
|
9 => 'Color Profile 1', #23
|
2256
2258
|
10 => 'Color Profile 2', #23
|
2257
2259
|
11 => 'Color Profile 3', #23
|
2258
2260
|
12 => 'Monochrome Profile 1', #23
|
2259
2261
|
13 => 'Monochrome Profile 2', #23
|
2260
2262
|
14 => 'Monochrome Profile 3', #23
|
2263
|
+
17 => 'Art Mode', #7
|
2264
|
+
18 => 'Monochrome Profile 4', #7
|
2261
2265
|
256 => 'Monotone',
|
2262
2266
|
512 => 'Sepia',
|
2263
2267
|
}],
|
@@ -2514,7 +2518,7 @@ my %indexInfo = (
|
|
2514
2518
|
2, 3, 5 or numbers: 1. Mode, 2. Shot number, 3. Mode bits, 5. Shutter mode,
|
2515
2519
|
6. Shooting mode (E-M1 II and later models)
|
2516
2520
|
},
|
2517
|
-
PrintConv => q
|
2521
|
+
PrintConv => q{
|
2518
2522
|
my ($a,$b,$c,$d,$e,$f) = split ' ',$val;
|
2519
2523
|
if ($b) {
|
2520
2524
|
$b = ', Shot ' . $b;
|
@@ -2618,10 +2622,10 @@ my %indexInfo = (
|
|
2618
2622
|
RawConv => '$$self{ImageStabilization} = $val',
|
2619
2623
|
PrintConv => {
|
2620
2624
|
0 => 'Off',
|
2621
|
-
1 => 'On, S-IS1 (All Direction Shake
|
2622
|
-
2 => 'On, S-IS2 (Vertical Shake
|
2623
|
-
3 => 'On, S-IS3 (Horizontal Shake
|
2624
|
-
4 => 'On, S-IS Auto
|
2625
|
+
1 => 'On, S-IS1 (All Direction Shake IS)', #25
|
2626
|
+
2 => 'On, S-IS2 (Vertical Shake IS)', #25
|
2627
|
+
3 => 'On, S-IS3 (Horizontal Shake IS)', #25
|
2628
|
+
4 => 'On, S-IS Auto', #25
|
2625
2629
|
},
|
2626
2630
|
},
|
2627
2631
|
0x804 => { #PH (E-M1 with firmware update)
|
@@ -2793,15 +2797,16 @@ my %indexInfo = (
|
|
2793
2797
|
FIRST_ENTRY => 0,
|
2794
2798
|
FORMAT => 'int16u',
|
2795
2799
|
WRITABLE => 1,
|
2796
|
-
|
2797
|
-
|
2800
|
+
NOTES => 'Position and size of selected AF Area and focus areas for OM cameras.',
|
2801
|
+
0 => { Name => 'AFFrameSize', Format => 'int16u[2]' , Notes => 'width/height of the focus/select frame' },
|
2802
|
+
2 => { Name => 'AFFocusArea', Format => 'int16u[4]' , Notes => 'X Y width height. The center is identical to AFPointSelected' },
|
2798
2803
|
6 => {
|
2799
2804
|
Name => 'AFSelectedArea',
|
2800
2805
|
Format => 'int16u[4]',
|
2801
2806
|
Notes => q{
|
2802
|
-
X Y width height. Subject Detection OFF: User selected AF target
|
2803
|
-
Subject Detection ON: Area related to
|
2804
|
-
}
|
2807
|
+
X Y width height. Subject and Face Detection OFF: User selected AF target
|
2808
|
+
area. Subject or Face Detection ON: Area related to detection process.
|
2809
|
+
},
|
2805
2810
|
},
|
2806
2811
|
);
|
2807
2812
|
|
@@ -2810,21 +2815,35 @@ my %indexInfo = (
|
|
2810
2815
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
2811
2816
|
WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
|
2812
2817
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
2813
|
-
NOTES => 'Subject Detection for OM cameras.',
|
2814
2818
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
2815
2819
|
FIRST_ENTRY => 0,
|
2816
2820
|
FORMAT => 'int16u',
|
2817
2821
|
WRITABLE => 1,
|
2818
|
-
|
2822
|
+
NOTES => q{
|
2823
|
+
Subject Detection data for OM cameras. These tags contain the areas of a
|
2824
|
+
subject and its elements detected by Subject Detection, or the main face and
|
2825
|
+
eyes detected by Face Detection. These elements can be either L1 details
|
2826
|
+
(level 1, such as head, chassis, airplane nose, etc.) or L2 details (level
|
2827
|
+
2, such as eye, driver, airplane cockpit, etc.).
|
2828
|
+
},
|
2829
|
+
0 => { Name => 'SubjectDetectFrameSize', Format => 'int16u[2]', Notes => 'width/height of the subject detect frame' },
|
2819
2830
|
2 => { Name => 'SubjectDetectArea', Format => 'int16u[4]', Notes => 'X Y width height' },
|
2820
|
-
6 => { Name => 'SubjectDetectDetail', Format => 'int16u[4]' },
|
2831
|
+
6 => { Name => 'SubjectDetectDetail', Format => 'int16u[4]', Notes => 'X Y width height' },
|
2821
2832
|
10 => {
|
2822
2833
|
Name => 'SubjectDetectStatus',
|
2834
|
+
Notes => q{
|
2835
|
+
Indicates the presence of data related to subject and face detection, not
|
2836
|
+
necessarily corresponding to the detection result
|
2837
|
+
},
|
2823
2838
|
PrintConv => {
|
2824
|
-
|
2825
|
-
257 => '
|
2826
|
-
|
2827
|
-
|
2839
|
+
0 => 'No Data',
|
2840
|
+
257 => 'Subject and L1 Detail Detected', # (head, airplane nose, ...)
|
2841
|
+
258 => 'Subject and L2 Detail Detected', # (eye, airplane cockpit, ...)
|
2842
|
+
260 => 'Subject Detected, No Details',
|
2843
|
+
515 => 'Face and Eye Detected',
|
2844
|
+
516 => 'Face Detected',
|
2845
|
+
771 => 'Subject Detail or Eye Detected',
|
2846
|
+
772 => 'No Subject or Face Detected',
|
2828
2847
|
},
|
2829
2848
|
},
|
2830
2849
|
);
|
@@ -59,7 +59,7 @@ use Image::ExifTool::Exif;
|
|
59
59
|
use Image::ExifTool::GPS;
|
60
60
|
use Image::ExifTool::HP;
|
61
61
|
|
62
|
-
$VERSION = '3.
|
62
|
+
$VERSION = '3.57';
|
63
63
|
|
64
64
|
sub CryptShutterCount($$);
|
65
65
|
sub PrintFilter($$$);
|
@@ -564,6 +564,7 @@ my %pentaxModelID = (
|
|
564
564
|
0x1329a => 'GR IIIx', # (Ricoh)
|
565
565
|
0x132b8 => 'KF', #github322 (Ricoh)
|
566
566
|
0x132d6 => 'K-3 Mark III Monochrome', #github226 (Ricoh)
|
567
|
+
0x132e0 => 'GR IV', #github347 (Ricoh)
|
567
568
|
);
|
568
569
|
|
569
570
|
# Pentax city codes - (PH, Optio WP)
|
@@ -1977,6 +1978,8 @@ my %binaryDataAttrs = (
|
|
1977
1978
|
'18 3' => 'Auto Program (MTF)', #PH (NC)
|
1978
1979
|
'18 22' => 'Auto Program (Shallow DOF)', #PH (NC)
|
1979
1980
|
'20 22' => 'Blur Control', #PH (Q)
|
1981
|
+
'24 0' => 'Aperture Priority (Adv.Hyp)', #KG
|
1982
|
+
'25 0' => 'Manual Exposure (Adv.Hyp)', #KG
|
1980
1983
|
'26 0' => 'Shutter and Aperture Priority (TAv)', #PH (K-3III)
|
1981
1984
|
'249 0' => 'Movie (TAv)', #31
|
1982
1985
|
'250 0' => 'Movie (TAv, Auto Aperture)', #31
|
@@ -1998,10 +2001,13 @@ my %binaryDataAttrs = (
|
|
1998
2001
|
Count => 4,
|
1999
2002
|
PrintConv => [{
|
2000
2003
|
0 => 'Single-frame', # (also Interval Shooting for K-01 - PH)
|
2001
|
-
1 => 'Continuous',
|
2002
|
-
|
2004
|
+
1 => 'Continuous', #KG *ist D, *ist Ds, *ist DS2, K110D, K10D, K100D, K100D Super, K20D, Ricoh GR III / GR IIIx
|
2005
|
+
#KG Hi: K200D, K-x, K-7, K-r, K-5, K-01, K-5 II, K-5 IIs, K-30, K-500, K-50, K-S1, K-S2, K-70
|
2006
|
+
#KG High: K-3, K-3 II, K-1, K-1 II, KP, K-3 III, K-3 III Mono
|
2007
|
+
2 => 'Continuous (Lo)', #KG all models listed under 'Hi'
|
2003
2008
|
3 => 'Burst', #PH (K20D)
|
2004
|
-
4 => 'Continuous (Medium)', #
|
2009
|
+
4 => 'Continuous (Medium)', #KG all models listed under 'High'
|
2010
|
+
5 => 'Continuous (Low)', #KG all models listed under 'High'
|
2005
2011
|
255 => 'Video', #PH (K-x)
|
2006
2012
|
},{
|
2007
2013
|
0 => 'No Timer',
|
@@ -3009,7 +3015,7 @@ my %binaryDataAttrs = (
|
|
3009
3015
|
}],
|
3010
3016
|
0x022b => [{
|
3011
3017
|
Name => 'LevelInfoK3III',
|
3012
|
-
Condition => '$$self{Model}
|
3018
|
+
Condition => '$$self{Model} =~ /K-3 Mark III/',
|
3013
3019
|
SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LevelInfoK3III' },
|
3014
3020
|
},{ #PH (K-5)
|
3015
3021
|
Name => 'LevelInfo',
|
@@ -5066,7 +5072,7 @@ my %binaryDataAttrs = (
|
|
5066
5072
|
},
|
5067
5073
|
0x14 => {
|
5068
5074
|
Name => 'AFPointValues',
|
5069
|
-
Condition => '$$self{Model}
|
5075
|
+
Condition => '$$self{Model} =~ /K-3 Mark III/', #KG
|
5070
5076
|
Format => 'int16uRev[69]',
|
5071
5077
|
Unknown => 1,
|
5072
5078
|
Notes => 'some unknown values related to each AFPoint',
|
@@ -5079,7 +5085,7 @@ my %binaryDataAttrs = (
|
|
5079
5085
|
},
|
5080
5086
|
0x12a => {
|
5081
5087
|
Name => 'AFPointsSelected', # (should probably be "AFPointSelected", but the bitmask allows multiple points)
|
5082
|
-
Condition => '$$self{Model}
|
5088
|
+
Condition => '$$self{Model} =~ /K-3 Mark III/',
|
5083
5089
|
Notes => q{
|
5084
5090
|
K-3III only. 41 selectable AF points from a total of 101 available in a 13x9
|
5085
5091
|
grid. Columns are labelled A-M and rows are 1-9. The center point is G5. The
|
@@ -5097,7 +5103,7 @@ my %binaryDataAttrs = (
|
|
5097
5103
|
0x18f => { # byte has a value of 1 if corresponding AF point is ... in focus maybe?
|
5098
5104
|
# usually the same points as AFPointsSelected above, but not always
|
5099
5105
|
Name => 'AFPointsUnknown',
|
5100
|
-
Condition => '$$self{Model}
|
5106
|
+
Condition => '$$self{Model} =~ /K-3 Mark III/', #KG
|
5101
5107
|
Unknown => 1,
|
5102
5108
|
Format => 'int8u[101]',
|
5103
5109
|
PrintConv => \&AFPointNamesK3III,
|
@@ -5105,7 +5111,7 @@ my %binaryDataAttrs = (
|
|
5105
5111
|
0x1fa => {
|
5106
5112
|
Name => 'LiveView',
|
5107
5113
|
Notes => 'decoded only for the K-3 III',
|
5108
|
-
Condition => '$$self{Model}
|
5114
|
+
Condition => '$$self{Model} =~ /K-3 Mark III/', #KG
|
5109
5115
|
PrintConv => { 0 => 'Off', 1 => 'On' },
|
5110
5116
|
},
|
5111
5117
|
0x1fd => {
|
@@ -5114,6 +5120,54 @@ my %binaryDataAttrs = (
|
|
5114
5120
|
Condition => '$$self{Model} eq "PENTAX K-3 II"',
|
5115
5121
|
PrintConv => { 0 => 'Off', 1 => 'Short', 2 => 'Medium', 3 => 'Long' },
|
5116
5122
|
},
|
5123
|
+
0x021f => { #KG
|
5124
|
+
Name => 'FirstFrameActionInAFC',
|
5125
|
+
Condition => '$$self{Model} =~ /K-3 Mark III/',
|
5126
|
+
PrintConv => {
|
5127
|
+
'0' => 'Auto',
|
5128
|
+
'1' => 'Release Priority',
|
5129
|
+
'2' => 'Focus Priority',
|
5130
|
+
# there is at least another value '3' but I couldn't figure out the
|
5131
|
+
# meaning. However, this occurs for a few AF-S captures, so it has
|
5132
|
+
# no real practical meaning.
|
5133
|
+
},
|
5134
|
+
},
|
5135
|
+
0x0220 => { #KG
|
5136
|
+
Name => 'ActionInAFCCont',
|
5137
|
+
Condition => '$$self{Model} =~ /K-3 Mark III/',
|
5138
|
+
PrintConv => {
|
5139
|
+
'0' => 'Auto',
|
5140
|
+
'1' => 'Focus Priority',
|
5141
|
+
'2' => 'FPS Priority',
|
5142
|
+
},
|
5143
|
+
},
|
5144
|
+
545 => { #KG
|
5145
|
+
Name => 'AFCHold',
|
5146
|
+
Condition => '$$self{Model} =~ /K-3 Mark III/',
|
5147
|
+
Mask => 0x03,
|
5148
|
+
PrintConv => { 0 => 'Low', 1 => 'Medium', 2 => 'High', 3 => 'Off' },
|
5149
|
+
},
|
5150
|
+
545.1 => { #KG
|
5151
|
+
Name => 'AFCPointTracking',
|
5152
|
+
Condition => '$$self{Model} =~ /K-3 Mark III/',
|
5153
|
+
Mask => 0x0c,
|
5154
|
+
PrintConv => { 0 => 'Type 1', 1 => 'Type 2', 2 => 'Type 3' },
|
5155
|
+
},
|
5156
|
+
545.2 => { #KG
|
5157
|
+
Name => 'AFCSensitivity',
|
5158
|
+
Condition => '$$self{Model} =~ /K-3 Mark III/',
|
5159
|
+
Mask => 0x70,
|
5160
|
+
PrintConv => '5 - $val',
|
5161
|
+
PrintConvInv => '5 - $val',
|
5162
|
+
},
|
5163
|
+
0x0960 => { #KG
|
5164
|
+
Name => 'SubjectRecognition',
|
5165
|
+
Condition => '$$self{Model} =~ /K-3 Mark III/',
|
5166
|
+
PrintConv => {
|
5167
|
+
0 => 'Off',
|
5168
|
+
1 => 'On',
|
5169
|
+
},
|
5170
|
+
},
|
5117
5171
|
);
|
5118
5172
|
|
5119
5173
|
# AF information for K-01 and later (ref Karsten Gieselmann private communication)
|
@@ -6023,6 +6077,14 @@ my %binaryDataAttrs = (
|
|
6023
6077
|
K-500. It is currently not known where the corresponding temperature
|
6024
6078
|
sensors are located in the camera.
|
6025
6079
|
},
|
6080
|
+
0x0a => { #KG
|
6081
|
+
Name => 'ShotNumber',
|
6082
|
+
Condition => '$$self{Model} =~ /K-3 Mark III/',
|
6083
|
+
# The exact same method to detect this tag with a similar set of files
|
6084
|
+
# does not reveal anything for K-1. Is this only available for K-3-III ?
|
6085
|
+
# Internal representation starts at 0 for the 1st shot
|
6086
|
+
ValueConv => '$val+1',
|
6087
|
+
},
|
6026
6088
|
# (it would be nice to know where these temperature sensors are located,
|
6027
6089
|
# but since according to the manual the Slow Shutter Speed NR Auto mode
|
6028
6090
|
# is based on "internal temperature", my guess is that there must be
|
@@ -111,7 +111,7 @@ my %insvLimit = (
|
|
111
111
|
The tags below are extracted from timed metadata in QuickTime and other
|
112
112
|
formats of video files when the ExtractEmbedded option is used. Although
|
113
113
|
most of these tags are combined into the single table below, ExifTool
|
114
|
-
currently reads
|
114
|
+
currently reads 111 different types of timed GPS metadata from video files.
|
115
115
|
},
|
116
116
|
GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
|
117
117
|
GPSLongitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")' },
|
@@ -802,7 +802,8 @@ numerical, and generated automatically otherwise.
|
|
802
802
|
Shift : [Writable tags only] Specifies type of shift to apply if this
|
803
803
|
value may be shifted. Set to 'Time' for shifting date/time
|
804
804
|
tags, or '0' to prevent tag from being shifted or
|
805
|
-
conditionally deleted.
|
805
|
+
conditionally deleted. May not be used for Writable Composite
|
806
|
+
tags.
|
806
807
|
|
807
808
|
Writable : Indicates this tag can be written (or not written if Writable
|
808
809
|
is set to zero), and for EXIF and QuickTime tables gives
|