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.
@@ -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.98';
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
- # (0x1150-0x1152 exist only for Pro Low-light and Pro Focus PictureModes)
596
- # 0x1150 - Pro Low-light - val=1; Pro Focus - val=2 (ref 7); HDR - val=128 (forum10799)
597
- # 0x1151 - Pro Low-light - val=4 (number of pictures taken?); Pro Focus - val=2,3 (ref 7); HDR - val=3 (forum10799)
598
- # 0x1152 - Pro Low-light - val=1,3,4 (stacked pictures used?); Pro Focus - val=1,2 (ref 7); HDR - val=3 (forum10799)
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
- 1 => { Name => 'RawImageNumber', Format => 'int32u' },
1564
- # 3 - seen "0 100", "-300 100" and "300 100" for a sequence of 3 images
1565
- 3 => { Name => 'ExposureCompensation', Format => 'rational32s', Unknown => 1, Hidden => 1, PrintConv => 'sprintf("%+.2f",$val)' },
1566
- # 4 - (same value as 3 in all my samples)
1567
- 4 => { Name => 'ExposureCompensation2', Format => 'rational32s', Unknown => 1, Hidden => 1, PrintConv => 'sprintf("%+.2f",$val)' },
1568
- # 5 - seen "10 1600", "10 6800", "10 200", "10 35000" etc
1569
- 5 => { Name => 'ExposureTime', Format => 'rational64u', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)' },
1570
- # 6 - seen "450 100", "400 100" (all images in RAF have same value)
1571
- 6 => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)' },
1572
- # 7 - seen 200, 125, 250, 2000
1573
- 7 => 'ISO',
1574
- # 8 - seen 0, 65536
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 += 16; # skip offset/size fields
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
- # (don't know what the byte at the current $pos is for, value = 0x20)
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) or return 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.29';
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, $upkPrefix, $j, $fileType, $eof);
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.88';
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.49';
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.88';
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, Object Not Found',
1948
- 0x301 => 'Trains, Object Found',
1949
- 0x400 => 'Birds, Object Not Found',
1950
- 0x401 => 'Birds Object Found',
1951
- 0x500 => 'Dogs & Cats, Object Not Found',
1952
- 0x501 => 'Dogs & Cats, Object Found',
1953
- 0x600 => 'Human, Object Not Found',
1954
- 0x601 => 'Human, Object Found',
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 I.S.)', #25
2622
- 2 => 'On, S-IS2 (Vertical Shake I.S.)', #25
2623
- 3 => 'On, S-IS3 (Horizontal Shake I.S.)', #25
2624
- 4 => 'On, S-IS Auto (Auto I.S.)', #25
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
- 0 => { Name => 'AFFrameSize', Format => 'int16u[2]' },
2797
- 2 => { Name => 'AFFocusArea', Format => 'int16u[4]' },
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 area.
2803
- Subject Detection ON: Area related to subject
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
- 0 => { Name => 'SubjectDetectFrameSize', Format => 'int16u[2]' },
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
- 256 => 'Level 2 Detail', # (eye, airplane cockpit, ...)
2825
- 257 => 'Level 1 Detail', # (head, airplane nose, ...)
2826
- 260 => 'Subject Detected, No Detail',
2827
- 772 => 'No Detection',
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.54';
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', # (K-5 Hi)
2002
- 2 => 'Continuous (Lo)', #PH (K-5)
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)', #PH (K-3)
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} eq "PENTAX K-3 Mark III"',
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} eq "PENTAX K-3 Mark III"', # any other models?
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} eq "PENTAX K-3 Mark III"', # any other models?
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} eq "PENTAX K-3 Mark III"', # any other models?
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} eq "PENTAX K-3 Mark III"', # and other models?
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
@@ -18,7 +18,7 @@ use strict;
18
18
  use vars qw($VERSION);
19
19
  use Image::ExifTool qw(:DataAccess :Utils);
20
20
 
21
- $VERSION = '1.03';
21
+ $VERSION = '1.04';
22
22
 
23
23
  sub ProcessProtobuf($$$;$);
24
24
 
@@ -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 110 different types of timed GPS metadata from video files.
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