williamr@4: // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@4: // All rights reserved. williamr@4: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@4: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: // williamr@4: // Initial Contributors: williamr@4: // Nokia Corporation - initial contribution. williamr@4: // williamr@4: // Contributors: williamr@4: // williamr@4: // Description: williamr@4: // williamr@4: williamr@4: /** williamr@4: @file williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: williamr@4: #ifndef PANORAMA_H williamr@4: #define PANORAMA_H williamr@4: williamr@4: #include williamr@4: williamr@4: const TInt KPanoramaDefaultOverlap = 63; //Default overlap value in percent. williamr@4: const TInt KPanoramaDefaultDirectionTrigger = 10; //Default direction value in percent. williamr@4: const TInt KPanLensIndex = 2; //Focal length and principal point index value williamr@4: const TInt KPanLensDist = 5; //Distortion index value williamr@4: williamr@4: //fwd ref williamr@4: class CImagePanoramaImpl; williamr@4: class CVFTrackerImpl; williamr@4: class CPanoramaTransformImpl; williamr@4: class CImageFrame; williamr@4: williamr@4: /** williamr@4: Defines the direction williamr@4: */ williamr@4: enum TDirection williamr@4: { williamr@4: EPanoramaDirectionUnknown = 0, williamr@4: EPanoramaDirectionRight, williamr@4: EPanoramaDirectionLeft, williamr@4: EPanoramaDirectionUp, williamr@4: EPanoramaDirectionDown williamr@4: }; williamr@4: williamr@4: /** williamr@4: This class provides the lens parameters that describe the internal camera characteristics. williamr@4: */ williamr@4: class TPanoramaLens williamr@4: { williamr@4: public: williamr@4: IMPORT_C TPanoramaLens(); williamr@4: IMPORT_C TPanoramaLens(TReal32* aFocalLength, TReal32* aPrincipalPoint, TReal32 aSkew, TReal32* aDist, TUint32 aWidth, TUint32 aHeight); williamr@4: williamr@4: public: williamr@4: TReal32 iFocalLength[KPanLensIndex]; //Focal length coordinates williamr@4: TReal32 iPrincipalPoint[KPanLensIndex]; //Principal point coordinates williamr@4: TReal32 iSkew; //Skew coefficient. @remark 0.0f means no skew williamr@4: TReal32 iDist[KPanLensDist];// Distortion coefficients. If there are fewer parameter values available, fill the last values with zeros williamr@4: TUint32 iWidth; // Image width when the camera was calibrated williamr@4: TUint32 iHeight; // Image height when the camera was calibrated williamr@4: williamr@4: private: williamr@4: // Future proof williamr@4: TAny* iPad1; williamr@4: TAny* iPad2; williamr@4: TAny* iPad3; williamr@4: TAny* iPad4; williamr@4: }; williamr@4: williamr@4: /** williamr@4: This class provides help functions for handling the result of the viewfinder tracking. williamr@4: It contains getters and setters. williamr@4: */ williamr@4: class CPanoramaTransform : public CBase williamr@4: { williamr@4: public: williamr@4: IMPORT_C static CPanoramaTransform* NewL(); williamr@4: williamr@4: IMPORT_C void GetTranslation(TPoint& aDxDy, TSize& aDims) const; williamr@4: IMPORT_C void SetTranslationL(const TPoint& aDxDy, const TSize& aDims); williamr@4: IMPORT_C void GetDirection(TDirection& aDirection); williamr@4: IMPORT_C void GetDirection(TDirection& aDirection, TInt& aMinimumDelta); williamr@4: IMPORT_C void SetDirection(TDirection& aDirection); williamr@4: IMPORT_C void SetDirection(TDirection& aDirection, TInt aMinDelta); williamr@4: williamr@4: IMPORT_C ~CPanoramaTransform(); williamr@4: williamr@4: private: williamr@4: CPanoramaTransform(); williamr@4: void ConstructL(); williamr@4: williamr@4: private: williamr@4: CPanoramaTransformImpl* iPanTransImpl; williamr@4: }; williamr@4: williamr@4: /** williamr@4: This class provides functions to register the image that has got from viewfinder williamr@4: and checks the appropriate time to capture that image. williamr@4: */ williamr@4: class CVFTracker : public CBase williamr@4: { williamr@4: public: williamr@4: IMPORT_C static CVFTracker* NewL(); williamr@4: williamr@4: IMPORT_C void RegisterImageL(const CFbsBitmap& aBitmap, CPanoramaTransform& aPanTrans); williamr@4: IMPORT_C void RegisterImageL(const CImageFrame& aImageFrame, CPanoramaTransform& aPanTrans); williamr@4: IMPORT_C TBool IsTimeToCapture(TDirection& aDirection) const; williamr@4: IMPORT_C TBool IsTimeToCapture(TDirection& aDirection, TInt aOverlap) const; williamr@4: IMPORT_C void Reset(); williamr@4: IMPORT_C void InitializeL(const TSize& aSize); williamr@4: williamr@4: IMPORT_C TAny* Extension(TUid aExtension); williamr@4: williamr@4: IMPORT_C ~CVFTracker(); williamr@4: williamr@4: private: williamr@4: CVFTracker(); williamr@4: void ConstructL(); williamr@4: williamr@4: private: williamr@4: CVFTrackerImpl* iVFTrackImpl; williamr@4: }; williamr@4: williamr@4: /** williamr@4: This class provides functions to get basic stitching. Input can be a file, williamr@4: descriptor, bitmap, imageframe. williamr@4: */ williamr@4: class CImagePanorama : public CBase williamr@4: { williamr@4: public: williamr@4: IMPORT_C static CImagePanorama* NewL(); williamr@4: williamr@4: IMPORT_C void AddFileL(const TDesC& aFilename, CPanoramaTransform& aPanTrans); williamr@4: IMPORT_C void AddBufferL(const TDesC8& aData, CPanoramaTransform& aPanTrans); williamr@4: IMPORT_C void AddImageL(const CFbsBitmap& aBitmap, CPanoramaTransform& aPanTrans); williamr@4: IMPORT_C void AddImageL(const CImageFrame& aImageFrame, CPanoramaTransform& aPanTrans); williamr@4: williamr@4: IMPORT_C void CurrentImageSizeL(TSize& aSize); williamr@4: williamr@4: IMPORT_C void RenderL(const TDesC& aFilename); williamr@4: IMPORT_C void RenderL(const TDesC& aFilename, const TSize& aSize, const TBool aMaintainAspectRatio, const TUid& aImageTypeUid); williamr@4: williamr@4: IMPORT_C void RenderL(RFile& aFile); williamr@4: IMPORT_C void RenderL(RFile& aFile, const TSize& aSize, const TBool aMaintainAspectRatio, const TUid& aImageTypeUid); williamr@4: williamr@4: IMPORT_C void RenderL(HBufC8*& aDestData); williamr@4: IMPORT_C void RenderL(HBufC8*& aDestData, TUint32 aMaxBufferSize, const TSize& aSize, const TBool aMaintainAspectRatio, const TUid& aImageTypeUid); williamr@4: williamr@4: IMPORT_C void RenderL(const CFbsBitmap& aBitmap); williamr@4: IMPORT_C void RenderL(const CFbsBitmap& aBitmap, const TBool aMaintainAspectRatio); williamr@4: williamr@4: IMPORT_C void RenderL(const CImageFrame& aImageFrame); williamr@4: IMPORT_C void RenderL(const CImageFrame& aImageFrame, const TBool aMaintainAspectRatio); williamr@4: williamr@4: IMPORT_C void InitializeL(const TSize & aSize, const TPanoramaLens& aPanoramaLens, const TDirection& aDirection); williamr@4: williamr@4: IMPORT_C TAny* Extension(TUid aExtension); williamr@4: williamr@4: IMPORT_C ~CImagePanorama(); williamr@4: williamr@4: private: williamr@4: CImagePanorama(); williamr@4: void ConstructL(); williamr@4: williamr@4: private: williamr@4: CImagePanoramaImpl* iImgPanImpl; williamr@4: }; williamr@4: williamr@4: #endif //PANORAMA_H