Home | History | Annotate | Download | only in source
      1 /*****************************************************************************/
      2 // Copyright 2006 Adobe Systems Incorporated
      3 // All Rights Reserved.
      4 //
      5 // NOTICE:  Adobe permits you to use, modify, and distribute this file in
      6 // accordance with the terms of the Adobe license agreement accompanying it.
      7 /*****************************************************************************/
      8 
      9 /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_orientation.cpp#1 $ */
     10 /* $DateTime: 2012/05/30 13:28:51 $ */
     11 /* $Change: 832332 $ */
     12 /* $Author: tknoll $ */
     13 
     14 #include "dng_orientation.h"
     15 
     16 /*****************************************************************************/
     17 
     18 void dng_orientation::SetTIFF (uint32 tiff)
     19 	{
     20 
     21 	switch (tiff)
     22 		{
     23 
     24 		case 1:
     25 			{
     26 			fAdobeOrientation = kNormal;
     27 			break;
     28 			}
     29 
     30 		case 2:
     31 			{
     32 			fAdobeOrientation = kMirror;
     33 			break;
     34 			}
     35 
     36 		case 3:
     37 			{
     38 			fAdobeOrientation = kRotate180;
     39 			break;
     40 			}
     41 
     42 		case 4:
     43 			{
     44 			fAdobeOrientation = kMirror180;
     45 			break;
     46 			}
     47 
     48 		case 5:
     49 			{
     50 			fAdobeOrientation = kMirror90CCW;
     51 			break;
     52 			}
     53 
     54 		case 6:
     55 			{
     56 			fAdobeOrientation = kRotate90CW;
     57 			break;
     58 			}
     59 
     60 		case 7:
     61 			{
     62 			fAdobeOrientation = kMirror90CW;
     63 			break;
     64 			}
     65 
     66 		case 8:
     67 			{
     68 			fAdobeOrientation = kRotate90CCW;
     69 			break;
     70 			}
     71 
     72 		case 9:
     73 			{
     74 			fAdobeOrientation = kUnknown;
     75 			break;
     76 			}
     77 
     78 		default:
     79 			{
     80 			fAdobeOrientation = kNormal;
     81 			}
     82 
     83 		}
     84 
     85 	}
     86 
     87 /*****************************************************************************/
     88 
     89 uint32 dng_orientation::GetTIFF () const
     90 	{
     91 
     92 	switch (fAdobeOrientation)
     93 		{
     94 
     95 		case kNormal:
     96 			{
     97 			return 1;
     98 			}
     99 
    100 		case kMirror:
    101 			{
    102 			return 2;
    103 			}
    104 
    105 		case kRotate180:
    106 			{
    107 			return 3;
    108 			}
    109 
    110 		case kMirror180:
    111 			{
    112 			return 4;
    113 			}
    114 
    115 		case kMirror90CCW:
    116 			{
    117 			return 5;
    118 			}
    119 
    120 		case kRotate90CW:
    121 			{
    122 			return 6;
    123 			}
    124 
    125 		case kMirror90CW:
    126 			{
    127 			return 7;
    128 			}
    129 
    130 		case kRotate90CCW:
    131 			{
    132 			return 8;
    133 			}
    134 
    135 		case kUnknown:
    136 			{
    137 			return 9;
    138 			}
    139 
    140 		default:
    141 			break;
    142 
    143 		}
    144 
    145 	return 1;
    146 
    147 	}
    148 
    149 /*****************************************************************************/
    150 
    151 bool dng_orientation::FlipD () const
    152 	{
    153 
    154 	return (fAdobeOrientation & 1) != 0;
    155 
    156 	}
    157 
    158 /*****************************************************************************/
    159 
    160 bool dng_orientation::FlipH () const
    161 	{
    162 
    163 	if (fAdobeOrientation & 4)
    164 		return (fAdobeOrientation & 2) == 0;
    165 
    166 	else
    167 		return (fAdobeOrientation & 2) != 0;
    168 
    169 	}
    170 
    171 /*****************************************************************************/
    172 
    173 bool dng_orientation::FlipV () const
    174 	{
    175 
    176 	if (fAdobeOrientation & 4)
    177 		return FlipD () == FlipH ();
    178 
    179 	else
    180 		return FlipD () != FlipH ();
    181 
    182 	}
    183 
    184 /*****************************************************************************/
    185 
    186 dng_orientation dng_orientation::operator- () const
    187 	{
    188 
    189 	uint32 x = GetAdobe ();
    190 
    191 	if ((x & 5) == 5)
    192 		{
    193 
    194 		x ^= 2;
    195 
    196 		}
    197 
    198 	dng_orientation result;
    199 
    200 	result.SetAdobe (((4 - x) & 3) | (x & 4));
    201 
    202 	return result;
    203 
    204 	}
    205 
    206 /*****************************************************************************/
    207 
    208 dng_orientation dng_orientation::operator+ (const dng_orientation &b) const
    209 	{
    210 
    211 	uint32 x = GetAdobe ();
    212 
    213 	uint32 y = b.GetAdobe ();
    214 
    215 	if (y & 4)
    216 		{
    217 
    218 		if (x & 1)
    219 			x ^= 6;
    220 		else
    221 			x ^= 4;
    222 
    223 		}
    224 
    225 	dng_orientation result;
    226 
    227 	result.SetAdobe (((x + y) & 3) | (x & 4));
    228 
    229 	return result;
    230 
    231 	}
    232 
    233 /*****************************************************************************/
    234