sl@0: // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #ifndef __TESTCAMERA_H__ sl@0: #define __TESTCAMERA_H__ sl@0: sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: _LIT(KTestCameraPluginName, "C:\\102070cc.txt"); sl@0: sl@0: const TInt KMinTestCameraZoom = -3; sl@0: const TInt KMaxTestCameraZoom = 3; sl@0: const TReal32 KMaxTestCameraDigitalZoomFactor = 1.0; sl@0: const TInt KMaxTestCameraDigitalZoom = 0; sl@0: const TInt KFramePosIncrement = 5; sl@0: const TInt KFrameFeatureSize = 25; sl@0: const TInt KFrameFeatureBorderThickness = 5; sl@0: const enum CCamera::TFormat KInitialViewFinderFormat = CCamera::EFormatFbsBitmapColor16M; sl@0: const TDisplayMode KViewFinderDisplayMode = EColor4K; sl@0: sl@0: class CTestCamAdvSet; sl@0: class CTestCamPresets; sl@0: class CTestCamSnapshot; sl@0: class CTestCamImgProc; sl@0: sl@0: class RTestCameraFrameBuffer : public MCameraBuffer sl@0: { sl@0: public: sl@0: RTestCameraFrameBuffer(CFbsBitmap*& aFrame): iAvailable(ETrue), iFrame(aFrame) {} sl@0: virtual TInt NumFrames() {return 0;} sl@0: virtual TDesC8* DataL(TInt aFrameIndex) {if (aFrameIndex != 0) { User::Leave(KErrArgument); } return NULL; } sl@0: virtual CFbsBitmap& BitmapL(TInt aFrameIndex) {if (aFrameIndex != 0) { User::Leave(KErrArgument); } return *iFrame;} sl@0: virtual RChunk& ChunkL() { return iChunk;} sl@0: virtual TInt ChunkOffsetL(TInt aFrameIndex) {if (aFrameIndex != 0) { User::Leave(KErrArgument); } return 0;} sl@0: virtual TInt FrameSize(TInt aFrameIndex) {if (aFrameIndex != 0) { User::Leave(KErrArgument); } return 0; } sl@0: virtual void Release() {iAvailable = ETrue;} sl@0: public: sl@0: volatile TBool iAvailable; sl@0: CFbsBitmap*& iFrame; sl@0: RChunk iChunk; sl@0: }; sl@0: sl@0: class RTestFrameBuffer : public MFrameBuffer sl@0: { sl@0: public: sl@0: RTestFrameBuffer(CFbsBitmap*& aFrame): iAvailable(ETrue), iFrame(aFrame) {} sl@0: virtual TDesC8* DataL(TInt /*aIndex*/) { User::Leave(KErrNotSupported); return NULL; } sl@0: virtual CFbsBitmap* FrameL(TInt aIndex) { if (aIndex != 0) User::Leave(KErrNotSupported); return iFrame; } sl@0: virtual void Release() { iAvailable = ETrue; } sl@0: public: sl@0: TBool iAvailable; sl@0: CFbsBitmap*& iFrame; sl@0: }; sl@0: sl@0: class CDirectScreenAccess; sl@0: sl@0: class CTestCamera : public CCameraPlugin, public MDirectScreenAccess sl@0: { sl@0: friend class CTestCamAdvSet; sl@0: friend class CTestCamPresets; sl@0: friend class CTestCamSnapshot; sl@0: friend class CTestCamImgProc; sl@0: sl@0: public: sl@0: static CTestCamera* NewL(); sl@0: ~CTestCamera(); sl@0: void ConstructL(); sl@0: // from CCameraPlugin sl@0: void Construct2L(MCameraObserver& aObserver,TInt aCameraIndex); sl@0: void Construct2DupL(MCameraObserver& aObserver,TInt aCameraHandle); sl@0: void Construct2L(MCameraObserver2& aObserver,TInt aCameraIndex,TInt aPriority); sl@0: void Construct2DupL(MCameraObserver2& aObserver,TInt aCameraHandle); sl@0: private: sl@0: // From CCamera sl@0: virtual void CameraInfo(TCameraInfo& aInfo) const; sl@0: virtual void Reserve(); sl@0: virtual void Release(); sl@0: virtual void PowerOn(); sl@0: virtual void PowerOff(); sl@0: virtual TInt Handle(); sl@0: sl@0: virtual void SetZoomFactorL(TInt aZoomFactor = 0); sl@0: virtual TInt ZoomFactor() const; sl@0: virtual void SetDigitalZoomFactorL(TInt aDigitalZoomFactor = 0); sl@0: virtual TInt DigitalZoomFactor() const; sl@0: sl@0: virtual void SetContrastL(TInt aContrast); sl@0: virtual TInt Contrast() const; sl@0: virtual void SetBrightnessL(TInt aBrightness); sl@0: virtual TInt Brightness() const; sl@0: virtual void SetFlashL(TFlash aFlash = EFlashNone); sl@0: virtual TFlash Flash() const; sl@0: virtual void SetExposureL(TExposure aExposure = EExposureAuto); sl@0: virtual TExposure Exposure() const; sl@0: virtual void SetWhiteBalanceL(TWhiteBalance aWhiteBalance = EWBAuto); sl@0: virtual TWhiteBalance WhiteBalance() const; sl@0: sl@0: virtual void StartViewFinderDirectL(RWsSession& aWs,CWsScreenDevice& aScreenDevice,RWindowBase& aWindow,TRect& aScreenRect); sl@0: virtual void StartViewFinderDirectL(RWsSession& aWs,CWsScreenDevice& aScreenDevice,RWindowBase& aWindow,TRect& aScreenRect,TRect& aClipRect); sl@0: virtual void StartViewFinderBitmapsL(TSize& aSize); sl@0: virtual void StartViewFinderBitmapsL(TSize& aSize,TRect& aClipRect); sl@0: virtual void StartViewFinderL(TFormat aImageFormat,TSize& aSize); sl@0: virtual void StartViewFinderL(TFormat aImageFormat,TSize& aSize,TRect& aClipRect); sl@0: virtual void StopViewFinder(); sl@0: virtual TBool ViewFinderActive() const; sl@0: virtual void SetViewFinderMirrorL(TBool aMirror); sl@0: virtual TBool ViewFinderMirror() const; sl@0: sl@0: virtual void PrepareImageCaptureL(TFormat aImageFormat,TInt aSizeIndex); sl@0: virtual void PrepareImageCaptureL(TFormat aImageFormat,TInt aSizeIndex,const TRect& aClipRect); sl@0: virtual void CaptureImage(); sl@0: virtual void CancelCaptureImage(); sl@0: virtual void EnumerateCaptureSizes(TSize& aSize,TInt aSizeIndex,TFormat aFormat) const; sl@0: sl@0: virtual void PrepareVideoCaptureL(TFormat aFormat,TInt aSizeIndex,TInt aRateIndex,TInt aBuffersToUse,TInt aFramesPerBuffer); sl@0: virtual void PrepareVideoCaptureL(TFormat aFormat,TInt aSizeIndex,TInt aRateIndex,TInt aBuffersToUse,TInt aFramesPerBuffer,const TRect& aClipRect); sl@0: virtual void StartVideoCapture(); sl@0: virtual void StopVideoCapture(); sl@0: sl@0: virtual TBool VideoCaptureActive() const; sl@0: virtual void EnumerateVideoFrameSizes(TSize& aSize,TInt aSizeIndex,TFormat aFormat) const; sl@0: virtual void EnumerateVideoFrameRates(TReal32& aRate,TInt aRateIndex,TFormat aFormat,TInt aSizeIndex,TExposure aExposure = EExposureAuto) const; sl@0: virtual void GetFrameSize(TSize& aSize) const; sl@0: virtual TReal32 FrameRate() const; sl@0: virtual TInt BuffersInUse() const; sl@0: virtual TInt FramesPerBuffer() const; sl@0: sl@0: virtual void SetJpegQuality(TInt aQuality); sl@0: virtual TInt JpegQuality() const; sl@0: sl@0: virtual TAny* CustomInterface(TUid aInterface); sl@0: sl@0: // From MAbortDirectScreenAccess sl@0: virtual void AbortNow(RDirectScreenAccess::TTerminationReasons aReason); sl@0: sl@0: // From MDirectScreenAccess sl@0: virtual void Restart(RDirectScreenAccess::TTerminationReasons aReason); sl@0: sl@0: // New functions sl@0: static TInt TimerCallBack(TAny* aThis); sl@0: void FrameReady(); sl@0: void GetFrame(CFbsBitGc& aGc, TPoint& aPos) const; sl@0: void GetImgProcessedFrame(CFbsBitGc& aGc, TPoint& aPos) const; sl@0: void ServiceVideo(TInt aBuferNum); sl@0: void ServiceViewFinder(CFbsBitmap* aSourceFrame); sl@0: void ServiceImageCapture(const CFbsBitGc& aSourceBitmapGc); sl@0: void ServiceBurstImageCapture(const CFbsBitGc& aSourceBitmapGc); sl@0: void DoCaptureImageL(); sl@0: void CheckReserveAndPowerL(); sl@0: TInt CheckReserveAndPower() const; sl@0: void CustomInterfaceL(TAny*& aIface, TUid aInterface); sl@0: static TInt ReserveCallBack(TAny* aThis); sl@0: static TInt PowerOnCallBack(TAny* aThis); sl@0: static TInt ImageCaptureCallBack(TAny* aThis); sl@0: static TInt VideoCaptureCallBack(TAny* aThis); sl@0: static TInt HandleEventCallBack(TAny* aThis); sl@0: static TInt HandleEvent2CallBack(TAny* aThis); sl@0: sl@0: private: sl@0: CTestCamera(); sl@0: private: sl@0: MCameraObserver* iObserver; // not owned sl@0: MCameraObserver2* iObserver2; // not owned sl@0: TBool iReserved; sl@0: TBool iPowerOn; sl@0: sl@0: TCameraInfo iInfo; sl@0: CPeriodic* iTimer; sl@0: TTimeIntervalMicroSeconds32 iFrameDelay; sl@0: TInt iFrameIndex; sl@0: TTimeIntervalMicroSeconds iElapsedTime; sl@0: TPoint iStillImagePos; sl@0: TPoint iVideoFramePos; sl@0: sl@0: TReal32 iVideoFrameRate; sl@0: TInt iBuffersInUse; sl@0: TSize iVideoFrameSize; sl@0: TFormat iVideoFrameFormat; sl@0: sl@0: CFbsBitmap* iVideoFrame1; sl@0: CFbsBitmapDevice* iVideoFrameDev1; sl@0: CFbsBitGc* iVideoFrameGc1; sl@0: CFbsBitmap* iVideoFrame2; sl@0: CFbsBitmapDevice* iVideoFrameDev2; sl@0: CFbsBitGc* iVideoFrameGc2; sl@0: sl@0: TInt iStillCaptureErr; sl@0: TSize iStillImageSize; sl@0: TFormat iStillImageFormat; sl@0: CFbsBitmap* iStillImage; sl@0: CFbsBitmapDevice* iStillImageDev; sl@0: CFbsBitGc* iStillImageGc; sl@0: sl@0: TSize iViewFinderSize; sl@0: TFormat iViewFinderFormat; sl@0: CFbsBitmap* iViewFinderBitmap; sl@0: CFbsBitmapDevice* iViewFinderBitmapDev; sl@0: CFbsBitGc* iViewFinderBitmapGc; sl@0: sl@0: CDirectScreenAccess* iDSA; sl@0: CFbsScreenDevice* iScreenDev; sl@0: CFbsBitGc* iScreenGc; sl@0: TRect iScreenRect; sl@0: TRect iClipRect; sl@0: sl@0: CFbsBitmap* iImage; sl@0: CFbsBitmapDevice* iDev; sl@0: CFbsBitGc* iGc; sl@0: sl@0: CAsyncCallBack iReserveAsync; sl@0: CAsyncCallBack iPowerOnAsync; sl@0: CAsyncCallBack iImageCaptureAsync; sl@0: CAsyncCallBack iVideoCaptureAsync; sl@0: CAsyncCallBack iHandleEventAsync; sl@0: CAsyncCallBack iHandleEvent2Async; sl@0: sl@0: RTestFrameBuffer iFrameBuffer1; sl@0: RTestFrameBuffer iFrameBuffer2; sl@0: sl@0: RTestCameraFrameBuffer iFrameCameraBuffer1; sl@0: RTestCameraFrameBuffer iFrameCameraBuffer2; sl@0: sl@0: TInt iVideoCaptureErr; sl@0: // Members to store the current optical or digital value set with SetZoomFactorL() and SetDigitalZoomFactorL() sl@0: // Although arguments have trailing Factor in fact they must contain values in the ranges specified by sl@0: // iInfo.iMinZoom : iInfo.iMaxZoom for optical zoom and sl@0: // 0 : iInfo.iMaxDigitalZoom for digital zoom sl@0: // The factor values cannot be modified using Camera API as it is assumed sl@0: // that they are determined by the camera hardware. sl@0: TInt iZoom; sl@0: TInt iDigitalZoom; sl@0: sl@0: TInt iContrast; sl@0: TInt iBrightness; sl@0: sl@0: TInt iImgProcBrightness; sl@0: TInt iImgProcContrast; sl@0: sl@0: volatile TBool iViewFinderActive; sl@0: volatile TBool iVideoCaptureActive; sl@0: volatile TBool iImageCaptureActive; sl@0: volatile TBool iVideoPreparedLast; sl@0: volatile TBool iVideoCapturePrepared; sl@0: volatile TBool iImageCapturePrepared; sl@0: sl@0: RArray iImageSizes; sl@0: RArray iVideoFrameSizes; sl@0: RArray iVideoFrameRates; sl@0: TInt iCameraIndex; sl@0: TInt iCameraHandle; sl@0: TInt iPriority; sl@0: sl@0: TECAMEvent iECamEvent; sl@0: TECAMEvent2 iECamEvent2; sl@0: TInt iEventError; sl@0: sl@0: CTestCamAdvSet* iAdvSettingsImpl; sl@0: CTestCamSnapshot* iSnapshotImpl; sl@0: CTestCamImgProc* iImgProcImpl; sl@0: sl@0: CCamera::CCameraAdvancedSettings::TDriveMode iDriveMode; sl@0: TInt iBurstImages; sl@0: }; sl@0: sl@0: class CTestCameraInfo : public CCameraInfoPlugin sl@0: { sl@0: public: sl@0: static CTestCameraInfo* NewL(); sl@0: ~CTestCameraInfo(); sl@0: // from CCameraInfoPlugin sl@0: TInt CamerasAvailable(); sl@0: private: sl@0: CTestCameraInfo(); sl@0: }; sl@0: sl@0: enum TStubPanicReasons sl@0: { sl@0: EPanicUnimplemented=1 sl@0: }; sl@0: sl@0: class FileDependencyUtil sl@0: { sl@0: public: sl@0: static void CheckFileDependencyL(); sl@0: }; sl@0: sl@0: class CDataGlobal : public CBase sl@0: { sl@0: public: sl@0: CTestCamAdvSet* iTestCamAdvSet; sl@0: CTestCamPresets* iTestCamPresets; sl@0: CTestCamSnapshot* iTestCamSnapshot; sl@0: CTestCamImgProc* iTestCamImgProc; sl@0: TInt iAdvSetReferenceCount; sl@0: TInt iPresetsReferenceCount; sl@0: TInt iSnapshotReferenceCount; sl@0: TInt iImgProcReferenceCount; sl@0: }; sl@0: sl@0: #endif