dng_orientation.cpp revision 8e8939fc10ad63576a2785ba1333a23726b7e164
18e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 28e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// Copyright 2006 Adobe Systems Incorporated 38e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// All Rights Reserved. 48e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// 58e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// NOTICE: Adobe permits you to use, modify, and distribute this file in 68e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// accordance with the terms of the Adobe license agreement accompanying it. 78e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 88e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 98e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_orientation.cpp#1 $ */ 108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $DateTime: 2012/05/30 13:28:51 $ */ 118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Change: 832332 $ */ 128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Author: tknoll $ */ 138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_orientation.h" 158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 188e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienervoid dng_orientation::SetTIFF (uint32 tiff) 198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener switch (tiff) 228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case 1: 258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fAdobeOrientation = kNormal; 278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener break; 288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case 2: 318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fAdobeOrientation = kMirror; 338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener break; 348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case 3: 378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fAdobeOrientation = kRotate180; 398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener break; 408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case 4: 438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fAdobeOrientation = kMirror180; 458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener break; 468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case 5: 498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fAdobeOrientation = kMirror90CCW; 518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener break; 528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case 6: 558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fAdobeOrientation = kRotate90CW; 578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener break; 588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case 7: 618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fAdobeOrientation = kMirror90CW; 638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener break; 648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case 8: 678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fAdobeOrientation = kRotate90CCW; 698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener break; 708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case 9: 738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fAdobeOrientation = kUnknown; 758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener break; 768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener default: 798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener fAdobeOrientation = kNormal; 818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 898e8939fc10ad63576a2785ba1333a23726b7e164Florian Krieneruint32 dng_orientation::GetTIFF () const 908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener switch (fAdobeOrientation) 938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case kNormal: 968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return 1; 988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case kMirror: 1018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1028e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return 2; 1038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1058e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case kRotate180: 1068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return 3; 1088e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case kMirror180: 1118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return 4; 1138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case kMirror90CCW: 1168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return 5; 1188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case kRotate90CW: 1218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return 6; 1238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case kMirror90CW: 1268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return 7; 1288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case kRotate90CCW: 1318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return 8; 1338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener case kUnknown: 1368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return 9; 1388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener default: 1418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener break; 1428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return 1; 1468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 1508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1518e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerbool dng_orientation::FlipD () const 1528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return (fAdobeOrientation & 1) != 0; 1558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 1598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1608e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerbool dng_orientation::FlipH () const 1618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if (fAdobeOrientation & 4) 1648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return (fAdobeOrientation & 2) == 0; 1658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener else 1678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return (fAdobeOrientation & 2) != 0; 1688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 1728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1738e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerbool dng_orientation::FlipV () const 1748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if (fAdobeOrientation & 4) 1778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return FlipD () == FlipH (); 1788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener else 1808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return FlipD () != FlipH (); 1818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 1858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1868e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerdng_orientation dng_orientation::operator- () const 1878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 x = GetAdobe (); 1908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if ((x & 5) == 5) 1928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener x ^= 2; 1958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_orientation result; 1998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener result.SetAdobe (((4 - x) & 3) | (x & 4)); 2018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2028e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return result; 2038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 2058e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 2078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2088e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerdng_orientation dng_orientation::operator+ (const dng_orientation &b) const 2098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 2108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 x = GetAdobe (); 2128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener uint32 y = b.GetAdobe (); 2148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if (y & 4) 2168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 2178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener if (x & 1) 2198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener x ^= 6; 2208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener else 2218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener x ^= 4; 2228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 2248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_orientation result; 2268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener result.SetAdobe (((x + y) & 3) | (x & 4)); 2288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return result; 2308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 2328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 2338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 234