diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/mmcccontroller/inc/mcccamerahandler.h --- /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 +#include +#include +#include "mmccinterfacedef.h" +#include "mccexpirationhandler.h" + +#ifdef MCC_CAMERAHANDLER_TEST +#include +#include +#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 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