mmlibs/mmfw/inc/mmf/ControllerFramework/mmfvideosurfacecustomcommands.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/inc/mmf/ControllerFramework/mmfvideosurfacecustomcommands.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,243 @@
+// Copyright (c) 2007-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 MMFVIDEOSURFACECUSTOMCOMMANDS_H
+#define MMFVIDEOSURFACECUSTOMCOMMANDS_H
+
+#include <mmf/common/mmfcontroller.h>
+#include <mmf/common/mmfvideo.h>
+#include <graphics/surface.h>
+
+/**
+@publishedPartner
+@prototype
+*/
+const TUid KUidInterfaceMMFVideoPlaySurfaceSupport = {0x1028340D};
+
+/**
+@publishedPartner 
+@prototype
+
+The controller sends this event when (1) a surface has been created after a play command and
+the first frame for the stream has been passed to the surface, and (2) when an existing surface
+should be replaced with a newly created surface. 
+*/
+const TUid KMMFEventCategoryVideoSurfaceCreated = { 0x1028340F };
+
+/**
+@publishedPartner 
+@prototype
+*/
+const TUid KMMFEventCategoryVideoSurfaceParametersChanged = { 0x10283410 };
+
+/**
+@publishedPartner 
+@prototype
+
+The controller sends this event when a surface must be replaced with another surface
+but there are not enough resources to have both created at the same time. The client
+utility must respond with MvpssSurfaceRemovedL() command.
+*/
+const TUid KMMFEventCategoryVideoRemoveSurface = { 0x10283411 };
+
+/**
+@publishedPartner 
+@prototype
+
+Mixin class for the custom commands implemented by the controller. The custom command parser calls 
+methods in this class to deliver the requests to the controller.
+*/
+class MMMFVideoPlaySurfaceSupportCustomCommandImplementor
+	{
+public:
+
+	/**
+	Enables using graphics surfaces for video playback.
+
+	An interface implemented by either the decoder or the controller.
+	*/
+	virtual void MvpssUseSurfacesL() = 0;
+
+	/**
+	Gets surface parameters.
+	
+	An interface implemented by either the decoder or the controller.
+
+	@param  aSurfaceId
+	        Surface id of the current surface.
+	@param  aCropRect
+	        Cropping rectangle within the surface. The crop rectangle identifies the area of 
+	        the surface that should be shown on the screen.
+	@param  aPixelAspectRatio
+	        Video picture pixel aspect ratio.
+	*/
+	virtual void MvpssGetSurfaceParametersL(TSurfaceId& aSurfaceId, TRect& aCropRect,
+											TVideoAspectRatio& aPixelAspectRatio) = 0;
+
+	/**
+	Informs the controller that the surface is no longer in use and can
+	be destroyed.
+	
+	An interface implemented by either the decoder or the controller.
+
+	@param  aSurfaceId
+	        Surface that has been removed and can be destroyed.
+	*/
+	virtual void MvpssSurfaceRemovedL(const TSurfaceId& aSurfaceId) = 0;
+
+	};
+
+/**
+@publishedPartner 
+@prototype
+
+Custom command parser class to be used by controller plugins wishing to support video surface play 
+controller commands.
+
+The controller plugin must be derived from MMMFVideoPlaySurfaceSupportCustomCommandImplementor to use 
+this class. The controller plugin should create an object of this type and add it to the list of 
+custom command parsers in the controller framework.
+*/
+
+class CMMFVideoPlaySurfaceSupportCustomCommandParser : public CMMFCustomCommandParserBase
+	{
+public:
+
+	/**
+	Creates a new custom command parser capable of handling video surface support commands.
+
+	@param  aImplementor
+	        A reference to the controller plugin that owns this new object.
+
+	@return A pointer to the object created.
+
+	*/
+	IMPORT_C static CMMFVideoPlaySurfaceSupportCustomCommandParser* NewL(MMMFVideoPlaySurfaceSupportCustomCommandImplementor& aImplementor);
+
+	/**
+	Destructor.
+
+	*/
+	IMPORT_C ~CMMFVideoPlaySurfaceSupportCustomCommandParser();
+
+	/**
+	Handles a request from the client. Called by the controller framework.
+
+	@param  aMessage
+	        The message to be handled.
+
+	*/
+	void HandleRequest(TMMFMessage& aMessage);
+private:
+	/**
+	Constructor.
+
+	@param  aImplementor
+	        A reference to the controller plugin that owns this new object.
+
+	*/
+	CMMFVideoPlaySurfaceSupportCustomCommandParser(MMMFVideoPlaySurfaceSupportCustomCommandImplementor& aImplementor);
+	// Internal request handling methods.
+	void DoHandleRequestL(TMMFMessage& aMessage);
+	TBool DoUseSurfacesL(TMMFMessage& aMessage);
+	TBool DoGetSurfaceParametersL(TMMFMessage& aMessage);
+	TBool DoSurfaceRemovedL(TMMFMessage& aMessage);
+	
+private:
+	/** 
+	The object that implements the video surface support interface 
+	*/
+	MMMFVideoPlaySurfaceSupportCustomCommandImplementor& iImplementor;
+	};
+
+/**
+@publishedPartner 
+@prototype
+
+Client class to access functionality specific to a video surface support playback controller.
+
+The class uses the custom command function of the controller plugin, and removes the necessity
+for the client to formulate the custom commands.
+*/
+class RMMFVideoPlaySurfaceSupportCustomCommands : public RMMFCustomCommandsBase
+	{
+public:
+
+	/**
+	Constructor.
+
+	@param  aController
+	        The client side controller object to be used by this custom command interface.
+	*/
+	IMPORT_C RMMFVideoPlaySurfaceSupportCustomCommands(RMMFController& aController);
+
+	/**
+	Enables using graphics surfaces for video playback.
+
+	Instructs the controller to use graphics surfaces as destination. Note that direct screen 
+	access and graphics surface use is mutually exclusive, enabling one will disable the other.
+	
+	@return KErrNone if successful. KErrNotSupported if graphic surfaces are not supported by the 
+	controller or otherwise one of the system wide error codes.
+	*/
+	IMPORT_C TInt UseSurfaces() const;
+
+	/**
+	Gets the surface parameters for a display.
+	
+	The client utility typically calls this in response to KMMFEventCategoryVideoSurfaceCreated and 
+	KMMFEventCategoryVideoSurfaceParametersChanged events to retrieve new or updated surface 
+	information for a display.
+
+	@param  aSurfaceId
+	        Surface id of the current surface.
+	@param  aCropRect
+	        Cropping rectangle within the surface. The crop rectangle identifies the area of 
+	        the surface that should be shown on the screen.
+	@param  aPixelAspectRatio
+	        Video picture pixel aspect ratio.
+
+	@return KErrNone if successful. KErrNotSupported if graphic surfaces are not supported by the 
+	controller or KErrNotReady if no surface is available for the display or otherwise one of the 
+	system wide error codes.
+	*/
+	IMPORT_C TInt GetSurfaceParameters(TSurfaceId& aSurfaceId, TRect& aCropRect, TVideoAspectRatio& aPixelAspectRatio) const;
+
+	/**
+	Indicates that the surface is no longer in use and can be destroyed.
+	
+	The client utility typically calls this in response to either:
+	
+	KMMFEventCategoryVideoSurfaceCreated  - when a surface is already registered with the utility. This
+	indicates that the client utility should stop using the current surface and use the one supplied
+	in the notification. When the client utility is no longer using the current surface it calls
+	SurfaceRemoved()
+	
+	KMMFEventCategoryVideoRemoveSurface  - when the current surface should be removed. This indicates
+	that the client utility should stop using the current surface immediately. When the client utility
+	is no longer using the current surface it calls	SurfaceRemoved()
+	
+	@param  aSurfaceId
+	        Surface which is no longer being used by client utility.
+
+	@return KErrNone if successful. KErrNotSupported if graphic surfaces are not supported by the 
+	controller or KErrNotReady if no surface is available for the display or otherwise one of the 
+	system wide error codes.
+	*/
+	IMPORT_C TInt SurfaceRemoved(TSurfaceId& aSurfaceId) const;
+	
+	};
+
+#endif // MMFVIDEOSURFACECUSTOMCOMMANDS_H