mmlibs/mmfw/src/Client/Video/mediaclientvideodisplaybody.h
changeset 0 40261b775718
child 7 94dbab0a2133
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/src/Client/Video/mediaclientvideodisplaybody.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,173 @@
+// Copyright (c) 2002-2009 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 MEDIACLIENTVIDEODISPLAYBODY_H
+#define MEDIACLIENTVIDEODISPLAYBODY_H
+
+#include <w32std.h>
+#include <graphics/surface.h>
+#include <graphics/surfaceconfiguration.h>
+#include <mmf/common/mmfvideosurfacecustomcommands.h>
+#include <videoplayer.h>
+#include <mmf/plugin/mmfmediaclientextdisplayinterface.h>
+
+class MMMFSurfaceEventHandler;
+
+/**
+@internalTechnology
+@released
+
+*/
+NONSHARABLE_CLASS(CMediaClientVideoDisplayBody) : public CBase, public MExtDisplayConnectionProviderCallback
+	{
+private:
+	NONSHARABLE_CLASS(TWindowData)
+		{
+	public:
+		TWindowData() :
+		   	iWindow(NULL)
+			{
+			}
+		
+		TWindowData(const RWindowBase* aWindow) :
+			iWindow(const_cast<RWindowBase*>(aWindow))
+			{
+			}
+				
+		TWindowData(const RWindowBase* aWindow, const TRect& aClipRect, const TRect& aVideoExtent,
+					TReal32 aScaleWidth, TReal32 aScaleHeight, TVideoRotation aRotation, TAutoScaleType aAutoScaleType,
+					TInt aHorizPos, TInt aVertPos,RWindow* aWindow2) :
+			iWindow(const_cast<RWindowBase*>(aWindow)),
+			iClipRect(aClipRect),
+			iVideoExtent(aVideoExtent),
+			iScaleWidth(aScaleWidth),
+			iScaleHeight(aScaleHeight),
+			iRotation(aRotation),
+			iAutoScaleType(aAutoScaleType),
+			iHorizPos(aHorizPos),
+			iVertPos(aVertPos),
+			iWindow2(aWindow2)
+			{
+			}
+		
+		RWindowBase* iWindow;
+		TSurfaceConfiguration iSurfaceConfig;
+		TRect iClipRect;
+		TRect iVideoExtent;
+				
+		TReal32 iScaleWidth;
+		TReal32 iScaleHeight;
+		TVideoRotation iRotation;
+			
+		TAutoScaleType iAutoScaleType;
+		TInt iHorizPos;
+		TInt iVertPos;
+		
+		// iWindow2 is set when using CVideoPlayerUtility2.  This is used to avoid 
+		// casting iWindow from RWindowBase* to RWindow*.
+		RWindow* iWindow2;
+		
+
+		static TBool CompareByWsHandle(const TInt* aWsHandle, const TWindowData& aWindowData)
+			{
+			TBool ret = EFalse;
+			if (aWsHandle)
+				{
+				ret = (*aWsHandle == aWindowData.iWindow->WsHandle());
+				}
+			return ret;
+			}
+		};
+public:
+
+	static CMediaClientVideoDisplayBody* NewL(TInt aDisplayId);
+	static CMediaClientVideoDisplayBody* NewL(TInt aDisplayId, const TSurfaceId& aSurfaceId, const TRect& aCropRect, TVideoAspectRatio aAspectRatio);
+	
+	~CMediaClientVideoDisplayBody();
+	
+	void AddDisplayL(MMMFSurfaceEventHandler& aEventHandler);
+	void AddDisplayWindowL(const RWindowBase* aWindow, const TRect& aClipRect, const TRect& aCropRegion, const TRect& aVideoExtent,
+							TReal32 aScaleWidth, TReal32 aScaleHeight, TVideoRotation aRotation,
+							TAutoScaleType aAutoScaleType, TInt aHorizPos, TInt aVertPos, RWindow* aWindow2);
+	void RemoveDisplay();
+	TInt RemoveDisplayWindow(const RWindowBase& aWindow);
+	
+	TInt SurfaceCreated(const TSurfaceId& aSurfaceId, const TRect& aCropRect, TVideoAspectRatio aAspectRatio, const TRect& aCropRegion);
+	TInt SurfaceParametersChanged(const TSurfaceId& aSurfaceId, const TRect& aCropRect, TVideoAspectRatio aAspectRatio);
+	void RemoveSurface(TBool aControllerEvent);
+	void RemoveBackgroundSurface(TBool aTriggerRedraw);
+	TInt RedrawWindows(const TRect& aCropRegion);
+		
+	void SetAutoScaleL(const RWindowBase& aWindow, TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos, const TRect& aCropRegion);
+	void SetRotationL(const RWindowBase& aWindow, TVideoRotation aRotation, const TRect& aCropRegion);
+	TVideoRotation RotationL(const RWindowBase& aWindow);
+	void SetScaleFactorL(const RWindowBase& aWindow, TReal32 aWidthPercentage, TReal32 aHeightPercentage, const TRect& aCropRegion);
+	void GetScaleFactorL(const RWindowBase& aWindow, TReal32& aWidthPercentage, TReal32& aHeightPercentage);
+
+	void SetAutoScaleL(TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos, const TRect& aCropRegion);
+	void SetRotationL(TVideoRotation aRotation, const TRect& aCropRegion);
+	void SetScaleFactorL(TReal32 aWidthPercentage, TReal32 aHeightPercentage, const TRect& aCropRegion);
+	void SetWindowClipRectL(const RWindowBase& aWindow, const TRect& aWindowClipRect, const TRect& aCropRegion);
+	void SetVideoExtentL(const RWindowBase& aWindow, const TRect& aVideoExtent, const TRect& aCropRegion);
+	
+	void SetExternalDisplaySwitchingL(TBool aControl);
+	
+private:
+	
+	CMediaClientVideoDisplayBody(TInt aDisplayId);
+	CMediaClientVideoDisplayBody(TInt aDisplayId, const TSurfaceId& aSurfaceId, const TRect& aCropRect,	TVideoAspectRatio aAspectRatio);
+	
+	void ConstructL();
+	
+	CFbsBitGc::TGraphicsOrientation ConvertRotation(TVideoRotation aRotation);
+	
+	RArray<CMediaClientVideoDisplayBody::TWindowData>& Windows();
+	TInt DisplayId() const;
+	TBool IsUsed() const;
+	static TInt CompareByDisplay(const TInt* aDisplayId, const CMediaClientVideoDisplayBody& aDisplay);
+	static TInt Compare(const CMediaClientVideoDisplayBody& aLeft, const CMediaClientVideoDisplayBody& aRight);
+	static CMediaClientVideoDisplayBody* FindDisplayWithWindowL(const RPointerArray<CMediaClientVideoDisplayBody>& aDisplays, const RWindowBase& aWindow);
+	TBool IsSurfaceCreated() const;
+	TInt SetBackgroundSurface(TWindowData& aWindowData, const TRect& aCropRegion);
+	void CalculateExtentAndViewport(const TWindowData& aWindowData, TRect& aExtent, TRect& aViewport);
+	TBool HasWindows() const;
+	
+    void CreateExtDisplayConnProvAndRemoveSurfaceL(TBool aRemoveBackgroundSurface);
+    void RemoveExtDisplayConnProvAndRedrawL();
+    void RemoveExtDisplayConnProv();
+    void MedcpcExtDisplayCalculateExtentAndViewportL(TRect& aExtent, TRect& aViewport, TRect& aExternalDisplayRect);
+    void MedcpcExtDisplayNotifyConnected(TBool aExtDisplayConnected);
+
+private:
+
+    MMMFSurfaceEventHandler* iEventHandler;
+	const TInt iDisplayId;
+	TSurfaceId iSurfaceId;
+	TRect iCropRect;
+	TVideoAspectRatio iAspectRatio;
+	RArray<TWindowData> iWindows;
+	
+	TRect iCropRegion;
+	TBool iClientRequestedExtDisplaySwitching;
+	CExtDisplayConnectionProviderInterface* iExtDisplayConnectionProvider;
+    TBool iExtDisplayConnected;
+    TBool iExtDisplaySwitchingSupported;
+	
+	friend class CVideoPlayerUtility::CBody;	
+	friend class CTestStepUnitMMFVidClient;
+	};
+
+#endif // MEDIACLIENTVIDEODISPLAYBODY_H
+