vtprotocolplugins/DisplaySink/inc/cvtimagerotator.h
changeset 0 ed9695c8bcbe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vtprotocolplugins/DisplaySink/inc/cvtimagerotator.h	Mon Nov 23 14:47:47 2009 +0200
@@ -0,0 +1,245 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:    Image Transforms subsystem.
+*
+*/
+
+
+
+
+
+#ifndef CVTIMAGEROTATOR_H
+#define CVTIMAGEROTATOR_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+
+class CVtImage;
+class CFbsBitmap;
+class CVtImageRotatorImpl;
+
+// CLASS DECLARATIONS
+
+/**
+*  Image rotator observer interface.
+*
+*  @lib videosource.lib
+*/
+class MVtImageRotatorObserver
+    {
+    public:
+        /**
+        * Callback method that is called by CVtImageRotator when rotation
+        * process has been finished.
+        * @param "aError" KErrNone if the rotation was done successfully, one
+        * of the system wide error codes otherwise.
+        * @return Pointer to newly created instance.
+        */
+        virtual void RotationFinished( TInt aError ) = 0;
+    };
+
+/**
+*  Image rotator.
+*
+*  @lib videosource.lib
+*/
+class CVtImageRotator : public CActive
+    {
+    public:
+        /**
+        * An enumeration within the CVtImageRotator namespace.
+        * It provides a set of panic codes that may happen during
+        * rotation process.
+        */
+        enum TPanics
+            {
+            /**
+            * RotateL() is called while previous rotation process
+            * has not yet been finished.
+            */
+            EBusy = 1
+            };
+
+        /**
+        * An enumeration within the CVtImageRotator namespace.
+        * It provides a set of supported rotation and mirror angles.
+        */
+        enum TRotationAngle
+            {
+            /**
+            * Uninitialized place holder. Giving this rotation angle
+            * to RotateL() will make RotateL() leave with error code
+            * KErrNotSupported.
+            */
+            ERotationNone = -1,
+
+            /**
+            * Rotates image 90 degrees in a clockwise direction.
+            */
+            E90DegreesClockwise,
+
+            /**
+            * Rotates image 180 degrees in a clockwise direction.
+            * (flip & mirror)
+            */
+            E180DegreesClockwise,
+
+            /**
+            * Rotates image 270 degrees in a clockwise direction.
+            */
+            E270DegreesClockwise,
+
+            /**
+            * Mirrors the bitmap around the horizontal axis.
+            */
+            EMirrorHorizontalAxis,
+
+            /**
+            * Flips the image around the vertical axis.
+            */
+            EFlipVerticalAxis,
+            };
+
+    public:
+
+        /**
+        * Creates new instance of CVtImageRotator.
+        * @param "aObserver" Reference to instance observer.
+        * @param "aPriority" Active object priority.
+        * @exception In error situation leaves with one of the system wide
+        * error codes.
+        * @return Pointer to newly created instance.
+        */
+        IMPORT_C static CVtImageRotator* NewL(
+            MVtImageRotatorObserver& aObserver,
+            TPriority aPriority = EPriorityLow );
+
+        /**
+        * C++ destructor.
+        */
+        IMPORT_C ~CVtImageRotator();
+
+        /**
+        * Rotates image to given angle.
+        * @param "aSource" Source image that will be rotated.
+        * @param "aTarget" Target image that will hold the rotated image.
+        * @param "aAngle" Rotation angle.
+        * @exception In error situation leaves with one of the system wide
+        * error codes.
+        */
+        IMPORT_C void RotateL( const CVtImage& aSource, CVtImage& aTarget,
+            const TRotationAngle& aAngle );
+
+        /**
+        * Rotates image to given angle. Possible error during initialization is
+        * returned via MVtImageRotatorObserver.
+        * @param "aSource" Source image that will be rotated.
+        * @param "aTarget" Target image that will hold the rotated image.
+        * @param "aAngle" Rotation angle.
+        */
+        IMPORT_C void Rotate( const CVtImage& aSource, CVtImage& aTarget,
+            const TRotationAngle& aAngle );
+
+    private: // internal
+
+        /**
+        * C++ default constructor.
+        */
+        CVtImageRotator();
+
+        /**
+        * C++ constructor.
+        * @param "aObserver" Reference to observer.
+        * @param "aPriority" Active object priority.
+        * @exception In error situation leaves with one of the system wide
+        * error codes.
+        */
+        CVtImageRotator( MVtImageRotatorObserver& aObserver, TPriority aPriority );
+
+        /**
+        * Second phase constructor.
+        * @exception In error situation leaves with one of the system wide
+        * error codes.
+        */
+        void ConstructL();
+
+        /**
+        * Creates new instance of rotator implementation if needed.
+        * @param "aAngle" Used rotation angle.
+        * @exception In error situation leaves with one of the system wide
+        * error codes.
+        */
+        void CreateRotatorL( const TRotationAngle& aAngle );
+
+        /**
+        * Sets iStatus to KRequestPending and calls CActive::SetActive().
+        */
+        void Activate();
+
+        /**
+        * Signals this instance AO with given error code.
+        * @param "aError" Signalling error code.
+        */
+        void Signal( TInt aError );
+
+    private: // from CActive
+
+        /**
+        * This is defined in CActive. Check CActive for description.
+        */
+        void RunL();
+
+        /**
+        * This is defined in CActive. Check CActive for description.
+        */
+        void DoCancel();
+
+        /**
+        * Rotate method called by the CAsyncCallBack.
+        */
+        static TInt StaticRotate( TAny* aPtr );
+
+        /**
+        * Rotate method called by the StaticScale.
+        */
+        void DoRotate();
+
+    private:
+
+        // Scaling observer
+        MVtImageRotatorObserver& iObserver;
+
+        // Bitmap that will be used for locking global bitmap heap
+        CFbsBitmap* iHeapLock; // owned
+
+        // Rotator implementation
+        CVtImageRotatorImpl* iRotatorImpl; // owned
+
+        // Asynccallback instance
+        CAsyncCallBack* iAsyncCallBack; // owned
+
+        // This is set to ETrue in DoCancel() method, and when CAsyncCallBack
+        // gets executed, iCancelled is checked whether scaling should be done
+        // or not.
+        TBool iCancelled;
+    };
+
+#endif // CVTIMAGEROTATOR_H
+
+// End of File
+
+