--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/src/Client/Video/mmfclientvideoplayer.cpp Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,1375 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+
+#include <mmf/common/mmfstandardcustomcommands.h>
+#include <mmf/common/mmfvideo.h>
+#include <mmf/common/mmfpaniccodes.h>
+#include <mmf/server/mmfdes.h>
+#include <mmf/server/mmffile.h>
+#include <videoplayer.h>
+#include "mmfvideocallback.h"
+#include "VideoPlayerBody.h"
+#include "mmfvideopaniccodes.h"
+#include "mmfclientvideocommon.h"
+
+
+void Panic(TInt aPanicCode)
+ {
+ _LIT(KMMFMediaClientVideoPanicCategory, "MMFVideoClient");
+ User::Panic(KMMFMediaClientVideoPanicCategory, aPanicCode);
+ }
+
+/**
+Constructs and initialises a new instance of the video player utility.
+
+This function leaves if the video player utility object cannot be created.
+
+@param aObserver
+ A client class to receive notifications from the video player.
+@param aPriority
+ The Priority Value - this client's relative priority. This is a value between EMdaPriorityMin and
+ EMdaPriorityMax and represents a relative priority. A higher value indicates a more important request.
+@param aPref
+ The Priority Preference - an additional audio policy parameter. The suggested default is
+ EMdaPriorityPreferenceNone. Further values are given by TMdaPriorityPreference, and additional
+ values may be supported by given phones and/or platforms, but should not be depended upon by
+ portable code.
+@param aWs
+ The window server session id.
+@param aScreenDevice
+ The software device screen.
+@param aWindow
+ The display window.
+@param aScreenRect
+ The dimensions of the display window.
+@param aClipRect
+ The area of the video clip to display in the window.
+
+@return A pointer to the new video player utility object.
+
+@since 7.0s
+
+Note: The Priority Value and Priority Preference are used primarily when deciding what to do when
+several audio clients attempt to play or record simultaneously. In addition to the Priority Value and Preference,
+the adaptation may consider other parameters such as the SecureId and Capabilities of the client process.
+Whatever, the decision as to what to do in such situations is up to the audio adaptation, and may
+vary between different phones. Portable applications are advised not to assume any specific behaviour.
+*/
+EXPORT_C CVideoPlayerUtility* CVideoPlayerUtility::NewL(MVideoPlayerUtilityObserver& aObserver,
+ TInt aPriority,
+ TInt aPref,
+ RWsSession& aWs,
+ CWsScreenDevice& aScreenDevice,
+ RWindowBase& aWindow,
+ const TRect& aScreenRect,
+ const TRect& aClipRect)
+ {
+ CVideoPlayerUtility* s = new(ELeave) CVideoPlayerUtility();
+ CleanupStack::PushL(s);
+ s->iBody = CBody::NewL(s, aObserver, aPriority, aPref, aWs, aScreenDevice,
+ aWindow, aScreenRect, aClipRect);
+ CleanupStack::Pop();
+ return s;
+ }
+
+/**
+Destructor. Closes any open video clips and frees any resources held by the Video Player.
+
+@since 7.0s
+*/
+CVideoPlayerUtility::~CVideoPlayerUtility()
+ {
+ delete iBody;
+ }
+
+/**
+Opens a video clip from a file.
+
+This function opens a video clip from a file using an optionally specified plugin. If no controller
+plugin is specified, this function searches through a list of all available plugins and attempts to
+use each one until successful or the end of the list is reached.
+
+Once the opening of the video clip is complete, successfully or otherwise, the callback function
+MVideoPlayerUtilityObserver::MvpuoOpenComplete() is called.
+
+This function leaves if errors are encountered opening the specified video clip file, or in initialising a
+specified/unspecified controller plugin.
+
+This function can leave with one of the specified error codes. Most open failures
+will however be reported through the MVideoPlayerUtilityObserver interface.
+
+From Symbian release v9.5 onwards, this function will enable graphics surface use if the controller supports it.
+If this function is called through an instance of the derived class CVideoPlayerUtility2 and the controller doesn't support graphics surfaces,
+it fails with KErrNotSupported.
+
+@param aFileName
+ The full path name of the file containing the video data.
+@param aControllerUid
+ If specified, it will force the video player to use the
+ controller with the given UID.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::OpenFileL(const TDesC& aFileName, TUid aControllerUid)
+ {
+ iBody->OpenFileL(aFileName, aControllerUid);
+ }
+
+/**
+Opens a video clip from a file.
+
+This function opens a video clip from a file using an optionally specified plugin. If no controller
+plugin is specified, this function searches through a list of all available plugins and attempts to
+use each one until successful or the end of the list is reached.
+
+Once the opening of the video clip is complete, successfully or otherwise, the callback function
+MVideoPlayerUtilityObserver::MvpuoOpenComplete() is called.
+
+This function leaves if errors are encountered opening the specified video clip file, or in initialising a
+specified/unspecified controller plugin.
+
+This function can leave with one of the specified error codes. Most open failures
+will however be reported through the MVideoPlayerUtilityObserver interface.
+
+From Symbian release v9.5 onwards, this function will enable graphics surface use if the controller supports it.
+If this function is called through an instance of the derived class CVideoPlayerUtility2 and the controller doesn't support graphics surfaces,
+it fails with KErrNotSupported.
+
+@param aFile
+ An open handle to a file containing the video clip
+@param aControllerUid
+ If specified, it will force the video player to use the
+ controller with the given UID.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::OpenFileL(const RFile& aFile, TUid aControllerUid)
+ {
+ iBody->OpenFileL(aFile, aControllerUid);
+ }
+
+
+/**
+Opens a video clip from a file.
+
+This function opens a video clip from a file using an optionally specified plugin. If no controller
+plugin is specified, this function searches through a list of all available plugins and attempts to
+use each one until successful or the end of the list is reached.
+
+Once the opening of the video clip is complete, successfully or otherwise, the callback function
+MVideoPlayerUtilityObserver::MvpuoOpenComplete() is called.
+
+This function leaves if errors are encountered opening the specified video clip file, or in initialising a
+specified/unspecified controller plugin.
+
+This function can leave with one of the specified error codes. Most open failures
+will however be reported through the MVideoPlayerUtilityObserver interface.
+
+From Symbian release v9.5 onwards, this function will enable graphics surface use if the controller supports it.
+If this function is called through an instance of the derived class CVideoPlayerUtility2 and the controller doesn't support graphics surfaces,
+it fails with KErrNotSupported.
+
+@param aSource
+ A filename or an open handle to a file containing the video clip
+@param aControllerUid
+ If specified, it will force the video player to use the
+ controller with the given UID.
+*/
+EXPORT_C void CVideoPlayerUtility::OpenFileL(const TMMSource& aSource, TUid aControllerUid)
+ {
+ iBody->OpenFileL(aSource, aControllerUid);
+ }
+
+/**
+Opens a video clip contained in a descriptor.
+
+This function opens a video clip contained as binary data in a descriptor using an optionally specified
+plugin. If no controller plugin is specified, this function searches through a list of all available
+plugins and attempts to use each one until successful or the end of the list is reached.
+
+Once the opening of the video clip is complete, successfully or otherwise, the callback function
+MVideoPlayerUtilityObserver::MvpuoOpenComplete() is called.
+
+This function can leave with one of the specified error codes. Most open failures will however be
+reported through the interface.
+
+From Symbian release v9.5 onwards, this function will enable graphics surface use if the controller supports it.
+If this function is called through an instance of the derived class CVideoPlayerUtility2 and the controller doesn't support graphics surfaces,
+it fails with KErrNotSupported.
+
+@param aDescriptor
+ The descriptor containing the video clip
+@param aControllerUid
+ If specified, it will force the video player to use the
+ controller with the given UID.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::OpenDesL(const TDesC8& aDescriptor, TUid aControllerUid)
+ {
+ iBody->OpenDesL(aDescriptor, aControllerUid);
+ }
+
+/**
+Opens a video clip from a URL.
+
+This function opens a video clip stored at a specified URL and identified by a MIME type. In addition
+a plugin can be specified if necessary. If no controller plugin is specified, this function searches
+through a list of all available plugins and attempts to use each one until successful or the end
+of the list is reached.
+
+Once the opening of the video clip is complete, successfully or otherwise, the callback function
+MVideoPlayerUtilityObserver::MvpuoOpenComplete() is called.
+
+This function can leave with one of the specified error codes. Most open failures
+will however be reported through the MVideoPlayerUtilityObserver interface.
+
+From Symbian release v9.5 onwards, this function will enable graphics surface use if the controller supports it.
+If this function is called through an instance of the derived class CVideoPlayerUtility2 and the controller doesn't support graphics surfaces,
+it fails with KErrNotSupported.
+
+@param aUrl
+ The URL of the video clip to open.
+@param aIapId
+ The Id of the internet access point to use
+@param aMimeType
+ The MIME type associated with this video clip. This is
+ used to determine the format of the video clip.
+@param aControllerUid
+ If specified, it will force the video player to use the controller with the given Uid.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::OpenUrlL(const TDesC& aUrl, TInt aIapId, const TDesC8& aMimeType, TUid aControllerUid)
+ {
+ iBody->OpenUrlL(aUrl, aIapId, aMimeType, aControllerUid);
+ }
+
+/**
+Closes the video clip.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::Close()
+ {
+ iBody->Close();
+ }
+
+/**
+Begins playback of the initialised video sample at the current volume and priority levels.
+
+When playing of the video sample is complete, successfully or otherwise, the callback function
+MVideoPlayerUtilityObserver::MvpuoPlayComplete() is called.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::Play()
+ {
+ iBody->Play();
+ }
+
+/**
+Begins playback of the initialised video sample at the specified start and end points.
+
+When playing of the video sample is complete, successfully or otherwise, the callback function
+MVideoPlayerUtilityObserver::MvpuoPlayComplete() is called.
+
+@param aStartTime
+ The point at which to start playback.
+@param aEndTime
+ The point at which to terminate playback.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::Play(const TTimeIntervalMicroSeconds& aStartTime, const TTimeIntervalMicroSeconds& aEndTime)
+ {
+ iBody->Play(aStartTime, aEndTime);
+ }
+
+/**
+Stops playback of the video sample as soon as is possible.
+
+If the video sample is playing, playback is stopped as soon as possible.
+
+If playback is already complete, this function has no effect.
+
+The position is reset to the beginning of the file.
+
+@return An error code indicating if the function call was successful. KErrNone on success, otherwise
+ another of the system-wide error codes.
+
+@since 7.0s
+*/
+EXPORT_C TInt CVideoPlayerUtility::Stop()
+ {
+ return iBody->Stop();
+ }
+
+/**
+Video playback is paused. The current position is maintained and playback can be
+resumed by calling Play.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::PauseL()
+ {
+ iBody->PauseL();
+ }
+
+/**
+Sets the playback volume for the audio track of the video clip.
+
+The volume can be changed before or during playback and is effective immediately. The volume can
+be set to any value between zero (mute) and the maximum permissible volume
+(determined using MaxVolume()).
+
+To determine if the current video clip contains an audio track, use AudioEnabledL().
+
+
+@param aVolume
+ The volume, between 0 and MaxVolume().
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::SetVolumeL(TInt aVolume)
+ {
+ iBody->SetVolumeL(aVolume);
+ }
+
+
+//
+// Sends custom command to the plugin controller.
+// Passes handle and size of the drawable window.
+//
+/**
+Sets the display window. This is used to provide the video controller with an area of
+the display to render the current video frame.
+
+From Symbian release 9.5 onwards this method is not supported when called on an instance of CVideoPlayerUtility2, and will always
+leave with KErrNotSupported.
+
+
+@param aWs
+ The window server session ID.
+@param aScreenDevice
+ The software device screen.
+@param aWindow
+ The window to display.
+@param aScreenRect
+ The dimensions of the display window.
+@param aClipRect
+ The area of the video clip to display in the window.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::SetDisplayWindowL(RWsSession& aWs, CWsScreenDevice& aScreenDevice,
+ RWindowBase& aWindow, const TRect& aScreenRect,
+ const TRect& aClipRect)
+ {
+ iBody->SetDisplayWindowL(aWs, aScreenDevice, aWindow, aScreenRect, aClipRect);
+ }
+
+/**
+Returns the video frame rate in frames/second.
+
+@return The video frame rate (frames/second).
+
+@since 7.0s
+*/
+EXPORT_C TReal32 CVideoPlayerUtility::VideoFrameRateL() const
+ {
+ return iBody->VideoFrameRateL();
+ }
+
+/**
+Gets the video frame size.
+
+@param aSize
+ The video frame size
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::VideoFrameSizeL(TSize& aSize) const
+ {
+ iBody->VideoFrameSizeL(aSize);
+ }
+
+/**
+Returns the current playback volume for the audio track of the video clip.
+
+@return A value between 0 (mute) and the maximum volume returned by MaxVolume().
+
+@since 7.0s
+*/
+EXPORT_C TInt CVideoPlayerUtility::Volume() const
+ {
+ return iBody->Volume();
+ }
+
+/**
+Sets the current playback balance for the audio track of the video clip.
+
+The balance can be any value between KMMFBalanceMaxLeft and KMMFBalanceMaxRight,
+the default value being KMMFBalanceCenter.
+
+@param aBalance
+ The balance value to set.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::SetBalanceL(TInt aBalance)
+ {
+ iBody->SetBalanceL(aBalance);
+ }
+
+/**
+Returns the current balance setting for the audio track of the video clip.
+
+@return A balance value between KMMFBalanceMaxLeft and KMMFBalanceMaxRight.
+
+@since 7.0s
+*/
+EXPORT_C TInt CVideoPlayerUtility::Balance() const
+ {
+ return iBody->Balance();
+ }
+
+/**
+Returns the video format's MIME type.
+
+@return The video clip's MIME type.
+
+@since 7.0s
+@see NumberOfMetaDataEntriesL
+*/
+EXPORT_C const TDesC8& CVideoPlayerUtility::VideoFormatMimeType() const
+ {
+ return iBody->VideoFormatMimeType();
+ }
+
+/**
+Returns the number of meta data entries associated with this clip.
+
+@return The number of meta data entries.
+
+@since 7.0s
+*/
+EXPORT_C TInt CVideoPlayerUtility::NumberOfMetaDataEntriesL() const
+ {
+ return iBody->NumberOfMetaDataEntriesL();
+ }
+
+/**
+Returns a meta data entry from the clip.
+
+@param aMetaDataIndex
+ The index of the meta data entry to retrieve.
+
+@return The metadata entry requested.
+
+@since 7.0s
+@see NumberOfMetaDataEntriesL
+*/
+EXPORT_C CMMFMetaDataEntry* CVideoPlayerUtility::MetaDataEntryL(TInt aMetaDataIndex) const
+ {
+ return iBody->MetaDataEntryL(aMetaDataIndex);
+ }
+
+/**
+Sets the playback priority.
+
+This is used to arbitrate between multiple objects simultaneously trying to accesses
+the sound hardware.
+
+@param aPriority
+ The Priority Value.
+@param aPref
+ The Priority Preference.
+
+@see CVideoPlayerUtility::NewL()
+
+@since 7.0s
+
+*/
+EXPORT_C void CVideoPlayerUtility::SetPriorityL(TInt aPriority, TInt aPref)
+ {
+ iBody->SetPriorityL(aPriority, aPref);
+ }
+
+/**
+Get the current playback priority. This is used to arbitrate between simultaneous accesses of
+the sound hardware.
+
+@param aPriority
+ On return, contains the priority level, EMdaPriorityMin client can be interrupted by any
+ other client, EMdaPriorityNormal client can only be interrupted by a client with a higher
+ priority or EMdaPriorityMax client cannot be interrupted by other clients.
+@param aPref
+ On return, contains the time and quality preferences, enumerated in TMdaPriorityPreference.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::PriorityL(TInt& aPriority, TMdaPriorityPreference& aPref) const
+ {
+ iBody->PriorityL(aPriority, aPref);
+ }
+
+/**
+Sets the position within the video clip from where to start playback.
+
+@param aPosition
+ Position from start of clip in microseconds.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::SetPositionL(const TTimeIntervalMicroSeconds& aPosition)
+ {
+ iBody->SetPositionL(aPosition);
+ }
+
+/**
+Returns the duration of video clip in mircoseconds.
+
+@return The duration of clip in microseconds.
+
+@since 7.0s
+*/
+EXPORT_C TTimeIntervalMicroSeconds CVideoPlayerUtility::DurationL() const
+ {
+ return iBody->DurationL();
+ }
+
+/**
+Returns the current playback position.
+
+@return The current position from the start of the clip in microseconds.
+
+@since 7.0s
+*/
+EXPORT_C TTimeIntervalMicroSeconds CVideoPlayerUtility::PositionL() const
+ {
+ return iBody->PositionL();
+ }
+
+/**
+Returns an integer representing the maximum volume that the audio track can support.
+
+This is the maximum value that can be passed to SetVolumeL(). This value is platform
+independent, but is always greater than or equal to one.
+
+@return The naximum playback volume.
+
+@since 7.0s
+*/
+EXPORT_C TInt CVideoPlayerUtility::MaxVolume() const
+ {
+ return iBody->MaxVolume();
+ }
+
+/**
+Gets the current frame. The current frame is requested, and will be sent to
+the client asynchrynously via the MvpuoFrameReady callback.
+
+@param aDisplayMode
+ The display mode for the retrieved frame.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::GetFrameL(TDisplayMode aDisplayMode)
+ {
+ iBody->GetFrameL(aDisplayMode);
+ }
+
+/**
+Gets the current frame. The current frame is requested, and will be sent to
+the client asynchrynously via the MvpuoFrameReady callback.
+
+@param aDisplayMode
+ The display mode for the retrieved frame.
+@param aIntent
+ The DRM Intent to pass to the controller.
+*/
+EXPORT_C void CVideoPlayerUtility::GetFrameL(TDisplayMode aDisplayMode, ContentAccess::TIntent aIntent)
+ {
+ iBody->GetFrameL(aDisplayMode, ETrue, aIntent);
+ }
+
+/**
+Returns the video bit rate.
+
+@return The video bit rate in bits/second.
+
+@since 7.0s
+*/
+EXPORT_C TInt CVideoPlayerUtility::VideoBitRateL() const
+ {
+ return iBody->VideoBitRateL();
+ }
+
+/**
+Returns the audio bit rate in bits/second.
+
+@return The audio bit rate (bits/second).
+
+@since 7.0s
+*/
+EXPORT_C TInt CVideoPlayerUtility::AudioBitRateL() const
+ {
+ return iBody->AudioBitRateL();
+ }
+
+/**
+Returns whether the current clip has an audio stream and audio playback
+is enabled. This method will return EFalse if the clip does no have an
+audio track or if audio playback has been disabled with
+SetAudioEnabledL().
+
+@return ETrue if an audio track is present and audio playback is
+ enabled, otherwise EFalse.
+
+@since 7.0s
+*/
+EXPORT_C TBool CVideoPlayerUtility::AudioEnabledL() const
+ {
+ return iBody->AudioEnabledL();
+ }
+
+EXPORT_C void Reserved2()
+ {
+ // reserved function replacing removed VideoTypeL() method
+ // this function should never be called hence generate a
+ // panic with code ENoVideoTypeL
+ Panic( ENoVideoTypeL );
+ }
+
+/**
+Returns the codec used for the audio component of the video clip.
+
+@return The four character code representing the audio codec.
+
+@since 7.0s
+*/
+EXPORT_C TFourCC CVideoPlayerUtility::AudioTypeL() const
+ {
+ return iBody->AudioTypeL();
+ }
+
+/**
+Gets the progress of video clip loading/rebuffering.
+
+@param aPercentageProgress
+ The percentage of loading/rebuffering complete. The parameter
+ is zero if loading has not begun and 100 if loading has already completed.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::GetVideoLoadingProgressL(TInt& aPercentageProgress)
+ {
+ iBody->GetVideoLoadingProgressL(aPercentageProgress);
+ }
+
+/**
+Sends a synchronous custom command to the controller.
+
+@param aDestination
+ The destination of the message, consisting of the UID of
+ the interface of this message.
+@param aFunction
+ The function number to indicate which function is to be called
+ on the interface defined in the aDestination parameter.
+@param aDataTo1
+ A reference to the first chunk of data to be copied to the controller
+ framework. The exact contents of the data are dependent on the
+ interface being called. Can be KNullDesC8.
+@param aDataTo2
+ A reference to the second chunk of data to be copied to the controller
+ framework. The exact contents of the data are dependent on the
+ interface being called. Can be KNullDesC8.
+@param aDataFrom
+ A reference to an area of memory to which the controller framework will
+ write any data to be passed back to the client. Can't be KNullDesC8.
+
+@return The result of the request. The exact range of values is dependent on the interface.
+
+@since 7.0s
+*/
+EXPORT_C TInt CVideoPlayerUtility::CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom)
+ {
+ return iBody->CustomCommandSync(aDestination, aFunction, aDataTo1, aDataTo2, aDataFrom);
+ }
+
+/**
+Sends a synchronous custom command to the controller.
+
+@param aDestination
+ The destination of the message, consisting of the uid of
+ the interface of this message.
+@param aFunction
+ The function number to indicate which function is to be called
+ on the interface defined in the aDestination parameter.
+@param aDataTo1
+ A reference to the first chunk of data to be copied to the controller
+ framework. The exact contents of the data are dependent on the
+ interface being called. Can be KNullDesC8.
+@param aDataTo2
+ A reference to the second chunk of data to be copied to the controller
+ framework. The exact contents of the data are dependent on the
+ interface being called. Can be KNullDesC8.
+
+@return The result of the request. The exact range of values is dependent on the interface.
+
+@since 7.0s
+*/
+EXPORT_C TInt CVideoPlayerUtility::CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2)
+ {
+ return iBody->CustomCommandSync(aDestination, aFunction, aDataTo1, aDataTo2);
+ }
+
+/**
+Sends an asynchronous custom command to the controller.
+
+Note:
+This method will return immediately. The RunL of the active object owning the
+aStatus parameter will be called when the command is completed by the
+controller framework.
+
+@param aDestination
+ The destination of the message, consisting of the uid of
+ the interface of this message.
+@param aFunction
+ The function number to indicate which function is to be called
+ on the interface defined in the aDestination parameter.
+@param aDataTo1
+ A reference to the first chunk of data to be copied to the controller
+ framework. The exact contents of the data are dependent on the
+ interface being called. Can be KNullDesC8.
+@param aDataTo2
+ A reference to the second chunk of data to be copied to the controller
+ framework. The exact contents of the data are dependent on the
+ interface being called. Can be KNullDesC8.
+@param aDataFrom
+ A reference to an area of memory to which the controller framework will
+ write any data to be passed back to the client. Can't be KNullDesC8.
+@param aStatus
+ The TRequestStatus of an active object. This will contain the
+ result of the request on completion. The exact range of
+ result values is dependent on the interface.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus)
+ {
+ iBody->CustomCommandAsync(aDestination, aFunction, aDataTo1, aDataTo2, aDataFrom, aStatus);
+ }
+
+/**
+Send a asynchronous custom command to the controller.
+
+Note:
+This method will return immediately. The RunL of the active object owning the
+aStatus parameter will be called when the command is completed by the
+controller framework.
+
+@param aDestination
+ The destination of the message, consisting of the uid of
+ the interface of this message.
+@param aFunction
+ The function number to indicate which function is to be called
+ on the interface defined in the aDestination parameter.
+@param aDataTo1
+ A reference to the first chunk of data to be copied to the controller
+ framework. The exact contents of the data are dependent on the
+ interface being called. Can be KNullDesC8.
+@param aDataTo2
+ A reference to the second chunk of data to be copied to the controller
+ framework. The exact contents of the data are dependent on the
+ interface being called. Can be KNullDesC8.
+@param aStatus
+ The TRequestStatus of an active object. This will contain the
+ result of the request on completion. The exact range of
+ result values is dependent on the interface.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus)
+ {
+ iBody->CustomCommandAsync(aDestination, aFunction, aDataTo1, aDataTo2, aStatus);
+ }
+
+/**
+Register to receive notifications of video clip loading/rebuffering.
+
+When a video clip is being streamed in, it may require rebuffering from time to time. This function
+"switches on" callbacks that report the status of the rebuffering.
+
+The two callbacks that can be sent are MVideoLoadingObserver::MvloLoadingStarted() and
+MVideoLoadingObserver::MvloLoadingComplete().
+
+@param aCallback
+ The object to receive video loading notifications.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::RegisterForVideoLoadingNotification(MVideoLoadingObserver& aCallback)
+ {
+ iBody->RegisterForVideoLoadingNotification(aCallback);
+ }
+
+/**
+Sets the video frame rate.
+
+@param aFramesPerSecond
+ The number of frames per second to request.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::SetVideoFrameRateL(TReal32 aFramesPerSecond)
+ {
+ iBody->SetVideoFrameRateL(aFramesPerSecond);
+ }
+
+/**
+Requests the video controller to redraw the current frame.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::RefreshFrameL()
+ {
+ iBody->RefreshFrameL();
+ }
+
+/**
+Rotates the video image on the screen.
+
+@param aRotation
+ The desired rotation to apply in 90 degree increments.
+
+@see RotationL
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::SetRotationL(TVideoRotation aRotation)
+ {
+ iBody->SetRotationL(aRotation);
+ }
+
+/**
+Query the rotation that is currently applied to the video image.
+
+@return The applied rotation
+
+@since 7.0s
+@see SetRotationL
+*/
+EXPORT_C TVideoRotation CVideoPlayerUtility::RotationL() const
+ {
+ return iBody->RotationL();
+ }
+
+/**
+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 specifying if anti-aliasing should be used. True if anti-aliasing filtering
+ should be used. If the plugin does not support this kind of processing,
+ this value will be ignored.
+
+@since 7.0s
+@see GetScaleFactorL
+*/
+EXPORT_C void CVideoPlayerUtility::SetScaleFactorL(TReal32 aWidthPercentage, TReal32 aHeightPercentage, TBool aAntiAliasFiltering)
+ {
+ iBody->SetScaleFactorL(aWidthPercentage, aHeightPercentage, aAntiAliasFiltering);
+ }
+
+/**
+Gets the scale factor currently applied to the video image.
+
+@param aWidthPercentage
+ On function return, contains the current scaling percentage applied to the width of the
+ video image (100 = original size).
+@param aHeightPercentage
+ On function return, contains the current scaling percentage applied to the height of the
+ of the video image (100 = original size).
+@param aAntiAliasFiltering
+ The boolean specifying if anit-aliasing is being used.
+
+@since 7.0s
+@see SetScaleFactorL
+*/
+EXPORT_C void CVideoPlayerUtility::GetScaleFactorL(TReal32& aWidthPercentage, TReal32& aHeightPercentage, TBool& aAntiAliasFiltering) const
+ {
+ iBody->GetScaleFactorL(aWidthPercentage, aHeightPercentage, aAntiAliasFiltering);
+ }
+
+/**
+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
+@see GetCropRegionL
+*/
+EXPORT_C void CVideoPlayerUtility::SetCropRegionL(const TRect& aCropRegion)
+ {
+ iBody->SetCropRegionL(aCropRegion);
+ }
+
+/**
+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
+@see SetCropRegionL
+*/
+EXPORT_C void CVideoPlayerUtility::GetCropRegionL(TRect& aCropRegion) const
+ {
+ iBody->GetCropRegionL(aCropRegion);
+ }
+
+/**
+Prepares the video clip to be accessed.
+
+A call to this method 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 this method has signalled
+its completion (successful or otherwise) via the callback MvpuoPrepareComplete.
+
+@since 7.0s
+*/
+EXPORT_C void CVideoPlayerUtility::Prepare()
+ {
+ iBody->Prepare();
+ }
+
+/**
+Returns the controller implementation information associated with the current controller.
+
+@return The controller implementation structure associated with the controller.
+
+@since 7.0s
+*/
+EXPORT_C const CMMFControllerImplementationInformation& CVideoPlayerUtility::ControllerImplementationInformationL()
+ {
+ return iBody->ControllerImplementationInformationL();
+ }
+
+/**
+Gets a controller's DRM custom command implementation.
+
+@return A pointer to a controller's DRM custom command implementation, or NULL
+if the controller does not support it.
+*/
+EXPORT_C MMMFDRMCustomCommand* CVideoPlayerUtility::GetDRMCustomCommand()
+ {
+ return iBody->GetDRMCustomCommand();
+ }
+
+
+/**
+Enables a client application to stop the video player from using direct screen access (DSA).
+
+From Symbian release 9.5 onwards this method is not supported when called on an instance of CVideoPlayerUtility2, and will always
+leave with KErrNotSupported.
+
+This function leaves if errors are encountered when trying to stop DSA.
+*/
+EXPORT_C void CVideoPlayerUtility::StopDirectScreenAccessL()
+ {
+ iBody->StopDirectScreenAccessL();
+ }
+
+/**
+Enables a client application to start the video player using direct screen access (DSA).
+
+From Symbian release 9.5 onwards this method is not supported when called on an instance of CVideoPlayerUtility2, and will always
+leave with KErrNotSupported.
+
+This function leaves if errors are encountered when trying to start DSA.
+*/
+EXPORT_C void CVideoPlayerUtility::StartDirectScreenAccessL()
+ {
+ iBody->StartDirectScreenAccessL();
+ }
+
+/**
+Registers for notification, when audio resource is available.
+
+@param aCallback
+ Observer interface for audio resource notification event
+
+@param aNotificationEventId
+ The Event for which the client registers.
+
+@param aNotificationRegistrationData
+ Data specific to notification registration.This has been reserved for future use and its value should be NULL.
+
+@return An error code indicating if the registration is successful. KErrNone on success,
+ otherwise another of the system-wide error codes.
+*/
+EXPORT_C TInt CVideoPlayerUtility::RegisterAudioResourceNotification(MMMFAudioResourceNotificationCallback& aCallback, TUid aNotificationEventId, const TDesC8& aNotificationRegistrationData)
+ {
+ return iBody->RegisterAudioResourceNotification(aCallback, aNotificationEventId, aNotificationRegistrationData);
+ }
+
+/**
+Cancels the registration for audio resource notification.
+
+@param aNotificationEventId
+ The Event to be cancellled.
+
+@return An error code indicating if the cancellation is successful. KErrNone on success,
+ otherwise another of the system-wide error codes.
+*/
+EXPORT_C TInt CVideoPlayerUtility::CancelRegisterAudioResourceNotification(TUid aNotificationEventId)
+ {
+ return iBody->CancelRegisterAudioResourceNotification(aNotificationEventId);
+ }
+
+/**
+Waits for the client to resume the play even after the default timer expires.
+Unless the client completes the play no other client gets notification.
+
+@return An error code indicating if the function call is successful. KErrNone on success,
+ otherwise another of the system-wide error codes.
+*/
+EXPORT_C TInt CVideoPlayerUtility::WillResumePlay()
+ {
+ return iBody->WillResumePlay();
+ }
+
+/**
+Sets the initial screen to be used for the video display.
+
+From Symbian release 9.5 onwards this method is not supported when called on an instance of CVideoPlayerUtility2, and will always
+leave with KErrNotSupported.
+
+@param aScreenNumber
+ The screen number of the device.
+
+@return KErrNotSupported if the secondary screen display is not supported in Multimedia Framework or
+from Symbian release 9.5 onwards when called on an instance of CVideoPlayerUtility2. KErrNone on success.
+*/
+EXPORT_C TInt CVideoPlayerUtility::SetInitScreenNumber(TInt aScreenNumber)
+ {
+ return iBody->SetInitScreenNumber(aScreenNumber);
+ }
+
+_LIT(KMMFMediaClientVideoPanicCategory, "MediaClientVideo");
+GLDEF_C void Panic(TMmfVideoPanic aError)
+ {
+ User::Panic(KMMFMediaClientVideoPanicCategory, aError);
+ }
+
+/**
+Set video playback velocity relative to the normal video clip speed.
+This method can be used for fast forward, rewind, and slow-motion
+playback, depending on the capabilities of the underlying play-controller
+implementation and the characteristics of the video clip. Velocity set
+in this call will take effect immediately. Additionally,
+playback velocity cannot be changed for streamed video. Use
+GetPlayRateCapabilitiesL() to determine what playback modes are
+available.
+
+Note that due to performance reasons, it may not be possible to perform
+fast forward or rewind at the requested speed. If that happens, the
+play-controller will use the nearest available velocity. This is not
+considered an error and the method will not leave. User can query
+velocity in effect by calling PlayVelocityL().
+
+The default playback velocity is 100.
+Play velocity is persistent across stop play calls on utility.
+That is SetPlayVelocityL(),call StopL(),then PlayL() will play with
+the velocity set in most recent call. On opening different
+file the velocity will default to 100.
+
+This function quits or exits leaving any of the system wide error codes.
+Common error codes are listed below.
+
+@param aVelocity Playback velocity as a percentage relative to the
+ normal video clip speed. Use 100 for normal-speed
+ forward playback and negative value for reverse. Values above
+ 100 and below 0 correspond to fast forward and
+ rewind respectively, while values 1 to 100 represent
+ slow-motioned playback.
+
+@pre Playback has been started, but may be paused.
+
+@see CVideoPlayerUtility::GetPlayRateCapabilitiesL()
+
+@leave KErrNotSupported The requested playback velocity is not
+ supported.
+@leave KErrNotReady Playback has not yet been started
+
+@publishedPartner
+*/
+EXPORT_C void CVideoPlayerUtility::SetPlayVelocityL(TInt aVelocity)
+ {
+ iBody->SetPlayVelocityL(aVelocity);
+ }
+
+/**
+Returns the current playback velocity. If setting play velocity is
+not supported or velocity is not set this will return default play velocity
+100 corresponding to normal playback.
+
+If implementation is not supporting the velocity set with SetPlayVelocityL
+it will default to the nearest velocity. In this case this API will return
+the value it has defaulted to.
+
+If an error occurs, this function leaves with any of the system
+wide error codes. Common error codes are listed below.
+
+@return The current playback velocity as a percentage relative to the
+ normal video clip speed.
+
+@pre Playback has been started, but may be paused.
+
+@see CVideoPlayerUtility::SetPlayVelocityL()
+
+@leave KErrNotReady Playback has not yet been started
+
+@publishedPartner
+*/
+EXPORT_C TInt CVideoPlayerUtility::PlayVelocityL() const
+ {
+ return iBody->PlayVelocityL();
+ }
+
+/**
+Steps the current video playback position forward or backward by a
+number of frames. Frame step is only available when playback is paused.
+
+Support for frame stepping may depend on the underlying play-controller
+implementation and the video clip open. Additionally, frame step is
+typically not available in streamed playback. Use GetPlayRateCapabilitiesL()
+to query if frame step is currently possible. Application may check the
+value of the current positon after stepping through several frames by calling
+PositionL() API.
+
+Implementations may not be able to step exactly the number of frames
+requested, especially when stepping backwards. If this happens, the
+play-controller will step to a frame close to the one requested. This is
+not considered an error.
+
+This function quits or exits leaving any of the system wide error codes.
+Common error codes are listed below.
+
+@param aStep The number of frames to step. Use positive values for
+ stepping forward and negative values for stepping
+ back.
+
+@pre Playback has been started and is currently paused.
+ That means this API can be called only in paused state.
+
+@see CVideoPlayerUtility::GetPlayRateCapabilitiesL()
+
+@leave KErrNotSupported Frame step is not supported. Note that some
+ implementations may support step forward but not step backward.
+@leave KErrNotReady Playback has not yet been started or is not in paused state.
+
+@publishedPartner
+*/
+EXPORT_C void CVideoPlayerUtility::StepFrameL(TInt aStep)
+ {
+ iBody->StepFrameL(aStep);
+ }
+
+/**
+Queries the current playback rate capabilities. The capabilities
+describe whether fast forward, reverse playback, slow motion, or
+step backward or forward is possible. The capabilities may depend on
+the controller implementation and the video clip. Additionally,
+only normal-speed forward playback is typically possible in streamed playback.
+
+This function quits or exits leaving any of the system wide error codes.
+Common error codes are listed below.
+
+@param aCapabilities Playback rate capabilities
+
+@pre The video clip has been opened
+
+@leave KErrNotReady The video clip has not yet been opened
+
+@publishedPartner
+*/
+EXPORT_C void CVideoPlayerUtility::GetPlayRateCapabilitiesL(TVideoPlayRateCapabilities& aCapabilities)const
+ {
+ iBody->GetPlayRateCapabilitiesL(aCapabilities);
+ }
+
+/**
+Enables or disables video playback. This function is used to disable
+video playback in a video clip to play only the audio track. By default
+video playback is always enabled if the clip has a video track.
+
+This method can be called after the video clip has been opened, but
+only before calling Prepare().
+
+This function quits or exits leaving any of the system wide error codes.
+Common error codes are listed below.
+
+@param aVideoEnabled ETrue to enable video playback, EFalse to disable
+
+@pre The video clip has been opened by the client and Prepare() has not been called.
+
+@leave KErrNotSupported This method is not supported -- video playback
+ is always enabled.
+@leave KErrNotReady The clip has not been opened or the client has
+ already called Prepare().
+
+@publishedPartner
+*/
+EXPORT_C void CVideoPlayerUtility::SetVideoEnabledL(TBool aVideoEnabled)
+ {
+ iBody->SetVideoEnabledL(aVideoEnabled);
+ }
+
+/**
+Queries whether video playback is currently enabled or not.
+If an error occurs, this function leaves with any of the system
+wide error codes. Common error codes are listed below.
+
+@return ETrue if video playback is enabled, EFalse if not.
+
+@publishedPartner
+*/
+EXPORT_C TBool CVideoPlayerUtility::VideoEnabledL() const
+ {
+ return iBody->VideoEnabledL();
+ }
+
+/**
+Enables or disables audio playback. This function is used to disable
+audio playback in a video clip to play only the video track. By default
+audio playback is always enabled if the clip has an audio track.
+
+This method can be called after the video clip has been opened, but
+only before calling Prepare().
+
+This function quits or exits leaving any of the system wide error codes.
+Common error codes are listed below.
+
+@param aAudioEnabled ETrue to enable audio playback, EFalse to disable
+
+@pre The video clip has been opened by the client and Prepare() has not been called.
+
+@leave KErrNotSupported This method is not supported -- audio playback
+ is always enabled
+@leave KErrNotReady The clip has not been opened or the client has
+ already called Prepare().
+
+@publishedPartner
+*/
+EXPORT_C void CVideoPlayerUtility::SetAudioEnabledL(TBool aAudioEnabled)
+ {
+ iBody->SetAudioEnabledL(aAudioEnabled);
+ }
+
+/**
+Set video automatic scaling. When automatic scaling is active, the
+video picture is scaled automatically to match the video window,
+based on the scaling type. This variant of SetAutoScaleL() will
+always center the picture in the window.
+
+Calling SetAutoScaleL() will override any scaling factors set with
+SetScaleFactorL(). Calling SetScaleFactorL() will disable automatic
+scaling.
+
+Not all video controllers support automatic scaling.
+
+This function quits or exits leaving any of the system wide error codes.
+Common error codes are listed below.
+
+@see TAutoScaleType, THorizontalAlign, TVerticalAlign
+
+@param aScaleType Automatic scaling type
+
+@pre The video clip has been opened by the client
+
+@leave KErrNotSupported Automatic scaling is not supported
+*/
+EXPORT_C void CVideoPlayerUtility::SetAutoScaleL(TAutoScaleType aScaleType)
+ {
+ iBody->SetAutoScaleL(aScaleType);
+ }
+
+/**
+Set video automatic scaling. When automatic scaling is active, the
+video picture is scaled automatically to match the video window,
+based on the scaling type, and positioned according to the
+parameters.
+
+Calling SetAutoScaleL() will override any scaling factors set with
+SetScaleFactorL(). Calling SetScaleFactorL() will disable automatic
+scaling.
+
+Not all video controller support automatic scaling.
+
+This function quits or exits leaving any of the system wide error codes.
+Common error codes are listed below.
+
+@see TAutoScaleType, THorizontalAlign, TVerticalAlign
+
+@param aScaleType Automatic scaling type
+@param aHorizPos Video picture horizontal position, relative to the
+ video window. The value can be either a pixel offset
+ (positive or negative) from the top left corner of the
+ window to the top left corner of the picture, or an
+ alignment constant from enum THorizontalAlign.
+@param aVertPos Video picture vertical position, relative to the
+ video window. The value can be either a pixel offset
+ (positive or negative) from the top left corner of the
+ window to the top left corner of the picture, or an
+ alignment constant from enum TVerticalAlign.
+
+@pre The video clip has been opened by the client.
+
+@leave KErrNotSupported Automatic scaling is not supported
+*/
+EXPORT_C void CVideoPlayerUtility::SetAutoScaleL(TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos)
+ {
+ iBody->SetAutoScaleL(aScaleType, aHorizPos, aVertPos );
+ }
+
+/**
+When enabled sets automatic switching of surface to/from external display when it is connected/disconnected from the device.
+
+Automatic switching is enabled by default, but only if the client thread that created this utility has an Active Scheduler
+installed and the device supports external display switching.
+
+To use this function the client thread must have an Active Scheduler installed otherwise it will leave with KErrNotReady.
+
+@param aControl
+ ETrue to enable. EFalse to disable.
+@param aDisplay
+ Display id of display to enable external switching for.
+@leave KErrNotSupported Device does not support external displays
+@leave KErrNotReady CActiveScheduler is not installed
+*/
+EXPORT_C void CVideoPlayerUtility::SetExternalDisplaySwitchingL(TInt aDisplay, TBool aControl)
+ {
+ iBody->SetExternalDisplaySwitchingL(aDisplay, aControl);
+ }