--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/src/Client/Video/mmfclientvideoplayer2.cpp Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,493 @@
+// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <videoplayer.h>
+#include <videoplayer2.h>
+#include "mmfvideocallback.h"
+#include "VideoPlayerBody.h"
+
+/**
+Creates a new instance of the video player utility. Unlike CVideoPlayerUtility::NewL(),
+the CVideoPlayerUtility2 factory does not require window handles and other video display
+information as its arguments. The client can set up rendering later with
+AddDisplayWindowL(), or optionally use the utility without a window, for example, for metadata
+query purposes.
+
+@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.
+
+@return A pointer to the new video player utility object.
+
+@leave The method will leave if an error occurs. Typical error codes used:
+ * KErrNoMemory if out of memory.
+
+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 CVideoPlayerUtility2* CVideoPlayerUtility2::NewL(MVideoPlayerUtilityObserver& aObserver,
+ TInt aPriority,
+ TInt aPref)
+ {
+ CVideoPlayerUtility2* s = new(ELeave) CVideoPlayerUtility2();
+ CleanupStack::PushL(s);
+ s->iBody = CVideoPlayerUtility::CBody::NewL(s, aObserver, aPriority, aPref);
+ CleanupStack::Pop();
+ return s;
+ }
+
+/**
+Destructor. Closes any open video clips and frees any resources held by the Video Player.
+*/
+CVideoPlayerUtility2::~CVideoPlayerUtility2()
+ {
+ }
+
+/**
+Adds a new window for displaying the video picture. Client applications must use this method
+instead of SetDisplayWindowL() when using CVideoPlayerUtility2.
+
+This method can only be called after opening the source is complete and the client has
+received an MvpuoOpenComplete() callback.
+
+@param aWs
+ The window server session for this window.
+@param aScreenDevice
+ The screen device for the screen that the window is displayed on.
+@param aWindow
+ The display window.
+@param aVideoExtent
+ Video extent on the screen, relative to the window. Video picture position within
+ the extent depends on the scaled picture and content alignment or offset. The video
+ extent can be partially or completely outside the window.
+@param aWindowClipRect
+ Window clipping rectangle, relative to the window. The clipping rectangle specifies
+ the part of the window used for video display. The rectangle must be contained
+ completely within the window.
+@leave The method will leave if an error occurs. Typical error codes used:
+ * KErrNotReady if the source file, URL, or descriptor has not been opened.
+*/
+EXPORT_C void CVideoPlayerUtility2::AddDisplayWindowL(RWsSession& aWs, CWsScreenDevice& aScreenDevice,
+ RWindow& aWindow, const TRect& aVideoExtent,
+ const TRect& aWindowClipRect)
+ {
+ iBody->AddDisplayWindowL(aWs, aScreenDevice, aWindow, aVideoExtent, aWindowClipRect);
+ }
+
+/**
+A simplified variant of AddDisplayWindowL(). When this variant is used, the video extent and
+window clipping rectangle default to the whole window.
+
+This method can only be called after opening the source is complete and the client has
+received an MvpuoOpenComplete() callback.
+
+@param aWs
+ The window server session for this window.
+@param aScreenDevice
+ The screen device for the screen that the window is displayed on.
+@param aWindow
+ The display window.
+@leave The method will leave if an error occurs. Typical error codes used:
+ * KErrNotReady if the source file, URL, or descriptor has not been opened.
+*/
+EXPORT_C void CVideoPlayerUtility2::AddDisplayWindowL(RWsSession& aWs, CWsScreenDevice& aScreenDevice, RWindow& aWindow)
+ {
+ iBody->AddDisplayWindowL(aWs, aScreenDevice, aWindow);
+ }
+
+/**
+Removes a window that is currently being used to display the video picture. The window must
+have previously been added with AddDisplayWindowL().
+
+This method cannot fail. If the window has not been added with AddDisplayWindowL(), the
+method call will be ignored.
+
+@param aWindow
+ The display window.
+*/
+EXPORT_C void CVideoPlayerUtility2::RemoveDisplayWindow(RWindow& aWindow)
+ {
+ iBody->RemoveDisplayWindow(aWindow);
+ }
+
+/**
+Sets the video extent on the screen, relative to the window. The extent specifies the area
+of screen in which the video picture is placed, and may be partially or completely outside of
+the video window. Video picture position within the extent depends on the picture size and
+content alignment or offset.
+
+This method can only be called after opening the source is complete and the client has
+received an MvpuoOpenComplete() callback.
+
+@param aWindow
+ Window to set video extent for.
+@param aVideoExtent
+ The new video extent, relative to the video window.
+@leave The method will leave if an error occurs. Typical error codes used:
+ * KErrNotReady if the source file, URL, or descriptor has not been opened.
+*/
+EXPORT_C void CVideoPlayerUtility2::SetVideoExtentL(const RWindow& aWindow, const TRect& aVideoExtent)
+ {
+ iBody->SetVideoExtentL(aWindow, aVideoExtent);
+ }
+
+/**
+Sets the window clipping rectangle, relative to the window. The clipping rectangle specifies
+the part of the window used to display the video picture and must be fully contained within
+the window.
+
+This method can only be called after opening the source is complete and the client has
+received an MvpuoOpenComplete() callback.
+
+@param aWindow
+ Window to set clipping rectangle for.
+@param aWindowClipRect
+ The clipping rectangle to use for this window.
+@leave The method will leave if an error occurs. Typical error codes used:
+ * KErrArgument if the rectangle is not contained within the window.
+ * KErrNotReady if the source file, URL, or descriptor has not been opened.
+*/
+EXPORT_C void CVideoPlayerUtility2::SetWindowClipRectL(const RWindow& aWindow, const TRect& aWindowClipRect)
+ {
+ iBody->SetWindowClipRectL(aWindow, aWindowClipRect);
+ }
+
+/**
+Rotates the video image within the window. This is the preferred method to use with CVideoPlayerUtility2.
+
+The rotation will replace any rotation set with CVideoPlayerUtility::SetRotationL.
+Likewise with setting the rotation with CVideoPlayerUtility::SetRotationL after a call to CVideoPlayerUtility2::SetRotationL has been
+made, then the rotation specified will replace any rotation set with CVideoPlayerUtility2::SetRotationL.
+
+@param aWindow Window to set rotation for.
+@param aRotation The video rotation to use for aWindow.
+
+@leave KErrNotFound if aWindow isn't currently added to CVideoPlayerUtility2
+@leave KErrNotReady if controller hasn't been opened.
+
+@see CVideoPlayerUtility::SetRotationL
+@see TVideoRotation
+*/
+
+EXPORT_C void CVideoPlayerUtility2::SetRotationL(const RWindow& aWindow, TVideoRotation aRotation)
+ {
+ iBody->SetRotationL(aWindow, aRotation);
+ }
+
+/**
+Retrieves the video rotation set for a window. This is the preferred method to use with CVideoPlayerUtility2.
+
+@param aWindow Window to retrieve rotation for.
+@return The video rotation.
+
+@leave KErrNotFound if aWindow isn't currently added to CVideoPlayerUtility2
+@leave KErrNotReady if controller hasn't been opened.
+
+@see TVideoRotation
+@see CVideoPlayerUtility2::AddDisplayWindowL
+*/
+
+EXPORT_C TVideoRotation CVideoPlayerUtility2::RotationL(const RWindow& aWindow)
+ {
+ return iBody->RotationL(aWindow);
+ }
+
+/**
+Scales the video image to a specified percentage of its original size within the window.
+This is the preferred method to use with CVideoPlayerUtility2.
+Setting scale factor will set auto scale to EAutoScaleNone for the window.
+
+The scale factor will replace any scale factor set with CVideoPlayerUtility::SetScaleFactorL.
+Likewise with setting the scale factor with CVideoPlayerUtility::SetScaleFactorL after a call to CVideoPlayerUtility2::SetScaleFactorL has been
+made, then the scale factor specified will replace any scale factor set with CVideoPlayerUtility2::SetScaleFactorL.
+
+@param aWindow Window to set scale factor for.
+@param aWidthPercentage
+ The percentage (100 = original size) to be used to scale the width of the video image
+@param aHeightPercentage
+ The percentage (100 = original size) to be used to scale the height of the video image.
+ If this is not equal to aWidthPercentage then the image may be distorted.
+
+@leave KErrNotFound if aWindow isn't currently added to CVideoPlayerUtility2
+@leave KErrNotReady if controller hasn't been opened.
+
+@see CVideoPlayerUtility::SetScaleFactorL
+*/
+
+EXPORT_C void CVideoPlayerUtility2::SetScaleFactorL(const RWindow& aWindow, TReal32 aWidthPercentage, TReal32 aHeightPercentage)
+ {
+ iBody->SetScaleFactorL(aWindow, aWidthPercentage, aHeightPercentage);
+ }
+
+/**
+Retrieves the scale factor currently set for a window. This is the preferred method to use with CVideoPlayerUtility2.
+
+@param aWindow Window to retrieve scale factor for.
+@param aWidthPercentage
+ On function return, contains the current scaling percentage applied to the width of the
+ video image (100 = original size).
+@param aHeightPercentage
+ On function return, contains the current scaling percentage applied to the height
+ of the video image (100 = original size).
+
+@leave KErrNotFound if aWindow isn't currently added to CVideoPlayerUtility2
+@leave KErrNotReady if controller hasn't been opened.
+*/
+
+EXPORT_C void CVideoPlayerUtility2::GetScaleFactorL(const RWindow& aWindow, TReal32& aWidthPercentage, TReal32& aHeightPercentage)
+ {
+ iBody->GetScaleFactorL(aWindow, aWidthPercentage, aHeightPercentage);
+ }
+
+/**
+Set video automatic scaling. When automatic scaling is active, the
+video picture is scaled automatically to match the video extent,
+based on the scaling type. This variant of SetAutoScaleL() will
+always center the picture in the extent.
+
+This is the preferred method to use with CVideoPlayerUtility2.
+
+Calling SetAutoScaleL() will override any scaling factors set with
+SetScaleFactorL(). Calling SetScaleFactorL() will disable automatic
+scaling.
+
+@see TAutoScaleType, THorizontalAlign, TVerticalAlign
+
+@param aWindow Window to set auto scaling options for.
+@param aScaleType Automatic scaling type
+
+@pre The video clip has been opened by the client
+
+@leave KErrNotFound if aWindow isn't currently added to CVideoPlayerUtility2
+@leave KErrNotReady if controller hasn't been opened.
+*/
+
+EXPORT_C void CVideoPlayerUtility2::SetAutoScaleL(const RWindow& aWindow, TAutoScaleType aScaleType)
+ {
+ iBody->SetAutoScaleL(aWindow, aScaleType);
+ }
+
+/**
+Set video automatic scaling. When automatic scaling is active, the
+video picture is scaled automatically to match the video extent,
+based on the scaling type, and positioned according to the
+parameters.
+
+This is the preferred method to use with CVideoPlayerUtility2.
+
+Calling SetAutoScaleL() will override any scaling factors set with
+SetScaleFactorL(). Calling SetScaleFactorL() will disable automatic
+scaling.
+
+@see TAutoScaleType, THorizontalAlign, TVerticalAlign
+
+@param aWindow Window to set auto scaling options for.
+@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 KErrNotFound if aWindow isn't currently added to CVideoPlayerUtility2
+@leave KErrNotReady if controller hasn't been opened.
+*/
+
+EXPORT_C void CVideoPlayerUtility2::SetAutoScaleL(const RWindow& aWindow, TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos)
+ {
+ iBody->SetAutoScaleL(aWindow, aScaleType, aHorizPos, aVertPos);
+ }
+
+/**
+Adds the specified display to the list of surface rendering targets.
+This API can be used in conjunction with AddDisplayWindowL calls.
+The caller is responsible for handling surface events generated for the specific display.
+A single graphics surface is created and shared between all windows and displays.
+Surface registration and de-registration is managed by the MMF framework.
+
+@see AddDisplayWindowL
+
+@param aWs Window server session.
+@param aDisplay Display to create graphics surface on.
+@param aEventHandler Call-back interface for receiving surface specific events.
+
+@leave Any of the system wide error codes.
+@leave KErrNotReady if the source file, URL or descriptor has not been opened.
+@leave KErrInUse if the display has already been added by a previous AddDisplayL call.
+*/
+
+EXPORT_C void CVideoPlayerUtility2::AddDisplayL(RWsSession& /* aWs */, TInt aDisplay, MMMFSurfaceEventHandler& aEventHandler)
+ {
+ iBody->AddDisplayL(aDisplay, aEventHandler);
+ }
+
+/**
+Removes the specified display from the list of surface rendering targets.
+
+@param aDisplay Display id of display to remove
+*/
+
+EXPORT_C void CVideoPlayerUtility2::RemoveDisplay(TInt aDisplay)
+ {
+ iBody->RemoveDisplay(aDisplay);
+ }
+
+/**
+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 CVideoPlayerUtility2::SetExternalDisplaySwitchingL(TInt aDisplay, TBool aControl)
+ {
+ iBody->SetExternalDisplaySwitchingL(aDisplay, aControl);
+ }
+
+#ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+/**
+Check to see if subtitles are available with the current video stream and controller.
+
+@return ETrue if subtitles can be enabled,
+ EFalse if subtitles are not available with the current video stream or video clip has not been opened
+*/
+EXPORT_C TBool CVideoPlayerUtility2::SubtitlesAvailable()
+ {
+ return iBody->SubtitlesAvailable();
+ }
+
+/**
+Enable subtitles with the current video stream.
+
+@pre The video clip has been opened by the client and SubtitlesAvailable() return ETrue.
+
+@leave KErrNotReady if the video source file, URL, or descriptor has not been opened,
+ or no window has been added to CVideoPlayerUtility2.
+@leave KErrNotSupported if underlying video player controller does not support subtitles.
+@leave KErrNotFound if the opened video source has no associated subtitle data.
+@leave KErrInUse if subtitle is already enabled.
+@leave Otherwise leaves with any of the system wide error codes.
+
+@panic MMFVideoPlayUtil 1 In debug mode, if the video source file, URL, or descriptor has not been opened.
+@panic MMFVideoPlayUtil 2 In debug mode, if subtitle is not supported or not available.
+@panic MMFVideoPlayUtil 3 In debug mode, if no display window has been added.
+*/
+EXPORT_C void CVideoPlayerUtility2::EnableSubtitlesL()
+ {
+ iBody->EnableSubtitlesL();
+ }
+
+/**
+Disable subtitles.
+*/
+EXPORT_C void CVideoPlayerUtility2::DisableSubtitles()
+ {
+ iBody->DisableSubtitles();
+ }
+
+/**
+Get the current subtitle language.
+
+@pre Subtitle has been enabled.
+@return The current subtitle language, or ELangNone if no language information is available
+
+@leave KErrNotReady if subtitle has not been enabled.
+@leave Otherwise leaves with any of the system wide error codes.
+
+@panic MMFVideoPlayUtil 4 In debug mode, if subtitle has not been enabled.
+*/
+EXPORT_C TLanguage CVideoPlayerUtility2::SubtitleLanguageL()
+ {
+ return iBody->SubtitleLanguageL();
+ }
+
+/**
+Return the subtitle languages available.
+
+@pre Subtitles have been enabled.
+@return A array of the currently available languages, or an empty array if
+ subtitle source does not contain any language information. Array is valid
+ until subtitles are disabled.
+
+@leave KErrNotReady if subtitles have not been enabled.
+@leave Otherwise leaves with any of the system wide error codes.
+
+@panic MMFVideoPlayUtil 4 In debug mode, if subtitles have not been enabled.
+*/
+EXPORT_C TArray<TLanguage> CVideoPlayerUtility2::SupportedSubtitleLanguagesL()
+ {
+ return iBody->SupportedSubtitleLanguagesL();
+ }
+
+/**
+Set the current subtitle language.
+
+@see CVideoPlayerUtility2::GetSupportedSubtitleLanguagesL()
+
+@pre Subtitles have been enabled.
+@pre GetSupportedSubtitleLanguagesL() return a non empty array
+
+@param aLanguage Language to be used for subtitle stream.
+
+@leave KErrNotReady if subtitles have not been enabled.
+@leave KErrNotSupported if subtitle language is not supported
+@leave Otherwise leaves with any of the system wide error codes.
+
+@panic MMFVideoPlayUtil 4 In debug mode, if subtitles have not been enabled.
+@panic MMFVideoPlayUtil 5 In debug mode, if subtitle language is not supported.
+*/
+EXPORT_C void CVideoPlayerUtility2::SetSubtitleLanguageL(TLanguage aLanguage)
+ {
+ iBody->SetSubtitleLanguageL(aLanguage);
+ }
+
+/**
+To be called when the video window is asked to redraw. E.g. For cone control, when CCoeControl::Draw() is called.
+
+@param aWindow Handle to the video window to be redrawn.
+@param aRect The region of the control to be redrawn from aRect in CCodControl::Draw().
+*/
+EXPORT_C void CVideoPlayerUtility2::RedrawSubtitle(RWindow& aWindow, const TRect &aRect)
+ {
+ iBody->RedrawSubtitle(aWindow, aRect);
+ }
+
+#endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT