diff -r 000000000000 -r 40261b775718 mmlibs/mmfw/inc/mmf/ControllerFramework/mmfstandardcustomcommands.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmlibs/mmfw/inc/mmf/ControllerFramework/mmfstandardcustomcommands.h Tue Feb 02 01:56:55 2010 +0200 @@ -0,0 +1,3772 @@ +// 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_H +#define __MMFSTANDARDCUSTOMCOMMANDS_H + +#include +#include +#include "mmf/common/mmcaf.h" + +class CMMFVideoFrameMessage; +class CFbsBitmap; +class CDesC8Array; + +/** +@publishedAll +@released +*/ +const TInt KPlaybackRateNormal = 1; + +/** +@publishedAll +@released + +Balance value for centre +*/ +const TInt KMMFBalanceCenter = 0; + +/** +@publishedAll +@released + +Balance value for max left +*/ +const TInt KMMFBalanceMaxLeft = -100; + +/** +@publishedAll +@released + +Balance value for max right +*/ +const TInt KMMFBalanceMaxRight = 100; + +/** +@publishedAll +@released +*/ +const TInt KMMFVideoCurrentFrame = -1; + +/** +@publishedAll +@released +*/ +enum TMMFDSAEvent + { + EAbortDSA, + EResumeDSA + }; + +/** +@publishedAll +@released + +Interface UID and messages for the Audio Resource Notification API. +*/ +const TUid KMMFEventCategoryAudioResourceAvailable = {0x101FD9F2}; + + +/** +@publishedAll +@released + +Interface UID and messages for the Audio Play Device API. +*/ +const TUid KUidInterfaceMMFAudioPlayDevice = {0x101F76D6}; + +/** +@publishedAll +@released + +Interface UID and messages for the Audio Record Device API. +*/ +const TUid KUidInterfaceMMFAudioRecordDevice = {0x101F76D7}; + +/** +@publishedAll +@released + +Interface UID and messages for the Audio Play Controller API. +*/ +const TUid KUidInterfaceMMFAudioPlayController = {0x101F76D8}; + +/** +@publishedAll +@released + +Interface UID and messages for the Audio Record Controller API. +*/ +const TUid KUidInterfaceMMFAudioRecordController = {0x101F76D9}; + +/** +@publishedAll +@released + +Interface UID and messages for the Audio Controller API. +*/ +const TUid KUidInterfaceMMFAudioController = {0x101F76DA}; + +/** +@publishedAll +@released +*/ +const TUid KUidInterfaceMMFVideoController = {0x101F76DB}; + +/** +@publishedAll +@released +*/ +const TUid KUidInterfaceMMFVideoPlayController = {0x101F7B73}; + +/** +@publishedAll +@released +*/ +const TUid KUidInterfaceMMFVideoRecordController = {0x101F7B74}; + +/** +@publishedAll +@released +*/ +const TUid KUidInterfaceMMFVideoDRMExt = {0x101F7C23}; + +/** +@publishedAll +@released + +Interface UID for the custom command that supports setting the initial screen for video on the controller. +*/ +const TUid KUidInterfaceMMFVideoSetInitScreen = {0x102825F7}; + +/** +@publishedAll +@released +*/ +const TUid KUidInterfaceMMFVideoPixelAspectRatio = {0x102831EF}; + + +/** +@publishedAll +@released +*/ +const TUid KUidInterfaceMMFVideoAudioSamplingRateAndChannelConfig = {0x102831F0}; + +/** +@publishedAll +@released + +Client class to access Audio Play Device functionality. + +The class uses the custom command function of the controller plugin, and removes the necessity +for the client to formulate the custom commands. +@since 7.0s +*/ +class RMMFAudioPlayDeviceCustomCommands : public RMMFCustomCommandsBase + { +public: + + /** + Constructor. + + @param aController + The client side controller object to be used by this custom command interface. + + @since 7.0s + */ + IMPORT_C RMMFAudioPlayDeviceCustomCommands(RMMFController& aController); + + /** + Sets the volume of the sound device. + + @param aVolume + The new volume. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetVolume(TInt aVolume) const; + + /** + Gets the maximum volume supported by the sound device. + + @param aMaxVolume + The maximum volume, filled in by the controller. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetMaxVolume(TInt& aMaxVolume) const; + + /** + Gets the current playback volume. + + @param aVolume + On return contains the current playback volume. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetVolume(TInt& aVolume) const; + + /** + Sets a volume ramp. + + This will cause the sound device to start playing with zero volume, + increasing the volume over aRampDuration microseconds. + + The volume ramp can be removed by setting the ramp duration to zero. + + @param aRampDuration + The duration over which the volume is to be increased, in microseconds. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration) const; + + /** + Sets the balance between the left and right stereo audio channels. + + @param aBalance + Use a value between KMMFBalanceMaxLeft and KMMFBalanceMaxRight. Centre balance can be + restored by using KMMFBalanceCenter. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetBalance(TInt aBalance) const; + + /** + Gets the balance between the left and right stereo audio channels. + + @param aBalance + The current balance, filled in by the controller. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetBalance(TInt& aBalance) const; + }; + +/** +@publishedAll +@released + +Mixin class to be derived from controller plugins that could support the audio play device +custom commands. +*/ +class MMMFAudioPlayDeviceCustomCommandImplementor + { +public: + + /** + Sets the volume of the sound device. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aVolume + The new volume. + + @since 7.0s + */ + virtual void MapdSetVolumeL(TInt aVolume) = 0; + + /** + Gets the maximum volume supported by the sound device. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aMaxVolume + The maximum volume, to be filled in by the controller plugin. + + @since 7.0s + */ + virtual void MapdGetMaxVolumeL(TInt& aMaxVolume) = 0; + + /** + Gets the current playback volume. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aVolume + The volume, to be filled in by the controller. + + @since 7.0s + */ + virtual void MapdGetVolumeL(TInt& aVolume) = 0; + + /** + Sets a volume ramp. + + This will cause the sound device to start playing with zero volume, + increasing the volume over aRampDuration microseconds. + + The volume ramp can be removed by setting the ramp duration to zero. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aRampDuration + The duration over which the volume is to be increased, in microseconds. + + @since 7.0s + */ + virtual void MapdSetVolumeRampL(const TTimeIntervalMicroSeconds& aRampDuration) = 0; + + /** + Sets the balance between the left and right stereo audio channels. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aBalance + Use a value between KMMFBalanceMaxLeft and KMMFBalanceMaxRight. Centre balance can be + restored by using KMMFBalanceCenter. + + @since 7.0s + */ + virtual void MapdSetBalanceL(TInt aBalance) = 0; + + /** + Gets the balance between the left and right stereo audio channels. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aBalance + The current balance, filled in by the controller. + + @since 7.0s + */ + virtual void MapdGetBalanceL(TInt& aBalance) = 0; + }; + +/** +@publishedAll +@released + +Custom command parser class to be used by controller plugins wishing to support +audio play device commands. + +The controller plugin must be derived from MMMFAudioPlayDeviceCustomCommandImplementor +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. See the following example code for details. + +@code +void CMMFAudioController::ConstructL() + { + // Construct custom command parsers + CMMFAudioPlayDeviceCustomCommandParser* audPlayDevParser = CMMFAudioPlayDeviceCustomCommandParser::NewL(*this); + CleanupStack::PushL(audPlayDevParser); + AddCustomCommandParserL(*audPlayDevParser); //parser now owned by controller framework + CleanupStack::Pop();//audPlayDevParser + + CMMFAudioRecordDeviceCustomCommandParser* audRecDevParser = CMMFAudioRecordDeviceCustomCommandParser::NewL(*this); + CleanupStack::PushL(audRecDevParser); + AddCustomCommandParserL(*audRecDevParser); //parser now owned by controller framework + CleanupStack::Pop();//audRecDevParser + +etc. + } +@endcode + +@since 7.0s +*/ +class CMMFAudioPlayDeviceCustomCommandParser : public CMMFCustomCommandParserBase + { +public: + + /** + Creates a new custom command parser capable of handling audio play device commands. + + This function may leave with one of the system-wide error codes. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @return A pointer to the object created. + + @since 7.0s + */ + IMPORT_C static CMMFAudioPlayDeviceCustomCommandParser* NewL(MMMFAudioPlayDeviceCustomCommandImplementor& aImplementor); + + /** + Destructor. + + @since 7.0s + */ + IMPORT_C ~CMMFAudioPlayDeviceCustomCommandParser(); + + /** + Handles a request from the client. Called by the controller framework. + + @param aMessage + The message to be handled. + + @since 7.0s + */ + void HandleRequest(TMMFMessage& aMessage); +private: + + /** + Constructor. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @since 7.0s + */ + CMMFAudioPlayDeviceCustomCommandParser(MMMFAudioPlayDeviceCustomCommandImplementor& aImplementor); + // Internal request handling methods. + void DoHandleRequestL(TMMFMessage& aMessage); + TBool DoSetVolumeL(TMMFMessage& aMessage); + TBool DoGetMaxVolumeL(TMMFMessage& aMessage); + TBool DoGetVolumeL(TMMFMessage& aMessage); + TBool DoSetVolumeRampL(TMMFMessage& aMessage); + TBool DoSetBalanceL(TMMFMessage& aMessage); + TBool DoGetBalanceL(TMMFMessage& aMessage); +private: + /** The object that implements the audio play device interface */ + MMMFAudioPlayDeviceCustomCommandImplementor& iImplementor; + }; + +/** +@publishedAll +@released + +Client class to access Audio Record Device functionality. + +The class uses the custom command function of the controller plugin, and removes the necessity +for the client to formulate the custom commands. + +@since 7.0s +*/ +class RMMFAudioRecordDeviceCustomCommands : public RMMFCustomCommandsBase + { +public: + + /** + Constructor. + + @param aController + The client side controller object to be used by this custom command interface. + + @since 7.0s + */ + IMPORT_C RMMFAudioRecordDeviceCustomCommands(RMMFController& aController); + + /** + Sets the gain of the sound device. + + @param aGain + The new gain. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetGain(TInt aGain) const; + + /** + Gets the maximum gain supported by the sound device. + + @param aMaxGain + The maximum gain, filled in by the controller. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetMaxGain(TInt& aMaxGain) const; + + /** + Gets the current recording gain. + + @param aGain + The gain, filled in by the controller. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetGain(TInt& aGain) const; + + /** + Sets the balance between the left and right stereo microphone channels. + + @param aBalance + Use a value between KMMFBalanceMaxLeft and KMMFBalanceMaxRight. Centre balance can be + restored by using KMMFBalanceCenter. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetBalance(TInt aBalance) const; + + /** + Gets the balance between the left and right stereo microphone channels. + + @param aBalance + The current balance, filled in by the controller. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetBalance(TInt& aBalance) const; + }; + +/** +@publishedAll +@released + +Mixin class to be derived from controller plugins that could support the audio record device +custom commands. +*/ +class MMMFAudioRecordDeviceCustomCommandImplementor + { +public: + + /** + Sets the gain of the sound device. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aGain + The new gain. + + @since 7.0s + */ + virtual void MardSetGainL(TInt aGain) = 0; + + /** + Gets the maximum gain supported by the sound device. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aMaxGain + The maximum gain, to be filled in by the controller plugin. + + @since 7.0s + */ + virtual void MardGetMaxGainL(TInt& aMaxGain) = 0; + + /** + Gets the current recording gain. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aGain + The gain, to be filled in by the controller. + + @since 7.0s + */ + virtual void MardGetGainL(TInt& aGain) = 0; + + /** + Sets the balance between the left and right stereo microphone channels. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aBalance + Use a value between KMMFBalanceMaxLeft and KMMFBalanceMaxRight. Centre balance can be + restored by using KMMFBalanceCenter. + + @since 7.0s + */ + virtual void MardSetBalanceL(TInt aBalance) = 0; + + /** + Gets the balance between the left and right stereo microphone channels. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aBalance + The current balance, filled in by the controller. + + @since 7.0s + */ + virtual void MardGetBalanceL(TInt& aBalance) = 0; + }; + +/** +@publishedAll +@released + +Custom command parser class to be used by controller plugins wishing to support +audio record device commands. + +The controller plugin must be derived from MMMFAudioRecordDeviceCustomCommandImplementor +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. See the following example code for details. + +@code +void CMMFAudioController::ConstructL() + { + // Construct custom command parsers + CMMFAudioPlayDeviceCustomCommandParser* audPlayDevParser = CMMFAudioPlayDeviceCustomCommandParser::NewL(*this); + CleanupStack::PushL(audPlayDevParser); + AddCustomCommandParserL(*audPlayDevParser); //parser now owned by controller framework + CleanupStack::Pop();//audPlayDevParser + + CMMFAudioRecordDeviceCustomCommandParser* audRecDevParser = CMMFAudioRecordDeviceCustomCommandParser::NewL(*this); + CleanupStack::PushL(audRecDevParser); + AddCustomCommandParserL(*audRecDevParser); //parser now owned by controller framework + CleanupStack::Pop();//audRecDevParser + +etc. + } +@endcode + +@since 7.0s +*/ +class CMMFAudioRecordDeviceCustomCommandParser : public CMMFCustomCommandParserBase + { +public: + + /** + Creates a new custom command parser capable of handling audio record device commands. + + This function may leave with one of the system-wide error codes. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @return A pointer to the object created. + + @since 7.0s + */ + IMPORT_C static CMMFAudioRecordDeviceCustomCommandParser* NewL(MMMFAudioRecordDeviceCustomCommandImplementor& aImplementor); + + /** + Destructor. + + @since 7.0s + */ + IMPORT_C ~CMMFAudioRecordDeviceCustomCommandParser(); + + /** + Handles a request from the client. Called by the controller framework. + + @param aMessage + The message to be handled. + + @since 7.0s + */ + void HandleRequest(TMMFMessage& aMessage); +private: + + /** + Constructor. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @since 7.0s + */ + CMMFAudioRecordDeviceCustomCommandParser(MMMFAudioRecordDeviceCustomCommandImplementor& aImplementor); + // Internal request handling methods. + void DoHandleRequestL(TMMFMessage& aMessage); + TBool DoSetGainL(TMMFMessage& aMessage); + TBool DoGetMaxGainL(TMMFMessage& aMessage); + TBool DoGetGainL(TMMFMessage& aMessage); + TBool DoSetBalanceL(TMMFMessage& aMessage); + TBool DoGetBalanceL(TMMFMessage& aMessage); +private: + /** The object that implements the audio record device interface */ + MMMFAudioRecordDeviceCustomCommandImplementor& iImplementor; + }; + + +/** +@publishedAll +@released + +Client class to access functionality specific to an 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. + +@since 7.0s +*/ +class RMMFAudioPlayControllerCustomCommands : public RMMFCustomCommandsBase + { +public: + + /** + Constructor. + + @param aController + The client side controller object to be used by this custom command interface. + + @since 7.0s + */ + IMPORT_C RMMFAudioPlayControllerCustomCommands(RMMFController& aController); + + /** + Sets a playback window. The controller will start playing from the start of the window, + and finish playing at the end of the window. + + @param aStart + The start of the window, in microseconds. + @param aEnd + The end of the window, in microseconds. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetPlaybackWindow(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd) const; + + /** + Removes a previously defined playback window. + + @return One of the system-wide error codes. + @since 7.0s + */ + IMPORT_C TInt DeletePlaybackWindow(); + + /** + Gets the audio loading progress as a percentage. + + @param aPercentageProgress + The progress loading the clip, as a percentage. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetLoadingProgress(TInt& aPercentageProgress) const; + }; + + +/** +@publishedAll +@released + +Mixin class to be derived from controller plugins that could support the audio play controller +custom commands. +*/ +class MMMFAudioPlayControllerCustomCommandImplementor + { +public: + + /** + Sets a playback window. The controller will start playing from the start of the window, + and finish playing at the end of the window. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aStart + The start of the window, in microseconds. + @param aEnd + The end of the window, in microseconds. + + @since 7.0s + */ + virtual void MapcSetPlaybackWindowL(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd) = 0; + + /** + Removes a previously defined playback window. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @since 7.0s + */ + virtual void MapcDeletePlaybackWindowL() = 0; + + /** + Gets the completion status of loading/rebuffering the current audio clip. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aPercentageComplete + The status of loading as a percentage completed. + + @since 7.0s + */ + virtual void MapcGetLoadingProgressL(TInt& aPercentageComplete) = 0; + }; + +/** +@publishedAll +@released + +Custom command parser class to be used by controller plugins wishing to support +audio play controller commands. + +The controller plugin must be derived from MMMFAudioPlayControllerCustomCommandImplementor 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. See the following example code for details. + +@code +void CMMFAudioController::ConstructL() + { + // Construct custom command parsers + CMMFAudioPlayDeviceCustomCommandParser* audPlayDevParser = CMMFAudioPlayDeviceCustomCommandParser::NewL(*this); + CleanupStack::PushL(audPlayDevParser); + AddCustomCommandParserL(*audPlayDevParser); //parser now owned by controller framework + CleanupStack::Pop();//audPlayDevParser + + CMMFAudioRecordDeviceCustomCommandParser* audRecDevParser = CMMFAudioRecordDeviceCustomCommandParser::NewL(*this); + CleanupStack::PushL(audRecDevParser); + AddCustomCommandParserL(*audRecDevParser); //parser now owned by controller framework + CleanupStack::Pop();//audRecDevParser + +etc. + } +@endcode + +@since 7.0s +*/ +class CMMFAudioPlayControllerCustomCommandParser : public CMMFCustomCommandParserBase + { +public: + + /** + Creates a new custom command parser capable of handling audio play controller commands. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @return A pointer to the object created. + + @since 7.0s + */ + IMPORT_C static CMMFAudioPlayControllerCustomCommandParser* NewL(MMMFAudioPlayControllerCustomCommandImplementor& aImplementor); + + /** + Destructor. + + @since 7.0s + */ + IMPORT_C ~CMMFAudioPlayControllerCustomCommandParser(); + + /** + Handles a request from the client. Called by the controller framework. + + @param aMessage + The message to be handled. + + @since 7.0s + */ + void HandleRequest(TMMFMessage& aMessage); +private: + + /** + Constructor. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @since 7.0s + */ + CMMFAudioPlayControllerCustomCommandParser(MMMFAudioPlayControllerCustomCommandImplementor& aImplementor); + // Internal request handling methods. + void DoHandleRequestL(TMMFMessage& aMessage); + TBool DoSetPlaybackWindowL(TMMFMessage& aMessage); + TBool DoDeletePlaybackWindowL(TMMFMessage& aMessage); + TBool DoGetLoadingProgressL(TMMFMessage& aMessage); +private: + /** + The object that implements the audio play controller interface + */ + MMMFAudioPlayControllerCustomCommandImplementor& iImplementor; + }; + + + + +/** +@publishedAll +@released + +Client class to access functionality specific to an audio record controller. + +The class uses the custom command function of the controller plugin, and removes the necessity +for the client to formulate the custom commands. + +@since 7.0s +*/ +class RMMFAudioRecordControllerCustomCommands : public RMMFCustomCommandsBase + { +public: + + /** + Constructor. + + @param aController + The client side controller object to be used by this custom command interface. + + @since 7.0s + */ + IMPORT_C RMMFAudioRecordControllerCustomCommands(RMMFController& aController); + + /** + Gets the (possibly estimated) record time left in the clip. + + @param aTime + The record time available, in microseconds. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetRecordTimeAvailable(TTimeIntervalMicroSeconds& aTime) const; + + /** + Sets the maximum duration of the recorded clip, in microseconds. + + @param aMaxDuration + The maximum duration of the recorded clip, in microseconds. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetMaxDuration(const TTimeIntervalMicroSeconds& aMaxDuration) const; + + /** + Sets the maximum size of the recorded clip, in bytes. + + @param aMaxSize + The maximum size of the recorded clip, in bytes. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetMaxFileSize(TInt aMaxSize) const; + + /** + Removes a portion from the clip, either from the current position to the beginning or the + current position to the end. + + @param aToEnd + A boolean indicating whether to crop to the end. Crops to the end if set to ETrue, to + the beginning set to EFalse. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt Crop(TBool aToEnd); + + /** + Adds meta data to the clip. + + @param aNewEntry + The details of the new entry to be added. + + @since 7.0s + */ + IMPORT_C void AddMetaDataEntryL(const CMMFMetaDataEntry& aNewEntry); + + /** + Removes a meta data entry from the clip. + + @param aIndex + The ID of the meta data entry to delete. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt RemoveMetaDataEntry(TInt aIndex); + + /** + Replaces a meta data in the clip. + + @param aIndex + The ID of the meta data entry to replace. + @param aNewEntry + The details of the new entry to be added. + + @since 7.0s + */ + IMPORT_C void ReplaceMetaDataEntryL(TInt aIndex, const CMMFMetaDataEntry& aNewEntry); + }; + +/** +@publishedAll +@released + +Mixin class to be derived from controller plugins that could support the audio record controller +custom commands. +*/ +class MMMFAudioRecordControllerCustomCommandImplementor + { +public: + + /** + Gets the (possibly estimated) record time left in the clip. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aTime + The record time available, in microseconds. + + @since 7.0s + */ + virtual void MarcGetRecordTimeAvailableL(TTimeIntervalMicroSeconds& aTime) = 0; + + /** + Sets the maximum duration of the recorded clip, in microseconds. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aMaxDuration + The maximum duration of the recorded clip, in microseconds. + + @since 7.0s + */ + virtual void MarcSetMaxDurationL(const TTimeIntervalMicroSeconds& aMaxDuration) = 0; + + /** + Sets the maximum size of the recorded clip, in bytes. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aMaxSize + The maximum size of the recorded clip, in bytes. + + @since 7.0s + */ + virtual void MarcSetMaxFileSizeL(TInt aMaxSize) = 0; + + /** + Removes a portion from the clip, either from the current position to the beginning + or the current position to the end. + + This function can leave with one of the system-wide error codes. The request will be + completed with the leave code. + + @param aToEnd + A boolean indicating whether to crop to the end or the beginning. ETrue to crop to the + end, EFalse to the beginning. + + @since 7.0s + */ + virtual void MarcCropL(TBool aToEnd) = 0; + + /** + Adds meta data to the clip. + + @param aNewEntry + The details of the new entry to be added. + + @since 7.0s + */ + virtual void MarcAddMetaDataEntryL(const CMMFMetaDataEntry& aNewEntry) = 0; + + /** + Removes a meta data entry from the clip. + + @param aIndex + The ID of the meta data entry to delete. + + @since 7.0s + */ + virtual void MarcRemoveMetaDataEntryL(TInt aIndex) = 0; + + /** + Replaces a meta data entry in the clip. + + @param aIndex + The ID of the meta data entry to replace. + @param aNewEntry + The details of the new entry to be added. + + @since 7.0s + */ + virtual void MarcReplaceMetaDataEntryL(TInt aIndex, const CMMFMetaDataEntry& aNewEntry) = 0; + }; + +/** +@publishedAll +@released + +Custom command parser class to be used by controller plugins wishing to support +audio record controller commands. + +The controller plugin must be derived from MMMFAudioRecordControllerCustomCommandImplementor +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. See the following example code for details. + +@code +void CMMFAudioController::ConstructL() + { + // Construct custom command parsers + CMMFAudioPlayDeviceCustomCommandParser* audPlayDevParser = CMMFAudioPlayDeviceCustomCommandParser::NewL(*this); + CleanupStack::PushL(audPlayDevParser); + AddCustomCommandParserL(*audPlayDevParser); //parser now owned by controller framework + CleanupStack::Pop();//audPlayDevParser + + CMMFAudioRecordDeviceCustomCommandParser* audRecDevParser = CMMFAudioRecordDeviceCustomCommandParser::NewL(*this); + CleanupStack::PushL(audRecDevParser); + AddCustomCommandParserL(*audRecDevParser); //parser now owned by controller framework + CleanupStack::Pop();//audRecDevParser + +etc. + } +@endcode + +@since 7.0s +*/ +class CMMFAudioRecordControllerCustomCommandParser : public CMMFCustomCommandParserBase + { +public: + + /** + Creates a new custom command parser capable of handling audio record controller commands. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @return A pointer to the object created. + + @since 7.0s + */ + IMPORT_C static CMMFAudioRecordControllerCustomCommandParser* NewL(MMMFAudioRecordControllerCustomCommandImplementor& aImplementor); + + /** + Destructor. + + @since 7.0s + */ + IMPORT_C ~CMMFAudioRecordControllerCustomCommandParser(); + + /** + Handles a request from the client. Called by the controller framework. + + @param aMessage + The message to be handled. + + @since 7.0s + */ + void HandleRequest(TMMFMessage& aMessage); +private: + + /** + Constructor. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @since 7.0s + */ + CMMFAudioRecordControllerCustomCommandParser(MMMFAudioRecordControllerCustomCommandImplementor& aImplementor); + // Internal request handling methods. + void DoHandleRequestL(TMMFMessage& aMessage); + TBool DoGetRecordTimeAvailableL(TMMFMessage& aMessage); + TBool DoSetMaxDurationL(TMMFMessage& aMessage); + TBool DoSetMaxFileSizeL(TMMFMessage& aMessage); + TBool DoCropL(TMMFMessage& aMessage); + TBool DoAddMetaDataEntryL(TMMFMessage& aMessage); + TBool DoRemoveMetaDataEntryL(TMMFMessage& aMessage); + TBool DoReplaceMetaDataEntryL(TMMFMessage& aMessage); +private: + /** + The object that implements the audio record controller interface. + */ + MMMFAudioRecordControllerCustomCommandImplementor& iImplementor; + }; + +#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#include +#endif + +/** +@publishedAll +@released +*/ + + enum TMMFAudioControllerMessages + { + EMMFAudioControllerSetSourceSampleRate, + EMMFAudioControllerSetSourceNumChannels, + EMMFAudioControllerSetSourceFormat, + EMMFAudioControllerSetSourceBitRate, + EMMFAudioControllerSetSourceDataType, + EMMFAudioControllerSetSinkSampleRate, + EMMFAudioControllerSetSinkNumChannels, + EMMFAudioControllerSetSinkFormat, + EMMFAudioControllerSetSinkBitRate, + EMMFAudioControllerSetSinkDataType, + EMMFAudioControllerGetSourceSampleRate, + EMMFAudioControllerGetSourceBitRate, + EMMFAudioControllerGetSourceNumChannels, + EMMFAudioControllerGetSourceFormat, + EMMFAudioControllerGetSourceDataType, + EMMFAudioControllerGetSinkSampleRate, + EMMFAudioControllerGetSinkBitRate, + EMMFAudioControllerGetSinkNumChannels, + EMMFAudioControllerGetSinkFormat, + EMMFAudioControllerGetSinkDataType, + EMMFAudioControllerGetSupportedSourceSampleRates, + EMMFAudioControllerGetSupportedSourceBitRates, + EMMFAudioControllerGetSupportedSourceNumChannels, + EMMFAudioControllerGetSupportedSourceDataTypes, + EMMFAudioControllerGetSupportedSinkSampleRates, + EMMFAudioControllerGetSupportedSinkBitRates, + EMMFAudioControllerGetSupportedSinkNumChannels, + EMMFAudioControllerGetSupportedSinkDataTypes, + EMMFAudioControllerCopyArrayData, + EMMFAudioControllerSetCodec + }; + + +/** +@publishedAll +@released + +Client class to access functionality specific to an audio controller. + +The class uses the custom command function of the controller plugin, and removes the necessity +for the client to formulate the custom commands. + +@since 7.0s +*/ +class RMMFAudioControllerCustomCommands : public RMMFCustomCommandsBase + { +public: + + /** + Constructor. + + @param aController + The client side controller object to be used by this custom command + interface. + + @since 7.0s + */ + IMPORT_C RMMFAudioControllerCustomCommands(RMMFController& aController); + + /** + Sets the sample rate of the data source in samples per second. + + @param aSampleRate + The sample rate, in samples per second. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetSourceSampleRate(TUint aSampleRate) const; + + /** + Sets the bit rate of the data source in bits per second. + + @param aRate + The bit rate, in bits per second. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetSourceBitRate(TUint aRate) const; + + /** + Sets the number of channels in the data source. For example, one channel for mono, two channels + for stereo etc. + + @param aNumChannels + The number of channels. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetSourceNumChannels(TUint aNumChannels) const; + + /** + Sets the format of the data source. + + The UID corresponds to the UID of the CMMFFormat-derived ECOM plugin to be used. + + @param aFormatUid + The format plugin to be used. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetSourceFormat(TUid aFormatUid) const; + + /** + Sets the fourCC code of the source. + + @param aDataType + The fourCC code. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetSourceDataType(TFourCC aDataType) const; + + /** + Sets the sample rate of the data sink in samples per second. + + @param aSampleRate + The sample rate, in samples per second. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetSinkSampleRate(TUint aSampleRate) const; + + /** + Set the bit rate of the data sink in bits per second. + + @param aRate + The bit rate, in bits per second. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetSinkBitRate(TUint aRate) const; + + /** + Sets the number of channels in the data sink. For example, one channel for mono, two channels + for stereo etc. + + @param aNumChannels + The number of channels. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetSinkNumChannels(TUint aNumChannels) const; + + /** + Sets the format of the data sink. + + The UID corresponds to the UID of the CMMFFormat-derived ECOM plugin to be used. + + @param aFormatUid + The format plugin to be used. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetSinkFormat(TUid aFormatUid) const; + + /** + Set the fourCC code of the sink. + + @param aDataType + The fourCC code. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetSinkDataType(TFourCC aDataType) const; + + /** + Sets the codec to be used. Useful when recording data. + + @param aSourceDataType + The data type of the source of the codec. + @param aSinkDataType + The data type of the sink of the codec. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetCodec(TFourCC aSourceDataType, TFourCC aSinkDataType) const; + + /** + Gets the sample rate of the data source in samples per second. + + @param aRate + The sample rate, in samples per second. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetSourceSampleRate(TUint& aRate) const; + + /** + Gets the bit rate of the data source in bits per second. + + @param aRate + The bit rate, in bits per second. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetSourceBitRate(TUint& aRate) const; + + /** + Gets the number of channels in the data source. For example, one channel for mono, two channels + for stereo etc. + + @param aNumChannels + The number of channels. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetSourceNumChannels(TUint& aNumChannels) const; + + /** + Gets the format of the data source. + + The UID corresponds to the UID of the CMMFFormat-derived ECOM plugin being used. + + @param aFormat + The format plugin being used. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetSourceFormat(TUid& aFormat) const; + + /** + Get the fourCC code of the source. + + @param aDataType + The fourCC code. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetSourceDataType(TFourCC& aDataType) const; + + /** + Gets the sample rate of the data sink in samples per second. + + @param aRate + The sample rate, in samples per second. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetSinkSampleRate(TUint& aRate) const; + + /** + Gets the bit rate of the data sink in bits per second. + + @param aRate + The bit rate, in bits per second. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetSinkBitRate(TUint& aRate) const; + + /** + Gets the number of channels in the data sink. For example, one channel for mono, two channels + for stereo etc. + + @param aNumChannels + The number of channels. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetSinkNumChannels(TUint& aNumChannels) const; + + /** + Gets the format of the data sink. + + The UID corresponds to the UID of the CMMFFormat-derived ECOM plugin being used. + + @param aFormat + The format plugin being used. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetSinkFormat(TUid& aFormat) const; + + /** + Gets the fourCC code of the sink. + + @param aDataType + The fourCC code. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetSinkDataType(TFourCC& aDataType) const; + + /** + Gets the list of sample rates supported by the data source. + + Warning: Existing objects in this array will be removed by this function. + + @param aSupportedRates + The supported rates. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C void GetSupportedSourceSampleRatesL(RArray& aSupportedRates) const; + + /** + Gets the list of bit rates supported by the data source. + + Warning: Existing objects in this array will be removed by this function. + + @param aSupportedRates + The supported rates. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C void GetSupportedSourceBitRatesL(RArray& aSupportedRates) const; + + /** + Gets the list of channels supported by the data source (ie mono, stereo etc). + + Warning: Existing objects in this array will be removed by this method. + + @param aSupportedChannels + The supported channels. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C void GetSupportedSourceNumChannelsL(RArray& aSupportedChannels) const; + + /** + Gets the list of fourCC codes supported by the data source. + + Warning: Existing objects in this array will be removed by this method. + + @param aSupportedDataTypes + The supported data types. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C void GetSupportedSourceDataTypesL(RArray& aSupportedDataTypes) const; + + /** + Gets the list of sample rates supported by the data sink. + + Warning: Existing objects in this array will be removed by this method. + + @param aSupportedRates + The supported rates. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C void GetSupportedSinkSampleRatesL(RArray& aSupportedRates) const; + + /** + Gets the list of bit rates supported by the data sink. + + Warning: Existing objects in this array will be removed by this method. + + @param aSupportedRates + The supported rates. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C void GetSupportedSinkBitRatesL(RArray& aSupportedRates) const; + + /** + Gets the list of channels supported by the data sink (ie mono, stereo etc). + + Warning: Existing objects in this array will be removed by this method. + + @param aSupportedChannels + The supported channels. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C void GetSupportedSinkNumChannelsL(RArray& aSupportedChannels) const; + + /** + Gets the list of fourCC codes supported by the data sink. + + Warning: Existing objects in this array will be removed by this method. + + @param aSupportedDataTypes + The supported data types. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C void GetSupportedSinkDataTypesL(RArray& aSupportedDataTypes) const; + +private: + void DoGetUintArrayL(RArray& aArray, TMMFAudioControllerMessages aIpc) const; + void DoGetFourCCArrayL(RArray& aArray, TMMFAudioControllerMessages aIpc) const; + }; + + +/** +@publishedAll +@released + +Mixin class to be derived from controller plugins that could support the audio record controller +custom commands. +*/ +class MMMFAudioControllerCustomCommandImplementor + { +public: + + /** + Sets the sample rate of the data source in samples per second. + + @param aSampleRate + The sample rate, in samples per second. + + @since 7.0s + */ + virtual void MacSetSourceSampleRateL(TUint aSampleRate) = 0; + + /** + Sets the bit rate of the data source in bits per second. + + @param aBitRate + The bit rate, in bits per second. + + @since 7.0s + */ + virtual void MacSetSourceBitRateL(TUint aBitRate) = 0; + + /** + Sets the number of channels in the data source. For example, one channel for mono, two channels + for stereo etc. + + @param aNumChannels + The number of channels. + + @since 7.0s + */ + virtual void MacSetSourceNumChannelsL(TUint aNumChannels) = 0; + + /** + Sets the format of the data source. The UID corresponds to the UID of the CMMFFormat-derived + ECOM plugin to be used. + + @param aFormatUid + The format plugin to be used. + + @since 7.0s + */ + virtual void MacSetSourceFormatL(TUid aFormatUid) = 0; + + /** + Sets the fourCC code of the source. + + @param aDataType + The fourCC code. + + @since 7.0s + */ + virtual void MacSetSourceDataTypeL(TFourCC aDataType) = 0; + + /** + Sets the sample rate of the data sink in samples per second. + + @param aSampleRate + The sample rate, in samples per second. + + @since 7.0s + */ + virtual void MacSetSinkSampleRateL(TUint aSampleRate) = 0; + + /** + Sets the bit rate of the data sink in bits per second. + + @param aRate + The bit rate, in bits per second. + + @since 7.0s + */ + virtual void MacSetSinkBitRateL(TUint aRate) = 0; + + /** + Sets the number of channels in the data sink. For example, one channel for mono, two channels + for stereo etc. + + @param aNumChannels + The number of channels. + + @since 7.0s + */ + virtual void MacSetSinkNumChannelsL(TUint aNumChannels) = 0; + + /** + Sets the format of the data sink. The UID corresponds to the uid of the CMMFFormat-derived ECOM + plugin to be used. + + @param aFormatUid + The format plugin to be used. + + @since 7.0s + */ + virtual void MacSetSinkFormatL(TUid aFormatUid) = 0; + + /** + Sets the fourCC code of the sink. + + @param aDataType + The fourCC code. + + @since 7.0s + */ + virtual void MacSetSinkDataTypeL(TFourCC aDataType) = 0; + + /** + Sets the codec to be used. Useful when recording data. + + @param aSourceDataType + The data type of the source of the codec. + @param aSinkDataType + The data type of the sink of the codec. + + @since 7.0s + */ + virtual void MacSetCodecL(TFourCC aSourceDataType, TFourCC aSinkDataType) = 0; + + + /** + Gets the sample rate of the data source in samples per second. + + @param aRate + The sample rate, in samples per second. + + @since 7.0s + */ + virtual void MacGetSourceSampleRateL(TUint& aRate) = 0; + + /** + Gets the bit rate of the data source in bits per second. + + @param aRate + The bit rate, in bits per second. + + @since 7.0s + */ + virtual void MacGetSourceBitRateL(TUint& aRate) = 0; + + /** + Gets the number of channels in the data source. For example, one channel for mono, two channels + for stereo etc. + + @param aNumChannels + The number of channels. + + @since 7.0s + */ + virtual void MacGetSourceNumChannelsL(TUint& aNumChannels) = 0; + + /** + Gets the format of the data source. The UID corresponds to the uid of the CMMFFormat-derived + ECOM plugin being used. + + @param aFormat + The format plugin being used. + + @since 7.0s + */ + virtual void MacGetSourceFormatL(TUid& aFormat) = 0; + + /** + Gets the fourCC code of the source. + + @param aDataType + The fourCC code. + + @since 7.0s + */ + virtual void MacGetSourceDataTypeL(TFourCC& aDataType) = 0; + + /** + Gets the sample rate of the data sink in samples per second. + + @param aRate + The sample rate, in samples per second. + + @since 7.0s + */ + virtual void MacGetSinkSampleRateL(TUint& aRate) = 0; + + /** + Gets the bit rate of the data sink in bits per second. + + @param aRate + The bit rate, in bits per second. + + @since 7.0s + */ + virtual void MacGetSinkBitRateL(TUint& aRate) = 0; + + /** + Gets the number of channels in the data sink. For example, one channel for mono, two channels + for stereo etc. + + @param aNumChannels + The number of channels. + + @since 7.0s + */ + virtual void MacGetSinkNumChannelsL(TUint& aNumChannels) = 0; + + /** + Gets the format of the data sink. The UID corresponds to the uid of the CMMFFormat-derived ECOM + plugin being used. + + @param aFormat + The format plugin being used. + + @since 7.0s + */ + virtual void MacGetSinkFormatL(TUid& aFormat) = 0; + + /** + Gets the fourCC code of the sink. + + @param aDataType + The fourCC code. + + @since 7.0s + */ + virtual void MacGetSinkDataTypeL(TFourCC& aDataType) = 0; + + /** + Gets the list of sample rates supported by the data source. + + @param aSupportedRates + The supported rates. Warning: Existing objects in this array will be removed by this method. + + @since 7.0s + */ + virtual void MacGetSupportedSourceSampleRatesL(RArray& aSupportedRates) = 0; + + /** + Gets the list of bit rates supported by the data source. + + Warning: Existing objects in this array will be removed by this method. + + @param aSupportedRates + The supported rates. + + @since 7.0s + */ + virtual void MacGetSupportedSourceBitRatesL(RArray& aSupportedRates) = 0; + + /** + Gets the list of channels supported by the data source (ie mono, stereo etc). + + Warning: Existing objects in this array will be removed by this method. + + @param aSupportedChannels + The supported channels. + + @since 7.0s + */ + virtual void MacGetSupportedSourceNumChannelsL(RArray& aSupportedChannels) = 0; + + /** + Gets the list of fourCC codes supported by the data source. + + Warning: Existing objects in this array will be removed by this method. + + @param aSupportedDataTypes + The supported data types. + + @since 7.0s + */ + virtual void MacGetSupportedSourceDataTypesL(RArray& aSupportedDataTypes) = 0; + + /** + Gets the list of sample rates supported by the data sink. + + Warning: Existing objects in this array will be removed by this method. + + @param aSupportedRates + The supported rates. + + @since 7.0s + */ + virtual void MacGetSupportedSinkSampleRatesL(RArray& aSupportedRates) = 0; + + /** + Gets the list of bit rates supported by the data sink. + + Warning: Existing objects in this array will be removed by this method. + + @param aSupportedRates + The supported rates. + + @since 7.0s + */ + virtual void MacGetSupportedSinkBitRatesL(RArray& aSupportedRates) = 0; + + /** + Gets the list of channels supported by the data sink (ie mono, stereo etc). + + Warning: Existing objects in this array will be removed by this method. + + @param aSupportedChannels + The supported channels. + + @since 7.0s + */ + virtual void MacGetSupportedSinkNumChannelsL(RArray& aSupportedChannels) = 0; + + /** + Gets the list of fourCC codes supported by the data sink. + + Warning: Existing objects in this array will be removed by this method. + + @param aSupportedDataTypes + The supported data types. + + @since 7.0s + */ + virtual void MacGetSupportedSinkDataTypesL(RArray& aSupportedDataTypes) = 0; + }; + +/** +@publishedAll +@released + +Custom command parser class to be used by controller plugins wishing to support +audio controller commands. + +The controller plugin must be derived from MMMFAudioControllerCustomCommandImplementor +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. See the following example code for details. + +@code +void CMMFAudioController::ConstructL() + { + // Construct custom command parsers + CMMFAudioPlayDeviceCustomCommandParser* audPlayDevParser = CMMFAudioPlayDeviceCustomCommandParser::NewL(*this); + CleanupStack::PushL(audPlayDevParser); + AddCustomCommandParserL(*audPlayDevParser); //parser now owned by controller framework + CleanupStack::Pop();//audPlayDevParser + + CMMFAudioRecordDeviceCustomCommandParser* audRecDevParser = CMMFAudioRecordDeviceCustomCommandParser::NewL(*this); + CleanupStack::PushL(audRecDevParser); + AddCustomCommandParserL(*audRecDevParser); //parser now owned by controller framework + CleanupStack::Pop();//audRecDevParser + +etc. + } +@endcode + +@since 7.0s +*/ +class CMMFAudioControllerCustomCommandParser : public CMMFCustomCommandParserBase + { +public: + + /** + Creates a new custom command parser capable of handling audio controller commands. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @return A pointer to the object created. + + @since 7.0s + */ + IMPORT_C static CMMFAudioControllerCustomCommandParser* NewL(MMMFAudioControllerCustomCommandImplementor& aImplementor); + + /** + Destructor. + + @since 7.0s + */ + IMPORT_C ~CMMFAudioControllerCustomCommandParser(); + + /** + Handles a request from the client. Called by the controller framework. + + @param aMessage + The message to be handled. + + @since 7.0s + */ + void HandleRequest(TMMFMessage& aMessage); +private: + /** + Constructor. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @since 7.0s + */ + CMMFAudioControllerCustomCommandParser(MMMFAudioControllerCustomCommandImplementor& aImplementor); + // Internal request handling methods. + void DoHandleRequestL(TMMFMessage& aMessage); + + TBool DoSetSourceSampleRateL(TMMFMessage& aMessage); + TBool DoSetSourceNumChannelsL(TMMFMessage& aMessage); + TBool DoSetSourceFormatL(TMMFMessage& aMessage); + TBool DoSetSinkSampleRateL(TMMFMessage& aMessage); + TBool DoSetSinkNumChannelsL(TMMFMessage& aMessage); + TBool DoSetSinkFormatL(TMMFMessage& aMessage); + TBool DoSetCodecL(TMMFMessage& aMessage); + TBool DoSetSourceBitRateL(TMMFMessage& aMessage); + TBool DoSetSourceDataTypeL(TMMFMessage& aMessage); + TBool DoSetSinkBitRateL(TMMFMessage& aMessage); + TBool DoSetSinkDataTypeL(TMMFMessage& aMessage); + TBool DoGetSourceSampleRateL(TMMFMessage& aMessage); + TBool DoGetSourceBitRateL(TMMFMessage& aMessage); + TBool DoGetSourceNumChannelsL(TMMFMessage& aMessage); + TBool DoGetSourceFormatL(TMMFMessage& aMessage); + TBool DoGetSourceDataTypeL(TMMFMessage& aMessage); + TBool DoGetSinkSampleRateL(TMMFMessage& aMessage); + TBool DoGetSinkBitRateL(TMMFMessage& aMessage); + TBool DoGetSinkNumChannelsL(TMMFMessage& aMessage); + TBool DoGetSinkFormatL(TMMFMessage& aMessage); + TBool DoGetSinkDataTypeL(TMMFMessage& aMessage); + TBool DoGetSupportedSourceSampleRatesL(TMMFMessage& aMessage); + TBool DoGetSupportedSourceBitRatesL(TMMFMessage& aMessage); + TBool DoGetSupportedSourceNumChannelsL(TMMFMessage& aMessage); + TBool DoGetSupportedSourceDataTypesL(TMMFMessage& aMessage); + TBool DoGetSupportedSinkSampleRatesL(TMMFMessage& aMessage); + TBool DoGetSupportedSinkBitRatesL(TMMFMessage& aMessage); + TBool DoGetSupportedSinkNumChannelsL(TMMFMessage& aMessage); + TBool DoGetSupportedSinkDataTypesL(TMMFMessage& aMessage); + TBool DoCopyArrayDataL(TMMFMessage& aMessage); + + void DoCreateBufFromUintArrayL(RArray& aArray); + void DoCreateBufFromFourCCArrayL(RArray& aArray); +private: + /** + The object that implements the audio record controller interface + */ + MMMFAudioControllerCustomCommandImplementor& iImplementor; + + CBufFlat* iDataCopyBuffer; + }; + + +class RWindow; + +/** +@publishedAll +@released + +Client class to access functionality specific to a video controller. + +The class uses the custom command function of the controller plugin, and removes the necessity +for the client to formulate the custom commands. + +@since 7.0s +*/ +class RMMFVideoControllerCustomCommands : public RMMFCustomCommandsBase + { +public: + + /** + Constructor. + + @param aController + The client side controller object to be used by this custom command interface. + + @since 7.0s + */ + IMPORT_C RMMFVideoControllerCustomCommands(RMMFController& aController); + + /** + Gets the frame size of the clip. + + @param aVideoFrameSize + The frame size, in pixels. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetVideoFrameSize(TSize& aVideoFrameSize) const; + + /** + Gets the audio type. + + @param aCodec + The FourCC of the audio codec. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetAudioCodec(TFourCC& aCodec) const; + + /** + Gets the video bit rate. + + @param aBitRate + The bit rate of the video stream. If this value is KMMFVariableVideoBitRate it signifies + a variable bit rate. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetVideoBitRate(TInt& aBitRate) const; + + /** + Gets the audio bit rate. + + @param aBitRate + The bit rate of the audio stream. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetAudioBitRate(TInt& aBitRate) const; + + /** + Sets the frame rate of the clip. + + @param aFramesPerSecond + The number of frames per second. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetFrameRate(TReal32 aFramesPerSecond) const; + + /** + Gets the frame rate of the clip. + + @param aFramesPerSecond + The number of frames per second, filled in by the controller plugin. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetFrameRate(TReal32& aFramesPerSecond) const; + + /** + Gets the video clip MIME type. + + @param aMimeType + The Mime type of the current clip. + + @since 7.0s + */ + IMPORT_C TInt GetVideoMimeType(TDes8& aMimeType) const; + }; + +/** +@publishedAll +@released + +Client class to access functionality specific to a video 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. + +@since 7.0s +*/ +class RMMFVideoPlayControllerCustomCommands : public RMMFCustomCommandsBase + { +public: + + /** + Constructor. + + @param aController + The client side controller object to be used by this custom command interface. + + @since 7.0s + */ + IMPORT_C RMMFVideoPlayControllerCustomCommands(RMMFController& aController); + + /** + Prepares the video clip to be accessed. + + A call to this function tells the loaded controller plugin to finalise its configuration + and to prepare to start reading the video clip. It is not possible to play the video clip + or query any of its properties (e.g. duration, meta data etc.) until the controller plugin + has signified the completion of this method by generating a KMMFEventCategoryVideoPrepareComplete + event. + + @since 7.0s + */ + IMPORT_C TInt Prepare(); + + /** + Asks the controller to store the current frame to a bitmap. + + The video play controller will send an event to the client on completion of the task. + + @param aBitmap + The handle of the CFbsBitmap object to retrieve the frame to. + @param aStatus + The active object to call back on. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C void GetFrame(CFbsBitmap& aBitmap, TRequestStatus& aStatus); + + /** + Sets the screen region to be used to display the video. + + @param aWindowRect + The window rectangle. + @param aClipRect + The clip rectangle. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetDisplayWindow(const TRect& aWindowRect, const TRect& aClipRect) const; + + /** + Updates the display region. + + @param aRegion + The valid region to display to. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt UpdateDisplayRegion(const TRegion& aRegion) const; + + /** + Queries whether audio is enabled. + + @param aEnabled + A boolean indicating whether audio is enabled. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetAudioEnabled(TBool& aEnabled) const; + + /** + Sends a direct screen access event to controller. + + @param aDSAEvent + The direct screen access event. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt DirectScreenAccessEvent(const TMMFDSAEvent aDSAEvent) const; + + /** + Sets a time window for video playback. + + @param aStart + The start time in milliseconds relative to the start of the video clip. + @param aEnd + The end time in milliseconds relative to the start of the video clip. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt Play(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd) const; + + /** + Requests the controller to redraw the current frame. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt RefreshFrame() const; + + /** + Gets the video loading progress as a percentage. + + @param aPercentageProgress + The progress loading the clip, as a percentage. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetLoadingProgress(TInt& aPercentageProgress) const; + + /** + Rotates the video image on the screen. + + @param aRotation + The desired rotation to apply. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetRotation(TVideoRotation aRotation) const; + + /** + Queries the rotation that is currently applied to the video image. + + @param aRotation + The applied rotation. + + @return One of the system wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetRotation(TVideoRotation& aRotation) const; + + /** + Scales the video image to a specified percentage of its original size. + + @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 aAntiAliasFiltering + True if anti-aliasing filtering should be used. If the plugin does not + support this kind of processing, this value will be ignored. + + @return One of the system wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetScaleFactor(TReal32 aWidthPercentage, TReal32 aHeightPercentage, TBool aAntiAliasFiltering) const; + + /** + Gets the scale factor currently applied to the video image. + + @param aWidthPercentage + On return, will contain the percentage (100 = original size) used to scale the width + of the video image. + @param aHeightPercentage + On return. will contain the percentage (100 = original size) used to scale the height + of the video image. + @param aAntiAliasFiltering + True if anti-aliasing filtering is being used + + @return One of the system wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetScaleFactor(TReal32& aWidthPercentage, TReal32& aHeightPercentage, TBool& aAntiAliasFiltering) const; + + /** + Selects a region of the video image to be displayed. + + @param aCropRegion + The dimensions of the crop region, relative to the video image. + + @return One of the system wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetCropRegion(const TRect& aCropRegion) const; + + /** + Gets the crop region currently applied to the image. + + @param aCropRegion + The dimensions of the crop region, relative to the video image. If no crop region has + been applied, the full dimensions of the video image will be returned. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetCropRegion(TRect& aCropRegion) const; + + +private: + TPckgBuf iConfigPackage; + }; + +/** +@publishedAll +@released +*/ + + enum TMMFVideoRecordControllerMessages + { + EMMFVideoRecordControllerSetVideoFormat, + EMMFVideoRecordControllerSetVideoCodec, + EMMFVideoRecordControllerSetAudioCodec, + EMMFVideoRecordControllerSetVideoBitRate, + EMMFVideoRecordControllerSetAudioBitRate, + EMMFVideoRecordControllerSetVideoFrameSize, + EMMFVideoRecordControllerSetMaxFileSize, + EMMFVideoRecordControllerAddMetaDataEntry, + EMMFVideoRecordControllerRemoveMetaDataEntry, + EMMFVideoRecordControllerReplaceMetaDataEntry, + EMMFVideoRecordControllerSetAudioEnabled, + EMMFVideoRecordControllerPrepare, + EMMFVideoRecordControllerSetCameraHandle, + EMMFVideoRecordControllerGetRecordTimeAvailable, + EMMFVideoRecordControllerGetSupportedSinkAudioTypes, + EMMFVideoRecordControllerGetSupportedSinkVideoTypes, + EMMFVideoRecordControllerCopyDescriptorArrayData, + EMMFVideoRecordControllerCopyFourCCArrayData, + EMMFVideoRecordControllerGetAudioEnabled // INC23777 + }; + + +/** +@publishedAll +@released + +Client class to access functionality specific to a video recorder controller. + +The class uses the custom command function of the controller plugin, and removes the necessity +for the client to formulate the custom commands. + +@since 7.0s +*/ +class RMMFVideoRecordControllerCustomCommands : public RMMFCustomCommandsBase + { +public: + + /** + Constructor. + + @param aController + The client side controller object to be used by this custom command interface. + + @since 7.0s + */ + IMPORT_C RMMFVideoRecordControllerCustomCommands(RMMFController& aController); + + /** + Sets the format for the video to record. + + @param aVideoFormatUid + The UID of the video format. + + @return This method will return with one of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetVideoFormat(TUid aVideoFormatUid) const; + + /** + Sets the video codec for recording. + + @param aVideoCodec + The MIME type of the video codec. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetVideoCodec(const TDesC8& aVideoCodec) const; + + /** + Sets the video bit rate. + + @param aBitRate + The bit rate of the video stream. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetVideoBitRate(TInt aBitRate) const; + + /** + Sets the audio bit rate. + + @param aBitRate + The bit rate of the audio stream. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetAudioBitRate(TInt aBitRate) const; + + /** + Sets the audio codec for recording. + + @param aAudioCodec + The FourCC code of the audio codec. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetAudioCodec(TFourCC aAudioCodec) const; + + /** + Sets the frame size of the clip. + + @param aVideoFrameSize + The frame size, in pixels. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetVideoFrameSize(TSize aVideoFrameSize) const; + + /** + Sets the maximum size of the recorded clip, in bytes. + + @param aMaxSize + The maximum size of the recorded clip, in bytes. This can be called with the parameter + KMMFNoMaxClipSize which signifies no maximum file size. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetMaxFileSize(TInt aMaxSize) const; + + /** + Adds meta data to the clip. + + @param aNewEntry + The details of the new entry to be added. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C void AddMetaDataEntryL(const CMMFMetaDataEntry& aNewEntry)const; + + /** + Removes a meta data entry from the clip. + + @param aIndex + The ID of the meta data entry to delete. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt RemoveMetaDataEntry(TInt aIndex)const; + + /** + Replaces a meta data in the clip. + + @param aIndex + The ID of the meta data entry to replace. + @param aNewEntry + The details of the new entry to be added. + + @since 7.0s + */ + IMPORT_C void ReplaceMetaDataEntryL(TInt aIndex, const CMMFMetaDataEntry& aNewEntry)const; + + /** + Sets whether audio is enabled. + + @param aEnable + A boolean indicating if audio should be enabled. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetAudioEnabled(TBool aEnable) const; + + /** + Prepares the controller for recording. This should be called before the first attempt to record + with the controller. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt Prepare() const; + + /** + Sets the handle of the camera to use. + + @param aCameraHandle + The handle of the camera to use. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt SetCameraHandle(TInt aCameraHandle) const; + + /** + Gets the (possibly estimated) record time left in the clip. + + @param aTime + The record time available, in microseconds. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetRecordTimeAvailable(TTimeIntervalMicroSeconds& aTime) const; + + /** + Gets the supported sink audio types. + + @param aSupportedDataTypes + The supported data types. + + @since 7.0s + */ + IMPORT_C TInt GetSupportedSinkAudioTypes(RArray& aSupportedDataTypes) const; + + /** + Gets the supported sink video types. + + @param aDataTypes + The supported data types. + + @since 7.0s + */ + IMPORT_C TInt GetSupportedSinkVideoTypes(CDesC8Array& aDataTypes) const; + + // INC23777 + /** + Retrieves whether audio is enabled. + + @param aEnabled + A boolean indicating whether audio is enabled. + + @return One of the system-wide error codes. + + @since 7.0s + */ + IMPORT_C TInt GetAudioEnabled(TBool& aEnabled) const; + +private: + void DoGetCDesC8ArrayL(CDesC8Array& aArray, TMMFVideoRecordControllerMessages aIpc) const; + void DoGetFourCCArrayL(RArray& aArray) const; + }; + + +/** +@publishedAll +@released + +Mixin class to be derived from controller plugins that could support the video record controller +custom commands. +*/ +class MMMFVideoRecordControllerCustomCommandImplementor + { +public: + + /** + Sets the format for the video to record. + + @param aVideoFormatUid + The UID of the video format. + + @return One of the system-wide error codes. + + @since 7.0s + */ + virtual void MvrcSetVideoFormatL(TUid aVideoFormatUid)=0; + + /** + Sets the video codec for recording. + + @param aVideoCodec + The MIME type of the video codec. + + @return One of the system-wide error codes. + + @since 7.0s + */ + virtual void MvrcSetVideoCodecL(const TDesC8& aVideoCodec)=0; + + /** + Sets the audio codec for recording. + + @param aAudioCodec + The FourCC code of the audio codec. + + @return One of the system-wide error codes. + + @since 7.0s + */ + virtual void MvrcSetAudioCodecL(TFourCC aAudioCodec)=0; + + /** + Sets the video bit rate. + + @param aBitRate + The bit rate of the video stream. This can be called with the parameter + KMMFVariableVideoBitRate which specifies a variable bit rate. + + @return One of the system-wide error codes. + + @since 7.0s + */ + virtual void MvrcSetVideoBitRateL(TInt& aBitRate)=0; + + /** + Sets the audio bit rate. + + @param aBitRate + The bit rate of the audio stream. + + @return One of the system-wide error codes. + + @since 7.0s + */ + virtual void MvrcSetAudioBitRateL(TInt& aBitRate)=0; + + /** + Adds meta data to the clip. + + @param aNewEntry + The details of the new entry to be added. + + @since 7.0s + */ + virtual void MvrcAddMetaDataEntryL(const CMMFMetaDataEntry& aNewEntry)=0; + + /** + Removes a meta data entry from the clip. + + @param aIndex + The ID of the meta data entry to delete. + + @since 7.0s + */ + virtual void MvrcRemoveMetaDataEntryL(TInt aIndex)=0; + + /** + Replaces a meta data in the clip. + + @param aIndex + The ID of the meta data entry to replace. + @param aNewEntry + The details of the new entry to be added. + + @since 7.0s + */ + virtual void MvrcReplaceMetaDataEntryL(TInt aIndex, const CMMFMetaDataEntry& aNewEntry)=0; + + /** + Sets the maximum file size. + + @param aMaxFileSize + The maximum file size allowed for recording. This can be called with the parameter + KMMFNoMaxClipSize which signifies no maximum file size. + + @since 7.0s + */ + virtual void MvrcSetMaxFileSizeL(TInt aMaxFileSize)=0; + + /** + Sets whether audio is enabled. + + @param aEnable + A boolean indicating if audio is enabled. + + @since 7.0s + */ + virtual void MvrcSetAudioEnabledL(TBool aEnable)=0; + + /** + Sets the frame size for the video recording. + + @param aFrameSize + The frame size for recording. + + @since 7.0s + */ + virtual void MvrcSetVideoFrameSizeL(TSize aFrameSize)=0; + + /** + Prepares the controller for recording. This needs to be called before + the first call to Record(). + + @since 7.0s + */ + virtual void MvrcPrepareL()=0; + + /** + Sets the handle of the camera to use for recording. + + @since 7.0s + */ + virtual void MvrcSetCameraHandleL(TInt aCameraHandle)=0; + + /** + Gets the (possibly estimated) record time left in the clip. + + @param aTime + The record time available, in microseconds. + + @since 7.0s + */ + virtual void MvrcGetRecordTimeAvailableL(TTimeIntervalMicroSeconds& aTime) = 0; + + /** + Gets the supported sink audio types. + + @param aDataTypes + The supported data types. + + @return One of the system-wide error codes. + + @since 7.0s + */ + virtual void MvrcGetSupportedSinkAudioTypesL(RArray& aDataTypes)=0; + + /** + Gets the supported sink video types. + + @param aDataTypes + The supported data types. + + @return One of the system-wide error codes. + + @since 7.0s + */ + virtual void MvrcGetSupportedSinkVideoTypesL(CDesC8Array& aDataTypes)=0; + + //INC23777 + /** + Indicates if the audio is enabled. + + @param aEnabled + A boolean indicating if the audio is enabled. + + @since 7.0s + */ + virtual void MvrcGetAudioEnabledL(TBool& aEnabled)=0; + }; + + +/** +@publishedAll +@released + +Client class to access functionality specific to a video 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. + +@since 7.0s +*/ +class MMMFVideoPlayControllerCustomCommandImplementor + { +public: + + /** + Prepares the video clip to be accessed. + + A call to this method tells the controller plugin to finalise its configuration + and to prepare to start reading the video clip. It is not possible to play the video clip + or query any of its properties (e.g. duration, meta data etc.) until the controller plugin + has signified the completion of this method by generating a + KMMFEventCategoryVideoPrepareComplete event. + + @since 7.0s + */ + virtual void MvpcPrepare()=0; + + /** + Gets a frame previously requested from the controller. + + @param aVideoFrame + The handle of bitmap to retrieve frame to. + + @since 7.0s + */ + virtual void MvpcGetFrameL(MMMFVideoFrameMessage& aVideoFrame)=0; + + /** + Indicates whether audio is enabled. + + @param aEnabled + On return, contains a boolean indicating whether audio is enabled. + + @since 7.0s + */ + virtual void MvpcGetAudioEnabledL(TBool& aEnabled)=0; + + /** + Sets the screen region to be used to display the video. + + @param aClipRect + The clip rect used to display the video. + + @since 7.0s + */ + virtual void MvpcSetDisplayWindowL(const TRect& aWindowRect, const TRect& aClipRect) = 0; + + /** + Updates the region to display. + + @param aRegion + A TRegion containing the current display regions, ownership of the TRegion is not + transferred. + + @since 7.0s + */ + virtual void MvpcUpdateDisplayRegionL(const TRegion& aRegion) = 0; + + /** + Pauses/Resumes video playback. This is to be used with direct screen access + to indicate that the display has changed and should not be written to. This + does not affect audio playback. + + @param aDSAEvent + Whether the video display should be active. + + @since 7.0s + */ + virtual void MvpcDirectScreenAccessEventL(const TMMFDSAEvent aDSAEvent) = 0; + + /** + Sets a time window for video playback. + + @param aStart + Start time in milliseconds relative to the start of the video clip. + @param aEnd + End time in milliseconds relative to the start of the video clip. + + @since 7.0s + */ + virtual void MvpcPlayL(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd) = 0; + + /** + Requests the controller to redraw the current frame. + + @since 7.0s + */ + virtual void MvpcRefreshFrameL() = 0; + + /** + Gets the progress of loading a video clip. + + @param aPercentageComplete + The progress loading the clip, as a percentage. + + @since 7.0s + */ + virtual void MvpcGetLoadingProgressL(TInt& aPercentageComplete) = 0; + + /** + Rotates the video image on the screen. + + @param aRotation + The desired rotation to apply. + + @since 7.0s + */ + virtual void MvpcSetRotationL(TVideoRotation aRotation) = 0; + + /** + Queries the rotation that is currently applied to the video image. + + @param aRotation + The applied rotation. + + @since 7.0s + */ + virtual void MvpcGetRotationL(TVideoRotation& aRotation) = 0; + + /** + Scales the video image to a specified percentage of its original size. + + @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 aAntiAliasFiltering + A boolean indicating if anit-aliasing filtering should be used. ETrue if anti-aliasing + should be used. If the plugin does not support this kind of processing, this value will + be ignored. + + @since 7.0s + */ + virtual void MvpcSetScaleFactorL(TReal32 aWidthPercentage, TReal32 aHeightPercentage, TBool aAntiAliasFiltering) = 0; + + /** + Gets the scale factor currently applied to the video image. + + @param aWidthPercentage + The percentage (100 = original size) used to scale the width of the video image will be + copied into here. + @param aHeightPercentage + The percentage (100 = original size) used to scale the height of the video image will be + copied into here. + @param aAntiAliasFiltering + A boolean indicating if anti-aliasing filtering should be used. ETrue if anti-aliasing + filtering is being used, EFalse if not. + + @since 7.0s + */ + virtual void MvpcGetScaleFactorL(TReal32& aWidthPercentage, TReal32& aHeightPercentage, TBool& aAntiAliasFiltering) = 0; + + /** + Selects a region of the video image to be displayed. + + @param aCropRegion + The dimensions of the crop region, relative to the video image. + + @since 7.0s + */ + virtual void MvpcSetCropRegionL(const TRect& aCropRegion) = 0; + + /** + Gets the crop region currently applied to the image + + @param aCropRegion + The dimensions of the crop region, relative to the video image. If no crop region has + been applied, the full dimensions of the video image will be returned. + + @since 7.0s + */ + virtual void MvpcGetCropRegionL(TRect& aCropRegion) = 0; + }; + +/** +@publishedAll +@released + +Mixin class to be derived from controller plugins that could support the video record controller +custom commands. +*/ +class MMMFVideoControllerCustomCommandImplementor + { +public: + + /** + Gets the frame size of the clip. + + @param aVideoFrameSize + The frame size, in pixels. + + @since 7.0s + */ + virtual void MvcGetVideoFrameSizeL(TSize& aVideoFrameSize)=0; + + /** + Gets the audio type. + + @param aCodec + The FourCC of the audio codec. + + @since 7.0s + */ + virtual void MvcGetAudioCodecL(TFourCC& aCodec)=0; + + /** + Gets the video bit rate. + + @param aBitRate + The bit rate of the video stream. If this value is KMMFVariableVideoBitRate it signifies + a variable bit rate. + + @since 7.0s + */ + virtual void MvcGetVideoBitRateL(TInt& aBitRate)=0; + + /** + Gets the audio bit rate. + + @param aBitRate + The bit rate of the audio stream. + + @since 7.0s + */ + virtual void MvcGetAudioBitRateL(TInt& aBitRate)=0; + + /** + Sets the frame rate of the clip. + + @param aFramesPerSecond + The number of frames per second. + + @since 7.0s + */ + virtual void MvcSetFrameRateL(TReal32 aFramesPerSecond)=0; + + /** + Gets the frame rate of the clip. + + @param aFramesPerSecond + The number of frames per second, filled in by the controller plugin. + + @since 7.0s + */ + virtual void MvcGetFrameRateL(TReal32& aFramesPerSecond)=0; + + /** + Gets the supported sink video types. + + @param aMimeType + The supported data types. + + @since 7.0s + */ + virtual void MvcGetVideoMimeTypeL(TDes8& aMimeType)=0; + }; + + +/** +@publishedAll +@released + +Custom command parser class to be used by controller plugins wishing to support +video controller commands. + +The controller plugin must be derived from MMMFVideoControllerCustomCommandImplementor +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. See the following example code for details. + +@code +void CMMFAudioController::ConstructL() + { + // Construct custom command parsers + CMMFAudioPlayDeviceCustomCommandParser* audPlayDevParser = CMMFAudioPlayDeviceCustomCommandParser::NewL(*this); + CleanupStack::PushL(audPlayDevParser); + AddCustomCommandParserL(*audPlayDevParser); //parser now owned by controller framework + CleanupStack::Pop();//audPlayDevParser + + CMMFAudioRecordDeviceCustomCommandParser* audRecDevParser = CMMFAudioRecordDeviceCustomCommandParser::NewL(*this); + CleanupStack::PushL(audRecDevParser); + AddCustomCommandParserL(*audRecDevParser); //parser now owned by controller framework + CleanupStack::Pop();//audRecDevParser + +etc. + } +@endcode + +@since 7.0s + +*/ +class CMMFVideoControllerCustomCommandParser : public CMMFCustomCommandParserBase + { +public: + + /** + Creates a new custom command parser capable of handling video controller commands. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @return A pointer to the object created. + + @since 7.0s + */ + IMPORT_C static CMMFVideoControllerCustomCommandParser* NewL(MMMFVideoControllerCustomCommandImplementor& aImplementor); + + /** + Destructor. + + @since 7.0s + */ + IMPORT_C ~CMMFVideoControllerCustomCommandParser(); + + /** + Handles a request from the client. Called by the controller framework. + + @param aMessage + The message to be handled. + + @since 7.0s + */ + void HandleRequest(TMMFMessage& aMessage); +private: + + /** + Constructor. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @since 7.0s + */ + CMMFVideoControllerCustomCommandParser(MMMFVideoControllerCustomCommandImplementor& aImplementor); + // Internal request handling methods. + void DoHandleRequestL(TMMFMessage& aMessage); + TBool DoGetAudioCodecL(TMMFMessage& aMessage); + + TBool DoGetAudioBitRateL(TMMFMessage& aMessage); + TBool DoGetVideoBitRateL(TMMFMessage& aMessage); + TBool DoGetVideoFrameSizeL(TMMFMessage& aMessage); + TBool DoSetFrameRateL(TMMFMessage& aMessage); + TBool DoGetFrameRateL(TMMFMessage& aMessage); + TBool DoGetVideoMimeTypeL(TMMFMessage& aMessage); +private: + /** + The object that implements the video record controller interface + */ + MMMFVideoControllerCustomCommandImplementor& iImplementor; + }; + +/** +@publishedAll +@released + +Custom command parser class to be used by controller plugins wishing to support video play +controller commands. + +The controller plugin must be derived from MMMFVideoPlayControllerCustomCommandImplementor 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 CMMFVideoPlayControllerCustomCommandParser : public CMMFCustomCommandParserBase + { +public: + + /** + Creates a new custom command parser capable of handling video controller commands. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @return A pointer to the object created. + + @since 7.0s + */ + IMPORT_C static CMMFVideoPlayControllerCustomCommandParser* NewL(MMMFVideoPlayControllerCustomCommandImplementor& aImplementor); + + /** + Destructor. + + @since 7.0s + */ + IMPORT_C ~CMMFVideoPlayControllerCustomCommandParser(); + + /** + Handles a request from the client. Called by the controller framework. + + @param aMessage + The message to be handled. + + @since 7.0s + */ + void HandleRequest(TMMFMessage& aMessage); +private: + /** + Constructor. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @since 7.0s + */ + CMMFVideoPlayControllerCustomCommandParser(MMMFVideoPlayControllerCustomCommandImplementor& aImplementor); + // Internal request handling methods. + void DoHandleRequestL(TMMFMessage& aMessage); + TBool DoRequestFrameL(TMMFMessage& aMessage); + TBool DoGetFrameL(TMMFMessage& aMessage); + TBool DoSetDisplayWindowL(TMMFMessage& aMessage); + TBool DoUpdateDisplayRegionL(TMMFMessage& aMessage); + TBool DoGetAudioEnabledL(TMMFMessage& aMessage); + TBool DoDirectScreenAccessEventL(TMMFMessage& aMessage); + TBool DoPlayL(TMMFMessage& aMessage); + TBool DoRefreshFrameL(TMMFMessage& aMessage); + TBool DoGetLoadingProgressL(TMMFMessage& aMessage); + TBool DoPrepareL(TMMFMessage& aMessage); + TBool DoSetRotationL(TMMFMessage& aMessage); + TBool DoGetRotationL(TMMFMessage& aMessage); + TBool DoSetScaleFactorL(TMMFMessage& aMessage); + TBool DoGetScaleFactorL(TMMFMessage& aMessage); + TBool DoSetCropRegionL(TMMFMessage& aMessage); + TBool DoGetCropRegionL(TMMFMessage& aMessage); + + +private: + /** + The object that implements the video record controller interface + */ + MMMFVideoPlayControllerCustomCommandImplementor& iImplementor; + CMMFVideoFrameMessage* iVideoFrameMessage; + }; + +/** +@publishedAll +@released + +Custom command parser class to be used by controller plugins wishing to support video record +controller commands. + +The controller plugin must be derived from MMMFVideoRecordControllerCustomCommandImplementor 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 CMMFVideoRecordControllerCustomCommandParser : public CMMFCustomCommandParserBase + { +public: + + /** + Creates a new custom command parser capable of handling video controller commands. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @return A pointer to the object created. + + @since 7.0s + */ + IMPORT_C static CMMFVideoRecordControllerCustomCommandParser* NewL(MMMFVideoRecordControllerCustomCommandImplementor& aImplementor); + + /** + Destructor. + + @since 7.0s + */ + IMPORT_C ~CMMFVideoRecordControllerCustomCommandParser(); + + /** + Handles a request from the client. Called by the controller framework. + + @param aMessage + The message to be handled. + + @since 7.0s + */ + void HandleRequest(TMMFMessage& aMessage); +private: + /** + Constructor. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @since 7.0s + */ + CMMFVideoRecordControllerCustomCommandParser(MMMFVideoRecordControllerCustomCommandImplementor& aImplementor); + // Internal request handling methods. + void DoHandleRequestL(TMMFMessage& aMessage); + TBool DoSetVideoFormatL(TMMFMessage& aMessage); + TBool DoSetAudioBitRateL(TMMFMessage& aMessage); + TBool DoSetVideoBitRateL(TMMFMessage& aMessage); + TBool DoSetVideoCodecL(TMMFMessage& aMessage); + TBool DoSetAudioCodecL(TMMFMessage& aMessage); + TBool DoAddMetaDataEntryL(TMMFMessage& aMessage); + TBool DoRemoveMetaDataEntryL(TMMFMessage& aMessage); + TBool DoReplaceMetaDataEntryL(TMMFMessage& aMessage); + TBool DoSetMaxFileSizeL(TMMFMessage& aMessage); + TBool DoSetAudioEnabledL(TMMFMessage& aMessage); + TBool DoSetVideoFrameSizeL(TMMFMessage& aMessage); + TBool DoPrepareL(TMMFMessage& aMessage); + TBool DoSetCameraHandleL(TMMFMessage& aMessage); + TBool DoGetRecordTimeAvailableL(TMMFMessage& aMessage); + + TBool DoGetSupportedSinkAudioTypesL(TMMFMessage& aMessage); + TBool DoGetSupportedSinkVideoTypesL(TMMFMessage& aMessage); + + TInt32 DoCreateBufFromCDesC8ArrayL(CDesC8Array& aArray); + TBool DoCopyCDesC8ArrayDataL(TMMFMessage& aMessage); + + TBool DoCopyFourCCArrayDataL(TMMFMessage& aMessage); + void DoCreateBufFromFourCCArrayL(RArray& aArray); + TBool DoGetAudioEnabledL(TMMFMessage& aMessage); // (INC23777) + +private: + /** + The object that implements the video record controller interface + */ + MMMFVideoRecordControllerCustomCommandImplementor& iImplementor; + CBufFlat* iDataCopyBuffer; + }; + + + +/** +@publishedAll +@released + +Client class to allow the client to specify DRM Intent. + +The class uses the custom command function of the controller plugin, and removes the necessity +for the client to formulate the custom commands. + +@since 7.0s +*/ +class RMMFVideoDRMExtCustomCommands : public RMMFCustomCommandsBase + { +public: + + /** + Constructor. + + @param aController + The client side controller object to be used by this custom command interface. + + @since 7.0s + */ + IMPORT_C RMMFVideoDRMExtCustomCommands(RMMFController& aController); + + /** + Gets a frame previously requested from the controller. + + @param aBitmap + The handle of bitmap to retrieve frame to. + @param aIntent + The DRM Intent to pass in. + @param aStatus + The active object to call back on. + */ + IMPORT_C void GetFrame(CFbsBitmap& aBitmap, ContentAccess::TIntent aIntent, TRequestStatus& aStatus); + +private: + TPckgBuf iConfigPackage; + TPckgBuf iIntentPackage; + }; + + + +/** +@publishedAll +@released + +Mixin class to be derived from controller plugins that could support the DRM Intent +custom commands. +*/ +class MMMFVideoDRMExtCustomCommandImplementor + { +public: + + /** + Gets a frame previously requested from the controller. + + @param aVideoFrame + The callback interface to allow the caller to retrieve a bitmap. + @param aIntent + The DRM Intent to supply. + */ + virtual void MvdeGetFrameL(MMMFVideoFrameMessage& aVideoFrame, ContentAccess::TIntent aIntent)=0; + }; + + +/** +@publishedAll +@released + +Client class to provide DRM extensions to video controllers. + +The class uses the custom command function of the controller plugin, and removes the necessity +for the client to formulate the custom commands. +*/ +class CMMFVideoDRMExtCustomCommandParser : public CMMFCustomCommandParserBase + { +public: + + /** + Creates a new custom command parser capable of DRM Intent controller commands. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @return A pointer to the object created. + + @since 7.0s + */ + IMPORT_C static CMMFVideoDRMExtCustomCommandParser* NewL(MMMFVideoDRMExtCustomCommandImplementor& aImplementor); + + /** + Destructor. + + @since 7.0s + */ + IMPORT_C ~CMMFVideoDRMExtCustomCommandParser(); + + /** + Handles a request from the client. Called by the controller framework. + + @param aMessage + The message to be handled. + + @since 7.0s + */ + void HandleRequest(TMMFMessage& aMessage); + +private: + /** + Constructor. + + @param aImplementor + A reference to the controller plugin that owns this new object. + @since 7.0s + */ + CMMFVideoDRMExtCustomCommandParser(MMMFVideoDRMExtCustomCommandImplementor& aImplementor); + // Internal request handling methods. + + void DoGetFrameL(TMMFMessage& aMessage); + +private: + MMMFVideoDRMExtCustomCommandImplementor& iImplementor; + CMMFVideoFrameMessage* iVideoFrameMessage; + }; + +/** +@publishedAll +@released + +Client class to allow the client to register notification . + +The class uses the custom command function of the controller plugin, and removes the necessity +for the client to formulate the custom commands. + +@since 7.0s +*/ +class RMMFResourceNotificationCustomCommands : public RMMFCustomCommandsBase + { +public: + /** + Constructor. + + @param aController + The client side controller object to be used by this custom command interface. + + @since 7.0s + */ + IMPORT_C RMMFResourceNotificationCustomCommands(RMMFController& aController); + + /** + Registers the Event for Notification when resource is avaliable. + + @param aEventType + The Event to notify the client. + + @param aNotificationRegistrationData + Notification registration specific data. + + @return An error code indicating if the registration was successful. KErrNone on success, + otherwise another of the system-wide error codes. + */ + IMPORT_C TInt RegisterAsClient(TUid aEventType,const TDesC8& aNotificationRegistrationData); + + /** + Cancels the registered notification event. + + @param aEventType + The Event to notify the client. + + @return An error code indicating if the cancel registration was successful. KErrNone on success, + otherwise another of the system-wide error codes. + */ + IMPORT_C TInt CancelRegisterAsClient(TUid aEventType); + + /** + Gets the notification data for the event. + + @param aEventType + The Event to notify the client. + + @param aNotificationData + The Notification data for the client to resume the play. + + @return An error code indicating if the get notification data was successful. KErrNone on success, + otherwise another of the system-wide error codes. + */ + IMPORT_C TInt GetResourceNotificationData(TUid aEventType,TDes8& aNotificationData); + + /** + Waits for the client to resume the play even after the default timer expires. + + @return An error code indicating if the registration was successful. KErrNone on success, + otherwise any of the system-wide error codes. + */ + IMPORT_C TInt WillResumePlay(); + }; + +/** +@publishedAll +@released + +Mixin class to be derived from controller plugins that could support the audio resource notification +custom commands. +*/ +class MMMFResourceNotificationCustomCommandImplementor + { +public: + /** + Registers the Event for Notification when resource is available. + + @param aEventType + The event which the client is notified of. + + @param aNotificationRegistrationData + Notification registration specific data, which has been reserved for future use. + + @leave This method may leave with one of the system-wide error codes. KErrNotReady if there is no + data sink. + */ + virtual void MarnRegisterAsClientL(TUid aEventType,const TDesC8& aNotificationRegistrationData) = 0; + + /** + Cancels the registered notification event. + + @param aEventType + The event to cancel. + + @leave This method may leave with one of the system-wide error codes. KErrNotReady if there is no + data sink. + */ + virtual void MarnCancelRegisterAsClientL(TUid aEventType) = 0; + + /** + Gets the notification data for the event. + + @param aEventType + The event which the client is notified of. + + @param aNotificationData + The Notification data for the client to resume playing. + + @leave This method may leave with one of the system-wide error codes. KErrNotReady if there is no + data sink, KErrArgument if unable to provide the notification data. + */ + virtual void MarnGetResourceNotificationDataL(TUid aEventType,TDes8& aNotificationData) = 0; + + /** + Waits for the client to resume the play even after the default timer expires. + + @leave This method may leave with one of the system-wide error codes. KErrNotReady if there is no + data sink. + */ + virtual void MarnWillResumePlayL() = 0; + }; + +/** +@publishedAll +@released + +Client class to provide Audio resource notification controllers. + +The class uses the custom command function of the controller plugin, and removes the necessity +for the client to formulate the custom commands. +*/ +class CMMFResourceNotificationCustomCommandParser: public CMMFCustomCommandParserBase + { +public: + /** + Creates a new custom command parser capable of handling resource notification controller commands. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @return A pointer to the object created. + + @since 7.0s + */ + IMPORT_C static CMMFResourceNotificationCustomCommandParser* NewL(MMMFResourceNotificationCustomCommandImplementor& aImplementor); + + /** + Destructor. + + @since 7.0s + */ + IMPORT_C ~CMMFResourceNotificationCustomCommandParser(); + + /** + Handles a request from the client. Called by the controller framework. + + @param aMessage + The message to be handled. + + @since 7.0s + */ + void HandleRequest(TMMFMessage& aMessage); + +private: + /** + Constructor. + + @param aImplementor + A reference to the controller plugin that owns this new object. + + @since 7.0s + */ + CMMFResourceNotificationCustomCommandParser(MMMFResourceNotificationCustomCommandImplementor& aImplementor); + void DoHandleRequestL(TMMFMessage& aMessage); + // Internal request handling methods. + TBool DoRegisterAsClientL(TMMFMessage& aMessage); + TBool DoCancelRegisterAsClientL(TMMFMessage& aMessage); + TBool DoGetResourceNotificationDataL(TMMFMessage& aMessage); + TBool DoWillResumePlayL(TMMFMessage& aMessage); +private: + MMMFResourceNotificationCustomCommandImplementor& iImplementor; + }; + + + +#endif