1*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/ 2*fd1fabb7SAndroid Build Coastguard Worker // Copyright 2006 Adobe Systems Incorporated 3*fd1fabb7SAndroid Build Coastguard Worker // All Rights Reserved. 4*fd1fabb7SAndroid Build Coastguard Worker // 5*fd1fabb7SAndroid Build Coastguard Worker // NOTICE: Adobe permits you to use, modify, and distribute this file in 6*fd1fabb7SAndroid Build Coastguard Worker // accordance with the terms of the Adobe license agreement accompanying it. 7*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/ 8*fd1fabb7SAndroid Build Coastguard Worker 9*fd1fabb7SAndroid Build Coastguard Worker /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_orientation.h#1 $ */ 10*fd1fabb7SAndroid Build Coastguard Worker /* $DateTime: 2012/05/30 13:28:51 $ */ 11*fd1fabb7SAndroid Build Coastguard Worker /* $Change: 832332 $ */ 12*fd1fabb7SAndroid Build Coastguard Worker /* $Author: tknoll $ */ 13*fd1fabb7SAndroid Build Coastguard Worker 14*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/ 15*fd1fabb7SAndroid Build Coastguard Worker 16*fd1fabb7SAndroid Build Coastguard Worker #ifndef __dng_orientation__ 17*fd1fabb7SAndroid Build Coastguard Worker #define __dng_orientation__ 18*fd1fabb7SAndroid Build Coastguard Worker 19*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/ 20*fd1fabb7SAndroid Build Coastguard Worker 21*fd1fabb7SAndroid Build Coastguard Worker #include "dng_types.h" 22*fd1fabb7SAndroid Build Coastguard Worker 23*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/ 24*fd1fabb7SAndroid Build Coastguard Worker 25*fd1fabb7SAndroid Build Coastguard Worker class dng_orientation 26*fd1fabb7SAndroid Build Coastguard Worker { 27*fd1fabb7SAndroid Build Coastguard Worker 28*fd1fabb7SAndroid Build Coastguard Worker private: 29*fd1fabb7SAndroid Build Coastguard Worker 30*fd1fabb7SAndroid Build Coastguard Worker // We internally use an orientation encoding ("Adobe") that is 31*fd1fabb7SAndroid Build Coastguard Worker // different than the TIFF orientation encoding ("TIFF"). 32*fd1fabb7SAndroid Build Coastguard Worker 33*fd1fabb7SAndroid Build Coastguard Worker uint32 fAdobeOrientation; 34*fd1fabb7SAndroid Build Coastguard Worker 35*fd1fabb7SAndroid Build Coastguard Worker public: 36*fd1fabb7SAndroid Build Coastguard Worker enum 37*fd1fabb7SAndroid Build Coastguard Worker { 38*fd1fabb7SAndroid Build Coastguard Worker kNormal = 0, 39*fd1fabb7SAndroid Build Coastguard Worker kRotate90CW = 1, 40*fd1fabb7SAndroid Build Coastguard Worker kRotate180 = 2, 41*fd1fabb7SAndroid Build Coastguard Worker kRotate90CCW = 3, 42*fd1fabb7SAndroid Build Coastguard Worker kMirror = 4, 43*fd1fabb7SAndroid Build Coastguard Worker kMirror90CW = 5, 44*fd1fabb7SAndroid Build Coastguard Worker kMirror180 = 6, 45*fd1fabb7SAndroid Build Coastguard Worker kMirror90CCW = 7, 46*fd1fabb7SAndroid Build Coastguard Worker kUnknown = 8 47*fd1fabb7SAndroid Build Coastguard Worker }; 48*fd1fabb7SAndroid Build Coastguard Worker 49*fd1fabb7SAndroid Build Coastguard Worker dng_orientation()50*fd1fabb7SAndroid Build Coastguard Worker dng_orientation () 51*fd1fabb7SAndroid Build Coastguard Worker 52*fd1fabb7SAndroid Build Coastguard Worker : fAdobeOrientation (kNormal) 53*fd1fabb7SAndroid Build Coastguard Worker 54*fd1fabb7SAndroid Build Coastguard Worker { 55*fd1fabb7SAndroid Build Coastguard Worker } 56*fd1fabb7SAndroid Build Coastguard Worker SetAdobe(uint32 adobe)57*fd1fabb7SAndroid Build Coastguard Worker void SetAdobe (uint32 adobe) 58*fd1fabb7SAndroid Build Coastguard Worker { 59*fd1fabb7SAndroid Build Coastguard Worker fAdobeOrientation = adobe; 60*fd1fabb7SAndroid Build Coastguard Worker } 61*fd1fabb7SAndroid Build Coastguard Worker GetAdobe()62*fd1fabb7SAndroid Build Coastguard Worker uint32 GetAdobe () const 63*fd1fabb7SAndroid Build Coastguard Worker { 64*fd1fabb7SAndroid Build Coastguard Worker return fAdobeOrientation; 65*fd1fabb7SAndroid Build Coastguard Worker } 66*fd1fabb7SAndroid Build Coastguard Worker 67*fd1fabb7SAndroid Build Coastguard Worker void SetTIFF (uint32 tiff); 68*fd1fabb7SAndroid Build Coastguard Worker 69*fd1fabb7SAndroid Build Coastguard Worker uint32 GetTIFF () const; 70*fd1fabb7SAndroid Build Coastguard Worker AdobeToDNG(uint32 adobe)71*fd1fabb7SAndroid Build Coastguard Worker static dng_orientation AdobeToDNG (uint32 adobe) 72*fd1fabb7SAndroid Build Coastguard Worker { 73*fd1fabb7SAndroid Build Coastguard Worker 74*fd1fabb7SAndroid Build Coastguard Worker dng_orientation result; 75*fd1fabb7SAndroid Build Coastguard Worker 76*fd1fabb7SAndroid Build Coastguard Worker result.SetAdobe (adobe); 77*fd1fabb7SAndroid Build Coastguard Worker 78*fd1fabb7SAndroid Build Coastguard Worker return result; 79*fd1fabb7SAndroid Build Coastguard Worker 80*fd1fabb7SAndroid Build Coastguard Worker } 81*fd1fabb7SAndroid Build Coastguard Worker TIFFtoDNG(uint32 tiff)82*fd1fabb7SAndroid Build Coastguard Worker static dng_orientation TIFFtoDNG (uint32 tiff) 83*fd1fabb7SAndroid Build Coastguard Worker { 84*fd1fabb7SAndroid Build Coastguard Worker 85*fd1fabb7SAndroid Build Coastguard Worker dng_orientation result; 86*fd1fabb7SAndroid Build Coastguard Worker 87*fd1fabb7SAndroid Build Coastguard Worker result.SetTIFF (tiff); 88*fd1fabb7SAndroid Build Coastguard Worker 89*fd1fabb7SAndroid Build Coastguard Worker return result; 90*fd1fabb7SAndroid Build Coastguard Worker 91*fd1fabb7SAndroid Build Coastguard Worker } 92*fd1fabb7SAndroid Build Coastguard Worker Normal()93*fd1fabb7SAndroid Build Coastguard Worker static dng_orientation Normal () 94*fd1fabb7SAndroid Build Coastguard Worker { 95*fd1fabb7SAndroid Build Coastguard Worker return AdobeToDNG (kNormal); 96*fd1fabb7SAndroid Build Coastguard Worker } 97*fd1fabb7SAndroid Build Coastguard Worker Rotate90CW()98*fd1fabb7SAndroid Build Coastguard Worker static dng_orientation Rotate90CW () 99*fd1fabb7SAndroid Build Coastguard Worker { 100*fd1fabb7SAndroid Build Coastguard Worker return AdobeToDNG (kRotate90CW); 101*fd1fabb7SAndroid Build Coastguard Worker } 102*fd1fabb7SAndroid Build Coastguard Worker Rotate180()103*fd1fabb7SAndroid Build Coastguard Worker static dng_orientation Rotate180 () 104*fd1fabb7SAndroid Build Coastguard Worker { 105*fd1fabb7SAndroid Build Coastguard Worker return AdobeToDNG (kRotate180); 106*fd1fabb7SAndroid Build Coastguard Worker } 107*fd1fabb7SAndroid Build Coastguard Worker Rotate90CCW()108*fd1fabb7SAndroid Build Coastguard Worker static dng_orientation Rotate90CCW () 109*fd1fabb7SAndroid Build Coastguard Worker { 110*fd1fabb7SAndroid Build Coastguard Worker return AdobeToDNG (kRotate90CCW); 111*fd1fabb7SAndroid Build Coastguard Worker } 112*fd1fabb7SAndroid Build Coastguard Worker Mirror()113*fd1fabb7SAndroid Build Coastguard Worker static dng_orientation Mirror () 114*fd1fabb7SAndroid Build Coastguard Worker { 115*fd1fabb7SAndroid Build Coastguard Worker return AdobeToDNG (kMirror); 116*fd1fabb7SAndroid Build Coastguard Worker } 117*fd1fabb7SAndroid Build Coastguard Worker Mirror90CW()118*fd1fabb7SAndroid Build Coastguard Worker static dng_orientation Mirror90CW () 119*fd1fabb7SAndroid Build Coastguard Worker { 120*fd1fabb7SAndroid Build Coastguard Worker return AdobeToDNG (kMirror90CW); 121*fd1fabb7SAndroid Build Coastguard Worker } 122*fd1fabb7SAndroid Build Coastguard Worker Mirror180()123*fd1fabb7SAndroid Build Coastguard Worker static dng_orientation Mirror180 () 124*fd1fabb7SAndroid Build Coastguard Worker { 125*fd1fabb7SAndroid Build Coastguard Worker return AdobeToDNG (kMirror180); 126*fd1fabb7SAndroid Build Coastguard Worker } 127*fd1fabb7SAndroid Build Coastguard Worker Mirror90CCW()128*fd1fabb7SAndroid Build Coastguard Worker static dng_orientation Mirror90CCW () 129*fd1fabb7SAndroid Build Coastguard Worker { 130*fd1fabb7SAndroid Build Coastguard Worker return AdobeToDNG (kMirror90CCW); 131*fd1fabb7SAndroid Build Coastguard Worker } 132*fd1fabb7SAndroid Build Coastguard Worker Unknown()133*fd1fabb7SAndroid Build Coastguard Worker static dng_orientation Unknown () 134*fd1fabb7SAndroid Build Coastguard Worker { 135*fd1fabb7SAndroid Build Coastguard Worker return AdobeToDNG (kUnknown); 136*fd1fabb7SAndroid Build Coastguard Worker } 137*fd1fabb7SAndroid Build Coastguard Worker IsValid()138*fd1fabb7SAndroid Build Coastguard Worker bool IsValid () const 139*fd1fabb7SAndroid Build Coastguard Worker { 140*fd1fabb7SAndroid Build Coastguard Worker return fAdobeOrientation < kUnknown; 141*fd1fabb7SAndroid Build Coastguard Worker } 142*fd1fabb7SAndroid Build Coastguard Worker NotValid()143*fd1fabb7SAndroid Build Coastguard Worker bool NotValid () const 144*fd1fabb7SAndroid Build Coastguard Worker { 145*fd1fabb7SAndroid Build Coastguard Worker return !IsValid (); 146*fd1fabb7SAndroid Build Coastguard Worker } 147*fd1fabb7SAndroid Build Coastguard Worker 148*fd1fabb7SAndroid Build Coastguard Worker bool FlipD () const; 149*fd1fabb7SAndroid Build Coastguard Worker 150*fd1fabb7SAndroid Build Coastguard Worker bool FlipH () const; 151*fd1fabb7SAndroid Build Coastguard Worker 152*fd1fabb7SAndroid Build Coastguard Worker bool FlipV () const; 153*fd1fabb7SAndroid Build Coastguard Worker 154*fd1fabb7SAndroid Build Coastguard Worker bool operator== (const dng_orientation &b) const 155*fd1fabb7SAndroid Build Coastguard Worker { 156*fd1fabb7SAndroid Build Coastguard Worker return fAdobeOrientation == b.fAdobeOrientation; 157*fd1fabb7SAndroid Build Coastguard Worker } 158*fd1fabb7SAndroid Build Coastguard Worker 159*fd1fabb7SAndroid Build Coastguard Worker bool operator!= (const dng_orientation &b) const 160*fd1fabb7SAndroid Build Coastguard Worker { 161*fd1fabb7SAndroid Build Coastguard Worker return !(*this == b); 162*fd1fabb7SAndroid Build Coastguard Worker } 163*fd1fabb7SAndroid Build Coastguard Worker 164*fd1fabb7SAndroid Build Coastguard Worker dng_orientation operator- () const; 165*fd1fabb7SAndroid Build Coastguard Worker 166*fd1fabb7SAndroid Build Coastguard Worker dng_orientation operator+ (const dng_orientation &b) const; 167*fd1fabb7SAndroid Build Coastguard Worker 168*fd1fabb7SAndroid Build Coastguard Worker dng_orientation operator- (const dng_orientation &b) const 169*fd1fabb7SAndroid Build Coastguard Worker { 170*fd1fabb7SAndroid Build Coastguard Worker return (*this) + (-b); 171*fd1fabb7SAndroid Build Coastguard Worker } 172*fd1fabb7SAndroid Build Coastguard Worker 173*fd1fabb7SAndroid Build Coastguard Worker void operator+= (const dng_orientation &b) 174*fd1fabb7SAndroid Build Coastguard Worker { 175*fd1fabb7SAndroid Build Coastguard Worker *this = *this + b; 176*fd1fabb7SAndroid Build Coastguard Worker } 177*fd1fabb7SAndroid Build Coastguard Worker 178*fd1fabb7SAndroid Build Coastguard Worker void operator-= (const dng_orientation &b) 179*fd1fabb7SAndroid Build Coastguard Worker { 180*fd1fabb7SAndroid Build Coastguard Worker *this = *this - b; 181*fd1fabb7SAndroid Build Coastguard Worker } 182*fd1fabb7SAndroid Build Coastguard Worker 183*fd1fabb7SAndroid Build Coastguard Worker }; 184*fd1fabb7SAndroid Build Coastguard Worker 185*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/ 186*fd1fabb7SAndroid Build Coastguard Worker 187*fd1fabb7SAndroid Build Coastguard Worker #endif 188*fd1fabb7SAndroid Build Coastguard Worker 189*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/ 190