videoplayback/videohelix/inc/mpxvideoplaybackstate.h
changeset 0 96612d01cf9f
child 1 6711b85517b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoplayback/videohelix/inc/mpxvideoplaybackstate.h	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,457 @@
+/*
+* Copyright (c) 2008 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:   This class plays files with the Helix Engine
+ *
+*/
+
+// Version : %version: 16 %
+
+
+#ifndef _CMPXVIDEOPLAYBACKSTATE_H_
+#define _CMPXVIDEOPLAYBACKSTATE_H_
+
+//
+//  INCLUDES
+//
+#include <e32def.h>
+#include <e32base.h>
+
+#include "mpxhelixplaybackplugindefs.h"
+#include "mpxvideo_debug.h"
+
+//
+//  FORWARD DECLARATIONS
+//
+class CMPXVideoPlaybackController;
+
+//
+//  CLASS DECLARATION
+//
+
+/*
+ *  CMpxVideoPlaybackState class
+ *
+ *  State Machine keeptrack of the state of the playback controller
+ *  @lib mpxvideohelixplayback.lib
+ *
+ */
+NONSHARABLE_CLASS( CMPXVideoPlaybackState ) : public CBase
+{
+
+    public:
+        //
+        //  Constructors and destructor
+        //
+
+        /*
+         *  Destructor
+         *  Destroy the object and release all memory objects
+         */
+        ~CMPXVideoPlaybackState();
+
+        //
+        //  CMPXVideoPlaybackState Implementation
+        //
+
+        // Commands received from the Framework
+        virtual void  HandlePlay();
+        virtual void  HandlePause();
+        virtual void  HandlePlayPause();
+        virtual void  HandleStop();
+        virtual void  HandleStartSeekL( TBool aForward );
+        virtual void  HandleStopSeekL();
+        virtual void  HandleClose();
+        virtual void  HandleForeground();
+        virtual void  HandleBackground();
+
+        virtual void  HandleCustomPause();
+        virtual void  HandleCustomPlay();
+
+
+        virtual void  CommandHandleBackground();
+        virtual void  CommandHandleForeground();
+
+        // Events received from the MMF
+        virtual void HandleOpenComplete(TInt aError);
+        virtual void HandlePrepareComplete(TInt aError);
+        virtual void HandleLoadingStarted();
+        virtual void HandleLoadingComplete(TInt aError);
+        virtual void HandlePlaybackComplete(TInt aError);
+        virtual void HandleUnexpectedError( TInt aError );
+
+        // general method
+        virtual void OpenFileL( const TDesC& aMediaFile );
+        virtual void OpenFileL( const RFile& aMediaFile );
+        virtual void HandleVolumeChange();
+        virtual void HandleSetPositionL(TInt aPosition);
+        virtual TInt RetrieveFileDetailsL(const TArray<TMPXAttribute>& aAttrs, CMPXMedia* aMedia);
+        void RetrieveGeneralAttributesL( CMPXMedia* aMedia, TUint attrG );
+        void RetrieveVideoAttributesL( CMPXMedia* aMedia, TUint attrV );
+        inline virtual TBool IsInitialized();
+        virtual void HandleEndOfClip();
+        virtual TInt RetrieveBufferingPercentage();
+
+        virtual void ResolveTimeoutError( TInt aError );
+
+        //
+        // Set aspect ratio to mmf controller
+        //
+        virtual void SetAspectRatioL( CMPXCommand& aCmd, TMMFScalingType aType );
+
+        virtual void SendErrorToViewL( TInt aError );
+
+        inline virtual TMPXVideoPlaybackState  GetState();
+
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+        virtual void OpenFile64L( const RFile64& aMediaFile );
+#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+
+    protected:
+        /*
+         *  C++ default constructor
+         */
+        CMPXVideoPlaybackState();
+
+        /*
+         *  the second phase constructor ConstructL to safely construct things
+         *  that can leave
+         */
+        void ConstructL(CMPXVideoPlaybackController* aVideoPlaybackCtlr);
+
+    protected:
+        //
+        //  Data
+        //
+        CMPXVideoPlaybackController*        iVideoPlaybackCtlr;   // not owned
+        RFs                                 iFs;
+};
+
+
+/*******************************************************/
+/*         SUB CLASS DECLARATIONS                         */
+/*******************************************************/
+
+////////////////////////////////////////////////////////
+///     Declaration of CMPXNotIntialisedState
+////////////////////////////////////////////////////////
+class CMPXNotInitialisedState : public CMPXVideoPlaybackState
+{
+    public:
+        static CMPXVideoPlaybackState* NewL(CMPXVideoPlaybackController* aVideoPlaybackCtlr);
+        virtual ~CMPXNotInitialisedState();
+
+        // general method
+        virtual void HandleVolumeChange();
+        virtual TInt RetrieveFileDetailsL(const TArray<TMPXAttribute>& aAttrs, CMPXMedia* aMedia);
+        virtual void HandleClose();
+        virtual void SetAspectRatioL( CMPXCommand& aCmd, TMMFScalingType aType );
+        inline virtual TBool IsInitialized();
+        virtual void HandleUnexpectedError( TInt aError );
+        virtual void HandleBackground();
+        virtual void HandleForeground();
+        virtual void HandlePlay();
+
+        inline virtual TMPXVideoPlaybackState GetState();
+
+};
+
+
+////////////////////////////////////////////////////////
+///     Declaration of CMPXIntialisingState
+////////////////////////////////////////////////////////
+class CMPXInitialisingState : public CMPXVideoPlaybackState
+{
+    public:
+        static CMPXVideoPlaybackState* NewL(CMPXVideoPlaybackController* aVideoPlaybackCtlr);
+        virtual ~CMPXInitialisingState();
+
+        virtual void OpenFileL( const TDesC& aMediaFile );
+        virtual void OpenFileL( const RFile& aMediaFile );
+
+        // Methods where video plabkack behavior varies for this state
+        virtual void HandleForeground();
+        virtual void HandleBackground();
+
+        // Events received from the MMF
+        virtual void HandleOpenComplete(TInt aError);
+        virtual void HandlePrepareComplete(TInt aError);
+
+        // general method
+        virtual void HandleVolumeChange();
+        virtual TInt RetrieveFileDetailsL(const TArray<TMPXAttribute>& aAttrs, CMPXMedia* aMedia);
+        virtual void SetAspectRatioL( CMPXCommand& aCmd, TMMFScalingType aType );
+        inline virtual TBool IsInitialized();
+        virtual void HandleUnexpectedError( TInt aError );
+
+        inline virtual TMPXVideoPlaybackState GetState();
+
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+        virtual void OpenFile64L( const RFile64& aMediaFile );
+#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+
+};
+
+////////////////////////////////////////////////////////
+///     Declaration of CMPXIntialisedState
+////////////////////////////////////////////////////////
+class CMPXInitialisedState : public CMPXVideoPlaybackState
+{
+    public:
+        static CMPXVideoPlaybackState* NewL(CMPXVideoPlaybackController* aVideoPlaybackCtlr);
+        virtual ~CMPXInitialisedState();
+
+        // Methods where video plabkack behavior varies for this state
+
+        // Commands received from the Framework
+        virtual void HandlePlay();
+        virtual void HandleStop();
+        virtual void HandleForeground();
+        virtual void HandleBackground();
+
+        // general method
+        virtual void HandleSetPositionL(TInt aPosition);
+
+        inline virtual TMPXVideoPlaybackState GetState();
+};
+
+////////////////////////////////////////////////////////
+///     Declaration of CMPXPlayingState
+////////////////////////////////////////////////////////
+class CMPXPlayingState : public CMPXVideoPlaybackState
+{
+    public:
+        static CMPXVideoPlaybackState* NewL(CMPXVideoPlaybackController* aVideoPlaybackCtlr);
+        virtual ~CMPXPlayingState();
+
+        // Methods where video plabkack behavior varies for this state
+
+        // Commands received from the Framework
+        virtual void HandlePause();
+        virtual void HandleStop();
+        virtual void HandleStartSeekL( TBool aForward );
+        virtual void HandlePlayPause();
+        virtual void HandleBackground();
+
+        virtual void HandleCustomPause();
+
+        // Events received from the MMF
+        virtual void HandleLoadingStarted();
+
+        // general method
+        virtual void HandleSetPositionL(TInt aPosition);
+        virtual void ResolveTimeoutError( TInt aError );
+
+        inline virtual TMPXVideoPlaybackState GetState();
+};
+
+
+////////////////////////////////////////////////////////
+///     Declaration of CMPXBufferingState
+////////////////////////////////////////////////////////
+class CMPXBufferingState : public CMPXVideoPlaybackState
+{
+    public:
+        static CMPXVideoPlaybackState* NewL(CMPXVideoPlaybackController* aVideoPlaybackCtlr);
+        virtual ~CMPXBufferingState();
+
+        // Methods where video plabkack behavior varies for this state
+
+        // Commands received from the Framework
+        //virtual void  HandleStop();
+
+        virtual void HandleForeground();
+        virtual void HandleBackground();
+        virtual void HandleStop();
+        virtual void HandlePause();
+        virtual TInt RetrieveBufferingPercentage();
+
+        // Events received from the MMF
+        virtual void HandleLoadingStarted();
+        virtual void HandleLoadingComplete(TInt aError);
+
+        // Handle end of the clip situation, where we might get
+        // playbackcomplete before loadingcomplete
+
+        // general method
+        virtual void ResolveTimeoutError( TInt aError );
+
+        inline virtual TMPXVideoPlaybackState GetState();
+};
+
+////////////////////////////////////////////////////////
+///     Declaration of CMPXPausedState
+////////////////////////////////////////////////////////
+class CMPXPausedState : public CMPXVideoPlaybackState
+{
+    public:
+        static CMPXVideoPlaybackState* NewL( CMPXVideoPlaybackController* aVideoPlaybackCtlr );
+        virtual ~CMPXPausedState();
+
+        // Methods where video plabkack behavior varies for this state
+
+        // Commands received from the Framework
+        virtual void HandlePlay();
+        virtual void HandleStop();
+        virtual void HandleStartSeekL( TBool aForward );
+        virtual void  HandlePlayPause();
+        virtual void HandleForeground();
+        virtual void HandleCustomPlay();
+
+        // general method
+        virtual void HandleSetPositionL( TInt aPosition );
+
+        inline virtual TMPXVideoPlaybackState GetState();
+};
+
+////////////////////////////////////////////////////////
+///     Declaration of CMPXSeekingState
+////////////////////////////////////////////////////////
+class CMPXSeekingState : public CMPXVideoPlaybackState
+{
+    public:
+        static CMPXVideoPlaybackState* NewL(CMPXVideoPlaybackController* aVideoPlaybackCtlr);
+        virtual ~CMPXSeekingState();
+
+        // Methods where video plabkack behavior varies for this state
+
+        // Commands received from the Framework
+        virtual void HandleStopSeekL();
+        virtual void HandleBackground();
+        virtual void HandlePause();
+        virtual void HandlePlay();
+        virtual void HandleSetPositionL( TInt aPosition );
+
+        virtual void HandleStop();
+
+        inline virtual TMPXVideoPlaybackState GetState();
+};
+
+
+////////////////////////////////////////////////////////
+///     Declaration of CMPXStoppedState
+////////////////////////////////////////////////////////
+class CMPXStoppedState : public CMPXVideoPlaybackState
+{
+    public:
+        static CMPXVideoPlaybackState* NewL(CMPXVideoPlaybackController* aVideoPlaybackCtlr);
+        virtual ~CMPXStoppedState();
+
+        // Methods where video plabkack behavior varies for this state
+
+        // Commands received from the Framework
+        virtual void HandlePlay();
+        virtual void HandleClose();
+
+        // general method
+        virtual void HandleSetPositionL(TInt aPosition);
+        virtual void ResolveTimeoutError( TInt aError );
+
+        inline virtual TMPXVideoPlaybackState GetState();
+};
+
+// INLINE METHODS
+
+inline
+TMPXVideoPlaybackState CMPXVideoPlaybackState::GetState()
+{
+    MPX_DEBUG(_L("CMPXVideoPlaybackState::GetState()"));
+
+    // sub-classes to return their respective value
+    return EMPXNumberOfStates;
+}
+
+inline
+TMPXVideoPlaybackState CMPXNotInitialisedState::GetState()
+{
+    MPX_DEBUG(_L("CMPXNotInitialisedState::GetState()"));
+
+    return EMPXVideoNotInitialized;
+}
+
+inline
+TMPXVideoPlaybackState CMPXInitialisingState::GetState()
+{
+    MPX_DEBUG(_L("CMPXInitialisingState::GetState()"));
+
+    return EMPXVideoInitializing;
+}
+
+inline
+TMPXVideoPlaybackState CMPXInitialisedState::GetState()
+{
+    MPX_DEBUG(_L("CMPXInitialisedState::GetState()"));
+
+    return EMPXVideoInitialized;
+}
+
+inline
+TMPXVideoPlaybackState CMPXPlayingState::GetState()
+{
+    MPX_DEBUG(_L("CMPXPlayingState::GetState()"));
+
+    return EMPXVideoPlaying;
+}
+
+inline
+TMPXVideoPlaybackState CMPXPausedState::GetState()
+{
+    MPX_DEBUG(_L("CMPXPausedState::GetState()"));
+
+    return EMPXVideoPaused;
+}
+
+inline
+TMPXVideoPlaybackState CMPXStoppedState::GetState()
+{
+    MPX_DEBUG(_L("CMPXStoppedState::GetState()"));
+    return EMPXVideoStopped;
+}
+
+inline
+TMPXVideoPlaybackState CMPXBufferingState::GetState()
+{
+    MPX_DEBUG(_L("CMPXBufferingState::GetState()"));
+
+    return EMPXVideoBuffering;
+}
+
+inline
+TMPXVideoPlaybackState CMPXSeekingState::GetState()
+{
+    MPX_DEBUG(_L("CMPXSeekingState::GetState()"));
+
+    return EMPXVideoSeeking;
+}
+
+inline
+TBool CMPXVideoPlaybackState::IsInitialized()
+{
+    return ETrue;
+}
+
+inline
+TBool CMPXNotInitialisedState::IsInitialized()
+{
+    return EFalse;
+}
+
+inline
+TBool CMPXInitialisingState::IsInitialized()
+{
+    return EFalse;
+}
+
+
+
+#endif  //_CMPXVIDEOPLAYBACKSTATE_H_