mmlibs/mmfw/inc/mmf/ControllerFramework/mmfstandardcustomcommandsimpl.h
changeset 0 40261b775718
child 31 ae0addfe117e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/inc/mmf/ControllerFramework/mmfstandardcustomcommandsimpl.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,1118 @@
+// 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 __MMFSTANDARDCUSTOMCOMMANDS_IMPL_H
+#define __MMFSTANDARDCUSTOMCOMMANDS_IMPL_H
+
+#include <mmf/common/mmfcontroller.h>
+#include <mmf/common/mmfvideo.h>
+#include "mmf/common/mmcaf.h"
+
+class CMMFVideoFrameMessage;
+class CFbsBitmap;
+class CDesC8Array;
+
+
+/**
+@publishedPartner
+@released
+
+Client class to allow setting the initial screen for video display.
+
+*/
+class RMMFVideoSetInitScreenCustomCommands : public RMMFCustomCommandsBase
+	{
+public:
+
+	/**
+	Constructor.
+
+	@param  aController
+	        The client side controller object to be used by this custom command interface.
+
+	*/
+	IMPORT_C RMMFVideoSetInitScreenCustomCommands(RMMFController& aController);
+
+	/**
+	Sets the initial screen number for the video display on the controller.
+
+	@param  aScreenNumber
+	        The screen number
+	
+	*/
+	IMPORT_C TInt SetInitScreenNumber(TInt aScreenNumber);
+	};
+
+
+
+/**
+@publishedPartner
+@released
+
+Mixin class to be derived from controller plugins that could support setting the initial screen for displaying video.
+*/
+class MMMFVideoSetInitScreenCustomCommandImplementor
+	{
+public:
+
+	/**
+	Sets the initial screen number.
+
+	@param  aScreenNumber
+	        The screen number
+	*/
+	virtual void MvsdSetInitScreenNumber(TInt aScreenNumber)=0;
+	};
+
+
+/**
+@publishedPartner
+@released
+
+Custom command parser class to be used by controller plugins wishing to support setting the initial screen
+number for the video display.
+
+The controller plugin should create an object of this type and add it to the list of custom command parsers 
+in the controller framework. The controller plugin must be derived from MMMFVideoSetInitScreenCustomCommandImplementor 
+to use this class. 
+*/
+class CMMFVideoSetInitScreenCustomCommandParser : public CMMFCustomCommandParserBase
+	{
+public:
+
+	/**
+	Creates a new custom command parser that supports setting screen device for video dusplay.
+
+	@param  aImplementor
+	        A reference to the controller plugin that owns this new object.
+
+	@return A pointer to the object created.
+
+	*/
+	IMPORT_C static CMMFVideoSetInitScreenCustomCommandParser* NewL(MMMFVideoSetInitScreenCustomCommandImplementor& aImplementor);
+
+	/**
+	Destructor.
+
+	*/
+	IMPORT_C ~CMMFVideoSetInitScreenCustomCommandParser();
+
+	/**
+	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.
+	*/
+	CMMFVideoSetInitScreenCustomCommandParser(MMMFVideoSetInitScreenCustomCommandImplementor& aImplementor);
+	void DoHandleRequestL(TMMFMessage& aMessage);
+	TBool DoSetInitScreenNumberL(TMMFMessage& aMessage);
+
+private:
+	MMMFVideoSetInitScreenCustomCommandImplementor& iImplementor;
+	};
+
+
+/**
+WARNING: For internal use ONLY. Compatibility is not guaranteed in future releases.
+@internalComponent
+*/
+enum TMMFVideoPixelAspectRatioMessages
+	{
+	EMMFVideoGetPixelAspectRatio,
+	EMMFVideoSetPixelAspectRatio,
+	EMMFVideoGetSupportedPixelAspectRatios,
+	EMMFVideoPixelAspectRatioCopyArrayData
+	};
+
+/**
+WARNING: For internal use ONLY. Compatibility is not guaranteed in future releases.
+@internalComponent
+*/
+enum TMMFVideoAudioSamplingRateAndChannelConfigMessages
+	{
+	EMMFVideoGetAudioChannels,
+	EMMFVideoSetAudioChannels,
+	EMMFVideoGetSupportedAudioChannels,
+	EMMFVideoGetAudioSampleRate,
+	EMMFVideoSetAudioSampleRate,
+	EMMFVideoGetSupportedAudioSampleRates,
+	EMMFVideoAudioSamplingRateAndChannelConfigCopyArrayData
+	};
+
+
+/**
+@publishedPartner
+@released
+
+Client class to allow setting and getting the pixel aspect ratio for video recording.
+
+*/
+class RMMFVideoPixelAspectRatioCustomCommands : public RMMFCustomCommandsBase
+	{
+public:
+
+	/**
+	Constructor.
+
+	@param  aController
+	        The client side controller object to be used by this custom command interface.
+
+	*/
+	IMPORT_C RMMFVideoPixelAspectRatioCustomCommands(RMMFController& aController);
+
+	/**
+	Sets the pixel aspect ratio for the video recording on the controller.
+
+	@param  aAspectRatio
+	        The new pixel aspect ratio. The default pixel aspect ratio is 1:1.
+	
+	@return One of the system-wide error codes.
+	
+	*/
+	IMPORT_C TInt SetPixelAspectRatio(const TVideoAspectRatio& aAspectRatio);
+	
+	/**
+	Gets the current pixel aspect ratio for the video recording on the controller.
+
+	@param  aAspectRatio
+	        The current video pixel aspect ratio.
+
+	@return One of the system-wide error codes.	
+	*/
+	IMPORT_C TInt GetPixelAspectRatio(TVideoAspectRatio& aAspectRatio) const;
+	
+	/**
+	Gets the list of supported pixel aspect ratios for the video recording on the controller.
+
+	@param  aAspectRatios
+	        The supported pixel aspect ratios.
+	
+	@leave	This method may leave with one of the system-wide error codes.
+	*/
+	IMPORT_C void GetSupportedPixelAspectRatiosL(RArray<TVideoAspectRatio>& aAspectRatios) const;
+
+private:
+	void DoGetVideoPixelAspectRatioArrayL(RArray<TVideoAspectRatio>& aArray, TMMFVideoPixelAspectRatioMessages aIpc) const;
+	};
+
+
+/**
+@publishedPartner
+@released
+
+Mixin class to be derived from controller plug-ins that could support setting and getting the pixel aspect ratio for video recording. 
+*/
+class MMMFVideoPixelAspectRatioCustomCommandImplementor
+	{
+public:
+
+	/**
+	Sets the pixel aspect ratio.
+
+	@param  aAspectRatio
+	        The pixel aspect ratio to use.
+	*/
+	virtual void MvparSetPixelAspectRatioL(const TVideoAspectRatio& aAspectRatio) = 0;
+
+	/**
+	Gets the current pixel aspect ratio.
+
+	@param  aAspectRatio
+	        The current pixel aspect ratio.
+	*/
+	virtual void MvparGetPixelAspectRatioL(TVideoAspectRatio& aAspectRatio) = 0;
+	
+	/**
+	Gets the list of supported pixel aspect ratios.
+
+	@param  aAspectRatios
+	        The list of supported pixel aspect ratios.
+	*/
+	virtual void MvparGetSupportedPixelAspectRatiosL(RArray<TVideoAspectRatio>& aAspectRatios) = 0;
+	};
+
+
+/**
+@publishedPartner
+@released
+
+Custom command parser class to be used by controller plug-ins wishing to support setting and getting the pixel aspect 
+ratio for the video recording.
+
+The controller plug-in should create an object of this type and add it to the list of custom command parsers 
+in the controller framework. The controller plug-in must be derived from MMMFVideoPixelAspectRatioCustomCommandImplementor 
+to use this class. 
+*/
+class CMMFVideoPixelAspectRatioCustomCommandParser : public CMMFCustomCommandParserBase
+	{
+public:
+
+	/**
+	Creates a new custom command parser that supports setting and getting pixel aspect ratio for video recording.
+
+	@param  aImplementor
+	        A reference to the controller plug-in that owns this new object.
+
+	@return A pointer to the object created.
+
+	*/
+	IMPORT_C static CMMFVideoPixelAspectRatioCustomCommandParser* NewL(MMMFVideoPixelAspectRatioCustomCommandImplementor& aImplementor);
+
+	/**
+	Destructor.
+
+	*/
+	IMPORT_C ~CMMFVideoPixelAspectRatioCustomCommandParser();
+
+	/**
+	Handles a request from the client. Called by the controller framework.
+
+	@param  aMessage
+	        The message to be handled.
+
+	*/
+	void HandleRequest(TMMFMessage& aMessage);
+
+private:
+	CMMFVideoPixelAspectRatioCustomCommandParser(MMMFVideoPixelAspectRatioCustomCommandImplementor& aImplementor);
+	void DoHandleRequestL(TMMFMessage& aMessage);
+	TBool DoSetPixelAspectRatioL(TMMFMessage& aMessage);
+	TBool DoGetPixelAspectRatioL(TMMFMessage& aMessage);
+	TBool DoGetSupportedPixelAspectRatiosL(TMMFMessage& aMessage);
+	TBool DoCopyArrayDataL(TMMFMessage& aMessage);
+	void DoCreateBufFromVideoAspectRatioArrayL(RArray<TVideoAspectRatio>& aArray);
+
+private:
+	MMMFVideoPixelAspectRatioCustomCommandImplementor& iImplementor;
+	
+	CBufFlat* iDataCopyBuffer;
+	};
+
+
+/**
+@publishedPartner
+@released
+
+Client class to allow the audio sampling rate and channels configuration for video recording.
+
+*/
+class RMMFVideoAudioSamplingRateAndChannelConfigCustomCommands : public RMMFCustomCommandsBase
+	{
+public:
+
+	/**
+	Constructor.
+
+	@param  aController
+	        The client side controller object to be used by this custom command interface.
+
+	*/
+	IMPORT_C RMMFVideoAudioSamplingRateAndChannelConfigCustomCommands(RMMFController& aController);
+
+	/**
+	Sets the number of audio channels to record (1 for mono, 2 for stereo).
+
+	@param  aChannels
+	        The number of audio channels to record.
+
+	@return One of the system-wide error codes.
+	
+	*/
+	IMPORT_C TInt SetAudioChannels(const TUint aChannels);
+
+	/**
+	Gets the current number of audio channels to record (1 for mono, 2 for stereo).
+
+	@param  aChannels
+	        The current number of audio channels to record.
+
+	@return One of the system-wide error codes.
+	
+	*/
+	IMPORT_C TInt GetAudioChannels(TUint& aChannels) const;
+
+	/**
+	Gets the list of supported number of audio channels for video recording.
+
+	@param  aChannels
+	        The supported numbers of audio channels.
+	
+	@leave	This method may leave with one of the system-wide error codes.
+	*/
+	IMPORT_C void GetSupportedAudioChannelsL(RArray<TUint>& aChannels) const;
+	
+	/**
+	Sets the audio sample rate for video recording.
+
+	@param  aSampleRate
+	        The sample rate for audio recording.
+
+	@return One of the system-wide error codes.
+	
+	*/
+	IMPORT_C TInt SetAudioSampleRate(const TUint aSampleRate);
+
+	/**
+	Gets the current audio sample rate for recording.
+
+	@param  aSampleRate
+	        The current audio sample rate for recording.
+
+	@return One of the system-wide error codes.
+	
+	*/
+	IMPORT_C TInt GetAudioSampleRate(TUint& aSampleRate) const;
+
+	/**
+	Gets the list of supported audio sample rates for video recording.
+
+	@param  aSampleRates
+	        The supported audio sample rates.
+	
+	@leave	This method may leave with one of the system-wide error codes.
+	*/
+	IMPORT_C void GetSupportedAudioSampleRatesL(RArray<TUint>& aSampleRates) const;
+	
+private:
+	void DoGetUintArrayL(RArray<TUint>& aArray, TMMFVideoAudioSamplingRateAndChannelConfigMessages aIpc) const;
+	};
+
+
+/**
+@publishedPartner
+@released
+
+Mixin class to be derived from controller plug-ins that could support the audio sampling rate and channels configuration. 
+*/
+class MMMFVideoAudioSamplingRateAndChannelConfigCustomCommandImplementor
+	{
+public:
+
+	/**
+	Sets the number of audio channels.
+
+	@param  aChannels
+	        The number of audio channels to use.
+	*/
+	virtual void MvasrccSetAudioChannelsL(const TUint aChannels) = 0;
+
+	/**
+	Gets the current number of audio channels.
+
+	@param  aChannels
+	        The current number of audio channels.
+	*/
+	virtual void MvasrccGetAudioChannelsL(TUint& aChannels) = 0;
+
+	/**
+	Gets the list of supported number of audio channels.
+
+	@param  aChannels
+	        The list of supported number of audio channels.
+	*/
+	virtual void MvasrccGetSupportedAudioChannelsL(RArray<TUint>& aChannels) = 0;
+	
+	/**
+	Sets the audio sample rate.
+
+	@param  aSampleRate
+	        The audio sample rate to use.
+	*/
+	virtual void MvasrccSetAudioSampleRateL(const TUint aSampleRate) = 0;
+
+	/**
+	Gets the current audio sample rate.
+
+	@param  aSampleRate
+	        The current audio sample rate.
+	*/
+	virtual void MvasrccGetAudioSampleRateL(TUint& aSampleRate) = 0;
+
+	/**
+	Gets the list of supported audio sample rates.
+
+	@param  aSampleRates
+	        The list of supported audio sample rates.
+	*/
+	virtual void MvasrccGetSupportedAudioSampleRatesL(RArray<TUint>& aSampleRates) = 0;
+	};
+
+/**
+@publishedPartner
+@released
+
+Custom command parser class to be used by controller plug-ins wishing to support the audio sampling rate and channels
+configuration for the video recording.
+
+The controller plug-in should create an object of this type and add it to the list of custom command parsers 
+in the controller framework. The controller plug-in must be derived from MMMFVideoAudioSamplingRateAndChannelConfigCustomCommandImplementor 
+to use this class. 
+*/
+class CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser : public CMMFCustomCommandParserBase
+	{
+public:
+
+	/**
+	Creates a new custom command parser that supports the audio sampling rate and channels configuration for video recording.
+
+	@param  aImplementor
+	        A reference to the controller plug-in that owns this new object.
+
+	@return A pointer to the object created.
+
+	*/
+	IMPORT_C static CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser* NewL(MMMFVideoAudioSamplingRateAndChannelConfigCustomCommandImplementor& aImplementor);
+
+	/**
+	Destructor.
+
+	*/
+	IMPORT_C ~CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser();
+
+	/**
+	Handles a request from the client. Called by the controller framework.
+
+	@param  aMessage
+	        The message to be handled.
+
+	*/
+	void HandleRequest(TMMFMessage& aMessage);
+
+private:
+	CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser(MMMFVideoAudioSamplingRateAndChannelConfigCustomCommandImplementor& aImplementor);
+	void DoHandleRequestL(TMMFMessage& aMessage);
+	TBool DoSetAudioChannelsL(TMMFMessage& aMessage);
+	TBool DoGetAudioChannelsL(TMMFMessage& aMessage);
+	TBool DoGetSupportedAudioChannelsL(TMMFMessage& aMessage);
+	
+	TBool DoSetAudioSampleRateL(TMMFMessage& aMessage);
+	TBool DoGetAudioSampleRateL(TMMFMessage& aMessage);
+	TBool DoGetSupportedAudioSampleRatesL(TMMFMessage& aMessage);
+	
+	TBool DoCopyArrayDataL(TMMFMessage& aMessage);
+	
+	void DoCreateBufFromUintArrayL(RArray<TUint>& aArray);
+
+private:
+	MMMFVideoAudioSamplingRateAndChannelConfigCustomCommandImplementor& iImplementor;
+	
+	CBufFlat* iDataCopyBuffer;
+	};
+
+/**
+@publishedPartner
+@released
+*/
+const TUid KUidInterfaceMMFVideoPlayExt = {0x10283437};	
+
+class TVideoPlayRateCapabilities;
+
+/**
+Mixin class to be derived from controller plug-ins that could support
+play velocity, enabling/disabling audio/video, and auto scaling.
+
+@publishedPartner
+@released
+*/	
+class MMMFVideoPlayControllerExtCustomCommandImplementor
+	{
+public:
+
+	/**
+	Sets play velocity. 
+	Behaviour is same as CVideoPlayerUtility::SetPlayVelocityL
+	
+	@see CVideoPlayerUtility::SetPlayVelocityL
+	*/
+	virtual void MvpecSetPlayVelocityL(TInt aVelocity)=0;
+	
+	/**
+	Gets play velocity.
+	Behaviour is same as CVideoPlayerUtility::PlayVelocityL	
+	
+	@see CVideoPlayerUtility::PlayVelocityL
+	*/
+	virtual TInt MvpecPlayVelocityL()=0;
+	
+	/**
+	Steps through frames in pause mode.
+	Behaviour is same as CVideoPlayerUtility::StepFrameL	
+		
+	@see CVideoPlayerUtility::StepFrameL
+	*/
+	virtual void MvpecStepFrameL(TInt aStep)=0;
+	
+	/**
+	Gets play rate capabilities.
+	Behaviour is same as CVideoPlayerUtility::GetPlayRateCapabilitiesL	
+		
+	@see CVideoPlayerUtility::GetPlayRateCapabilitiesL
+	*/
+	virtual void MvpecGetPlayRateCapabilitiesL(TVideoPlayRateCapabilities& aCapabilities)=0;
+	
+	/**
+	Enables/Disables video playback.
+	Behaviour is same as CVideoPlayerUtility::SetVideoEnabledL	
+	
+	@see CVideoPlayerUtility::SetVideoEnabledL
+	*/
+	virtual void MvpecSetVideoEnabledL(TBool aVideoEnabled)=0;
+	
+	/**
+    Queries whether video playback is currently enabled or not.
+	Behaviour is same as CVideoPlayerUtility::VideoEnabledL	
+	
+	@see CVideoPlayerUtility::VideoEnabledL
+	*/
+	virtual TBool MvpecVideoEnabledL()=0;
+	
+	/**
+	Enables or disables audio playback.
+	Behaviour is same as CVideoPlayerUtility::SetAudioEnabled	
+	
+	@see CVideoPlayerUtility::SetAudioEnabled
+	*/
+	virtual void MvpecSetAudioEnabledL(TBool aAudioEnabled)=0;
+	
+	/**
+	Sets Auto scale mode.
+	Behaviour is same as CVideoPlayerUtility::SetAutoScaleL	
+	
+	@see CVideoPlayerUtility::SetAutoScaleL
+	*/
+	virtual void MvpecSetAutoScaleL(TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos)=0;
+	};
+
+
+
+/**
+Custom command parser class to be used by controller plug-ins wishing to support play velocity, 
+enabling/disabling audio/video, and auto scaling.
+
+The controller plug-in should create an object of this type and add it to the list of custom command parsers 
+in the controller framework. The controller plug-in must be derived from MMMFVideoPlayControllerExtCustomCommandImplementor 
+to use this class. 
+
+@publishedPartner
+@released
+*/
+class CMMFVideoPlayControllerExtCustomCommandParser : public CMMFCustomCommandParserBase
+	{
+public:
+
+	/**
+	Creates a new custom command parser that supports the video rate control and auto scaling.
+
+	@param  aImplementor
+	        A reference to the controller plug-in that owns this new object.
+
+	@return A pointer to the object created.
+
+	*/
+	IMPORT_C static CMMFVideoPlayControllerExtCustomCommandParser* NewL(MMMFVideoPlayControllerExtCustomCommandImplementor& aImplementor);
+
+	/**
+	Destructor.
+
+	*/
+	IMPORT_C ~CMMFVideoPlayControllerExtCustomCommandParser();
+
+	/**
+	Handles a request from the client. Called by the controller framework.
+
+	@param  aMessage
+	        The message to be handled.
+
+	*/
+	void HandleRequest(TMMFMessage& aMessage);
+
+private:
+	CMMFVideoPlayControllerExtCustomCommandParser(MMMFVideoPlayControllerExtCustomCommandImplementor& aImplementor);
+	void DoHandleRequestL(TMMFMessage& aMessage);
+	TBool DoSetPlayVelocityL(TMMFMessage& aMessage);
+	TBool DoPlayVelocityL(TMMFMessage& aMessage);
+	TBool DoStepFrameL(TMMFMessage& aMessage);
+	TBool DoGetPlayRateCapabilitiesL(TMMFMessage& aMessage);
+	TBool DoSetVideoEnabledL(TMMFMessage& aMessage);
+	TBool DoVideoEnabledL(TMMFMessage& aMessage);
+	TBool DoSetAudioEnabledL(TMMFMessage& aMessage);
+	TBool DoSetAutoScaleL(TMMFMessage& aMessage);
+private:
+	MMMFVideoPlayControllerExtCustomCommandImplementor& iImplementor;
+	};
+
+/**
+Resource class to be used by player utility for sending custom commands.
+
+@publishedPartner
+@released
+*/	
+class RMMFVideoPlayControllerExtCustomCommands: public RMMFCustomCommandsBase
+	{
+public:
+	/**
+	Constructor.
+
+	@param  aController
+	        The client side controller object to be used by this custom command interface.
+	*/
+	IMPORT_C RMMFVideoPlayControllerExtCustomCommands(RMMFController& aController);
+	
+	/**
+	Sets play velocity.
+	Behaviour is same as CVideoPlayerUtility::SetPlayVelocityL
+		
+	@param  aVelocity 
+			Velocity of the playback.
+
+	@return One of the system-wide error codes.	
+
+	@see CVideoPlayerUtility::SetPlayVelocityL	
+	*/
+	IMPORT_C TInt SetPlayVelocity(TInt aVelocity);
+
+	/**
+	Gets play velocity.
+	Behaviour is same as CVideoPlayerUtility::PlayVelocityL	
+
+	@param  aVelocity 
+			Velocity of the playback.
+
+	@return One of the system-wide error codes.	
+		
+	@see CVideoPlayerUtility::PlayVelocityL
+	*/
+	IMPORT_C TInt PlayVelocity(TInt &aVelocity)const;
+
+	/**
+	Steps through frames in pause mode.
+	Behaviour is same as CVideoPlayerUtility::StepFrameL	
+
+	@param  aStep 
+			Count indicating number of frames to step playback position.
+
+	@return One of the system-wide error codes.
+
+	@see CVideoPlayerUtility::StepFrameL
+	*/
+	IMPORT_C TInt StepFrame(TInt aStep);
+	
+	/**
+	Gets play rate capabilities.
+	Behaviour is same as CVideoPlayerUtility::GetPlayRateCapabilitiesL	
+
+    @param aCapabilities Playback rate capabilities
+
+	@return One of the system-wide error codes.
+		
+	@see CVideoPlayerUtility::GetPlayRateCapabilitiesL
+	*/
+	IMPORT_C TInt GetPlayRateCapabilities(TVideoPlayRateCapabilities& aCapabilities)const;
+
+	/**
+	Enables/Disables video playback.
+	Behaviour is same as CVideoPlayerUtility::SetVideoEnabledL	
+    
+    @param aVideoEnabled ETrue to enable video playback, EFalse to disable
+
+	@return One of the system-wide error codes.    	
+
+	@see CVideoPlayerUtility::SetVideoEnabledL
+	*/
+	IMPORT_C TInt SetVideoEnabled(TBool aVideoEnabled);
+	
+	/**
+    Queries whether video playback is currently enabled or not.
+	Behaviour is same as CVideoPlayerUtility::VideoEnabledL
+
+    @param aVideoEnabled 
+    	   Out parameter returns ETrue if video playback is enabled, EFalse if not.
+
+	@return One of the system-wide error codes.
+	
+	@see CVideoPlayerUtility::VideoEnabledL
+	*/
+	IMPORT_C TInt VideoEnabled(TBool &aVideoEnabled)const;
+	
+	/**
+	Enables or disables audio playback.
+	Behaviour is same as CVideoPlayerUtility::SetAudioEnabledL
+
+    @param aVideoEnabled ETrue to enable audio playback, EFalse to disable		
+
+	@return One of the system-wide error codes.
+
+	@see CVideoPlayerUtility::SetAudioEnabledL
+	*/
+	IMPORT_C TInt SetAudioEnabled(TBool aAudioEnabled);
+
+	/**
+	Sets Auto scale mode.
+ 	Behaviour is same as CVideoPlayerUtility::SetAutoScaleL
+	
+    @param aScaleType 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.
+	@return One of the system-wide error codes.
+		
+	@see CVideoPlayerUtility::SetAutoScaleL
+	*/
+	IMPORT_C TInt SetAutoScale(TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos);
+	};
+
+/**
+@publishedPartner
+@released
+*/
+const TUid KUidInterfaceMMFVideoRecorderExt = {0x10283438};
+
+/**
+Mixin class to be derived from controller plug-ins that could support quality and enabling video. 
+
+@publishedPartner
+@released
+*/	
+class MMMFVideoRecordControllerExtCustomCommandImplementor
+	{
+public:
+
+	/**
+	Enabled or disables video in recorder.
+	Behaviour is same as CVideoRecorderUtility::SetVideoEnabledL	
+
+	@see CVideoRecorderUtility::SetVideoEnabledL
+	*/
+    virtual void MvrecSetVideoEnabledL(TBool aEnabled)=0;
+	/**
+	Gets the flag that indicates video enabled or not.
+	Behaviour is same as CVideoRecorderUtility::VideoEnabledL	
+
+	@see CVideoRecorderUtility::VideoEnabledL
+	*/
+    virtual TBool MvrecVideoEnabledL() const=0;
+	/**
+	Sets the quality of video being recorded.
+	Behaviour is same as CVideoRecorderUtility::SetVideoQualityL	
+
+	@see CVideoRecorderUtility::SetVideoQualityL
+	*/
+    virtual void MvrecSetVideoQualityL(TInt aQuality)=0;
+	/**
+	Gets video quality level set using SetVideoQualityL.
+	Behaviour is same as CVideoRecorderUtility::VideoQualityL	
+
+	@see CVideoRecorderUtility::VideoQualityL
+	*/
+    virtual TInt MvrecVideoQualityL() const=0;
+	/**
+	Sets the video framerate to fixed.
+	Behaviour is same as CVideoRecorderUtility::SetVideoFrameRateFixedL	
+
+	@see CVideoRecorderUtility::SetVideoFrameRateFixedL
+	*/
+    virtual void MvrecSetVideoFrameRateFixedL(TBool aFixedFrameRate)=0;
+	/**
+	Gets FrameRateFixed flag set using SetVideoFrameRateFixedL.
+	Behaviour is same as CVideoRecorderUtility::VideoFrameRateFixedL	
+
+	@see CVideoRecorderUtility::VideoFrameRateFixedL
+	*/
+    virtual TBool MvrecVideoFrameRateFixedL() const=0;
+	};
+
+
+
+/**
+Custom command parser class to be used by controller plug-ins wishing to implement VideoRecorderExt custom commands.
+
+The controller plug-in should create an object of this type and add it to the list of custom command parsers 
+in the controller framework. The controller plug-in must be derived from MMMFVideoRecordControllerExtCustomCommandImplementor
+to use this class.
+
+@publishedPartner
+@released
+*/
+class CMMFVideoRecordControllerExtCustomCommandParser : public CMMFCustomCommandParserBase
+	{
+public:
+
+	/**
+	Creates a new custom command parser that supports the video rate control and auto scaling.
+
+	@param  aImplementor A reference to the controller plug-in that owns this new object.
+	@return A pointer to the object created.
+	*/
+	IMPORT_C static CMMFVideoRecordControllerExtCustomCommandParser* NewL(MMMFVideoRecordControllerExtCustomCommandImplementor& aImplementor);
+
+	/**
+	Destructor.
+	*/
+	IMPORT_C ~CMMFVideoRecordControllerExtCustomCommandParser();
+
+	/**
+	Handles a request from the client. Called by the controller framework.
+
+	@param  aMessage The message to be handled.
+	*/
+	void HandleRequest(TMMFMessage& aMessage);
+
+private:
+	CMMFVideoRecordControllerExtCustomCommandParser(MMMFVideoRecordControllerExtCustomCommandImplementor& aImplementor);
+	void DoHandleRequestL(TMMFMessage& aMessage);
+	TBool DoSetVideoEnabledL(TMMFMessage& aMessage);
+	TBool DoVideoEnabledL(TMMFMessage& aMessage);
+	TBool DoSetVideoQualityL(TMMFMessage& aMessage);
+	TBool DoVideoQualityL(TMMFMessage& aMessage);
+	TBool DoSetVideoFrameRateFixedL(TMMFMessage& aMessage);
+	TBool DoVideoFrameRateFixedL(TMMFMessage& aMessage);
+private:
+	MMMFVideoRecordControllerExtCustomCommandImplementor& iImplementor;
+	};
+
+/**
+Resource class to be used by Recorder utility for sending custom commands.
+
+@publishedPartner
+@released
+*/	
+class RMMFVideoRecordControllerExtCustomCommands: public RMMFCustomCommandsBase
+	{
+public:
+	/**
+	Constructor.
+
+	@param  aController
+	        The client side controller object to be used by this custom command interface.
+	@return One of the system-wide error codes.
+	*/
+	IMPORT_C RMMFVideoRecordControllerExtCustomCommands(RMMFController& aController);
+	
+	/**
+	Enabled or disables video in recorder.
+	Behaviour is same as CVideoRecorderUtility::SetVideoEnabledL	
+
+    @param aEnabled ETrue to enable video recording, EFalse to enable it
+
+	@return One of the system-wide error codes.	
+	@see CVideoRecorderUtility::SetVideoEnabledL
+	*/
+    IMPORT_C TInt SetVideoEnabled(TBool aEnabled);
+    
+	/**
+	Gets the flag that indicates video enabled or not.
+	Behaviour is same as CVideoRecorderUtility::VideoEnabledL	
+
+    @param aEnabled 
+    	   Out parameter returns ETrue if video recording is enabled , EFalse otherwise.
+
+	@return One of the system-wide error codes.	
+	@see CVideoRecorderUtility::VideoEnabledL
+	*/
+    IMPORT_C TInt VideoEnabled(TBool &aEnabled) const;
+    
+	/**
+	Sets the quality of video being recorded.
+	Behaviour is same as CVideoRecorderUtility::SetVideoQualityL	
+
+    @param aQuality Video quality, in the range of 0 to 100, inclusive.
+
+	@return One of the system-wide error codes.	
+	@see CVideoRecorderUtility::SetVideoQualityL
+	*/
+    IMPORT_C TInt SetVideoQuality(TInt aQuality);
+    
+	/**
+	Gets video quality level set using SetVideoQualityL.
+	Behaviour is same as CVideoRecorderUtility::VideoQualityL	
+    
+    @param aQuality Out parameter returning Video quality in the range 0-100.
+    
+    @return One of the system-wide error codes.	
+	@see CVideoRecorderUtility::VideoQualityL
+	*/
+    IMPORT_C TInt VideoQuality(TInt &aQuality) const;
+    
+	/**
+	Sets the video framerate to fixed.
+	Behaviour is same as CVideoRecorderUtility::SetVideoFrameRateFixedL	
+	
+    @param aFixedFrameRate ETrue to request a fixed framerate, EFalse to
+                          request a variable framerate.
+
+	@return One of the system-wide error codes.	
+	@see CVideoRecorderUtility::SetVideoFrameRateFixedL
+	*/
+    IMPORT_C TInt SetVideoFrameRateFixed(TBool aFixedFrameRate);
+    
+	/**
+	Gets FrameRateFixed flag set using SetVideoFrameRateFixedL.
+	Behaviour is same as CVideoRecorderUtility::VideoFrameRateFixedL	
+
+    @param aFixedFrameRate Out parameter returns ETrue if fixed framerate
+     						is enabled, EFalse otherwise.
+    
+	@return One of the system-wide error codes.	
+	@see CVideoRecorderUtility::VideoFrameRateFixedL
+	*/
+    IMPORT_C TInt VideoFrameRateFixed(TBool &aFixedFrameRate) const;
+    };
+
+/**
+@publishedPartner
+@released
+
+Interface UID and messages for the Audio Play Controller Set Repeats API.
+*/
+const TUid KUidInterfaceMMFAudioPlaySetRepeatsController = {0x102834D5};
+
+
+/**
+@publishedPartner
+@released
+
+Client class to access loop play functionality of audio play 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 RMMFAudioPlayControllerSetRepeatsCustomCommands : public RMMFCustomCommandsBase
+	{
+public:
+	
+	/**
+	Constructor.
+
+	@param  aController
+	        The client side controller object to be used by this custom command interface.
+	*/
+	IMPORT_C RMMFAudioPlayControllerSetRepeatsCustomCommands(RMMFController& aController);
+
+	/**
+	Sets the number of times the audio sample to be repeated and the trailing silence period
+	
+	@param  aRepeatNumberOfTimes
+			The number of times the audio sample needs to be repeated
+	
+	@param  aTrailingSilence
+	        The time interval of the trailing silence in microseconds.
+	        
+	@return KErrNotSupported if the controller plugin does not support the loop play functionality.
+	*/
+	IMPORT_C TInt SetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence);
+	};
+
+/**
+@publishedPartner
+@released
+
+Mixin class to be derived from by controller plugins that could support the set repeats custom command.
+*/
+class MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor
+	{
+public:
+
+	/**
+	Sets the number of times the audio sample is to be repeated during the playback operation.	
+	A period of silence can follow each playing of the sample. The audio sample can be repeated indefinitely.
+	
+	@param	aRepeatNumberOfTimes
+    		The number of times the audio sample, together with the trailing silence, is to be repeated. 
+    		If this is set to KMdaRepeatForever, then the audio sample, together with the trailing silence, 
+    		is repeated indefinitely or until Stop() is called. 
+    		If this is set to zero, then the audio sample is not repeated.
+	
+	@param  aTrailingSilence
+         	The time interval of the trailing silence in microseconds.
+	
+	@return	KErrNone if the controller plugin supports the loop play functionality
+			KErrNotSupported if the controller plugin does not support the loop play functionality
+			KErrNotReady if the controller plugin is not yet added the audio sink
+	*/		
+	virtual TInt MapcSetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence) = 0;		
+	};
+
+/**
+@publishedPartner
+@released
+
+Custom command parser class to be used by controller plugins wishing to support set repeats functionality
+
+The controller plugin should create an object of this type and add it to the list of custom command parsers 
+in the controller framework. The controller plugin must be derived from 
+MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor to use this class. 
+*/
+
+class CMMFAudioPlayControllerSetRepeatsCustomCommandParser : public CMMFCustomCommandParserBase
+	{
+public:
+
+	/**
+	Creates a new custom command parser capable of handling set repeats controller commands.
+
+	@param  aImplementor
+	        A reference to the controller plugin that owns this new object.
+
+	@return A pointer to the object created.
+
+	*/
+	IMPORT_C static CMMFAudioPlayControllerSetRepeatsCustomCommandParser* NewL(MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor& aImplementor);
+
+	/**
+	Destructor.
+
+	*/
+	IMPORT_C ~CMMFAudioPlayControllerSetRepeatsCustomCommandParser();
+
+	/**
+	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.
+
+	*/
+	CMMFAudioPlayControllerSetRepeatsCustomCommandParser(MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor& aImplementor);
+	// Internal request handling methods.
+	void DoHandleRequestL(TMMFMessage& aMessage);
+	TBool DoSetRepeatsL(TMMFMessage& aMessage);
+private:
+	/** 
+	The object that implements the set repeats custom command i.e controller plugin
+	*/
+	MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor& iImplementor;
+	};
+
+#endif