williamr@2: // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef __VIDEOPLAYER_H__ williamr@2: #define __VIDEOPLAYER_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@4: #include "mmf/common/mmcaf.h" williamr@2: #include williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: An interface to a set of video player callback functions. williamr@2: williamr@2: The class is a mixin and is intended to be inherited by the client williamr@2: class which is observing the video playing operation. The functions williamr@2: encapsulated by this class are called when specific events occur in williamr@2: the process of initialising and playing an video clip. A reference to williamr@2: this object is passed as a parameter when constructing an audio player williamr@2: utility object. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: class MVideoPlayerUtilityObserver williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: Notification to the client that the opening of the video clip has completed, williamr@2: successfully, or otherwise. williamr@2: williamr@2: The status of the video sample after opening is given by aError. The following williamr@2: values imply same across all the devices. williamr@2: williamr@2: - KErrNone: the sample is ready to play; williamr@2: - KErrNotSupported: the controller plugin is not recognised or not supported; williamr@2: - KErrNotFound: the video sample cannot be found; williamr@2: - KErrNoMemory: there is insufficient memory to play this video sample. williamr@2: williamr@2: Other values are possible indicating a problem opening the video sample. These values williamr@2: are device dependent. williamr@2: williamr@2: The client must now call Prepare() on the video player utility before the williamr@2: video clip can be played or any of its properties (e.g. duration) can be williamr@2: queried. williamr@2: williamr@2: @param aError williamr@2: The status of the video player after initialisation. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: virtual void MvpuoOpenComplete(TInt aError) = 0; williamr@2: williamr@2: /** williamr@2: Notification to the client that the opening of the video clip has been prepared williamr@2: successfully, or otherwise. This callback is called in response to a call to williamr@2: CVideoPlayerUtility::Prepare(). williamr@2: williamr@2: The video clip may now be played, or have any of its properties (e.g. duration) queried. williamr@2: williamr@2: @param aError williamr@2: The status of the video player after initialisation. williamr@2: This is either KErrNone if the open has completed successfully, williamr@2: or one of the system wide error codes. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: virtual void MvpuoPrepareComplete(TInt aError) = 0; williamr@2: williamr@2: /** williamr@2: Notification that the frame requested by a call to GetFrameL is ready williamr@2: williamr@2: @param aFrame williamr@2: The returned frame. The bitmap will contain williamr@2: the requested frame if the the error code is KErrNone (success). williamr@2: @param aError williamr@2: The status of the frame request. williamr@2: This is either KErrNone if the frame request was successful, williamr@2: or one of the system wide error codes. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: virtual void MvpuoFrameReady(CFbsBitmap& aFrame,TInt aError) = 0; williamr@2: williamr@2: /** williamr@2: Notification that video playback has completed. This is not called if williamr@4: playback is explicitly stopped (such as through the use of the Stop or williamr@4: Close commands). williamr@2: williamr@2: @param aError williamr@2: The status of playback. williamr@2: This is either KErrNone if the playback was completed successfully, williamr@2: or one of the system wide error codes. williamr@2: @since 7.0s williamr@2: */ williamr@2: virtual void MvpuoPlayComplete(TInt aError) = 0; williamr@2: williamr@2: /** williamr@2: General event notification from controller. These events are specified by williamr@2: the supplier of the controller williamr@2: williamr@2: @param aEvent williamr@2: The event sent by the controller. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: virtual void MvpuoEvent(const TMMFEvent& aEvent) = 0; williamr@2: }; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: This is a mixin class that allows a client to receive notification of rebuffering williamr@2: operations occurring in the video player williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: class MVideoLoadingObserver williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: Notification that video clip loading/rebuffering has started williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: virtual void MvloLoadingStarted() = 0; williamr@2: williamr@2: /** williamr@2: Notification that video clip loading/rebuffering has completed williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: virtual void MvloLoadingComplete() = 0; williamr@2: }; williamr@2: williamr@2: class CMMFVideoPlayerCallback; williamr@4: class CVideoPlayerUtility2; williamr@4: class TVideoPlayRateCapabilities; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Plays sampled video data. williamr@2: williamr@2: The class offers a simple interface to open, play and obtain information from sampled video data. williamr@2: The video data can be provided using files, descriptors or URLs. williamr@2: williamr@2: Note: williamr@2: Some video formats also allow the storing of audio data. To accommodate this, this class contains williamr@2: audio functions that can manipulate such data. williamr@2: williamr@2: While this class is abstract, NewL() constructs, initialises and returns pointers to instances of williamr@2: concrete classes derived from this abstract class. This concrete class is part of the MMF williamr@2: implementation and is private. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: class CVideoPlayerUtility : public CBase, williamr@2: public MMMFClientUtility williamr@2: { williamr@2: public: williamr@2: williamr@2: ~CVideoPlayerUtility(); williamr@2: williamr@2: IMPORT_C static CVideoPlayerUtility* NewL(MVideoPlayerUtilityObserver& aObserver, williamr@2: TInt aPriority, williamr@4: TInt aPref, williamr@2: RWsSession& aWs, williamr@2: CWsScreenDevice& aScreenDevice, williamr@2: RWindowBase& aWindow, williamr@2: const TRect& aScreenRect, williamr@2: const TRect& aClipRect); williamr@2: williamr@2: IMPORT_C void OpenFileL(const TDesC& aFileName,TUid aControllerUid = KNullUid); williamr@2: IMPORT_C void OpenFileL(const RFile& aFileName, TUid aControllerUid = KNullUid); williamr@2: williamr@2: IMPORT_C void OpenFileL(const TMMSource& aSource, TUid aControllerUid = KNullUid); williamr@2: williamr@2: IMPORT_C void OpenDesL(const TDesC8& aDescriptor,TUid aControllerUid = KNullUid); williamr@2: williamr@2: IMPORT_C void OpenUrlL(const TDesC& aUrl, TInt aIapId = KUseDefaultIap, const TDesC8& aMimeType=KNullDesC8, TUid aControllerUid = KNullUid); williamr@2: williamr@2: IMPORT_C void Prepare(); williamr@2: williamr@2: IMPORT_C void Close(); williamr@2: williamr@2: IMPORT_C void Play(); williamr@2: williamr@2: IMPORT_C void Play(const TTimeIntervalMicroSeconds& aStartPoint, const TTimeIntervalMicroSeconds& aEndPoint); williamr@2: williamr@2: IMPORT_C TInt Stop(); williamr@2: williamr@2: IMPORT_C void PauseL(); williamr@2: williamr@4: IMPORT_C void SetPriorityL(TInt aPriority, TInt aPref); williamr@2: williamr@2: IMPORT_C void PriorityL(TInt& aPriority, TMdaPriorityPreference& aPref) const; williamr@2: williamr@2: IMPORT_C void SetDisplayWindowL(RWsSession& aWs,CWsScreenDevice& aScreenDevice,RWindowBase& aWindow,const TRect& aWindowRect,const TRect& aClipRect); williamr@2: williamr@2: IMPORT_C void RegisterForVideoLoadingNotification(MVideoLoadingObserver& aCallback); williamr@2: williamr@2: IMPORT_C void GetVideoLoadingProgressL(TInt& aPercentageComplete); williamr@2: williamr@2: IMPORT_C void GetFrameL(TDisplayMode aDisplayMode); williamr@2: williamr@2: IMPORT_C void GetFrameL(TDisplayMode aDisplayMode, ContentAccess::TIntent aIntent); williamr@2: williamr@2: IMPORT_C void RefreshFrameL(); williamr@2: williamr@2: IMPORT_C TReal32 VideoFrameRateL() const; williamr@2: williamr@2: IMPORT_C void SetVideoFrameRateL(TReal32 aFramesPerSecond); williamr@2: williamr@2: IMPORT_C void VideoFrameSizeL(TSize& aSize) const; williamr@2: williamr@2: IMPORT_C const TDesC8& VideoFormatMimeType() const; williamr@2: williamr@2: IMPORT_C TInt VideoBitRateL() const; williamr@2: williamr@2: IMPORT_C TInt AudioBitRateL() const; williamr@2: williamr@2: IMPORT_C TFourCC AudioTypeL() const; williamr@2: williamr@2: IMPORT_C TBool AudioEnabledL() const; williamr@2: williamr@2: IMPORT_C void SetPositionL(const TTimeIntervalMicroSeconds& aPosition); williamr@2: williamr@2: IMPORT_C TTimeIntervalMicroSeconds PositionL() const; williamr@2: williamr@2: IMPORT_C TTimeIntervalMicroSeconds DurationL() const; williamr@2: williamr@2: IMPORT_C void SetVolumeL(TInt aVolume); williamr@2: williamr@2: IMPORT_C TInt Volume() const; williamr@2: williamr@2: IMPORT_C TInt MaxVolume() const; williamr@2: williamr@2: IMPORT_C void SetBalanceL(TInt aBalance); williamr@2: williamr@2: IMPORT_C TInt Balance()const; williamr@2: williamr@2: IMPORT_C void SetRotationL(TVideoRotation aRotation); williamr@2: williamr@2: IMPORT_C TVideoRotation RotationL() const; williamr@2: williamr@2: IMPORT_C void SetScaleFactorL(TReal32 aWidthPercentage, TReal32 aHeightPercentage, TBool aAntiAliasFiltering); williamr@2: williamr@2: IMPORT_C void GetScaleFactorL(TReal32& aWidthPercentage, TReal32& aHeightPercentage, TBool& aAntiAliasFiltering) const; williamr@2: williamr@2: IMPORT_C void SetCropRegionL(const TRect& aCropRegion); williamr@2: williamr@2: IMPORT_C void GetCropRegionL(TRect& aCropRegion) const; williamr@2: williamr@2: IMPORT_C TInt NumberOfMetaDataEntriesL() const; williamr@2: williamr@2: IMPORT_C CMMFMetaDataEntry* MetaDataEntryL(TInt aIndex) const; williamr@2: williamr@2: IMPORT_C const CMMFControllerImplementationInformation& ControllerImplementationInformationL(); williamr@2: williamr@2: IMPORT_C TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom); williamr@2: williamr@2: IMPORT_C TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2); williamr@2: williamr@2: IMPORT_C void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus); williamr@2: williamr@2: IMPORT_C void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus); williamr@2: williamr@2: IMPORT_C MMMFDRMCustomCommand* GetDRMCustomCommand(); williamr@2: williamr@2: IMPORT_C void StopDirectScreenAccessL(); williamr@2: williamr@2: IMPORT_C void StartDirectScreenAccessL(); williamr@2: williamr@2: IMPORT_C TInt RegisterAudioResourceNotification(MMMFAudioResourceNotificationCallback& aCallback, TUid aNotificationEventUid, const TDesC8& aNotificationRegistrationData = KNullDesC8); williamr@2: williamr@2: IMPORT_C TInt CancelRegisterAudioResourceNotification(TUid aNotificationEventId); williamr@2: williamr@2: IMPORT_C TInt WillResumePlay(); williamr@2: williamr@2: IMPORT_C TInt SetInitScreenNumber(TInt aScreenNumber); williamr@2: williamr@2: IMPORT_C void SetPlayVelocityL(TInt aVelocity); williamr@2: williamr@2: IMPORT_C TInt PlayVelocityL() const; williamr@2: williamr@2: IMPORT_C void StepFrameL(TInt aStep); williamr@2: williamr@2: IMPORT_C void GetPlayRateCapabilitiesL(TVideoPlayRateCapabilities& aCapabilities) const; williamr@2: williamr@2: IMPORT_C void SetVideoEnabledL(TBool aVideoEnabled); williamr@2: williamr@2: IMPORT_C TBool VideoEnabledL() const; williamr@2: williamr@2: IMPORT_C void SetAudioEnabledL(TBool aAudioEnabled); williamr@2: williamr@2: IMPORT_C void SetAutoScaleL(TAutoScaleType aScaleType); williamr@2: williamr@4: IMPORT_C void SetAutoScaleL(TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos); williamr@4: williamr@4: IMPORT_C void SetExternalDisplaySwitchingL(TInt aDisplay, TBool aControl); williamr@4: williamr@4: private: williamr@4: class CBody; williamr@4: williamr@4: CBody* iBody; williamr@4: williamr@4: friend class CBody; williamr@4: friend class CVideoPlayerUtility2; williamr@2: private: williamr@2: enum TMMFVideoPlayerState williamr@2: { williamr@2: EStopped, williamr@2: EOpening, williamr@2: EPaused, williamr@2: EPlaying williamr@2: }; williamr@4: private: williamr@2: friend class CTestStepUnitMMFVidClient; williamr@4: #ifdef SYMBIAN_BUILD_GCE williamr@4: friend class CMediaClientVideoDisplayBody; williamr@4: #endif // SYMBIAN_BUILD_GCE williamr@2: public: williamr@2: class CTestView; williamr@2: friend class CTestView; williamr@2: }; williamr@2: williamr@4: williamr@2: #endif