- Timestamp:
- 2021-02-26T19:39:51+13:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone2/perllib/cpan/Image/ExifTool/Kodak.pm
r24107 r34921 9 9 # 2) http://www.ozhiker.com/electronics/pjmt/jpeg_info/meta.html 10 10 # 3) http://www.cybercom.net/~dcoffin/dcraw/ 11 # 4) Jim McGarvey private communication 12 # IB) Iliah Borg private communication (LibRaw) 11 13 # 12 14 # Notes: There really isn't much public information about Kodak formats. … … 21 23 use strict; 22 24 use vars qw($VERSION); 25 use Image::ExifTool qw(:DataAccess :Utils); 23 26 use Image::ExifTool::Exif; 24 27 25 $VERSION = '1. 27';28 $VERSION = '1.47'; 26 29 27 30 sub ProcessKodakIFD($$$); 28 31 sub ProcessKodakText($$$); 32 sub ProcessPose($$$); 29 33 sub WriteKodakIFD($$$); 30 34 … … 188 192 2 => 'Tungsten', 189 193 3 => 'Daylight', 194 # 5 - seen this for "Auto" with a ProBack 645M 190 195 }, 191 196 }, … … 371 376 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 372 377 PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, 378 WRITE_PROC => \&Image::ExifTool::WriteBinaryData, 379 CHECK_PROC => \&Image::ExifTool::CheckBinaryData, 373 380 NOTES => q{ 374 381 These tags are used by the CX4200, CX4210, CX4230, CX4300, CX4310, CX6200 … … 438 445 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 439 446 PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, 447 WRITE_PROC => \&Image::ExifTool::WriteBinaryData, 448 CHECK_PROC => \&Image::ExifTool::CheckBinaryData, 440 449 NOTES => 'These tags are used by the DX3215 and DX3700.', 441 450 WRITABLE => 1, … … 749 758 Notes => 'Kodak only', 750 759 }, 751 0xa8 => { # (not confirmed)752 Name => ' SerialNumber',753 Condition => '$$self{Make} =~ /Kodak/i ',760 0xa8 => { 761 Name => 'UnknownNumber', # (was SerialNumber, but not unique for all cameras. eg. C1013) 762 Condition => '$$self{Make} =~ /Kodak/i and $$valPt =~ /^([A-Z0-9]{1,11}\0|[A-Z0-9]{12})/i', 754 763 Format => 'string[12]', 755 764 Notes => 'Kodak only', 765 Writable => 0, 766 }, 767 0xc4 => { 768 Name => 'UnknownNumber', # (confirmed NOT to be serial number for Easyshare Mini - PH) 769 Condition => '$$self{Make} =~ /Kodak/i and $$valPt =~ /^([A-Z0-9]{1,11}\0|[A-Z0-9]{12})/i', 770 Format => 'string[12]', 771 Notes => 'Kodak only', 772 Writable => 0, 756 773 }, 757 774 ); … … 772 789 Writable => 'int16u', 773 790 Count => 2, 791 PrintConv => '$val =~ tr/ /x/; $val', 792 PrintConvInv => '$val =~ tr/x/ /; $val', 774 793 }, 775 794 # 0x03 int32u - ranges from about 33940 to 40680 … … 837 856 ); 838 857 858 # Kodak PixPro S-1 maker notes (ref PH) 859 # (similar to Ricoh::Type2 and GE::Main) 860 %Image::ExifTool::Kodak::Type11 = ( 861 # (can't currently write these) 862 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 863 NOTES =>q{ 864 These tags are found in models such as the PixPro S-1. They are not 865 writable because the inconsistency of Kodak maker notes is beginning to get 866 on my nerves. 867 }, 868 # (these are related to the Kodak QuickTime UserData tags) 869 0x0104 => 'FirmwareVersion', 870 0x0203 => { 871 Name => 'PictureEffect', 872 PrintConv => { 873 0 => 'None', 874 3 => 'Monochrome', 875 9 => 'Kodachrome', 876 }, 877 }, 878 # 0x0204 - ExposureComp or FlashExposureComp maybe? 879 0x0207 => 'KodakModel', 880 0x0300 => 'KodakMake', 881 0x0308 => 'LensSerialNumber', 882 0x0309 => 'LensModel', 883 0x030d => { Name => 'LevelMeter', Unknown => 1 }, # (guess) 884 0x0311 => 'Pitch', # Units?? 885 0x0312 => 'Yaw', # Units?? 886 0x0313 => 'Roll', # Units?? 887 0x0314 => { Name => 'CX', Unknown => 1 }, 888 0x0315 => { Name => 'CY', Unknown => 1 }, 889 0x0316 => { Name => 'Rads', Unknown => 1 }, 890 ); 891 839 892 # Kodak SubIFD0 tags (ref PH) 840 893 %Image::ExifTool::Kodak::SubIFD0 = ( … … 846 899 Name => 'SceneMode', 847 900 Writable => 'int16u', 848 Notes => 'may not be valid for some models', # ie. M580? 901 Notes => 'may not be valid for some models', # eg. M580? 902 PrintConvColumns => 2, 849 903 PrintConv => { 850 904 1 => 'Sport', … … 867 921 28 => 'Candlelight', 868 922 29 => 'Sunset', 869 31 => 'Panorama Left- Right',870 32 => 'Panorama Right- Left',923 31 => 'Panorama Left-right', 924 32 => 'Panorama Right-left', 871 925 33 => 'Smart Scene', 872 926 34 => 'High ISO', … … 948 1002 }, 949 1003 0xfa57 => { 950 Name => 'Preview Width',1004 Name => 'PreviewImageWidth', 951 1005 Writable => 'int16u', 952 1006 }, 953 1007 0xfa58 => { 954 Name => 'Preview Height',1008 Name => 'PreviewImageHeight', 955 1009 Writable => 'int16u', 956 1010 }, … … 1008 1062 Name => 'SceneModeUsed', 1009 1063 Writable => 'int32u', 1064 PrintConvColumns => 2, 1010 1065 PrintConv => \%sceneModeUsed, 1011 1066 }, … … 1028 1083 Name => 'SceneModeUsed', 1029 1084 Writable => 'int32u', 1085 PrintConvColumns => 2, 1030 1086 PrintConv => \%sceneModeUsed, 1031 1087 }, … … 1297 1353 }, 1298 1354 # 0x0000: int8u[4] - values: "1 0 0 0" (DC50), "1 1 0 0" (DC120) 1355 0x0000 => { #4 1356 Name => 'KodakVersion', 1357 Writable => 'int8u', 1358 Count => 4, 1359 PrintConv => '$val =~ tr/ /./; $val', 1360 PrintConvInv => '$val =~ tr/./ /; $val', 1361 }, 1299 1362 0x0001 => { 1300 1363 # (related to EV but exact meaning unknown) 1301 Name => 'UnknownEV', 1364 Name => 'UnknownEV', # ("DeletedTag", ref 4) 1302 1365 Writable => 'rational64u', 1303 1366 Unknown => 1, 1304 1367 }, 1305 1368 # 0x0002: int8u - values: 0 1306 0x0003 => { 1307 Name => 'ExposureValue', 1308 Writable => 'rational64u', 1309 }, 1369 0x0003 => { Name => 'ExposureValue', Writable => 'rational64u' }, 1310 1370 # 0x0004: rational64u - values: 2.875,3.375,3.625,4,4.125,7.25 1311 1371 # 0x0005: int8u - values: 0 … … 1313 1373 # 0x0007: int32u[3] - values: "65536 67932 69256" 1314 1374 0x03e9 => { Name => 'OriginalFileName', Writable => 'string' }, 1315 0x03eb => 'SensorLeftBorder', 1316 0x03ec => 'SensorTopBorder', 1317 0x03ed => 'SensorImageWidth', 1318 0x03ee => 'SensorImageHeight', 1375 0x03ea => { Name => 'KodakTag', Writable => 'int32u' }, #4 1376 0x03eb => { Name => 'SensorLeftBorder', Writable => 'int16u' }, # ("FinishedImageX", ref 4) 1377 0x03ec => { Name => 'SensorTopBorder', Writable => 'int16u' }, # ("FinishedImageY", ref 4) 1378 0x03ed => { Name => 'SensorImageWidth', Writable => 'int16u' }, # ("FinishedImageWidth", ref 4) 1379 0x03ee => { Name => 'SensorImageHeight',Writable => 'int16u' }, # ("FinishedImageHeight", ref 4) 1380 0x03ef => { Name => 'BlackLevelTop', Writable => 'int16u' }, #4 1381 0x03f0 => { Name => 'BlackLevelBottom', Writable => 'int16u' }, #4 1319 1382 0x03f1 => { 1320 Name => 'TextualInfo', 1383 Name => 'TextualInfo', # ("CameraSettingString", ref 4) 1321 1384 SubDirectory => { 1322 1385 TagTable => 'Image::ExifTool::Kodak::TextualInfo', 1323 1386 }, 1324 1387 }, 1388 0x03f2 => { #IB/4 1389 Name => 'FlashMode', 1390 Writable => 'int16u', 1391 Unknown => 1, 1392 Priority => 0, 1393 }, 1394 0x03f3 => { #IB/4 1395 Name => 'FlashCompensation', 1396 Writable => 'rational64s', 1397 }, 1398 0x03f4 => { #4 1399 Name => 'WindMode', 1400 Writable => 'int16u', 1401 Unknown => 1, 1402 }, 1403 0x03f5 => { #4 1404 Name => 'FocusMode', 1405 Writable => 'int16u', 1406 Unknown => 1, 1407 Priority => 0, 1408 }, 1409 0x03f8 => { #IB/4 1410 Name => 'MinAperture', 1411 Writable => 'rational64u', 1412 }, 1413 0x03f9 => { #IB/4 1414 Name => 'MaxAperture', 1415 Writable => 'rational64u', 1416 }, 1417 0x03fa => { #4 1418 Name => 'WhiteBalanceMode', 1419 Writable => 'int16u', 1420 Unknown => 1, 1421 }, 1422 0x03fb => { #4 1423 Name => 'WhiteBalanceDetected', 1424 Writable => 'int16u', 1425 Unknown => 1, 1426 }, 1325 1427 0x03fc => { #3 1326 1428 Name => 'WhiteBalance', … … 1329 1431 PrintConv => { }, # no values yet known 1330 1432 }, 1331 0x03fd => { #31433 0x03fd => [{ #3 1332 1434 Name => 'Processing', 1333 1435 Condition => '$count == 72', … … 1335 1437 TagTable => 'Image::ExifTool::Kodak::Processing', 1336 1438 }, 1337 }, 1439 },{ 1440 Name => 'ProcessingParameters', #4 1441 Binary => 1, 1442 # int8u[256] 1443 }], 1444 0x03fe => { Name => 'ImageAbsoluteX', Writable => 'int16s', }, #4 1445 0x03ff => { Name => 'ImageAbsoluteY', Writable => 'int16s' }, #4 1446 0x0400 => { Name => 'ApplicationKeyString', Writable => 'string' }, #4 1338 1447 0x0401 => { 1339 Name => 'Time', 1448 Name => 'Time', # ("CaptureTime", ref 4) 1340 1449 Groups => { 2 => 'Time' }, 1341 1450 Writable => 'string', 1342 1451 }, 1343 0x0414 => { Name => 'NCDFileInfo', Writable => 'string' }, 1344 0x0846 => { #3 1452 0x0402 => { #4 1453 Name => 'GPSString', 1454 Groups => { 2 => 'Location' }, 1455 Writable => 'string', 1456 }, 1457 0x0403 => { #4 1458 Name => 'EventLogCapture', 1459 Binary => 1, 1460 Unknown => 1, 1461 # int32u[3072] 1462 }, 1463 0x0404 => { #4 1464 Name => 'ComponentTable', 1465 Binary => 1, 1466 Unknown => 1, 1467 }, 1468 0x0405 => { #4 1469 Name => 'CustomIlluminant', 1470 Writable => 'int16u', 1471 Unknown => 1, 1472 }, 1473 0x0406 => [{ #IB/4 1474 Name => 'CameraTemperature', 1475 Condition => '$count == 1', 1476 Groups => { 2 => 'Camera' }, 1477 Writable => 'rational64s', 1478 PrintConv => '"$val C"', 1479 PrintConvInv => '$val=~s/ ?C//; $val', 1480 },{ 1481 Name => 'CameraTemperature', 1482 # (when count is 2, values seem related to temperature, but are not Celius) 1483 }], 1484 0x0407 => { #IB/4 1485 Name => 'AdapterVoltage', 1486 Groups => { 2 => 'Camera' }, 1487 Writable => 'rational64u', 1488 }, 1489 0x0408 => { #IB/4 1490 Name => 'BatteryVoltage', 1491 Groups => { 2 => 'Camera' }, 1492 Writable => 'rational64u', 1493 }, 1494 0x0409 => { #4 1495 Name => 'DacVoltages', 1496 # rational64u[8] 1497 }, 1498 0x040a => { #4 1499 Name => 'IlluminantDetectorData', 1500 Binary => 1, 1501 Unknown => 1, 1502 }, 1503 0x040b => { #4 1504 Name => 'PixelClockFrequency', 1505 Writable => 'int32u', 1506 }, 1507 0x040c => { #4 1508 Name => 'CenterPixel', 1509 Writable => 'int16u', 1510 Count => 3, 1511 }, 1512 0x040d => { #4 1513 Name => 'BurstCount', 1514 Writable => 'int16u', 1515 }, 1516 0x040e => { #4 1517 Name => 'BlackLevelRough', 1518 Writable => 'int16u', 1519 }, 1520 0x040f => { #4 1521 Name => 'OffsetMapHorizontal', 1522 Binary => 1, 1523 Unknown => 1, 1524 # int16s[1736] 1525 }, 1526 0x0410 => { #4 1527 Name => 'OffsetMapVertical', 1528 Binary => 1, 1529 Unknown => 1, 1530 # int16s[1160] 1531 }, 1532 0x0411 => { #4 1533 Name => 'Histogram', 1534 Binary => 1, 1535 Unknown => 1, 1536 # int16u[256] 1537 }, 1538 0x0412 => { #4 1539 Name => 'VerticalClockOverlaps', 1540 Writable => 'int16u', 1541 Count => 2, 1542 }, 1543 0x0413 => 'SensorTemperature', #4 1544 0x0414 => { Name => 'XilinxVersion', Writable => 'string' }, #4 1545 0x0415 => { Name => 'FirmwareVersion', Writable => 'int32u' }, #4 1546 0x0416 => { Name => 'BlackLevelRoughAfter', Writable => 'int16u' }, #4 1547 0x0417 => 'BrightRowsTop', #4 1548 0x0418 => 'EventLogProcess', #4 1549 0x0419 => 'DacVoltagesFlush', #4 1550 0x041a => 'FlashUsed', #4 1551 0x041b => 'FlashType', #4 1552 0x041c => 'SelfTimer', #4 1553 0x041d => 'AFMode', #4 1554 0x041e => 'LensType', #4 1555 0x041f => { Name => 'ImageCropX', Writable => 'int16s' }, #4 1556 0x0420 => { Name => 'ImageCropY', Writable => 'int16s' }, #4 1557 0x0421 => 'AdjustedTbnImageWidth', #4 1558 0x0422 => 'AdjustedTbnImageHeight', #4 1559 0x0423 => { Name => 'IntegrationTime', Writable => 'int32u' }, #4 1560 0x0424 => 'BracketingMode', #4 1561 0x0425 => 'BracketingStep', #4 1562 0x0426 => 'BracketingCounter', #4 1563 0x042e => 'HuffmanTableLength', #4 (int8u[16]) 1564 0x042f => 'HuffmanTableValue', #4 (int8u[13]) 1565 0x0438 => { Name => 'MainBoardVersion', Writable => 'int32u' }, #4 1566 0x0439 => { Name => 'ImagerBoardVersion', Writable => 'int32u' }, #4 1567 0x044c => 'FocusEdgeMap', #4 1568 0x05e6 => 'IdleTiming', #4 1569 0x05e7 => 'FlushTiming', #4 1570 0x05e8 => 'IntegrateTiming', #4 1571 0x05e9 => 'RegisterReadTiming', #4 1572 0x05ea => 'FirstLineTransferTiming', #4 1573 0x05eb => 'ShiftTiming', #4 1574 0x05ec => 'NormalLineTransferTiming', #4 1575 0x05ed => 'TestTransferTiming', #4 1576 # 0x05f0-0x05f9 "TestTiming", ref 4 1577 0x05fa => 'MinimumFlushRows', #4 1578 0x05fd => { Name => 'ImagerPowerOnDelayMsec', Writable => 'int32u' }, #4 1579 0x05fe => 'ImagerInitialTimingCode', #4 1580 0x05ff => 'ImagerLogicProgram', #4 1581 0x0600 => { Name => 'ImagerBiasSettlingDelayMsec', Writable => 'int32u' }, #4 1582 0x0604 => 'IdleSequence', #4 1583 0x0605 => 'FirstFlushSequence', #4 1584 0x0606 => 'FinalFlushSequence', #4 1585 0x0607 => 'SampleBlackSequence', #4 1586 0x0608 => 'TransferSequence', #4 1587 0x060e => 'DacCountsPerVolt', #4 1588 0x060f => 'BlackDacChannel', #4 1589 0x0610 => 'BlackAdCountsPerDacVolt', #4 1590 0x0611 => 'BlackTarget', #4 1591 0x0612 => 'BlackDacSettlingMsec', #4 1592 # 0x0618-0x062b - reserved for .IF file use, ref 4 1593 0x07d0 => { #4 1594 Name => 'StandardMatrixDaylight', 1595 Writable => 'rational64s', 1596 Count => 9, 1597 }, 1598 0x07d1 => { #4 1599 Name => 'StandardMatrixTungsten', 1600 Writable => 'rational64s', 1601 Count => 9, 1602 }, 1603 0x07d2 => { #4 1604 Name => 'StandardMatrixFluorescent', 1605 Writable => 'rational64s', 1606 Count => 9, 1607 }, 1608 0x07d3 => { #4 1609 Name => 'StandardMatrixFlash', 1610 Writable => 'rational64s', 1611 Count => 9, 1612 }, 1613 0x07d4 => { #4 (never used) 1614 Name => 'StandardMatrixCustom', 1615 Writable => 'rational64s', 1616 Count => 9, 1617 }, 1618 0x07da => { #4 1619 Name => 'DeviantMatrixDaylight', 1620 Writable => 'rational64s', 1621 Count => 9, 1622 }, 1623 0x07db => { #4 1624 Name => 'DeviantMatrixTungsten', 1625 Writable => 'rational64s', 1626 Count => 9, 1627 }, 1628 0x07dc => { #4 1629 Name => 'DeviantMatrixFluorescent', 1630 Writable => 'rational64s', 1631 Count => 9, 1632 }, 1633 0x07dd => { #4 1634 Name => 'DeviantMatrixFlash', 1635 Writable => 'rational64s', 1636 Count => 9, 1637 }, 1638 0x07de => { #4 (never used) 1639 Name => 'DeviantMatrixCustom', 1640 Writable => 'rational64s', 1641 Count => 9, 1642 }, 1643 0x07e4 => { #4 1644 Name => 'UniqueMatrixDaylight', 1645 Writable => 'rational64s', 1646 Count => 9, 1647 }, 1648 0x07e5 => { #4 1649 Name => 'UniqueMatrixTungsten', 1650 Writable => 'rational64s', 1651 Count => 9, 1652 }, 1653 0x07e6 => { #4 1654 Name => 'UniqueMatrixFluorescent', 1655 Writable => 'rational64s', 1656 Count => 9, 1657 }, 1658 0x07e7 => { #4 1659 Name => 'UniqueMatrixFlash', 1660 Writable => 'rational64s', 1661 Count => 9, 1662 }, 1663 0x07e8 => { #4 1664 Name => 'UniqueMatrixCustom', 1665 Writable => 'rational64s', 1666 Count => 9, 1667 }, 1668 0x07e9 => { #4 1669 Name => 'UniqueMatrixAuto', 1670 Writable => 'rational64s', 1671 Count => 9, 1672 }, 1673 0x0834 => { #4 1674 Name => 'StandardWhiteDaylight', 1675 Writable => 'rational64s', 1676 Count => 3, 1677 }, 1678 0x0835 => { #4 1679 Name => 'StandardWhiteTungsten', 1680 Writable => 'rational64s', 1681 Count => 3, 1682 }, 1683 0x0836 => { #4 1684 Name => 'StandardWhiteFluorescent', 1685 Writable => 'rational64s', 1686 Count => 3, 1687 }, 1688 0x0837 => { #4 1689 Name => 'StandardWhiteFlash', 1690 Writable => 'rational64s', 1691 Count => 3, 1692 }, 1693 0x0838 => { #4 (never used) 1694 Name => 'StandardWhiteCustom', 1695 Writable => 'rational64s', 1696 Count => 3, 1697 }, 1698 0x083e => { #4 1699 Name => 'DeviantWhiteDaylight', 1700 Writable => 'rational64s', 1701 Count => 3, 1702 }, 1703 0x083f => { #4 1704 Name => 'DeviantWhiteTungsten', 1705 Writable => 'rational64s', 1706 Count => 3, 1707 }, 1708 0x0840 => { #4 1709 Name => 'DeviantWhiteFluorescent', 1710 Writable => 'rational64s', 1711 Count => 3, 1712 }, 1713 0x0841 => { #4 1714 Name => 'DeviantWhiteFlash', 1715 Writable => 'rational64s', 1716 Count => 3, 1717 }, 1718 0x0842 => { #4 (never used) 1719 Name => 'DeviantWhiteCustom', 1720 Writable => 'rational64s', 1721 Count => 3, 1722 }, 1723 # 0x0843 - rational64u[3] 1724 # 0x0844 - rational64u[3] 1725 0x0846 => { #3 ("WhiteBalanceKelvin", ref 4) 1345 1726 Name => 'ColorTemperature', 1346 1727 Writable => 'int16u', 1347 1728 }, 1348 0x0852 => 'WB_RGBMul0', #3 1349 0x0853 => 'WB_RGBMul1', #3 1350 0x0854 => 'WB_RGBMul2', #3 1351 0x0855 => 'WB_RGBMul3', #3 1352 0x085c => { Name => 'WB_RGBCoeffs0', Binary => 1 }, #3 1353 0x085d => { Name => 'WB_RGBCoeffs1', Binary => 1 }, #3 1354 0x085e => { Name => 'WB_RGBCoeffs2', Binary => 1 }, #3 1355 0x085f => { Name => 'WB_RGBCoeffs3', Binary => 1 }, #3 1356 # 0x090d: linear table (ref 3) 1357 # 0x0c81: some sort of date (manufacture date?) - PH 1358 0x0ce5 => { Name => 'FirmwareVersion', Writable => 'string' }, 1359 # 0x1390: value: "DCSProSLRn" (tone curve name?) - PH 1360 0x1391 => { Name => 'ToneCurveFileName',Writable => 'string' }, 1361 0x1784 => { Name => 'ISO', Writable => 'int32u' }, #3 1729 0x0847 => 'WB_RGBLevelsAsShot', #4 1730 0x0848 => 'WB_RGBLevelsDaylight', #IB (rational64s/u[3]) ("UniqueWhiteDaylight", ref 4) 1731 0x0849 => 'WB_RGBLevelsTungsten', #IB (rational64s/u[3]) ("UniqueWhiteTungsten", ref 4) 1732 0x084a => 'WB_RGBLevelsFluorescent', #IB (rational64s/u[3]) ("UniqueWhiteFluorescent", ref 4) 1733 0x084b => 'WB_RGBLevelsFlash', #IB (rational64s/u[3]) ("UniqueWhiteFlash", ref 4) 1734 0x084c => 'WB_RGBLevelsCustom', #IB (rational64u[3]) ("UniqueWhiteCustom", ref 4) 1735 0x084d => 'WB_RGBLevelsAuto', #IB (rational64u[3]) ("UniqueWhiteAuto", ref 4) 1736 0x0852 => { #3/4 1737 Name => 'WB_RGBMulDaylight', # ("AdjustWhiteFactorsDaylight", ref 4) 1738 Writable => 'rational64u', 1739 Count => 3, 1740 }, 1741 0x0853 => { #3/4 1742 Name => 'WB_RGBMulTungsten', # ("AdjustWhiteFactorsTungsten", ref 4) 1743 Writable => 'rational64u', 1744 Count => 3, 1745 }, 1746 0x0854 => { #3/4 1747 Name => 'WB_RGBMulFluorescent', # ("AdjustWhiteFactorsFluorescent", ref 4) 1748 Writable => 'rational64u', 1749 Count => 3, 1750 }, 1751 0x0855 => { #3/4 1752 Name => 'WB_RGBMulFlash', # ("AdjustWhiteFactorsFlash", ref 4) 1753 Writable => 'rational64u', 1754 Count => 3, 1755 }, 1756 0x085c => { Name => 'WB_RGBCoeffsDaylight', Binary => 1 }, #3 ("WhiteBalanceParametersDaylight", ref 4) 1757 0x085d => { Name => 'WB_RGBCoeffsTungsten', Binary => 1 }, #3 ("WhiteBalanceParametersTungsten", ref 4) 1758 0x085e => { Name => 'WB_RGBCoeffsFluorescent',Binary=>1 }, #3 ("WhiteBalanceParametersFluorescent", ref 4) 1759 0x085f => { Name => 'WB_RGBCoeffsFlash', Binary => 1 }, #3 ("WhiteBalanceParametersFlash", ref 4) 1760 0x0898 => { Name => 'ExposureGainDaylight', Writable => 'rational64s' }, #4 1761 0x0899 => { Name => 'ExposureGainTungsten', Writable => 'rational64s' }, #4 1762 0x089a => { Name => 'ExposureGainFluorescent',Writable=>'rational64s' }, #4 1763 0x089b => { Name => 'ExposureGainFlash', Writable => 'rational64s' }, #4 1764 0x089c => { Name => 'ExposureGainCustom', Writable => 'rational64s' }, #4 (never used) 1765 0x089d => { Name => 'AnalogISOTable', Writable => 'rational64u', Count => 3 }, #4 1766 0x089e => { Name => 'AnalogCaptureISO', Writable => 'int32u' }, #4 1767 0x089f => { Name => 'ISOCalibrationGain', Writable => 'rational64u' }, #4 1768 0x08a0 => 'ISOCalibrationGainTable', #4 1769 0x08a1 => 'ExposureHeadroomFactor', #4 1770 0x08ab => 'LinearitySplineTags', #4 (int16u[24]) 1771 # 0x08ac-0x08fb - LinearitySpline(n) (rational64s[75]) 1772 0x08fc => { #4 1773 Name => 'MonitorMatrix', 1774 Writable => 'rational64s', 1775 Count => 9, 1776 }, 1777 0x08fd => 'TonScaleTable', #4 1778 0x08fe => { Name => 'Gamma', Writable => 'rational64u' }, #4 1779 0x08ff => 'LogLinTable', #4 1780 0x0900 => 'LinLogTable', #4 1781 0x0901 => { Name => 'GammaTable', Binary => 1 }, #4 (int16u[4096]) 1782 0x0902 => { Name => 'LogScale', Writable => 'rational64u' }, #4 1783 0x0903 => { Name => 'BaseISO', Writable => 'rational64u' }, #IB (ISO before digital gain) 1784 0x0904 => { Name => 'LinLogCoring', Writable => 'int16u' }, #4 1785 0x0905 => { Name => 'PatternGainConversionTable', Binary => 1 }, #4 (int8u[256]) 1786 0x0906 => 'DefectCount', #4 1787 0x0907 => { Name => 'DefectList', Binary => 1 }, #4 (undef[48]) 1788 0x0908 => { Name => 'DefectListPacked', Binary => 1 }, #4 (int16u[296]) 1789 0x0909 => { Name => 'ImageSpace', Writable => 'int16u' }, #4 1790 0x090a => { Name => 'ThumbnailCompressionTable',Binary => 1 }, #4 (int8u[4096]) 1791 0x090b => { Name => 'ThumbnailExpansionTable', Binary => 1 }, #4 (int16u[256]) 1792 0x090c => { Name => 'ImageCompressionTable', Binary => 1 }, #4 (int16u[4096]) 1793 0x090d => { Name => 'ImageExpansionTable', Binary => 1 }, #4 (int16u[1024/4096]) 1794 0x090e => 'EighteenPercentPoint', #4 1795 0x090f => { Name => 'DefectIsoCode', Writable => 'int16u' }, #4 1796 0x0910 => { Name => 'BaseISODaylight', Writable => 'rational64u' }, #4 1797 0x0911 => { Name => 'BaseISOTungsten', Writable => 'rational64u' }, #4 1798 0x0912 => { Name => 'BaseISOFluorescent', Writable => 'rational64u' }, #4 1799 0x0913 => { Name => 'BaseISOFlash', Writable => 'rational64u' }, #4 1800 0x091a => { Name => 'MatrixSelectThreshold',Writable => 'int16s' }, #4 1801 0x091b => { Name => 'MatrixSelectK', Writable => 'rational64u' }, #4 1802 0x091c => { Name => 'IlluminantDetectTable',Binary => 1 }, #4 (int16u[200]) 1803 0x091d => 'RGTable', #4 1804 0x091e => { Name => 'MatrixSelectThreshold1', Writable => 'int16s' }, #4 1805 0x091f => { Name => 'MatrixSelectThreshold2', Writable => 'int16s' }, #4 1806 0x0924 => 'PortraitMatrix', #4 1807 0x0925 => 'PortraitToneScaleTable', #4 1808 0x092e => { Name => 'EnableSharpening', Writable => 'int16u' }, #4 1809 0x092f => { #4 1810 Name => 'SharpeningKernel', 1811 Writable => 'int16s', 1812 Count => 25, 1813 }, 1814 0x0930 => { Name => 'EdgeMapSlope', Writable => 'int16u' }, #4 1815 0x0931 => { Name => 'EdgeMapX1', Writable => 'int16u' }, #4 1816 0x0932 => { Name => 'EdgeMapX2', Writable => 'int16u' }, #4 1817 0x0933 => { #4 1818 Name => 'KernelDenominators', 1819 Writable => 'int16u', 1820 Count => 3, 1821 }, 1822 0x0934 => { Name => 'EdgeMapX3', Writable => 'int16u' }, #4 1823 0x0935 => { Name => 'EdgeMapX4', Writable => 'int16u' }, #4 1824 0x0936 => 'SharpenForThumbnail', #4 1825 0x0937 => 'EdgeSpline', #4 1826 0x0938 => 'DownSampleBy2Hor', #4 (int16s[4]) 1827 0x0939 => 'DownSampleBy2Ver', #4 (int16s[4]) 1828 0x093a => 'DownSampleBy4Hor', #4 (int16s[6]) 1829 0x093b => 'DownSampleBy4Ver', #4 (int16s[6]) 1830 0x093c => 'DownSampleBy3Hor', #4 (int16s[6]) 1831 0x093d => 'DownSampleBy3Ver', #4 (int16s[6]) 1832 0x093e => 'DownSampleBy6Hor', #4 (int16s[8]) 1833 0x093f => 'DownSampleBy6Ver', #4 (int16s[8]) 1834 0x0940 => 'DownSampleBy2Hor3MPdcr', #4 1835 0x0941 => 'DownSampleBy2Ver3MPdcr', #4 1836 0x0942 => 'ThumbnailResizeRatio', #4 1837 0x0943 => { Name => 'AtCaptureUserCrop', Writable => 'int32u', Count => 4 }, #4 (Top, Left, Bottom, Right) 1838 0x0944 => { Name => 'ImageResolution', Writable => 'int32u' }, #4 (Contains enum for imageDcrRes or imageJpegRes) 1839 0x0945 => { Name => 'ImageResolutionJpg', Writable => 'int32u' }, #4 (Contains enum for imageJpegRes) 1840 0x094c => 'USMParametersLow', #4 (int16s[8]) 1841 0x094d => 'USMParametersMed', #4 (int16s[8]) 1842 0x094e => 'USMParametersHigh', #4 (int16s[8]) 1843 0x094f => 'USMParametersHost', #4 (int16s[10]) 1844 0x0950 => { Name => 'EdgeSplineLow', Binary => 1 }, #4 (rational64s[57]) 1845 0x0951 => { Name => 'EdgeSplineMed', Binary => 1 }, #4 (rational64s[69]) 1846 0x0952 => { Name => 'EdgeSplineHigh',Binary => 1 }, #4 (rational64s[69]) 1847 0x0953 => 'USMParametersHost6MP', #4 (int16s[10]) 1848 0x0954 => 'USMParametersHost3MP', #4 (int16s[10]) 1849 0x0960 => { Name => 'PatternImagerWidth', Writable => 'int16u' }, #4 1850 0x0961 => { Name => 'PatternImagerHeight', Writable => 'int16u' }, #4 1851 0x0962 => { Name => 'PatternAreaWidth', Writable => 'int16u' }, #4 1852 0x0963 => { Name => 'PatternAreaHeight', Writable => 'int16u' }, #4 1853 0x0964 => { Name => 'PatternCorrectionGains', Binary => 1 }, #4 (undef[48174]) 1854 0x0965 => 'PatternCorrectionOffsets', #4 1855 0x0966 => { Name => 'PatternX', Writable => 'int16u' }, #4 1856 0x0967 => { Name => 'PatternY', Writable => 'int16u' }, #4 1857 0x0968 => { Name => 'PatternCorrectionFactors', Binary => 1 }, #4 (undef[48174]) 1858 0x0969 => { Name => 'PatternCorrectionFactorScale', Writable => 'int16u' }, #4 1859 0x096a => { Name => 'PatternCropRows1', Writable => 'int16u' }, #4 1860 0x096b => { Name => 'PatternCropRows2', Writable => 'int16u' }, #4 1861 0x096c => { Name => 'PatternCropCols1', Writable => 'int16u' }, #4 1862 0x096d => { Name => 'PatternCropCols2', Writable => 'int16u' }, #4 1863 0x096e => 'PixelCorrectionGains', #4 1864 0x096f => 'StitchRows', #4 (int16u[6]) 1865 0x0970 => 'StitchColumns', #4 (int16u) 1866 0x0971 => { Name => 'PixelCorrectionScale', Writable => 'int16u' }, #4 1867 0x0972 => { Name => 'PixelCorrectionOffset',Writable => 'int16u' }, #4 1868 0x0988 => 'LensTableIndex', #4 1869 0x0992 => 'DiffTileGains602832', #4 1870 0x0993 => 'DiffTileGains24t852822', #4 (reserved tags 2450-2459) 1871 0x099c => 'TileGainDeterminationTable', #4 (int16s[0]) 1872 0x099d => 'NemoBlurKernel', #4 (int16s[14]) 1873 0x099e => 'NemoTileSize', #4 (int16u) 1874 0x099f => 'NemoGainFactors', #4 (rational64s[4]) 1875 0x09a0 => 'NemoDarkLimit', #4 (int16u) 1876 0x09a1 => 'NemoHighlight12Limit', #4 1877 0x09c4 => { Name => 'ImagerFileProductionLevel',Writable => 'int16u' }, #4 1878 0x09c5 => { Name => 'ImagerFileDateCreated', Writable => 'int32u' }, #4 (unknown encoding - PH) 1879 0x09c6 => { Name => 'CalibrationVersion', Writable => 'string' }, #4 1880 0x09c7 => { Name => 'ImagerFileTagsVersionStandard', Writable => 'int16u' }, #4 1881 0x09c8 => { Name => 'IFCameraModel', Writable => 'string' }, #4 1882 0x09c9 => { Name => 'CalibrationHistory', Writable => 'string' }, #4 1883 0x09ca => { Name => 'CalibrationLog', Binary => 1 }, #4 (undef[1140]) 1884 0x09ce => { Name => 'SensorSerialNumber', Writable => 'string', Groups => { 2 => 'Camera' } }, #IB/4 1885 0x09f6 => 'DefectConcealArtCorrectThres', #4 (no longer used) 1886 0x09f7 => 'SglColDCACThres1', #4 1887 0x09f8 => 'SglColDCACThres2', #4 1888 0x09f9 => 'SglColDCACTHres3', #4 1889 0x0a01 => 'DblColDCACThres1', #4 1890 0x0a02 => 'DblColDCACThres2', #4 1891 0x0a0a => { Name => 'DefectConcealThresTable', Binary => 1 }, #4 (int16u[121/79]) 1892 0x0a28 => 'MonoUniqueMatrix', #4 1893 0x0a29 => 'MonoMonitorMatrix', #4 1894 0x0a2a => 'MonoToneScaleTable', #4 1895 # 0x0a32-0x0a3b "OmenInitialSurfaceRed(n)", ref 4 1896 # 0x0a3c-0x0a45 "OmenInitialSurfaceGoR(n)", ref 4 1897 # 0x0a46-0x0a4f "OmenInitialSurfaceBlue(n)", ref 4 1898 # 0x0a50-0x0a59 "OmenInitialSurfaceGoB(n)", ref 4 1899 0x0a5a => 'OmenInitialScaling', #4 1900 0x0a5b => 'OmenInitialRows', #4 1901 0x0a5c => 'OmenInitialColumns', #4 1902 0x0a5d => { Name => 'OmenInitialIPFStrength',Writable => 'int32s', Count => 4 }, #4 1903 0x0a5e => { Name => 'OmenEarlyStrength', Writable => 'int32s', Count => 4 }, #4 1904 0x0a5f => { Name => 'OmenAutoStrength', Writable => 'int32s', Count => 4 }, #4 1905 0x0a60 => { Name => 'OmenAtCaptureStrength', Writable => 'int32s', Count => 4 }, #4 1906 0x0a61 => 'OmenAtCaptureMode', #4 1907 0x0a62 => { Name => 'OmenFocalLengthLimit', Writable => 'int16s' }, #4 1908 0x0a64 => { Name => 'OmenSurfaceIndex', Writable => 'int16s' }, #4 (which InitialSurface to use) 1909 0x0a65 => 'OmenPercentToRationalLimitsRed', #4 (signed rationals for 0 and 100) 1910 0x0a66 => 'OmenPercentToRationalLimitsGoR', #4 (signed rationals for 0 and 100) 1911 0x0a67 => 'OmenPercentToRationalLimitsBlue', #4 (signed rationals for 0 and 100) 1912 0x0a68 => 'OmenPercentToRationalLimitsGoB', #4 (signed rationals for 0 and 100) 1913 0x0a6e => 'OmenEarlyGoBSurface', #4 1914 0x0a6f => 'OmenEarlyGoBRows', #4 1915 0x0a70 => 'OmenEarlyGoBColumns', #4 1916 0x0a73 => 'OmenSmoothingKernel', #4 1917 0x0a74 => 'OmenGradientOffset', #4 1918 0x0a75 => 'OmenGradientKernel', #4 1919 0x0a76 => 'OmenGradientKernelTaps', #4 1920 0x0a77 => 'OmenRatioClipFactors', #4 1921 0x0a78 => 'OmenRatioExclusionFactors', #4 1922 0x0a79 => 'OmenGradientExclusionLimits', #4 1923 0x0a7a => 'OmenROICoordinates', #4 1924 0x0a7b => 'OmenROICoefficients', #4 1925 0x0a7c => 'OmenRangeWeighting', #4 1926 0x0a7d => 'OmenMeanToStrength', #4 1927 0x0bb8 => 'FactoryWhiteGainsDaylight', #4 1928 0x0bb9 => 'FactoryWhiteOffsetsDaylight', #4 1929 0x0bba => 'DacGainsCoarse', #4 1930 0x0bbb => 'DacGainsFine', #4 1931 0x0bbc => 'DigitalExposureGains', #4 1932 0x0bbd => 'DigitalExposureBiases', #4 1933 0x0bbe => 'BlackClamp', #4 1934 0x0bbf => 'ChannelCoarseGainAdjust', #4 1935 0x0bc0 => 'BlackClampOffset', #4 1936 0x0bf4 => 'DMPixelThresholdFactor', #4 (TIFF_RATIONAL) 1937 0x0bf5 => 'DMWindowThresholdFactor', #4 (TIFF_RATIONAL) 1938 0x0bf6 => 'DMTrimFraction', #4 (TIFF_RATIONAL) 1939 0x0bf7 => 'DMSmoothRejThresh', #4 (TIFF_RATIONAL) 1940 0x0bf8 => 'DMFillRejThresh', #4 (TIFF_RATIONAL) 1941 0x0bf9 => 'VMWsize', #4 (TIFF_SHORT) 1942 0x0bfa => 'DMErodeRadius', #4 (TIFF_SHORT) 1943 0x0bfb => 'DMNumPatches', #4 (TIFF_SHORT) 1944 0x0bfc => 'DMNoiseScale', #4 (TIFF_RATIONAL) 1945 0x0bfe => 'BrightDefectThreshold', #4 1946 0x0bff => 'BrightDefectIntegrationMS', #4 1947 0x0c00 => 'BrightDefectIsoCode', #4 1948 0x0c03 => 'TopDarkRow1', #4 (support 330 dark map generation algorithm) 1949 0x0c04 => 'TopDarkRow2', #4 (these tags were 3175-3192 prior to 18Jan2001) 1950 0x0c05 => 'BottomDarkRow1', #4 1951 0x0c06 => 'BottomDarkRow2', #4 1952 0x0c07 => 'LeftDarkCol1', #4 1953 0x0c08 => 'LeftDarkCol2', #4 1954 0x0c09 => 'RightDarkCol1', #4 1955 0x0c0a => 'RightDarkCol2', #4 1956 0x0c0b => 'HMPixThresh', #4 1957 0x0c0c => 'HMColThresh', #4 1958 0x0c0d => 'HMWsize', #4 1959 0x0c0e => 'HMColRejThresh', #4 1960 0x0c0f => 'VMPixThresh', #4 1961 0x0c10 => 'VMColThresh', #4 1962 0x0c11 => 'VMNbands', #4 1963 0x0c12 => 'VMColDropThresh', #4 1964 0x0c13 => 'VMPatchResLimit', #4 1965 0x0c14 => 'MapScale', #4 1966 0x0c1c => 'Klut', #4 1967 0x0c1d => 'RimNonlinearity', #4 (Obsolete) 1968 0x0c1e => 'InverseRimNonlinearity', #4 (Obsolete) 1969 0x0c1f => 'RembrandtToneScale', #4 (Obsolete) 1970 0x0c20 => 'RimToNifColorTransform', #4 (Obsolete) 1971 0x0c21 => 'RimToNifScaleFactor', #4 (Obsolete) 1972 0x0c22 => 'NifNonlinearity', #4 (Obsolete) 1973 0x0c23 => 'SBALogTransform', #4 (Obsolete) 1974 0x0c24 => 'InverseSBALogTransform', #4 (Obsolete) 1975 0x0c25 => { Name => 'SBABlack', Writable => 'int16u' }, #4 1976 0x0c26 => { Name => 'SBAGray', Writable => 'int16u' }, #4 1977 0x0c27 => { Name => 'SBAWhite', Writable => 'int16u' }, #4 1978 0x0c28 => { Name => 'GaussianWeights', Binary => 1 }, #4 (int16u[864]) 1979 0x0c29 => { Name => 'SfsBoundary', Binary => 1 }, #4 (int16u[6561]) 1980 0x0c2a => 'CoringTableBest', #4 (Obsolete) 1981 0x0c2b => 'CoringTableBetter', #4 (Obsolete) 1982 0x0c2c => 'CoringTableGood', #4 (Obsolete) 1983 0x0c2d => 'ExposureReferenceGain', #4 (Obsolete) 1984 0x0c2e => 'ExposureReferenceOffset', #4 (Obsolete) 1985 0x0c2f => 'SBARedBalanceLut', #4 (Obsolete) 1986 0x0c30 => 'SBAGreenBalanceLut', #4 (Obsolete) 1987 0x0c31 => 'SBABlueBalanceLut', #4 (Obsolete) 1988 0x0c32 => { Name => 'SBANeutralBAL', Writable => 'int32s' }, #4 1989 0x0c33 => { Name => 'SBAGreenMagentaBAL', Writable => 'int32s' }, #4 1990 0x0c34 => { Name => 'SBAIlluminantBAL', Writable => 'int32s' }, #4 1991 0x0c35 => { Name => 'SBAAnalysisComplete', Writable => 'int8u' }, #4 1992 0x0c36 => 'JPEGQTableBest', #4 1993 0x0c37 => 'JPEGQTableBetter', #4 1994 0x0c38 => 'JPEGQTableGood', #4 1995 0x0c39 => 'RembrandtPortraitToneScale', #4 (Obsolete) 1996 0x0c3a => 'RembrandtConsumerToneScale', #4 (Obsolete) 1997 0x0c3b => 'CFAGreenThreshold1', #4 (Now CFAGreenThreshold1H) 1998 0x0c3c => 'CFAGreenThreshold2', #4 (Now CFAGreenThreshold2V) 1999 0x0c3d => { Name => 'QTableLarge50Pct', Binary => 1 }, #4 (undef[130]) 2000 0x0c3e => { Name => 'QTableLarge67Pct', Binary => 1 }, #4 (undef[130]) 2001 0x0c3f => { Name => 'QTableLarge100Pct', Binary => 1 }, #4 (undef[130]) 2002 0x0c40 => { Name => 'QTableMedium50Pct', Binary => 1 }, #4 (undef[130]) 2003 0x0c41 => { Name => 'QTableMedium67Pct', Binary => 1 }, #4 (undef[130]) 2004 0x0c42 => { Name => 'QTableMedium100Pct', Binary => 1 }, #4 (undef[130]) 2005 0x0c43 => { Name => 'QTableSmall50Pct', Binary => 1 }, #4 (undef[130]) 2006 0x0c44 => { Name => 'QTableSmall67Pct', Binary => 1 }, #4 (undef[130]) 2007 0x0c45 => { Name => 'QTableSmall100Pct', Binary => 1 }, #4 (undef[130]) 2008 0x0c46 => { Name => 'SBAHighGray', Writable => 'int16u' }, #4 2009 0x0c47 => { Name => 'SBALowGray', Writable => 'int16u' }, #4 2010 0x0c48 => { Name => 'CaptureLook', Writable => 'int16u' }, #4 (was "ToneScaleFlag") 2011 0x0c49 => { Name => 'SBAIllOffset', Writable => 'int16s' }, #4 2012 0x0c4a => { Name => 'SBAGmOffset', Writable => 'int16s' }, #4 2013 0x0c4b => 'NifNonlinearity12Bit', #4 (Obsolete) 2014 0x0c4c => 'SharpeningOn', #4 (Obsolete) 2015 0x0c4d => 'NifNonlinearity16Bit', #4 (Obsolete) 2016 0x0c4e => 'RawHistogram', #4 2017 0x0c4f => 'RawCFAComponentAverages', #4 2018 0x0c50 => 'DisableFlagsPresent', #4 2019 0x0c51 => 'DelayCols', #4 2020 0x0c52 => 'DummyColsLeft', #4 2021 0x0c53 => 'TrashColsRight', #4 2022 0x0c54 => 'BlackColsRight', #4 2023 0x0c55 => 'DummyColsRight', #4 2024 0x0c56 => 'OverClockColsRight', #4 2025 0x0c57 => 'UnusedBlackRowsTopOut', #4 2026 0x0c58 => 'TrashRowsBottom', #4 2027 0x0c59 => 'BlackRowsBottom', #4 2028 0x0c5a => 'OverClockRowsBottom', #4 2029 0x0c5b => 'BlackColsLeft', #4 2030 0x0c5c => 'BlackRowsTop', #4 2031 0x0c5d => 'PartialActiveColsLeft', #4 2032 0x0c5e => 'PartialActiveColsRight', #4 2033 0x0c5f => 'PartialActiveRowsTop', #4 2034 0x0c60 => 'PartialActiveRowsBottom', #4 2035 0x0c61 => { Name => 'ProcessBorderColsLeft', Writable => 'int16u' }, #4 2036 0x0c62 => { Name => 'ProcessBorderColsRight', Writable => 'int16u' }, #4 2037 0x0c63 => { Name => 'ProcessBorderRowsTop', Writable => 'int16u' }, #4 2038 0x0c64 => { Name => 'ProcessBorderRowsBottom', Writable => 'int16u' }, #4 2039 0x0c65 => 'ActiveCols', #4 2040 0x0c66 => 'ActiveRows', #4 2041 0x0c67 => 'FirstLines', #4 2042 0x0c68 => 'UnusedBlackRowsTopIn', #4 2043 0x0c69 => 'UnusedBlackRowsBottomIn', #4 2044 0x0c6a => 'UnusedBlackRowsBottomOut', #4 2045 0x0c6b => 'UnusedBlackColsLeftOut', #4 2046 0x0c6c => 'UnusedBlackColsLeftIn', #4 2047 0x0c6d => 'UnusedBlackColsRightIn', #4 2048 0x0c6e => 'UnusedBlackColsRightOut', #4 2049 0x0c6f => { Name => 'CFAOffsetRows', Writable => 'int32u' }, #4 2050 0x0c70 => { Name => 'ShiftCols', Writable => 'int16s' }, #4 2051 0x0c71 => { Name => 'CFAOffsetCols', Writable => 'int32u' }, #4 2052 0x0c76 => 'DarkMapScale', #4 2053 0x0c77 => 'HMapHandling', #4 2054 0x0c78 => 'VMapHandling', #4 2055 0x0c79 => 'DarkThreshold', #4 2056 0x0c7a => { Name => 'DMDitherMatrix', Writable => 'int16u' }, #4 2057 0x0c7b => { Name => 'DMDitherMatrixWidth', Writable => 'int16u' }, #4 2058 0x0c7c => { Name => 'DMDitherMatrixHeight', Writable => 'int16u' }, #4 2059 0x0c7d => { Name => 'MaxPixelValueThreshold', Writable => 'int16u' }, #4 2060 0x0c7e => { Name => 'HoleFillDeltaThreshold', Writable => 'int16u' }, #4 2061 0x0c7f => { Name => 'DarkPedestal', Writable => 'int16u' }, #4 2062 0x0c80 => { Name => 'ImageProcessingFileTagsVersionNumber', Writable => 'int16u' }, #4 2063 0x0c81 => { Name => 'ImageProcessingFileDateCreated', Writable => 'string', Groups => { 2 => 'Time' } }, #4 2064 0x0c82 => { Name => 'DoublingMicrovolts', Writable => 'int32s' }, #4 2065 0x0c83 => { #4 2066 Name => 'DarkFrameShortExposure', 2067 Writable => 'int32u', 2068 ValueConv => '$val / 1e6', # (microseconds) 2069 ValueConvInv => '$val * 1e6', 2070 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', 2071 PrintConvInv => '$val', 2072 }, 2073 0x0c84 => { #4 2074 Name => 'DarkFrameLongExposure', 2075 Writable => 'int32u', 2076 ValueConv => '$val / 1e6', # (microseconds) 2077 ValueConvInv => '$val * 1e6', 2078 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', 2079 PrintConvInv => '$val', 2080 }, 2081 0x0c85 => { Name => 'DarkFrameCountFactor', Writable => 'rational64u' }, #4 2082 0x0c88 => { Name => 'HoleFillDarkDeltaThreshold', Writable => 'int16u' }, #4 2083 0x0c89 => 'FarkleWhiteThreshold', #4 2084 0x0c8a => { Name => 'ColumnResetOffsets', Binary => 1 }, #4 (int16u[3012]) 2085 0x0c8b => { Name => 'ColumnGainFactors', Binary => 1 }, #4 (int16u[3012]) 2086 # 0x0c94-0x0c9d ColumnOffsets (int16u[3012]), ref 4 2087 0x0c8c => 'Channel0LagKernel', #4 2088 0x0c8d => 'Channel1LagKernel', #4 2089 0x0c8e => 'Channel2LagKernel', #4 2090 0x0c8f => 'Channel3LagKernel', #4 2091 0x0c90 => 'BluegrassTable', #4 2092 0x0c91 => 'BluegrassScale1', #4 2093 0x0c92 => 'BluegrassScale2', #4 2094 0x0ce4 => 'FinishedFileProcessingRequest', #4 2095 0x0ce5 => { Name => 'FirmwareVersion', Writable => 'string', Groups => { 2 => 'Camera' } }, # ("ProcessingSoftware", ref 4) 2096 0x0ce6 => 'HostSoftwareExportVersion', #4 (ULONG only exists if made by host SW) 2097 0x0ce7 => { #4 2098 Name => 'HostSoftwareRendering', 2099 Writable => 'int32u', 2100 PrintConv => { 2101 0 => 'Normal (sRGB)', 2102 1 => 'Linear (camera RGB)', 2103 2 => 'Pro Photo RGB', 2104 3 => 'Unknown', 2105 4 => 'Other Profile', 2106 }, 2107 }, 2108 0x0dac => 'DCS3XXProcessingInfoIFD', #4 (Obsolete) 2109 0x0dad => 'DCS3XXProcessingInfo', #4 (Obsolete) 2110 0x0dae => { Name => 'IPAVersion', Writable => 'int32u' }, #4 2111 0x0db6 => 'FinishIPAVersion', #4 2112 0x0db7 => 'FinishIPFVersion', #4 2113 0x0db8 => { #4 2114 Name => 'FinishFileType', 2115 Writable => 'int32u', 2116 PrintConv => { 2117 0 => 'JPEG Best', 2118 1 => 'JPEG Better', 2119 2 => 'JPEG Good', 2120 3 => 'TIFF RGB', 2121 }, 2122 }, 2123 0x0db9 => { #4 2124 Name => 'FinishResolution', 2125 Writable => 'int32u', 2126 PrintConv => { 2127 0 => '100%', 2128 1 => '67%', 2129 2 => '50%', 2130 3 => '25%', 2131 }, 2132 }, 2133 0x0dba => { #4 2134 Name => 'FinishNoise', 2135 Writable => 'int32u', 2136 PrintConv => { 2137 0 => 'Normal', 2138 1 => 'Strong', 2139 2 => 'Low', 2140 }, 2141 }, 2142 0x0dbb => { #4 2143 Name => 'FinishSharpening', 2144 Writable => 'int32u', 2145 PrintConv => { 2146 0 => 'None', 2147 1 => 'High', 2148 2 => 'Medium', 2149 3 => 'Low', 2150 }, 2151 }, 2152 0x0dbc => { #4 2153 Name => 'FinishLook', 2154 Writable => 'int32u', 2155 PrintConv => { 2156 0 => 'Product', 2157 1 => 'Portrait', 2158 2 => 'Product Reduced', 2159 3 => 'Portrait Reduced', 2160 4 => 'Monochrome Product', 2161 5 => 'Monochrome Portrait', 2162 6 => 'Wedding', 2163 7 => 'Event', 2164 8 => 'Product Hi Color', 2165 9 => 'Portrait Hi Color', 2166 # (past this is not yet implemented) 2167 10 => 'Product Hi Color Hold', 2168 11 => 'Portrait Hi Color Hold', 2169 13 => 'DCS BW Normal', 2170 14 => 'DCS BW Wratten 8', 2171 15 => 'DCS BW Wratten 25', 2172 16 => 'DCS Sepia 1', 2173 17 => 'DCS Sepia 2', 2174 }, 2175 }, 2176 0x0dbd => { #4 2177 Name => 'FinishExposure', 2178 Writable => 'int32u', 2179 PrintConv => { 0 => 'Yes', 1 => 'No' }, 2180 }, 2181 0x0e0b => { Name => 'SigmaScalingFactorLowRes', Writable => 'rational64u' }, #4 (for scaling sigma tables in-camera) 2182 0x0e0c => { Name => 'SigmaScalingFactorCamera', Writable => 'rational64u' }, #4 (for scaling sigma tables in-camera) 2183 0x0e0d => { Name => 'SigmaImpulseParameters', Writable => 'int16u', Count => -1 }, #4 (for impulse reduction control) 2184 0x0e0e => { Name => 'SigmaNoiseThreshTableV2', Binary => 1 }, #4 (replaces V2 caltable) 2185 0x0e0f => { Name => 'SigmaSizeTable', Writable => 'int16u', Count => -1 }, #4 2186 0x0e10 => 'DacGainsCoarseAdjPreIF41', #4 (Tag not used due to abandoned implementation) 2187 0x0e11 => { Name => 'SigmaNoiseFilterCalTableV1', Binary => 1 }, #4 (undef[418]) (Defines Version 1 of Sigma Noise Filter table within .IF/.IPF) 2188 0x0e12 => { Name => 'SigmaNoiseFilterTableV1', Binary => 1}, #4 (Defines Version 1 of Sigma Noise Filter table within image) 2189 0x0e13 => 'Lin12ToKlut8', #4 2190 0x0e14 => 'SigmaNoiseFilterTableV1Version', #4 (int16u/int32u) (This tag describes the version level of the SigmaNoiseFilterTableV1 class of tags) 2191 0x0e15 => 'Lin12ToKlut12', #4 2192 0x0e16 => 'Klut12ToLin12', #4 2193 0x0e17 => { Name => 'NifNonlinearity12To16', Binary => 1 }, #4 (int16u[4096]) 2194 0x0e18 => { Name => 'SBALog12Transform', Binary => 1 }, #4 (int16u[4096]) 2195 0x0e19 => { Name => 'InverseSBALog12Transform', Binary=> 1 }, #4 (int16u[3613]) 2196 0x0e1a => { Name => 'ToneScale0', Binary => 1 }, #4 (int16u[4096]) (Was Portrait12ToneScale on DCS3XX 1.3.1) 2197 0x0e1b => { Name => 'ToneScale1', Binary => 1 }, #4 (int16u[4096]) (Was Consumer12ToneScale on DCS3XX 1.3.1) 2198 0x0e1c => { Name => 'ToneScale2', Binary => 1 }, #4 (int16u[4096]) 2199 0x0e1d => { Name => 'ToneScale3', Binary => 1 }, #4 (int16u[4096]) 2200 0x0e1e => { Name => 'ToneScale4', Binary => 1 }, #4 (int16u[4096]) 2201 0x0e1f => { Name => 'ToneScale5', Binary => 1 }, #4 (int16u[4096]) 2202 0x0e20 => { Name => 'ToneScale6', Binary => 1 }, #4 (int16u[4096]) 2203 0x0e21 => { Name => 'ToneScale7', Binary => 1 }, #4 (int16u[4096]) 2204 0x0e22 => { Name => 'ToneScale8', Binary => 1 }, #4 (int16u[4096]) 2205 0x0e23 => { Name => 'ToneScale9', Binary => 1 }, #4 (int16u[4096]) 2206 0x0e24 => 'DayMat0', #4 (Obsolete) 2207 0x0e25 => 'DayMat1', #4 (Obsolete) 2208 0x0e26 => 'DayMat2', #4 (Obsolete) 2209 0x0e27 => 'DayMat3', #4 (Obsolete) 2210 0x0e28 => 'DayMat4', #4 (Obsolete) 2211 0x0e29 => 'DayMat5', #4 (Obsolete) 2212 0x0e2a => 'DayMat6', #4 (Obsolete) 2213 0x0e2b => 'DayMat7', #4 (Obsolete) 2214 0x0e2c => 'DayMat8', #4 (Obsolete) 2215 0x0e2d => 'DayMat9', #4 (Obsolete) 2216 0x0e2e => 'TungMat0', #4 (Obsolete) 2217 0x0e2f => 'TungMat1', #4 (Obsolete) 2218 0x0e30 => 'TungMat2', #4 (Obsolete) 2219 0x0e31 => 'TungMat3', #4 (Obsolete) 2220 0x0e32 => 'TungMat4', #4 (Obsolete) 2221 0x0e33 => 'TungMat5', #4 (Obsolete) 2222 0x0e34 => 'TungMat6', #4 (Obsolete) 2223 0x0e35 => 'TungMat7', #4 (Obsolete) 2224 0x0e36 => 'TungMat8', #4 (Obsolete) 2225 0x0e37 => 'TungMat9', #4 (Obsolete) 2226 0x0e38 => 'FluorMat0', #4 (Obsolete) 2227 0x0e39 => 'FluorMat1', #4 (Obsolete) 2228 0x0e3a => 'FluorMat2', #4 (Obsolete) 2229 0x0e3b => 'FluorMat3', #4 (Obsolete) 2230 0x0e3c => 'FluorMat4', #4 (Obsolete) 2231 0x0e3d => 'FluorMat5', #4 (Obsolete) 2232 0x0e3e => 'FluorMat6', #4 (Obsolete) 2233 0x0e3f => 'FluorMat7', #4 (Obsolete) 2234 0x0e40 => 'FluorMat8', #4 (Obsolete) 2235 0x0e41 => 'FluorMat9', #4 (Obsolete) 2236 0x0e42 => 'FlashMat0', #4 (Obsolete) 2237 0x0e43 => 'FlashMat1', #4 (Obsolete) 2238 0x0e44 => 'FlashMat2', #4 (Obsolete) 2239 0x0e45 => 'FlashMat3', #4 (Obsolete) 2240 0x0e46 => 'FlashMat4', #4 (Obsolete) 2241 0x0e47 => 'FlashMat5', #4 (Obsolete) 2242 0x0e48 => 'FlashMat6', #4 (Obsolete) 2243 0x0e49 => 'FlashMat7', #4 (Obsolete) 2244 0x0e4a => 'FlashMat8', #4 (Obsolete) 2245 0x0e4b => 'FlashMat9', #4 (Obsolete) 2246 0x0e4c => { #IB 2247 Name => 'KodakLook', # ("LookNameTable", ref 4) 2248 Format => 'undef', 2249 Writable => 'string', 2250 ValueConv => '$val=~tr/\0/\n/; $val', 2251 ValueConvInv => '$val=~tr/\n/\0/; $val', 2252 }, 2253 0x0e4d => { Name => 'IPFCameraModel', Writable => 'string' }, #4 2254 0x0e4e => { Name => 'AH2GreenInterpolationThreshold', Writable => 'int16u' }, #4 2255 0x0e4f => { Name => 'ResamplingKernelDenominators067', Writable => 'int16u', Count => 3 }, #4 (table of sharpening denoms; 0=Low, 1=Medium, 2=High) 2256 0x0e50 => { Name => 'ResamplingKernelDenominators050', Writable => 'int16u', Count => 3 }, #4 (table of sharpening denoms; 0=Low, 1=Medium, 2=High) 2257 0x0e51 => { Name => 'ResamplingKernelDenominators100', Writable => 'int16u', Count => 3 }, #4 (table of sharpening denoms; 0=Low, 1=Medium, 2=High) 2258 0x0e56 => 'LookMat0', #4 (rational64s[9]) 2259 0x0e57 => 'LookMat1', #4 (rational64s[9]) 2260 0x0e58 => 'LookMat2', #4 (rational64s[9]) 2261 0x0e59 => 'LookMat3', #4 (rational64s[9]) 2262 0x0e5a => 'LookMat4', #4 (rational64s[9]) 2263 0x0e5b => 'LookMat5', #4 (rational64s[9]) 2264 0x0e5c => 'LookMat6', #4 (rational64s[9]) 2265 0x0e5d => 'LookMat7', #4 (rational64s[9]) 2266 0x0e5e => 'LookMat8', #4 (rational64s[9]) 2267 0x0e5f => 'LookMat9', #4 (rational64s[9]) 2268 0x0e60 => { #4 2269 Name => 'CFAInterpolationAlgorithm', 2270 Writable => 'int16u', 2271 PrintConv => { 0 => 'AH2', 1 => 'Karnak' }, 2272 }, 2273 0x0e61 => { #4 2274 Name => 'CFAInterpolationMetric', 2275 Writable => 'int16u', 2276 PrintConv => { 0 => 'Linear12', 1 => 'KLUT12' }, 2277 }, 2278 0x0e62 => { Name => 'CFAZipperFixThreshold', Writable => 'int16u' }, #4 2279 0x0e63 => { Name => 'NoiseReductionParametersKhufuRGB', Writable => 'int16u', Count => 9 }, #4 2280 0x0e64 => { Name => 'NoiseReductionParametersKhufu6MP', Writable => 'int16u', Count => 9 }, #4 2281 0x0e65 => { Name => 'NoiseReductionParametersKhufu3MP', Writable => 'int16u', Count => 9 }, #4 2282 0x0e6a => { Name => 'ChromaNoiseHighFThresh', Writable => 'int32u', Count => 2 }, #4 2283 0x0e6b => { Name => 'ChromaNoiseLowFThresh', Writable => 'int32u', Count => 2 }, #4 2284 0x0e6c => { Name => 'ChromaNoiseEdgeMapThresh', Writable => 'int32u' }, #4 2285 0x0e6d => { Name => 'ChromaNoiseColorSpace', Writable => 'int32u' }, #4 2286 0x0e6e => { Name => 'EnableChromaNoiseReduction', Writable => 'int16u' }, #4 2287 # 9 values for noise reduction parameters: 2288 # 0 - NRLowType 2289 # 1 - NRLowRadius 2290 # 2 - NRLowStrength 2291 # 3 - NRMediumType 2292 # 4 - NRMediumRadius 2293 # 5 - NRMediumStrength 2294 # 6 - NRHighType 2295 # 7 - NRHighRadius 2296 # 8 - NRHighStrength 2297 # NRType values: 2298 # 0 = None 2299 # 1 = SigmaChroma 2300 # 2 = SigmaOnly 2301 # 3 = SigmaMoire 2302 # 4 = SigmaChromaWithRadius 2303 # 5 = SigmaMoireWithRadius 2304 # 6 = SigmaExpert (aka Khufu) 2305 # 7 = SigmaWithRadius 2306 0x0e6f => { Name => 'NoiseReductionParametersHostRGB', Writable => 'int16u', Count => 9 }, #4 2307 0x0e70 => { Name => 'NoiseReductionParametersHost6MP', Writable => 'int16u', Count => 9 }, #4 2308 0x0e71 => { Name => 'NoiseReductionParametersHost3MP', Writable => 'int16u', Count => 9 }, #4 2309 0x0e72 => { Name => 'NoiseReductionParametersCamera', Writable => 'int16u', Count => 6 }, #4 2310 0x0e73 => { #4 2311 Name => 'NoiseReductionParametersAtCapture', 2312 Writable => 'int16u', 2313 Count => 6, 2314 # 6 values: 2315 # 0 - Algorithm type 2316 # 1 - Radius 2317 # 2 - Strength 2318 # 3 - Khufu Luma 2319 # 4 - Reserved 1 2320 # 5 - Reserved 2 2321 }, 2322 0x0e74 => { Name => 'LCDMatrix', Writable => 'rational64s', Count => 9 }, #4 2323 0x0e75 => { Name => 'LCDMatrixChickFix', Writable => 'rational64s', Count => 9 }, #4 2324 0x0e76 => { Name => 'LCDMatrixMarvin', Writable => 'rational64s', Count => 9 }, #4 2325 0x0e7c => { Name => 'LCDGammaTableChickFix',Binary => 1 }, #4 (int16u[4096]) 2326 0x0e7d => { Name => 'LCDGammaTableMarvin', Binary => 1 }, #4 (int16u[4096]) 2327 0x0e7e => { Name => 'LCDGammaTable', Binary => 1 }, #4 (int16u[4096]) 2328 0x0e7f => 'LCDSharpeningF1', #4 (int16s[4]) 2329 0x0e80 => 'LCDSharpeningF2', #4 2330 0x0e81 => 'LCDSharpeningF3', #4 2331 0x0e82 => 'LCDSharpeningF4', #4 2332 0x0e83 => 'LCDEdgeMapX1', #4 2333 0x0e84 => 'LCDEdgeMapX2', #4 2334 0x0e85 => 'LCDEdgeMapX3', #4 2335 0x0e86 => 'LCDEdgeMapX4', #4 2336 0x0e87 => 'LCDEdgeMapSlope', #4 2337 0x0e88 => 'YCrCbMatrix', #4 2338 0x0e89 => 'LCDEdgeSpline', #4 (rational64s[9]) 2339 0x0e92 => { Name => 'Fac18Per', Writable => 'int16u' }, #4 2340 0x0e93 => { Name => 'Fac170Per', Writable => 'int16u' }, #4 2341 0x0e94 => { Name => 'Fac100Per', Writable => 'int16u' }, #4 2342 0x0e9b => 'ExtraTickLocations', #4 (int16u[7]) 2343 0x0e9c => { Name => 'RGBtoeV0', Binary => 1 }, #4 (int16s[256]) 2344 0x0e9d => { Name => 'RGBtoeV1', Binary => 1 }, #4 (int16s[256]) 2345 0x0e9e => { Name => 'RGBtoeV2', Binary => 1 }, #4 (int16s[256]) 2346 0x0e9f => { Name => 'RGBtoeV3', Binary => 1 }, #4 (int16s[256]) 2347 0x0ea0 => { Name => 'RGBtoeV4', Binary => 1 }, #4 (int16s[256]) 2348 0x0ea1 => { Name => 'RGBtoeV5', Binary => 1 }, #4 (int16s[256]) 2349 0x0ea2 => { Name => 'RGBtoeV6', Binary => 1 }, #4 (int16s[256]) 2350 0x0ea3 => { Name => 'RGBtoeV7', Binary => 1 }, #4 (int16s[256]) 2351 0x0ea4 => { Name => 'RGBtoeV8', Binary => 1 }, #4 (int16s[256]) 2352 0x0ea5 => { Name => 'RGBtoeV9', Binary => 1 }, #4 (int16s[256]) 2353 0x0ea6 => { Name => 'LCDHistLUT0', Binary => 1 }, #4 (rational64s[48]) 2354 0x0ea7 => { Name => 'LCDHistLUT1', Binary => 1 }, #4 (rational64s[57]) 2355 0x0ea8 => { Name => 'LCDHistLUT2', Binary => 1 }, #4 (rational64s[48]) 2356 0x0ea9 => { Name => 'LCDHistLUT3', Binary => 1 }, #4 (rational64s[57]) 2357 0x0eaa => { Name => 'LCDHistLUT4', Binary => 1 }, #4 (rational64s[48]) 2358 0x0eab => { Name => 'LCDHistLUT5', Binary => 1 }, #4 (rational64s[57]) 2359 0x0eac => { Name => 'LCDHistLUT6', Binary => 1 }, #4 (rational64s[48]) 2360 0x0ead => { Name => 'LCDHistLUT7', Binary => 1 }, #4 (rational64s[48]) 2361 0x0eae => { Name => 'LCDHistLUT8', Binary => 1 }, #4 2362 0x0eaf => { Name => 'LCDHistLUT9', Binary => 1 }, #4 2363 0x0eb0 => 'LCDLinearClipValue', #4 2364 0x0ece => 'LCDStepYvalues', #4 (int8u[10]) 2365 0x0ecf => 'LCDStepYvaluesChickFix', #4 (int8u[10]) 2366 0x0ed0 => 'LCDStepYvaluesMarvin', #4 (int8u[10]) 2367 0x0ed8 => { Name => 'InterpolationCoefficients', Binary => 1 }, #4 (int16s[69]) 2368 0x0ed9 => 'InterpolationCoefficients6MP', #4 2369 0x0eda => 'InterpolationCoefficients3MP', #4 2370 0x0f00 => { Name => 'NoiseReductionParametersHostNormal', Binary => 1 }, #4 (int16u[140]) 2371 0x0f01 => { Name => 'NoiseReductionParametersHostStrong', Binary => 1 }, #4 (int16u[140]) 2372 0x0f02 => { Name => 'NoiseReductionParametersHostLow', Binary => 1 }, #4 2373 0x0f0a => { Name => 'MariahTextureThreshold', Writable => 'int16u' }, #4 2374 0x0f0b => { Name => 'MariahMapLoThreshold', Writable => 'int16u' }, #4 2375 0x0f0c => { Name => 'MariahMapHiThreshold', Writable => 'int16u' }, #4 2376 0x0f0d => { Name => 'MariahChromaBlurSize', Writable => 'int16u' }, #4 2377 0x0f0e => { Name => 'MariahSigmaThreshold', Writable => 'int16u' }, #4 2378 0x0f0f => { Name => 'MariahThresholds', Binary => 1 }, #4 2379 0x0f10 => { Name => 'MariahThresholdsNormal', Binary => 1 }, #4 (int16u[140]) 2380 0x0f11 => { Name => 'MariahThresholdsStrong', Binary => 1 }, #4 (int16u[140]) 2381 0x0f12 => { Name => 'MariahThresholdsLow', Binary => 1 }, #4 2382 0x0f14 => 'KhufuLinearRedMixingCoefficient', #4 2383 0x0f15 => 'KhufuLinearGreenMixingCoefficient', #4 2384 0x0f16 => 'KhufuLinearBlueMixingCoefficient', #4 2385 0x0f17 => 'KhufuUSpaceC2MixingCoefficient', #4 2386 0x0f18 => 'KhufuSigmaGaussianWeights', #4 2387 0x0f19 => 'KhufuSigmaScalingFactors6MP', #4 (rational64u[6]) 2388 0x0f1a => 'KhufuSigmaScalingFactors3MP', #4 (rational64u[6]) 2389 0x0f1b => 'KhufuSigmaScalingFactors14MP', #4 2390 # 0x0f1e-0x0f27 - KhufuLinearRGBtoLogRGB(n), (for Khufu) ref 4 2391 # 0x0f28-0x0f31 - KhufuLogRGBtoLinearRGB(n), (for Khufu) ref 4 2392 0x0f32 => { Name => 'KhufuI0Thresholds', Binary => 1 }, #4 (int32s[348]) 2393 0x0f33 => { Name => 'KhufuI1Thresholds', Binary => 1 }, #4 (int32s[348]) 2394 0x0f34 => { Name => 'KhufuI2Thresholds', Binary => 1 }, #4 (int32s[348]) 2395 0x0f35 => { Name => 'KhufuI3Thresholds', Binary => 1 }, #4 (int32s[348]) 2396 0x0f36 => { Name => 'KhufuI4Thresholds', Binary => 1 }, #4 (int32s[348]) 2397 0x0f37 => { Name => 'KhufuI5Thresholds', Binary => 1 }, #4 (int32s[348]) 2398 0x0f3c => { Name => 'CondadoDayBVThresh', Writable => 'int16u' }, #4 2399 0x0f3d => { Name => 'CondadoNeuRange', Writable => 'int16u' }, #4 2400 0x0f3e => { Name => 'CondadoBVFactor', Writable => 'int16s' }, #4 2401 0x0f3f => { Name => 'CondadoIllFactor', Writable => 'int16s' }, #4 2402 0x0f40 => { Name => 'CondadoTunThresh', Writable => 'int16s' }, #4 2403 0x0f41 => { Name => 'CondadoFluThresh', Writable => 'int16s' }, #4 2404 0x0f42 => { Name => 'CondadoDayOffsets', Writable => 'int16s', Count => 2 }, #4 2405 0x0f43 => { Name => 'CondadoTunOffsets', Writable => 'int16s', Count => 2 }, #4 2406 0x0f44 => { Name => 'CondadoFluOffsets', Writable => 'int16s', Count => 2 }, #4 2407 0x0f5a => 'ERIMMToCRGB0Spline', #4 (rational64s[33]) 2408 0x0f5b => 'ERIMMToCRGB1Spline', #4 (rational64s[36]) 2409 0x0f5c => 'ERIMMToCRGB2Spline', #4 (rational64s[33]) 2410 0x0f5d => 'ERIMMToCRGB3Spline', #4 (rational64s[33]) 2411 0x0f5e => 'ERIMMToCRGB4Spline', #4 (rational64s[33]) 2412 0x0f5f => 'ERIMMToCRGB5Spline', #4 (rational64s[33]) 2413 0x0f60 => 'ERIMMToCRGB6Spline', #4 (rational64s[33]) 2414 0x0f61 => 'ERIMMToCRGB7Spline', #4 (rational64s[33]) 2415 0x0f62 => 'ERIMMToCRGB8Spline', #4 2416 0x0f63 => 'ERIMMToCRGB9Spline', #4 2417 0x0f64 => 'CRGBToERIMM0Spline', #4 (rational64s[27]) 2418 0x0f65 => 'CRGBToERIMM1Spline', #4 (rational64s[54]) 2419 0x0f66 => 'CRGBToERIMM2Spline', #4 (rational64s[27]) 2420 0x0f67 => 'CRGBToERIMM3Spline', #4 (rational64s[54]) 2421 0x0f68 => 'CRGBToERIMM4Spline', #4 (rational64s[27]) 2422 0x0f69 => 'CRGBToERIMM5Spline', #4 (rational64s[54]) 2423 0x0f6a => 'CRGBToERIMM6Spline', #4 (rational64s[27]) 2424 0x0f6b => 'CRGBToERIMM7Spline', #4 (rational64s[27]) 2425 0x0f6c => 'CRGBToERIMM8Spline', #4 2426 0x0f6d => 'CRGBToERIMM9Spline', #4 2427 0x0f6e => 'ERIMMNonLinearitySpline', #4 (rational64s[42]) 2428 0x0f6f => 'Delta12To8Spline', #4 (rational64s[12]) 2429 0x0f70 => 'Delta8To12Spline', #4 (rational64s[12]) 2430 0x0f71 => 'InverseMonitorMatrix', #4 (rational64s[9]) 2431 0x0f72 => { Name => 'NifNonlinearityExt', Binary => 1 }, #4 (int16s[8000]) 2432 0x0f73 => { Name => 'InvNifNonLinearity', Binary => 1 }, #4 (int16u[256]) 2433 0x0f74 => 'RIMM13ToERIMM12Spline', #4 (rational64s[51]) 2434 0x0f78 => 'ToneScale0Spline', #4 (rational64s[57]) 2435 0x0f79 => 'ToneScale1Spline', #4 (rational64s[51]) 2436 0x0f7a => 'ToneScale2Spline', #4 (rational64s[57]) 2437 0x0f7b => 'ToneScale3Spline', #4 (rational64s[51]) 2438 0x0f7c => 'ToneScale4Spline', #4 (rational64s[57]) 2439 0x0f7d => 'ToneScale5Spline', #4 (rational64s[51]) 2440 0x0f7e => 'ToneScale6Spline', #4 (rational64s[57]) 2441 0x0f7f => 'ToneScale7Spline', #4 (rational64s[57]) 2442 0x0f80 => 'ToneScale8Spline', #4 2443 0x0f81 => 'ToneScale9Spline', #4 2444 0x0f82 => 'ERIMMToneScale0Spline', #4 (rational64s[60]) 2445 0x0f83 => 'ERIMMToneScale1Spline', #4 (rational64s[54]) 2446 0x0f84 => 'ERIMMToneScale2Spline', #4 (rational64s[60]) 2447 0x0f85 => 'ERIMMToneScale3Spline', #4 (rational64s[54]) 2448 0x0f86 => 'ERIMMToneScale4Spline', #4 (rational64s[60]) 2449 0x0f87 => 'ERIMMToneScale5Spline', #4 (rational64s[54]) 2450 0x0f88 => 'ERIMMToneScale6Spline', #4 (rational64s[60]) 2451 0x0f89 => 'ERIMMToneScale7Spline', #4 (rational64s[60]) 2452 0x0f8a => 'ERIMMToneScale8Spline', #4 2453 0x0f8b => 'ERIMMToneScale9Spline', #4 2454 0x0f8c => 'RIMMToCRGB0Spline', #4 (rational64s[66]) 2455 0x0f8d => 'RIMMToCRGB1Spline', #4 (rational64s[84]) 2456 0x0f8e => 'RIMMToCRGB2Spline', #4 (rational64s[66]) 2457 0x0f8f => 'RIMMToCRGB3Spline', #4 (rational64s[84]) 2458 0x0f90 => 'RIMMToCRGB4Spline', #4 (rational64s[66]) 2459 0x0f91 => 'RIMMToCRGB5Spline', #4 (rational64s[84]) 2460 0x0f92 => 'RIMMToCRGB6Spline', #4 (rational64s[66]) 2461 0x0f93 => 'RIMMToCRGB7Spline', #4 (rational64s[66]) 2462 0x0f94 => 'RIMMToCRGB8Spline', #4 2463 0x0f95 => 'RIMMToCRGB9Spline', #4 2464 0x0fa0 => 'QTableLarge25Pct', #4 2465 0x0fa1 => 'QTableMedium25Pct', #4 2466 0x0fa2 => 'QTableSmall25Pct', #4 2467 0x1130 => 'NoiseReductionKernel', #4 (Noise filter kernel. No longer needed) 2468 0x1388 => 'UserMetaData', #4 (undef[0]) 2469 0x1389 => { Name => 'InputProfile', Writable => 'undef', Binary => 1 }, #IB ("SourceProfile", ref 4) 2470 0x138a => { Name => 'KodakLookProfile', Writable => 'undef', Binary => 1 }, #IB ("LookProfile", ref 4) 2471 0x138b => { Name => 'OutputProfile', Writable => 'undef', Binary => 1 }, #IB ("DestinationProfile", ref 4) 2472 0x1390 => { Name => 'SourceProfilePrefix', Writable => 'string' }, #4 (eg. 'DCSProSLRn') 2473 0x1391 => { Name => 'ToneCurveProfileName', Writable => 'string' }, #4 2474 0x1392 => { Name => 'InputProfile', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' } }, #4 2475 0x1393 => { Name => 'ProcessParametersV2', Binary => 1 }, #4 (Used by the SDK, Firmware should not use!) 2476 0x1394 => 'ReservedBlob2', #4 2477 0x1395 => 'ReservedBlob3', #4 2478 0x1396 => 'ReservedBlob4', #4 2479 0x1397 => 'ReservedBlob5', #4 2480 0x1398 => 'ReservedBlob6', #4 2481 0x1399 => 'ReservedBlob7', #4 2482 0x139a => 'ReservedBlob8', #4 2483 0x139b => 'ReservedBlob9', #4 2484 0x1770 => { Name => 'ScriptVersion', Writable => 'int32u' }, #4 2485 0x177a => 'ImagerTimingData', #4 2486 0x1784 => { Name => 'ISO', Writable => 'int32u' }, #3 ("NsecPerIcCode", ref 4) 2487 0x17a2 => 'Scav11Cols', #4 2488 0x17a3 => 'Scav12Cols', #4 2489 0x17a4 => 'Scav21Cols', #4 2490 0x17a5 => 'Scav22Cols', #4 2491 0x17a6 => 'ActiveCTEMonitor1Cols', #4 2492 0x17a7 => 'ActiveCTEMonitor2Cols', #4 2493 0x17a8 => 'ActiveCTEMonitorRows', #4 2494 0x17a9 => 'ActiveBuf1Cols', #4 2495 0x17aa => 'ActiveBuf2Cols', #4 2496 0x17ab => 'ActiveBuf1Rows', #4 2497 0x17ac => 'ActiveBuf2Rows', #4 2498 0x17c0 => 'HRNoiseLines', #4 2499 0x17c1 => 'RNoiseLines', #4 2500 0x17c2 => 'ANoiseLines', #4 2501 0x17d4 => { Name => 'ImagerCols', Writable => 'int16u' }, #4 2502 0x17de => { Name => 'ImagerRows', Writable => 'int16u' }, #4 2503 0x17e8 => { Name => 'PartialActiveCols1', Writable => 'int32u' }, #4 2504 0x17f2 => { Name => 'PartialActiveCols2', Writable => 'int32u' }, #4 2505 0x17fc => { Name => 'PartialActiveRows1', Writable => 'int32u' }, #4 2506 0x1806 => { Name => 'PartialActiveRows2', Writable => 'int32u' }, #4 2507 0x1810 => { Name => 'ElectricalBlackColumns',Writable=> 'int32u' }, #4 2508 0x181a => { Name => 'ResetBlackSegRows', Writable => 'int32u' }, #4 2509 0x1838 => { Name => 'CaptureWidthNormal', Writable => 'int32u' }, #4 2510 0x1839 => { Name => 'CaptureHeightNormal', Writable => 'int32u' }, #4 2511 0x183a => 'CaptureWidthResetBlackSegNormal', #4 2512 0x183b => 'CaptureHeightResetBlackSegNormal', #4 2513 0x183c => 'DarkRefOffsetNormal', #4 2514 0x1842 => { Name => 'CaptureWidthTest', Writable => 'int32u' }, #4 2515 0x1843 => 'CaptureHeightTest', #4 2516 0x1844 => 'CaptureWidthResetBlackSegTest', #4 2517 0x1845 => 'CaptureHeightResetBlackSegTest', #4 2518 0x1846 => 'DarkRefOffsetTest', #4 2519 0x184c => { Name => 'ImageSegmentStartLine',Writable => 'int32u' }, #4 2520 0x184d => { Name => 'ImageSegmentLines', Writable => 'int32u' }, #4 2521 0x184e => { Name => 'SkipLineTime', Writable => 'int32u' }, #4 2522 0x1860 => { Name => 'FastResetLineTime', Writable => 'int32u' }, #4 2523 0x186a => { Name => 'NormalLineTime', Writable => 'int32u' }, #4 2524 0x1874 => { Name => 'MinIntegrationRows', Writable => 'int32u' }, #4 2525 0x187e => { Name => 'PreReadFastResetCount',Writable => 'int32u' }, #4 2526 0x1888 => { Name => 'TransferTimeNormal', Writable => 'int32u' }, #4 2527 0x1889 => { Name => 'TransferTimeTest', Writable => 'int32u' }, #4 2528 0x188a => { Name => 'QuietTime', Writable => 'int32u' }, #4 2529 0x189c => { Name => 'OverClockCols', Writable => 'int16u' }, #4 2530 0x18a6 => { Name => 'H2ResetBlackPixels', Writable => 'int32u' }, #4 2531 0x18b0 => { Name => 'H3ResetBlackPixels', Writable => 'int32u' }, #4 2532 0x18ba => { Name => 'BlackAcquireRows', Writable => 'int32u' }, #4 2533 0x18c4 => { Name => 'OverClockRows', Writable => 'int16u' }, #4 2534 0x18ce => { Name => 'H3ResetBlackColumns', Writable => 'int32u' }, #4 2535 0x18d8 => { Name => 'DarkBlackSegRows', Writable => 'int32u' }, #4 2536 0x1900 => 'CrossbarEnable', #4 2537 0x1901 => { Name => 'FifoenOnePixelDelay', Writable => 'int32u' }, #4 2538 0x1902 => { Name => 'ReadoutTypeRequested', Writable => 'int32u' }, #4 2539 0x1903 => { Name => 'ReadoutTypeActual', Writable => 'int32u' }, #4 2540 0x190a => { Name => 'OffsetDacValue', Writable => 'int32u' }, #4 2541 0x1914 => { Name => 'TempAmpGainX100', Writable => 'int32u' }, #4 2542 0x191e => { Name => 'VarrayDacNominalValues',Writable=> 'int32u', Count => 3 }, #4 2543 0x1928 => 'VddimDacNominalValues', #4 2544 0x1964 => { Name => 'C14Configuration', Writable => 'int32u' }, #4 2545 0x196e => { Name => 'TDA1Offset', Writable => 'int32u', Count => 3 }, #4 2546 0x196f => { Name => 'TDA1Bandwidth', Writable => 'int32u' }, #4 2547 0x1970 => { Name => 'TDA1Gain', Writable => 'int32u', Count => 3 }, #4 2548 0x1971 => { Name => 'TDA1EdgePolarity', Writable => 'int32u' }, #4 2549 0x1978 => { Name => 'TDA2Offset', Writable => 'int32u', Count => 3 }, #4 2550 0x1979 => { Name => 'TDA2Bandwidth', Writable => 'int32u' }, #4 2551 0x197a => { Name => 'TDA2Gain', Writable => 'int32u', Count => 3 }, #4 2552 0x197b => { Name => 'TDA2EdgePolarity', Writable => 'int32u' }, #4 2553 0x1982 => { Name => 'TDA3Offset', Writable => 'int32u', Count => 3 }, #4 2554 0x1983 => { Name => 'TDA3Bandwidth', Writable => 'int32u' }, #4 2555 0x1984 => { Name => 'TDA3Gain', Writable => 'int32u', Count => 3 }, #4 2556 0x1985 => { Name => 'TDA3EdgePolarity', Writable => 'int32u' }, #4 2557 0x198c => { Name => 'TDA4Offset', Writable => 'int32u', Count => 3 }, #4 2558 0x198d => { Name => 'TDA4Bandwidth', Writable => 'int32u' }, #4 2559 0x198e => { Name => 'TDA4Gain', Writable => 'int32u', Count => 3 }, #4 2560 0x198f => { Name => 'TDA4EdgePolarity', Writable => 'int32u' }, #4 2561 0xfde8 => { Name => 'ComLenBlkSize', Writable => 'int16u' }, #4 1362 2562 ); 1363 2563 … … 1444 2644 Name => 'ExposureMode', 1445 2645 PrintConv => { 2646 OTHER => sub { shift }, # pass other values straight through 1446 2647 'M' => 'Manual', 1447 2648 'A' => 'Aperture Priority', #(NC -- I suppose this could be "Auto" too) … … 1450 2651 'B' => 'Bulb', #(NC) 1451 2652 # have seen "Manual (M)" written by DCS760C - PH 2653 # and "Aperture priority AE (Av)" written by a ProBack 645M 1452 2654 }, 1453 2655 }, … … 1464 2666 'ISO' => 'ISO', 1465 2667 'ISO Speed' => 'ISO', 2668 'Lens' => { Name => 'Lens', Priority => 0 }, 1466 2669 'Max Aperture' => { 1467 2670 Name => 'MaxAperture', … … 1508 2711 Name => 'CameraOwner', 1509 2712 Writable => 'undef', 1510 RawConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val )',2713 RawConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val,$tag)', 1511 2714 RawConvInv => 'Image::ExifTool::Exif::EncodeExifText($self,$val)', 1512 2715 }, … … 1515 2718 Writable => 'undef', 1516 2719 Groups => { 2 => 'Camera' }, 1517 RawConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val )', #PH2720 RawConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val,$tag)', #PH 1518 2721 RawConvInv => 'Image::ExifTool::Exif::EncodeExifText($self,$val)', 1519 2722 }, … … 1543 2746 0xc366 => 'EditTagArray', 1544 2747 0xc367 => 'Magnification', 2748 # 0xc36b - string[8]: "1.0" 1545 2749 0xc36c => 'NativeXResolution', 1546 2750 0xc36d => 'NativeYResolution', … … 1569 2773 0xc46c => 'PrintQuality', 1570 2774 0xc46e => 'ImagePrintStatus', 2775 # 0cx46f - int16u: 1 1571 2776 ); 1572 2777 … … 1578 2783 1 => { 1579 2784 Name => 'DigitalEffectsName', 1580 PrintConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val )',2785 PrintConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val,"DigitalEffectsName")', 1581 2786 }, 1582 2787 2 => 'DigitalEffectsType', … … 1590 2795 1 => { 1591 2796 Name => 'BorderName', 1592 PrintConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val )',2797 PrintConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val,"BorderName")', 1593 2798 }, 1594 2799 2 => 'BorderID', … … 1604 2809 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 1605 2810 FIRST_ENTRY => 0, 1606 NOTES => 'This information is found in Kodak MOV videos from models such as the P880.', 2811 NOTES => q{ 2812 This information is found in the TAGS atom of MOV videos from Kodak models 2813 such as the P880. 2814 }, 1607 2815 0 => { 1608 2816 Name => 'Make', … … 1640 2848 PrintConv => 'sprintf("%.1f mm",$val)', 1641 2849 }, 2850 ); 2851 2852 # Kodak DcMD atoms (ref PH) 2853 %Image::ExifTool::Kodak::DcMD = ( 2854 GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, 2855 NOTES => 'Metadata directory found in MOV and MP4 videos from some Kodak cameras.', 2856 Cmbo => { 2857 Name => 'CameraByteOrder', 2858 PrintConv => { 2859 II => 'Little-endian (Intel, II)', 2860 MM => 'Big-endian (Motorola, MM)', 2861 }, 2862 }, 2863 CMbo => { # (as written by Kodak Playsport video camera) 2864 Name => 'CameraByteOrder', 2865 PrintConv => { 2866 II => 'Little-endian (Intel, II)', 2867 MM => 'Big-endian (Motorola, MM)', 2868 }, 2869 }, 2870 DcME => { 2871 Name => 'DcME', 2872 SubDirectory => { 2873 TagTable => 'Image::ExifTool::Kodak::DcME', 2874 }, 2875 }, 2876 DcEM => { 2877 Name => 'DcEM', 2878 SubDirectory => { 2879 TagTable => 'Image::ExifTool::Kodak::DcEM', 2880 }, 2881 }, 2882 ); 2883 2884 # Kodak DcME atoms (ref PH) 2885 %Image::ExifTool::Kodak::DcME = ( 2886 GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, 2887 # Mtmd - 24 bytes: ("00 00 00 00 00 00 00 01" x 3) 2888 # Keyw - keywords? (six bytes all zero) 2889 # Rate - 2 bytes: 00 00 2890 ); 2891 2892 # Kodak DcEM atoms (ref PH) 2893 %Image::ExifTool::Kodak::DcEM = ( 2894 GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, 2895 # Mtmd - 24 bytes: ("00 00 00 00 00 00 00 01" x 3) 2896 # Csat - 16 bytes: 00 06 00 00 62 00 61 00 73 00 69 00 63 00 00 00 [....b.a.s.i.c...] 2897 # Ksre - 8 bytes: 00 01 00 00 00 00 2898 ); 2899 2900 # tags in "free" atom of Kodak M5370 MP4 videos (ref PH) 2901 %Image::ExifTool::Kodak::Free = ( 2902 GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, 2903 NOTES => q{ 2904 Information stored in the "free" atom of Kodak MP4 videos. (VERY bad form 2905 for Kodak to store useful information in an atom intended for unused space!) 2906 }, 2907 # (2012/01/19: Kodak files for bankruptcy -- this is poetic metadata justice) 2908 Seri => { 2909 Name => 'SerialNumber', 2910 # byte 0 is string length; byte 1 is zero; string starts at byte 2 2911 ValueConv => 'substr($val, 2, unpack("C",$val))', 2912 }, 2913 SVer => { 2914 Name => 'FirmwareVersion', 2915 ValueConv => 'substr($val, 2, unpack("C",$val))', 2916 }, 2917 # Clor - 2 bytes: 0 1 (?) 2918 # CapM - 2 bytes: 0 1 (capture mode? = exposure mode?) 2919 # WBMD - 2 bytes: 0 0 (white balance?) 2920 Expc => { # (NC) 2921 Name => 'ExposureCompensation', 2922 Format => 'int16s', 2923 ValueConv => '$val / 3', # (guess) 2924 PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', 2925 }, 2926 # Zone - 2 bytes: 0 2 (time zone? focus zone?) 2927 # FoMD - 2 bytes: 0 0 (focus mode?) 2928 # Shap - 2 bytes: 0 2 (sharpness?) 2929 Expo => { 2930 Name => 'ExposureTime', 2931 Format => 'rational32u', 2932 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', 2933 }, 2934 FNum => { 2935 Name => 'FNumber', 2936 Format => 'int16u', 2937 ValueConv => '$val / 100', 2938 PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', 2939 }, 2940 ISOS => { Name => 'ISO', Format => 'int16u' }, 2941 StSV => { 2942 Name => 'ShutterSpeedValue', 2943 Format => 'int16s', 2944 ValueConv => 'abs($val)<100 ? 2**(-$val/3) : 0', 2945 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', 2946 }, 2947 AprV => { 2948 Name => 'ApertureValue', 2949 Format => 'int16s', 2950 ValueConv => '2 ** ($val / 2000)', 2951 PrintConv => 'sprintf("%.1f",$val)', 2952 }, 2953 BrtV => { # (NC) 2954 Name => 'BrightnessValue', 2955 Format => 'int32s', 2956 ValueConv => '$val / 1000', # (guess) 2957 }, 2958 FoLn => { 2959 Name => 'FocalLength', 2960 Groups => { 2 => 'Camera' }, 2961 Format => 'int16u', 2962 PrintConv => 'sprintf("%.1f mm",$val)', 2963 }, 2964 FL35 => { 2965 Name => 'FocalLengthIn35mmFormat', 2966 Groups => { 2 => 'Camera' }, 2967 Format => 'int16u', 2968 PrintConv => '"$val mm"', 2969 }, 2970 Scrn => { 2971 Name => 'PreviewInfo', 2972 SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Scrn' }, 2973 }, 2974 ); 2975 2976 # tags in "frea" atom of Kodak PixPro SP360 MP4 videos (ref PH) 2977 %Image::ExifTool::Kodak::frea = ( 2978 GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 2979 NOTES => 'Information stored in the "frea" atom of Kodak PixPro SP360 MP4 videos.', 2980 tima => { 2981 Name => 'Duration', 2982 Format => 'int32u', 2983 Priority => 0, # (only integer seconds) 2984 PrintConv => 'ConvertDuration($val)', 2985 }, 2986 'ver '=> { Name => 'KodakVersion' }, 2987 thma => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Binary => 1 }, 2988 scra => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Binary => 1 }, 2989 ); 2990 2991 # preview information in free/Scrn atom of MP4 videos (ref PH) 2992 %Image::ExifTool::Kodak::Scrn = ( 2993 GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 2994 PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, 2995 FORMAT => 'int16u', 2996 0 => 'PreviewImageWidth', 2997 1 => 'PreviewImageHeight', 2998 2 => { Name => 'PreviewImageLength', Format => 'int32u' }, 2999 4 => { 3000 Name => 'PreviewImage', 3001 Groups => { 2 => 'Preview' }, 3002 Format => 'undef[$val{2}]', 3003 RawConv => '$self->ValidateImage(\$val, $tag)', 3004 }, 3005 ); 3006 3007 # acceleration information extracted from 'pose' atom of MP4 videos (ref PH, PixPro 4KVR360) 3008 %Image::ExifTool::Kodak::pose = ( 3009 GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, 3010 PROCESS_PROC => \&ProcessPose, 3011 NOTES => q{ 3012 Streamed orientation information from the PixPro 4KVR360, extracted as 3013 sub-documents when the L<Duplicates|../ExifTool.html#Duplicates> option is used. 3014 }, 3015 Accelerometer => { }, # up, back, left? units of g 3016 AngularVelocity => { } # left, up, ccw? units? 1642 3017 ); 1643 3018 … … 1693 3068 # add our composite tags 1694 3069 Image::ExifTool::AddCompositeTags('Image::ExifTool::Kodak'); 3070 3071 #------------------------------------------------------------------------------ 3072 # Process Kodak accelerometer data (ref PH) 3073 # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref 3074 # Returns: 1 on success 3075 sub ProcessPose($$$) 3076 { 3077 my ($et, $dirInfo, $tagTablePtr) = @_; 3078 my $dataPt = $$dirInfo{DataPt}; 3079 my $dirLen = length $$dataPt; 3080 my $ee = $et->Options('ExtractEmbedded'); 3081 my ($i, $pos); 3082 3083 return 0 if $dirLen < 0x14; 3084 my $num = Get32u($dataPt, 0x10); 3085 return 0 if $dirLen < 0x14 + $num * 24; 3086 3087 $et->VerboseDir('Kodak pose', undef, $dirLen); 3088 3089 $$et{DOC_NUM} = 0; 3090 for ($i=0, $pos=0x14; $i<$num; ++$i, $pos+=24) { 3091 $et->HandleTag($tagTablePtr, AngularVelocity => 3092 Image::ExifTool::GetRational64s($dataPt, $pos) . ' ' . 3093 Image::ExifTool::GetRational64s($dataPt, $pos + 8) . ' ' . 3094 Image::ExifTool::GetRational64s($dataPt, $pos + 16)); 3095 $ee or $pos += $num * 24, last; 3096 ++$$et{DOC_NUM}; 3097 } 3098 $$et{DOC_NUM} = 0; 3099 3100 return 1 if $dirLen < $pos + 0x10; 3101 $num = Get32u($dataPt, $pos + 0x0c); 3102 return 1 if $dirLen < $pos + 0x10 + $num * 24; 3103 3104 for ($i=0, $pos+=0x10; $i<$num; ++$i, $pos+=24) { 3105 $et->HandleTag($tagTablePtr, Accelerometer => 3106 Image::ExifTool::GetRational64s($dataPt, $pos) . ' ' . 3107 Image::ExifTool::GetRational64s($dataPt, $pos + 8) . ' ' . 3108 Image::ExifTool::GetRational64s($dataPt, $pos + 16)); 3109 $ee or $pos += $num * 24, last; 3110 ++$$et{DOC_NUM}; 3111 } 3112 $$et{DOC_NUM} = 0; 3113 $ee or $et->Warn('Use the ExtractEmbedded option to extract all accelerometer data',3); 3114 return 1; 3115 } 1695 3116 1696 3117 #------------------------------------------------------------------------------ … … 1724 3145 sub ProcessKodakText($$$) 1725 3146 { 1726 my ($e xifTool, $dirInfo, $tagTablePtr) = @_;3147 my ($et, $dirInfo, $tagTablePtr) = @_; 1727 3148 my $dataPt = $$dirInfo{DataPt}; 1728 3149 my $dirStart = $$dirInfo{DirStart} || 0; … … 1732 3153 my @lines = split /[\n\r]+/, $data; 1733 3154 my ($line, $success, @other, $tagInfo); 1734 $e xifTool->VerboseDir('Kodak Text');3155 $et->VerboseDir('Kodak Text'); 1735 3156 foreach $line (@lines) { 1736 3157 if ($line =~ /(.*?):\s*(.*)/) { 1737 3158 my ($tag, $val) = ($1, $2); 1738 3159 if ($$tagTablePtr{$tag}) { 1739 $tagInfo = $e xifTool->GetTagInfo($tagTablePtr, $tag);3160 $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); 1740 3161 } else { 1741 3162 my $tagName = $tag; … … 1746 3167 $tagName = 'NoName' unless $tagName; 1747 3168 $tagInfo = { Name => $tagName }; 1748 Image::ExifTool::AddTagToTable($tagTablePtr, $tag, $tagInfo);3169 AddTagToTable($tagTablePtr, $tag, $tagInfo); 1749 3170 } 1750 $e xifTool->HandleTag($tagTablePtr, $tag, $val, TagInfo => $tagInfo);3171 $et->HandleTag($tagTablePtr, $tag, $val, TagInfo => $tagInfo); 1751 3172 $success = 1; 1752 3173 } else { … … 1757 3178 if ($success) { 1758 3179 if (@other) { 1759 $tagInfo = $e xifTool->GetTagInfo($tagTablePtr, '_other_info');1760 $e xifTool->FoundTag($tagInfo, \@other);3180 $tagInfo = $et->GetTagInfo($tagTablePtr, '_other_info'); 3181 $et->FoundTag($tagInfo, \@other); 1761 3182 } 1762 3183 } else { 1763 $e xifTool->Warn("Can't parse Kodak TextualInfo data", 1);3184 $et->Warn("Can't parse Kodak TextualInfo data", 1); 1764 3185 } 1765 3186 return $success; … … 1772 3193 sub ProcessKodakIFD($$$) 1773 3194 { 1774 my ($e xifTool, $dirInfo, $tagTablePtr) = @_;3195 my ($et, $dirInfo, $tagTablePtr) = @_; 1775 3196 my $dirStart = $$dirInfo{DirStart} || 0; 1776 3197 return 1 if $dirStart <= 0 or $dirStart + 2 > $$dirInfo{DataLen}; 1777 3198 my $byteOrder = substr(${$$dirInfo{DataPt}}, $dirStart, 2); 1778 3199 unless (Image::ExifTool::SetByteOrder($byteOrder)) { 1779 $e xifTool->Warn("Invalid Kodak $$dirInfo{Name} directory");3200 $et->Warn("Invalid Kodak $$dirInfo{Name} directory"); 1780 3201 return 1; 1781 3202 } 1782 3203 $$dirInfo{DirStart} += 2; # skip byte order mark 1783 3204 $$dirInfo{DirLen} -= 2; 1784 if ($ exifTool->{HTML_DUMP}) {3205 if ($$et{HTML_DUMP}) { 1785 3206 my $base = $$dirInfo{Base} + $$dirInfo{DataPos}; 1786 $e xifTool->HDump($dirStart+$base, 2, "Byte Order Mark");3207 $et->HDump($dirStart+$base, 2, "Byte Order Mark"); 1787 3208 } 1788 return Image::ExifTool::Exif::ProcessExif($e xifTool, $dirInfo, $tagTablePtr);3209 return Image::ExifTool::Exif::ProcessExif($et, $dirInfo, $tagTablePtr); 1789 3210 } 1790 3211 … … 1795 3216 sub WriteKodakIFD($$$) 1796 3217 { 1797 my ($e xifTool, $dirInfo, $tagTablePtr) = @_;3218 my ($et, $dirInfo, $tagTablePtr) = @_; 1798 3219 my $dirStart = $$dirInfo{DirStart} || 0; 1799 3220 return '' if $dirStart <= 0 or $dirStart + 2 > $$dirInfo{DataLen}; … … 1802 3223 $$dirInfo{DirStart} += 2; # skip byte order mark 1803 3224 $$dirInfo{DirLen} -= 2; 1804 my $buff = Image::ExifTool::Exif::WriteExif($e xifTool, $dirInfo, $tagTablePtr);3225 my $buff = Image::ExifTool::Exif::WriteExif($et, $dirInfo, $tagTablePtr); 1805 3226 return $buff unless defined $buff and length $buff; 1806 3227 # apply one-time fixup for length of byte order mark … … 1832 3253 =head1 AUTHOR 1833 3254 1834 Copyright 2003-20 11, Phil Harvey (phil at owl.phy.queensu.ca)3255 Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com) 1835 3256 1836 3257 This library is free software; you can redistribute it and/or modify it
Note:
See TracChangeset
for help on using the changeset viewer.