multimediacommscontroller/mmcccontroller/inc/mcccamerahandler.h
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmcccontroller/inc/mcccamerahandler.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,288 @@
+/*
+* Copyright (c) 2006 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:    
+*
+*/
+
+
+
+
+
+#ifndef MCCCAMERAHANDLER_H
+#define MCCCAMERAHANDLER_H
+
+//  INCLUDES
+
+#include <e32base.h>
+#include <ecam.h>
+#include <gdi.h>
+#include "mmccinterfacedef.h"
+#include "mccexpirationhandler.h"
+
+#ifdef MCC_CAMERAHANDLER_TEST
+#include <f32file.h>
+#include <fbs.h>
+#endif
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+class CMccScreen;
+class MMccResources;
+class CFbsBitmap;
+
+// CLASS DECLARATION
+
+class MMccCameraHandlerObserver
+    {
+    public:
+    
+        virtual void CameraReady( TInt aError ) = 0;
+    };
+    
+class MMccCameraHandler
+    {
+    public:
+    
+        /**
+        * Gets camera handle.
+        */
+        virtual TUint32 Handle() = 0;
+        
+        /**
+        * Checks whether camera is ready to be used (resources reserved and
+        * power on).
+        */
+        virtual TBool IsCameraReady() = 0;
+        
+        /**
+        * Monitor camera reservation completion.
+        * @param aForceCameraReserve, reserves camera resource forcefully if ETrue
+        */
+        virtual TInt MonitorCameraReservation( MMccCameraHandlerObserver& aObserver, 
+                                               TBool aForceCameraReserve ) = 0;
+        
+        /**
+        * Stop monitoring
+        * @param aForceCameraRelease, releases camera resource if it was reserved
+        *   just by forcing it via MonitorCameraReservation.
+        */
+        virtual TInt StopCameraMonitoring( MMccCameraHandlerObserver& aObserver,
+                                           TBool aForceCameraRelease ) = 0;
+    };
+
+
+
+/**
+*  
+*/
+class CMccCameraHandler : 
+    public CBase, 
+    public MMccCameraHandler, 
+    public MCameraObserver,
+    public MCameraObserver2,
+    public MMccExpirationHandler                       
+    {
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CMccCameraHandler* NewL( MMccResources& aResources,
+                                        TInt aCameraIndex = 0, 
+                                        TInt aPriority = 0 );
+          
+        /**
+        * Destructor.
+        */
+        virtual ~CMccCameraHandler();
+
+    public: // New functions
+    
+        static TInt GetNumOfCamerasL();
+        
+        inline TInt CameraIndex() const
+            {
+            return iCameraIndex;
+            }	
+    	
+    	void EnableViewFinderL( TMccVideoSinkSetting& aSetting );
+
+    	void DisableViewFinderL();
+    	
+    	TBool IsViewFinderEnabled() const;
+    	
+    	void GetViewFinderSettingsL( TMccVideoSinkSetting& aSetting );
+
+        void GetCamInfoL( TCameraInfo& aInfo, TBool aForceCameraCreation = EFalse );
+            
+        void GetValueL( TUint32 aParam, TInt& aVal );
+        
+        void SetValueL( TUint32 aParam, TInt aVal );
+        
+        void GetValueL( TUint32 aParam, TReal& aVal );
+        
+        void SetValueL( TUint32 aParam, TReal aVal );
+        
+        void ReserveResourcesL( TInt aCameraIndex, TBool aForceCameraCreation = EFalse );
+        
+        void ReleaseResources();
+
+    public: // Functions from MMccCameraHandler
+    
+        TUint32 Handle();
+        
+        TBool IsCameraReady();
+        
+        TInt MonitorCameraReservation( MMccCameraHandlerObserver& aObserver, 
+                                       TBool aForceCameraReserve );
+        
+        TInt StopCameraMonitoring( MMccCameraHandlerObserver& aObserver,
+                                   TBool aForceCameraRelease );
+                                       
+    public: // Functions from MCameraObserver
+    
+		void ReserveComplete( TInt aError );
+
+		void PowerOnComplete( TInt aError );
+
+		void ViewFinderFrameReady( CFbsBitmap& aFrame );
+
+		void ImageReady( CFbsBitmap* aBitmap, HBufC8* aData, TInt aError );
+
+		void FrameBufferReady( MFrameBuffer* aFrameBuffer, TInt aError );
+                                       
+    public: // Functions from MCameraObserver2
+    
+        void HandleEvent( const TECAMEvent& aEvent );
+
+	    void ViewFinderReady( MCameraBuffer& aCameraBuffer,TInt aError );
+
+	    void ImageBufferReady( MCameraBuffer& aCameraBuffer,TInt aError );
+
+	    void VideoBufferReady( MCameraBuffer& aCameraBuffer,TInt aError );
+	
+	public: // Functions from MMccExpirationHandler
+	
+	    void TimerExpiredL( TMccTimerId aTimerId, TAny* aTimerParam );
+	    	
+    private:
+        
+        void DoReserveComplete( TInt aError );
+
+		void DoPowerOnComplete( TInt aError );
+		
+		void DoViewFinderFrameReady( CFbsBitmap& aFrame );
+		
+        void NotifyObservers( TInt aError );
+        
+        TBool SettingsChanged( const TMccVideoSinkSetting& aSetting ) const;
+        
+        void UpdateCameraSettingsL();
+        
+        CCamera* CreateCameraL();
+        
+        void DoReleaseScreen();
+        
+        void DoReleaseCamera();
+              
+        #ifdef MCC_CAMERAHANDLER_TEST
+        
+        void CreateDependencyFileL();
+		void RemoveDependencyFile();
+		
+		#endif
+		/* Re-Intiallize the internal member variables 
+		 * if camera index changed.
+		 */
+        void ResetCameraHandler();
+		   
+    private:
+        /**
+        * C++ default constructor.
+        */
+        CMccCameraHandler( MMccResources& aResources,
+                           TInt aCameraIndex, 
+                           TInt aPriority );
+        
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+
+    private: // Data
+    
+    	enum TCameraHandlerState
+    		{
+    		EInit = 0,
+    		EReserving,
+    		EReserved,
+    		EPowered,
+    		EFailed
+    		};
+            
+        MMccResources& iResources;
+	
+		TCameraHandlerState iState;
+
+        // Priority settings
+        TInt iPriority;
+
+        // index of camera device
+        TInt iCameraIndex;
+
+        // Camera handle shared by all components
+		CCamera* iCamera;
+		
+		//Screen for local camera view
+		CMccScreen* iScreen;
+		
+		TMccVideoSinkSetting iViewFinderSettings;
+		
+		TBool iViewFinderEnabled;
+		
+		RPointerArray<MMccCameraHandlerObserver> iObservers;
+		
+		TInt iZoom;
+		TInt iDigitalZoom;
+		TInt iContrast;
+		TInt iBrightness;
+		TInt iWhiteBalance;
+		TInt iExposure;
+		
+		TMccTimerId iTimerId;
+		
+		TBool iForcedResourceReservation;
+		
+		#ifdef MCC_CAMERAHANDLER_TEST
+		RFbsSession iFbsSession;
+		RFs iFsSession;
+		#endif
+		        
+    	#ifdef TEST_EUNIT
+    	friend class UT_CMccCameraHandler;
+    	friend class UT_CMccResourceItem;
+    	friend class UT_CMccResourcePool;
+    	#endif
+    };
+
+#endif