mmlibs/mmfw/src/Client/Video/mediaclientvideodisplay.cpp
changeset 0 40261b775718
child 7 94dbab0a2133
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/src/Client/Video/mediaclientvideodisplay.cpp	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,474 @@
+// 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:
+//
+
+#include <mediaclientvideodisplay.h>
+#include "mediaclientvideodisplaybody.h"
+
+
+/**
+Constructs and initialises a new instance of the client video data to display image 
+on window or graphics surface.
+
+The function leaves if the video display object cannot be created.
+
+@param aDisplayId
+		A display ID.
+		
+@return A pointer to the new video display object.
+*/
+
+EXPORT_C CMediaClientVideoDisplay* CMediaClientVideoDisplay::NewL(TInt aDisplayId)
+	{
+	CMediaClientVideoDisplay* self = new (ELeave) CMediaClientVideoDisplay();
+	CleanupStack::PushL(self);
+	self->ConstructL(aDisplayId);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+/**
+Constructs and initialises a new instance of the client video data to display image 
+on window or graphics surface.
+
+The function leaves if the video display object cannot be created.
+
+@param aDisplayId
+		A display ID.
+		
+@param	aSurfaceId
+		The surface that has been created.
+		
+@param  aCropRect
+		The dimensions of the crop rectangle, relative to the video image.
+
+@param  aAspectRatio
+       	The pixel aspect ratio to display video picture.
+       	
+@return A pointer to the new video display object.
+*/
+
+EXPORT_C CMediaClientVideoDisplay* CMediaClientVideoDisplay::NewL(TInt aDisplayId, const TSurfaceId& aSurfaceId, const TRect& aCropRect, TVideoAspectRatio aAspectRatio)
+	{
+	CMediaClientVideoDisplay* self = new (ELeave) CMediaClientVideoDisplay();
+	CleanupStack::PushL(self);
+	self->ConstructL(aDisplayId, aSurfaceId, aCropRect, aAspectRatio);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CMediaClientVideoDisplay::CMediaClientVideoDisplay()
+	{	
+	}
+
+
+void CMediaClientVideoDisplay::ConstructL(TInt aDisplayId)
+	{
+	iBody = CMediaClientVideoDisplayBody::NewL(aDisplayId);
+	}
+
+void CMediaClientVideoDisplay::ConstructL(TInt aDisplayId, const TSurfaceId& aSurfaceId, const TRect& aCropRect, TVideoAspectRatio aAspectRatio)
+	{
+	iBody = CMediaClientVideoDisplayBody::NewL(aDisplayId, aSurfaceId, aCropRect, aAspectRatio);
+	}
+
+/**
+Destructor.
+
+Releases resources owned by the object prior to its destruction.
+*/
+	
+EXPORT_C CMediaClientVideoDisplay::~CMediaClientVideoDisplay()
+	{
+	delete iBody;
+	}
+
+/**
+Adds a new window for displaying the video picture. 
+	
+@param  aWindow
+       	The display window.
+
+@param  aClipRect
+       	Window clipping rectangle, relative to the window. The clipping rectangle specifies 
+       	the part of the window used for video display. The rectangle must be contained 
+       	completely within the window.
+
+@param  aCropRegion
+		The dimensions of the crop region, relative to the video image.
+		
+@param  aVideoExtent
+       	Video extent on the screen, relative to the window. Video picture position within 
+       	the extent depends on the scaled picture and content alignment or offset. The video 
+       	extent can be partially or completely outside the window.
+
+@param  aScaleWidth       	
+       	Scaling the width of the video frame.
+
+@param  aScaleHeight       	
+       	Scaling the height of the video frame.
+
+@param  aRotation       	
+       	The desired rotation to apply in 90 degree increments.
+
+@param  aAutoScaleType       	
+       	Automatic scaling type.
+
+@param  aHorizPos       	
+       	Video picture horizontal position, relative to the video window. The value can be either 
+       	a pixel offset (positive or negative) from the top left corner of the window to the top left 
+       	corner of the picture, or an alignment constant from enum THorizontalAlign.
+
+@param  aVertPos       	
+       	Video picture vertical position, relative to the video window. The value can be either a pixel 
+       	offset (positive or negative) from the top left corner of the window to the top left corner of 
+       	the picture, or an alignment constant from enum TVerticalAlign.
+
+@param  aWindow2
+       	The display window, aWindow2 is used when using CVideoPlayerUtility2. This is used to avoid 
+		casting iWindow from RWindowBase* to RWindow*.
+     	       	       	       	
+*/
+	
+EXPORT_C void CMediaClientVideoDisplay::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)
+	{
+	iBody->AddDisplayWindowL(aWindow, aClipRect, aCropRegion, aVideoExtent, aScaleWidth, aScaleHeight, aRotation,aAutoScaleType, aHorizPos, aVertPos, aWindow2); 															 															
+	}
+
+/**
+Removes a window that is currently being used to display the video picture. The window must 
+have previously been added with AddDisplayWindowL(). 
+
+Note removing the last window on a display will deregister the display
+	
+@param  aWindow
+       	The display window.
+
+@return The window position that has been removed.
+
+*/
+
+EXPORT_C TInt CMediaClientVideoDisplay::RemoveDisplayWindow(const RWindowBase& aWindow)
+	{
+	return iBody->RemoveDisplayWindow(aWindow);
+	}
+
+/**
+Must be called when a Surface has been Created.
+
+@param	aSurfaceId
+		The surface that has been created.
+		
+@param  aCropRect
+		The dimensions of the crop rectangle, relative to the video image.
+
+@param  aAspectRatio
+       	The pixel aspect ratio to display video picture.
+
+@param  aCropRegion
+		The dimensions of the crop region, relative to the video image.
+		
+@return KErrNone is succesfully created, otherwise returns system wide error.
+
+*/
+
+EXPORT_C TInt CMediaClientVideoDisplay::SurfaceCreated(const TSurfaceId& aSurfaceId, const TRect& aCropRect, TVideoAspectRatio aAspectRatio, const TRect& aCropRegion)
+	{
+	return iBody->SurfaceCreated(aSurfaceId, aCropRect, aAspectRatio, aCropRegion);
+	}
+
+/**
+Must be called when the current surface is no longer being used.
+
+*/
+	
+EXPORT_C void CMediaClientVideoDisplay::RemoveSurface()
+	{
+	iBody->RemoveSurface(ETrue);
+	}
+
+/** 
+
+Must be called when the video surface parameters have been changed.
+
+@param	aSurfaceId
+		The surface to be created for composition.
+		
+@param  aCropRect
+		The dimensions of the crop rectangle, relative to the video image.
+
+@param  aAspectRatio
+       	The pixel aspect ratio to display video picture.
+
+@return KErrNone is succesfully created, otherwise returns KErrInUse if surface is not created.
+
+*/
+
+EXPORT_C TInt CMediaClientVideoDisplay::SurfaceParametersChanged(const TSurfaceId& aSurfaceId, const TRect& aCropRect, TVideoAspectRatio aAspectRatio)
+	{
+	return iBody->SurfaceParametersChanged(aSurfaceId, aCropRect, aAspectRatio);
+	}
+
+/**
+Redraw all the windows with new crop region.
+	
+@param  aCropRegion
+		The dimensions of the crop region, relative to the video image.
+
+@return KErrNone is succesfully created, otherwise returns system wide error.
+*/	
+
+EXPORT_C TInt CMediaClientVideoDisplay::RedrawWindows(const TRect& aCropRegion)
+	{
+	return iBody->RedrawWindows(aCropRegion);
+	}
+
+/** 
+Set video automatic scaling. When automatic scaling is active, the
+video picture is scaled automatically to match the video window,
+based on the scaling type, and positioned according to the
+parameters.
+
+Not all video controller support automatic scaling. 
+
+This function quits or exits leaving any of the system wide error codes.
+Common error codes are listed below.
+
+@param  aWindow
+       	The display window
+
+@param  aAutoScaleType       	
+       	Automatic scaling type
+
+@param  aHorizPos       	
+       	Video picture horizontal position, relative to the video window. 
+       	
+@param  aVertPos       	
+       	Video picture vertical position, relative to the video window. 
+
+@param  aCropRegion
+		The dimensions of the crop region, relative to the video image.
+ 
+@leave Leaves with system wide error code.
+*/
+
+EXPORT_C void CMediaClientVideoDisplay::SetAutoScaleL(const RWindowBase& aWindow, TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos, const TRect& aCropRegion)
+	{
+	iBody->SetAutoScaleL(aWindow, aScaleType, aHorizPos, aVertPos, aCropRegion);
+	}
+
+/**
+Rotates the video image within the window. This is the preferred method to use with CVideoPlayerUtility2.
+
+The rotation will replace any rotation set with CVideoPlayerUtility::SetRotationL. 
+Likewise with setting the rotation with CVideoPlayerUtility::SetRotationL after a call to CVideoPlayerUtility2::SetRotationL has been
+made, then the rotation specified will replace any rotation set with CVideoPlayerUtility2::SetRotationL.
+
+@param aWindow 
+		Window to set rotation for.
+
+@param aRotation 
+		The video rotation to use for aWindow.
+
+@param  aCropRegion
+		The dimensions of the crop region, relative to the video image.
+ 
+*/	
+
+EXPORT_C void CMediaClientVideoDisplay::SetRotationL(const RWindowBase& aWindow, TVideoRotation aRotation, const TRect& aCropRegion)
+	{
+	iBody->SetRotationL(aWindow, aRotation, aCropRegion);
+	}
+
+/**
+Rotates the video image within the window. This is the preferred method to use with CVideoPlayerUtility2.
+
+The rotation will replace any rotation set with CVideoPlayerUtility::SetRotationL. 
+Likewise with setting the rotation with CVideoPlayerUtility::SetRotationL after a call to CVideoPlayerUtility2::SetRotationL has been
+made, then the rotation specified will replace any rotation set with CVideoPlayerUtility2::SetRotationL.
+
+@param aRotation 
+		The video rotation to use for aWindow.
+
+@param  aCropRegion
+		The dimensions of the crop region, relative to the video image.
+ 
+*/
+
+EXPORT_C void CMediaClientVideoDisplay::SetRotationL(TVideoRotation aRotation, const TRect& aCropRegion)
+	{
+	iBody->SetRotationL(aRotation, aCropRegion);
+	}
+
+/**
+Retrieves the video rotation set for a window. This is the preferred method to use with CVideoPlayerUtility2.
+
+@param aWindow 
+		Window to retrieve rotation for.
+		
+@return The video rotation.
+
+*/	
+
+EXPORT_C TVideoRotation CMediaClientVideoDisplay::RotationL(const RWindowBase& aWindow)
+	{
+	return iBody->RotationL(aWindow);
+	}
+
+/**
+Scales the video image to a specified percentage of its original size within the window. 
+
+@param aWindow 
+		Window to set scale factor for.
+		
+@param aWidthPercentage
+        The percentage (100 = original size) to be used to scale the width of the video image
+        
+@param aHeightPercentage
+        The percentage (100 = original size) to be used to scale the height of the video image. 
+        If this is not equal to aWidthPercentage then the image may be distorted.
+        
+@param  aCropRegion
+		The dimensions of the crop region, relative to the video image.
+
+@see CVideoPlayerUtility2::SetScaleFactorL
+*/
+	
+EXPORT_C void CMediaClientVideoDisplay::SetScaleFactorL(const RWindowBase& aWindow, TReal32 aWidthPercentage, TReal32 aHeightPercentage, const TRect& aCropRegion)
+	{
+	iBody->SetScaleFactorL(aWindow, aWidthPercentage, aHeightPercentage, aCropRegion);
+	}
+
+/**
+Scales the video image to a specified percentage of its original size within the window. 
+
+@param aWidthPercentage
+        The percentage (100 = original size) to be used to scale the width of the video image
+        
+@param aHeightPercentage
+        The percentage (100 = original size) to be used to scale the height of the video image. 
+        If this is not equal to aWidthPercentage then the image may be distorted.
+
+@param  aCropRegion
+		The dimensions of the crop region, relative to the video image.
+		
+@see CVideoPlayerUtility2::SetScaleFactorL
+*/
+	
+EXPORT_C void CMediaClientVideoDisplay::SetScaleFactorL(TReal32 aWidthPercentage, TReal32 aHeightPercentage, const TRect& aCropRegion)
+	{
+	iBody->SetScaleFactorL(aWidthPercentage, aHeightPercentage, aCropRegion);
+	}
+
+/**
+Retrieves the scale factor currently set for a window. This is the preferred method to use with CVideoPlayerUtility2.
+
+@param aWindow 
+		Window to retrieve scale factor for.
+		
+@param aWidthPercentage
+        On function return, contains the current scaling percentage applied to the width of the
+        video image (100 = original size).
+        
+@param aHeightPercentage
+        On function return, contains the current scaling percentage applied to the height
+        of the video image (100 = original size).
+        
+@see CVideoPlayerUtility2::GetScaleFactorL
+*/
+	
+EXPORT_C void CMediaClientVideoDisplay::GetScaleFactorL(const RWindowBase& aWindow, TReal32& aWidthPercentage, TReal32& aHeightPercentage)
+	{
+	iBody->GetScaleFactorL(aWindow, aWidthPercentage, aHeightPercentage);
+	}
+
+/** 
+Set video automatic scaling.
+
+@param  aHorizPos       	
+       	Video picture horizontal position, relative to the video window. 
+       	
+@param  aVertPos       	
+       	Video picture vertical position, relative to the video window. 
+
+@param  aCropRegion
+		The dimensions of the crop region, relative to the video image.
+
+@see CVideoPlayerUtility2::SetAutoScaleL
+
+*/	
+
+EXPORT_C void CMediaClientVideoDisplay::SetAutoScaleL(TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos, const TRect& aCropRegion)
+	{
+	iBody->SetAutoScaleL(aScaleType, aHorizPos, aVertPos, aCropRegion);
+	}
+
+/**
+Sets the window clipping rectangle, relative to the window. 
+
+@param	aWindow
+		Window to set clipping rectangle for.
+		
+@param  aWindowClipRect
+       	The window server session for this window.
+       	
+@param  aCropRegion
+		The dimensions of the crop region, relative to the video image.
+
+@see CVideoPlayerUtility2::SetWindowClipRectL
+
+*/
+
+EXPORT_C void CMediaClientVideoDisplay::SetWindowClipRectL(const RWindowBase& aWindow, const TRect& aWindowClipRect, const TRect& aCropRegion)
+	{
+	iBody->SetWindowClipRectL(aWindow, aWindowClipRect, aCropRegion);
+	}
+
+/**
+Sets the video extent on the screen, relative to the window. 
+
+@param  aWindow
+		Window to set video extent for.
+		
+@param  aVideoExtent
+       	The new video extent, relative to the video window.
+
+@param  aCropRegion
+		The dimensions of the crop region, relative to the video image.
+      	
+@see CVideoPlayerUtility2::SetWindowClipRectL
+*/
+		
+EXPORT_C void CMediaClientVideoDisplay::SetVideoExtentL(const RWindowBase& aWindow, const TRect& aVideoExtent, const TRect& aCropRegion)
+	{
+	iBody->SetVideoExtentL(aWindow, aVideoExtent, aCropRegion);
+	}
+
+/**
+Enables automatic switching of surface to/from external display when it is connected/disconnected from the device.
+
+To use this function the client thread must have an Active Scheduler installed otherwise it will leave with KErrNotReady.
+
+@param  aEnable
+        ETrue to enable. EFalse to disable.
+@leave  KErrNotSupported Device does not support external displays
+@leave  KErrNotReady CActiveScheduler is not installed
+*/
+
+EXPORT_C void CMediaClientVideoDisplay::SetExternalDisplaySwitchingL(TBool aControl)
+    {
+    iBody->SetExternalDisplaySwitchingL(aControl);
+    }