--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmcccontroller/inc/mccscreen.h Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,254 @@
+/*
+* 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 MCCSCREEN_H
+#define MCCSCREEN_H
+
+#include <w32std.h>
+
+class CCamera;
+class MCameraDirectViewFinder;
+
+/**
+* Screen for viewfinder, may use bitmap viewfinder or direct viewfinder
+* depending on supported camera vf modes.
+*
+*/
+class CMccScreen : public CBase
+ {
+
+ public:
+
+ enum TMccScreenType
+ {
+ EBitmapScreen,
+ EDirectScreen
+ };
+
+ public:
+
+ static CMccScreen* NewL( CCamera* aCamera,
+ TPoint aPos,
+ TSize aArea,
+ TInt aIndex,
+ TInt aWindowOrdinalPosition,
+ TInt aWindowOrdinalPriority );
+
+ ~CMccScreen();
+
+
+
+ public:
+
+ virtual void StartL();
+
+ virtual void Stop();
+
+ virtual void Draw( CFbsBitmap& aFrame );
+
+ virtual TInt SetCamera( CCamera* aCamera );
+
+ protected:
+
+ void StopCamera();
+
+ TBool VfStartPossible();
+
+ void ConstructL();
+
+ CMccScreen( TMccScreenType aScreenType,
+ CCamera* aCamera,
+ TPoint aPos,
+ TSize aArea,
+ TInt aIndex,
+ TInt aWindowOrdinalPosition,
+ TInt aWindowOrdinalPriority );
+
+ protected:
+
+ CCamera* iCamera;
+ TInt iDeviceIndex;
+ TPoint iPosition;
+ TSize iArea;
+ TInt iWindowOrdinalPosition;
+ TInt iWindowOrdinalPriority;
+
+ RWsSession iRwSession;
+ RWindowGroup* iRwGroup;
+ RWindow* iRw;
+ CWsScreenDevice* iDev;
+
+ CWindowGc* iGraphicsContext;
+
+ TMccScreenType iScreenType;
+
+
+#ifdef TEST_EUNIT
+ friend class UT_CMccCameraHandler;
+ friend class UT_CMccScreen;
+#endif
+
+};
+
+/**
+* Bitamp viewfinder screen. Uses DSA to draw vf bitmaps.
+*
+*/
+class CMccScreenBitmap : public CMccScreen,
+ public MDirectScreenAccess
+ {
+
+ public:
+
+ static CMccScreenBitmap* NewL( CCamera* aCamera,
+ TPoint aPos,
+ TSize aArea,
+ TInt aIndex,
+ TInt aWindowOrdinalPosition,
+ TInt aWindowOrdinalPriority );
+
+ ~CMccScreenBitmap();
+
+ public: // From CMccScreen
+
+ virtual void StartL();
+
+ virtual void Stop();
+
+ virtual void Draw( CFbsBitmap& aFrame );
+
+ private:
+
+ void ConstructL();
+
+ CMccScreenBitmap( CCamera* aCamera,
+ TPoint aPos,
+ TSize aArea,
+ TInt aIndex,
+ TInt aWindowOrdinalPosition,
+ TInt aWindowOrdinalPriority );
+
+ void Restart( RDirectScreenAccess::TTerminationReasons aReason );
+
+ void AbortNow( RDirectScreenAccess::TTerminationReasons aReason );
+
+ void StartCameraL();
+
+ void StartDsaL();
+
+ TPoint UpdateViewFinderArea( TSize aViewFinderImageSize );
+
+ void DoDraw( CFbsBitmap& aFrame );
+
+ void DoScreenDeviceUpdate();
+
+ void AttachFrameL( CFbsBitmap* aFrame );
+
+ void DetachFrame();
+
+ void StoreFrameDataL( CFbsBitmap& aFrame );
+
+ CFbsBitmap* RestoreFrameLC();
+
+ void DrawBlackBorders();
+
+ private:
+
+ CDirectScreenAccess* iDirectScreenAccess;
+ CFbsBitGc* iGc;
+ RRegion* iRegion;
+ CFbsScreenDevice* iFbsDev;
+
+ TRect iViewFinderImageRect;
+
+ TBool iFirstImageDrawn;
+
+ CFbsBitmap* iAttachedFrame;
+
+ TBool iAborted;
+
+ TSize iPausedFrameSize;
+ TDisplayMode iPausedFrameDisplayMode;
+ HBufC8* iPausedFrameData;
+
+ TBool iStopped;
+
+#ifdef TEST_EUNIT
+ friend class UT_CMccCameraHandler;
+ friend class UT_CMccScreen;
+#endif
+
+ };
+
+/**
+* Direct viewfinder screen.
+*
+*/
+class CMccScreenDirect : public CMccScreen
+ {
+
+ public:
+
+ static CMccScreenDirect* NewL( CCamera* aCamera,
+ TPoint aPos,
+ TSize aArea,
+ TInt aIndex,
+ TInt aWindowOrdinalPosition,
+ TInt aWindowOrdinalPriority );
+
+ ~CMccScreenDirect();
+
+
+
+ public: // From CMccScreen
+
+ virtual void StartL();
+
+ virtual void Stop();
+
+ virtual TInt SetCamera( CCamera* aCamera );
+
+ private:
+
+ void ConstructL();
+
+ CMccScreenDirect(
+ CCamera* aCamera,
+ TPoint aPos,
+ TSize aArea,
+ TInt aIndex,
+ TInt aWindowOrdinalPosition,
+ TInt aWindowOrdinalPriority );
+
+ void StartDirectViewFinderL();
+
+ TInt HandleDirectViewFinder();
+
+ private:
+
+ MCameraDirectViewFinder* iDirectViewFinder;
+
+#ifdef TEST_EUNIT
+ friend class UT_CMccCameraHandler;
+ friend class UT_CMccScreen;
+#endif
+
+ };
+
+#endif