--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/src/Client/Video/VideoPlayerBody.h Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,368 @@
+// 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 VIDEOPLAYERBODY_H
+#define VIDEOPLAYERBODY_H
+
+#include <fbs.h>
+#include <w32std.h>
+
+#ifdef SYMBIAN_BUILD_GCE
+#include <mmf/common/mmfvideosurfacecustomcommands.h>
+#endif
+
+#include <mmf/common/mmfbase.h>
+#include <mmf/common/mmfcontroller.h>
+#include <mmf/common/mmfaudio.h>
+#include <mmf/common/mmfstandardcustomcommands.h>
+#include <mmf/common/mmfdrmcustomcommands.h>
+#include <mda/common/base.h>
+#include <mmf/common/mmfutilities.h>
+#include <mmf/common/mmfcontrollerframeworkbase.h>
+#include "mmf/common/mmcaf.h"
+#include "mmfclientutility.h"
+
+#ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+#include "mmfsubtitleutility.h"
+#endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+
+#ifdef SYMBIAN_BUILD_GCE
+#include "mediaclientvideodisplaybody.h"
+#endif
+
+class CMMFVideoPlayerCallback;
+class MMMFDRMCustomCommand;
+class CVideoPlayerUtility;
+class MMMFSurfaceEventHandler;
+#ifdef SYMBIAN_BUILD_GCE
+ class TWindowData;
+ class CMediaClientVideoDisplayBody;
+#endif // SYMBIAN_BUILD_GCE
+NONSHARABLE_CLASS( CVideoPlayerUtility::CBody ): public CBase,
+ public MDirectScreenAccess,
+ public MMMFControllerEventMonitorObserver,
+ public MMMFFindAndOpenControllerObserver
+
+ {
+
+public:
+ ~CBody();
+
+ static CBody* NewL(CVideoPlayerUtility* aParent,
+ MVideoPlayerUtilityObserver& aObserver,
+ TInt aPriority,
+ TInt aPref,
+ RWsSession& aWs,
+ CWsScreenDevice& aScreenDevice,
+ RWindowBase& aWindow,
+ const TRect& aScreenRect,
+ const TRect& aClipRect);
+
+#ifdef SYMBIAN_BUILD_GCE
+ static CBody* NewL(CVideoPlayerUtility2* aParent,
+ MVideoPlayerUtilityObserver& aObserver,
+ TInt aPriority,
+ TInt aPref);
+#endif
+ void OpenFileL(const TDesC& aFileName,TUid aControllerUid = KNullUid);
+ void OpenFileL(const RFile& aFile, TUid aControllerUid = KNullUid);
+
+
+ void OpenFileL(const TMMSource& aSource, TUid aControllerUid = KNullUid);
+
+ void OpenDesL(const TDesC8& aDescriptor,TUid aControllerUid = KNullUid);
+ void OpenUrlL(const TDesC& aUrl, TInt aIapId, const TDesC8& aMimeType=KNullDesC8, TUid aControllerUid = KNullUid);
+
+ void Prepare();
+
+ void Close();
+
+ void Play();
+ void Play(const TTimeIntervalMicroSeconds& aStartPoint, const TTimeIntervalMicroSeconds& aEndPoint);
+ TInt Stop();
+ void PauseL();
+
+ void SetPriorityL(TInt aPriority, TInt aPref);
+ void PriorityL(TInt& aPriority, TMdaPriorityPreference& aPref) const;
+
+ void SetDisplayWindowL(RWsSession& aWs, CWsScreenDevice& aScreenDevice, RWindowBase& aWindow,
+ const TRect& aScreenRect, const TRect& aClipRect);
+
+ void RegisterForVideoLoadingNotification(MVideoLoadingObserver& aObserver);
+
+ void GetFrameL(TDisplayMode aDisplayMode, TBool aUseIntentAPI = EFalse, ContentAccess::TIntent aIntent = ContentAccess::EPeek );
+ void RefreshFrameL();
+
+ TReal32 VideoFrameRateL() const;
+ void VideoFrameSizeL(TSize& aSize) const;
+ const TDesC8& VideoFormatMimeType() const;
+ TInt VideoBitRateL() const;
+
+ TInt AudioBitRateL() const;
+ TFourCC AudioTypeL() const;
+ TBool AudioEnabledL() const;
+
+ void SetPositionL(const TTimeIntervalMicroSeconds& aPosition);
+ TTimeIntervalMicroSeconds PositionL() const;
+ TTimeIntervalMicroSeconds DurationL() const;
+
+ void SetVolumeL(TInt aVolume);
+ TInt Volume() const;
+ TInt MaxVolume() const;
+ void SetBalanceL(TInt aBalance);
+ TInt Balance()const;
+
+ void SetRotationL(TVideoRotation aRotation);
+ TVideoRotation RotationL() const;
+ void SetScaleFactorL(TReal32 aWidthPercentage, TReal32 aHeightPercentage, TBool aAntiAliasFiltering);
+ void GetScaleFactorL(TReal32& aWidthPercentage, TReal32& aHeightPercentage, TBool& aAntiAliasFiltering) const;
+ void SetCropRegionL(const TRect& aCropRegion);
+ void GetCropRegionL(TRect& aCropRegion) const;
+
+ TInt NumberOfMetaDataEntriesL() const;
+ CMMFMetaDataEntry* MetaDataEntryL(TInt aIndex) const;
+
+ void GetVideoLoadingProgressL(TInt& aPercentageProgress);
+ TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom);
+ TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2);
+ void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus);
+ void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus);
+
+ void SetVideoFrameRateL(TReal32 aFramesPerSecond);
+ const CMMFControllerImplementationInformation& ControllerImplementationInformationL();
+
+ MMMFDRMCustomCommand* GetDRMCustomCommand();
+
+ void StopDirectScreenAccessL();
+ void StartDirectScreenAccessL();
+
+ TInt RegisterAudioResourceNotification(MMMFAudioResourceNotificationCallback& aCallback, TUid aNotificationEventUid, const TDesC8& aNotificationRegistrationData = KNullDesC8);
+ TInt CancelRegisterAudioResourceNotification(TUid aNotificationEventId);
+ TInt WillResumePlay();
+
+ TInt SetInitScreenNumber(TInt aScreenNumber);
+
+ void SetPlayVelocityL(TInt aVelocity);
+ TInt PlayVelocityL() const;
+ void StepFrameL(TInt aStep);
+ void GetPlayRateCapabilitiesL(TVideoPlayRateCapabilities& aCapabilities) const;
+ void SetVideoEnabledL(TBool aVideoEnabled);
+ TBool VideoEnabledL() const;
+ void SetAudioEnabledL(TBool aAudioEnabled);
+ void SetAutoScaleL(TAutoScaleType aScaleType);
+ void SetAutoScaleL(TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos);
+
+#ifdef SYMBIAN_BUILD_GCE
+ void AddDisplayWindowL(RWsSession& aWs, CWsScreenDevice& aScreenDevice,
+ RWindow& aWindow, const TRect& aVideoExtent,
+ const TRect& aWindowClipRect);
+ void AddDisplayWindowL(RWsSession& aWs, CWsScreenDevice& aScreenDevice, RWindow& aWindow);
+ void RemoveDisplayWindow(RWindowBase& aWindow);
+ void SetVideoExtentL(const RWindowBase& aWindow, const TRect& aVideoExtent);
+ void SetWindowClipRectL(const RWindowBase& aWindow, const TRect& aWindowClipRect);
+
+ void SetAutoScaleL(const RWindowBase& aWindow, TAutoScaleType aScaleType);
+ void SetAutoScaleL(const RWindowBase& aWindow, TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos);
+
+ void SetRotationL(const RWindowBase& aWindow, TVideoRotation aRotation);
+ TVideoRotation RotationL(const RWindowBase& aWindow) const;
+ void SetScaleFactorL(const RWindowBase& aWindow, TReal32 aWidthPercentage, TReal32 aHeightPercentage);
+ void GetScaleFactorL(const RWindowBase& aWindow, TReal32& aWidthPercentage, TReal32& aHeightPercentage) const;
+ void AddDisplayL(TInt aDisplay, MMMFSurfaceEventHandler& aEventHandler);
+ void RemoveDisplay(TInt aDisplay);
+ void ConvertFromRelativeToDisplayToRelativeToWindow(
+ const RWindowBase& aWindow,
+ const TRect& aFromWindowRect,
+ const TRect& aFromClipRect,
+ TRect& aToWindowRect,
+ TRect& aToClipRect);
+ void SetExternalDisplaySwitchingL(TInt aDisplay, TBool aControl);
+#endif
+
+#ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+ TBool SubtitlesAvailable();
+ void EnableSubtitlesL();
+ void DisableSubtitles();
+ TArray<TLanguage> SupportedSubtitleLanguagesL();
+ TLanguage SubtitleLanguageL();
+ void SetSubtitleLanguageL(TLanguage aLanguage);
+ void RedrawSubtitle(RWindow& aWindow, const TRect &aRect);
+ static RWindow* FindWindowWithWsHandle(const RPointerArray<CMediaClientVideoDisplayBody>& aDisplays, TInt aWsHandle);
+ TInt EnableSubtitles(CMediaClientVideoDisplayBody& aDisplay);
+ TInt AddSubtitleConfig(CMediaClientVideoDisplayBody::TWindowData& aWindowData);
+ void GetSubtitleConfigFromWindowData(CMediaClientVideoDisplayBody::TWindowData& aWindowData, TMMFSubtitleWindowConfig& aConfig);
+ void UpdateSurfaceAndSubtitleConfigL(CMediaClientVideoDisplayBody& aDisplay,CMediaClientVideoDisplayBody::TWindowData& aWindowData, const TRect& aClipRect, TVideoRotation aRotation, const TRect& aCropRegion);
+#endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+
+private:
+ void ConstructL(RWsSession& aWs, CWsScreenDevice& aScreenDevice, RWindowBase& aWindow,
+ const TRect& aWindowRect, const TRect& aClipRect);
+ CBody(CVideoPlayerUtility* aParent,
+ MVideoPlayerUtilityObserver& aObserver,
+ TInt aScreenNumber,
+ TInt aPriority=EMdaPriorityNormal,
+ TInt aPref=EMdaPriorityPreferenceTimeAndQuality);
+
+ void CommonConstructL();
+ void SetAndUpdateWindow();
+ void PrepareDSAL(RWsSession& aWs, CWsScreenDevice& aScreenDevice, RWindowBase& aWindow);
+
+#ifdef SYMBIAN_BUILD_GCE
+ CBody(CVideoPlayerUtility2* aParent,
+ MVideoPlayerUtilityObserver& aObserver,
+ TInt aPriority=EMdaPriorityNormal,
+ TInt aPref=EMdaPriorityPreferenceTimeAndQuality);
+
+ void ConstructL();
+ TInt CheckSurfaceSupported();
+ TBool RectContains(const TRect& aLeft, const TRect& aRight);
+ void DoAddDisplayWindowL(RWsSession& aWs, TInt aDisplay, RWindowBase& aWindow,
+ const TRect& aClipRect, const TRect& aVideoExtent, RWindow* aWindow2);
+ TInt SurfaceCreated();
+ TInt SurfaceParametersChanged();
+ TInt SetBackgroundSurface(const CMediaClientVideoDisplayBody& aDisplay);
+ TInt RemoveSurface(TBool aControllerEvent);
+ TInt SetAllBackgroundSurfaces();
+
+#endif // SYMBIAN_BUILD_GCE
+
+ // from MMMFControllerEventMonitorObserver
+ virtual void HandleEvent(const TMMFEvent& aEvent);
+
+ //from MDirectScreenAccess
+ virtual void AbortNow(RDirectScreenAccess::TTerminationReasons aReason);
+ virtual void Restart(RDirectScreenAccess::TTerminationReasons aReason);
+
+ // from MMMFFindAndOpenControllerObserver
+ virtual void MfaocComplete(
+ TInt& aError,
+ RMMFController* aController,
+ TUid aControllerUid,
+ TMMFMessageDestination* aSourceHandle,
+ TMMFMessageDestination* aSinkHandle);
+
+
+ void OpenComplete(TInt aError);
+ void FrameReady(TInt aError);
+ void PlayComplete(TInt aError);
+ void Reset();
+
+private:
+ //Source and sink handle info
+ TMMFMessageDestination iSourceHandle;
+ TMMFMessageDestination iSinkHandle;
+
+ RMMFController iController;
+ RMMFVideoControllerCustomCommands iVideoControllerCustomCommands;
+ RMMFVideoPlayControllerCustomCommands iVideoPlayControllerCustomCommands;
+ RMMFAudioPlayDeviceCustomCommands iAudioPlayDeviceCustomCommands;
+ RMMFAudioRecordDeviceCustomCommands iAudioRecordDeviceCustomCommands;
+ RMMFVideoDRMExtCustomCommands iVideoDRMExtCustomCommands;
+ RMMFDRMCustomCommands iDRMCustomCommands;
+ RMMFVideoPlayControllerExtCustomCommands iVideoPlayControllerExtCustomCommands;
+ RMMFResourceNotificationCustomCommands iNotificationRegistrationCommands;
+ MMMFAudioResourceNotificationCallback* iAudioResourceNotificationCallBack;
+#ifdef SYMBIAN_BUILD_GCE
+ RMMFVideoPlaySurfaceSupportCustomCommands iVideoPlaySurfaceSupportCustomCommands;
+#endif
+ //for audio resource notification
+ TUid iArnEventHolder;
+ TBuf8<TMMFAudioConfig::KNotificationDataBufferSize> iNotificationDataHolder;
+
+ RMMFVideoSetInitScreenCustomCommands iVideoSetInitScreenCustomCommands;
+ MVideoPlayerUtilityObserver& iObserver;
+ CMMFControllerEventMonitor* iControllerEventMonitor;
+ CVideoPlayerUtility::TMMFVideoPlayerState iState;
+ TTimeIntervalMicroSeconds iDuration;
+ TMMFPrioritySettings iPrioritySettings;
+
+ MVideoLoadingObserver *iVideoLoadingObserver;
+ CDirectScreenAccess * iDirectScreenAccess;
+ HBufC8* iMimeType;
+ CMMFVideoPlayerCallback* iAsyncCallback;
+ CMMFVideoPlayerCallback* iFrameCallback;
+ CMMFControllerImplementationInformation* iControllerImplementationInformation;
+ TUid iControllerUid;
+
+ CVideoPlayerUtility* iParent;
+ CFbsBitmap* iFrameBitmap;
+ RFbsSession iFbsSession;
+
+ TRect iWindowRect;
+ TRect iClipRect;
+ TBool iControllerOpen;
+ TBool iFbsSessionConnected;
+
+ // utility class to find and open a suitable controller asynchronously
+ CMMFFindAndOpenController* iFindAndOpenController;
+
+ // received a KMMFEventCategoryVideoOpenComplete event
+ TBool iEventOpenReceived;
+
+ // received a MfaocComplete() callback
+ TBool iCallbackOpenReceived;
+
+ TInt iOpenError;
+ TInt iScreenNumber;
+
+ // flag indicating DSA abort in StopDirectScreenAccess() - to be used in SetDisplayWindowL
+ TBool iDirectScreenAccessAbort;
+
+#ifdef SYMBIAN_BUILD_GCE
+
+ TSurfaceId iSurfaceId;
+
+ //video graphics surface supported
+ TBool iGraphicsSurfaceSupported;
+ TBool iUsingVPU2;
+
+ // store scale factor
+ TReal32 iGlobalScaleWidth;
+ TReal32 iGlobalScaleHeight;
+ TBool iAntiAliasFiltering;
+ TRect iCropRegion;
+ TVideoRotation iGlobalRotation;
+ TRect iSurfaceCropRect;
+ TVideoAspectRatio iAspectRatio;
+ // for storing window added during NewL,
+ // i.e. DSA
+ RWsSession* iWs;
+ TInt iDisplayId;
+ RWindowBase* iWindow;
+
+ RPointerArray<CMediaClientVideoDisplayBody> iActiveDisplays;
+
+ // Autoscale info
+ TAutoScaleType iGlobalAutoScaleType;
+ TInt iGlobalHorizPos;
+ TInt iGlobalVertPos;
+#endif // SYMBIAN_BUILD_GCE
+
+#ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+ CMMFSubtitleUtility* iSubtitleUtility;
+#endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+
+ friend class CMMFVideoPlayerCallback;
+ friend class CTestStepUnitMMFVidClient;
+ friend class CTestView;
+ friend class CVideoPlayerUtility;
+
+#ifdef SYMBIAN_BUILD_GCE
+ friend class CVideoPlayerUtility2;
+#endif
+ };
+
+
+#endif // VIDEOPLAYERBODY_H