browserplugins/browseraudiovideoplugin/inc/BavpController.h
branchRCL_3
changeset 65 8e6fa1719340
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/inc/BavpController.h	Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,612 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  Base Controller class for handling browser requests to play
+*                audio or video.
+*
+*/
+
+
+#ifndef BAVPCONTROLLER_H
+#define BAVPCONTROLLER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <coecntrl.h>
+#include <e32property.h>                // RProperty class
+#include "FeatMgr.h"
+
+#include "BrowserAudioVideoPlugin.hrh"
+#include "BavpVolumeObserver.h"         // Volume Observer class
+#include "BavpVolumeHandler.h"
+#include "BavpHwKeyEvents.h"            // Hardware Key Events
+#include "BavpClipInfo.h"               // Clip info
+#include <rt_gesturehelper.h>
+
+// FORWARD DECLARATIONS
+class RFs;
+class CBavpPlugin;
+class MBavpView;
+
+// CONSTANTS
+// Does this build include Side Volume Keys support
+#define HAS_HW_VOLUME_KEYS ( FeatureManager::FeatureSupported( KFeatureIdSideVolumeKeys ) )
+
+// Used to walk the content's meta data
+_LIT(KBavpTrue, "1");
+_LIT(KBavpFalse, "0");
+_LIT(KBavpLiveStream, "LiveStream");
+_LIT(KBavpSeekable, "Seekable");
+
+// ROP controller UID, ?? Helix UID ??
+const TUid KRopControllerUid =
+    {
+    0x101F8514
+    };
+
+// The Audio or Video player state
+enum TAudioVideoState
+    {
+    EBavpNone,                  // Player is idle or not created yet
+    EBavpBuffering,             // Loading the content
+    EBavpPlaying,               // Playing the content
+    EBavpPlayComplete,          // Done playing the content (end)
+    EBavpStopped,               // User stopped the content
+    EBavpPaused,                // User paused the content
+    EBavpBadContent,            // Bad content or network error encountered
+    EBavpFastForwarding,        // Fast Forwarding the content
+    EBavpFastForwardComplete,   // Fast Forward reached end of content
+    EBavpRewinding,             // Rewinding the content
+    EBavpRewindComplete         // Rewind reached beginning of content
+    };
+
+// Use these values for fast-forwarding and rewinding
+const TInt KSkipToPosition = 2*1000*1000;   // 2 seconds
+const TInt KUpdateFrequency = 400*1000;     // 400 milliseconds
+const TInt KInitialDelay = 600*1000;        // 600 milliseconds
+
+// CLASS DECLARATIONS
+
+/**
+*  CBavpController.
+*  Controller class for handling browser requests to play audio or video.
+*  @lib npBrowserAudioVideoPlugin.lib
+*  @since 3.2
+*/
+class CBavpController : public CActive,
+                        public MBavpVolumeObserver,
+                        public MBavpHwKeyEventsObserver,
+                        public MCenRepNotifyHandlerCallback
+    {
+    public:    // Constructors and destructor
+
+        /**
+        * C++ default constructor.
+        */
+        CBavpController( MBavpView* aView, TUint aAccessPtId );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CBavpController();
+
+    public: // New pure virtual methods
+
+        /**
+        * Handles request to play the audio or video content
+        * @since 3.2
+        * @param none
+        * @return void
+        */
+        virtual void PlayAudioVideoL() = 0;
+
+        /**
+        * Handles request to stop playing the content
+        * @param none
+        * @return void
+        */
+        virtual void Stop() = 0;
+
+        /**
+        * Handles request to play content
+        * @param none
+        * @return void
+        */
+        virtual void PlayL() = 0;
+
+        /**
+        * Handles request to pause playing content
+        * @param none
+        * @return void
+        */
+        virtual void PauseL() = 0;
+
+        /**
+        * Handles request to fast forward content
+        * @param none
+        * @return void
+        */
+        virtual void FastForwardL() = 0;
+
+        /**
+        * Handles request to rewind content
+        * @param none
+        * @return void
+        */
+        virtual void RewindL() = 0;
+
+        /**
+        * Set the volume in the player, we send volume value 0-10, this method
+        * will scale before calling Player::SetVolume()
+        * @param aVolume the new volume: 0(mute) - 10(max)
+        * @return void
+        */
+        virtual void SetPlayerVolume( TInt aVolume ) = 0;
+
+        /**
+        * Get the current volume of the player
+        * This needs to be scaled to 0-10 (CR value) before returning
+        * @param none
+        * @return player volume scaled: 0(mute) - 10(max)
+        */
+        virtual TInt GetPlayerVolume() = 0;
+
+        /**
+        * To get the current position of the clip
+        * @since 3.2
+        * @param none
+        * @return TTimeIntervalMicroSeconds
+        */
+        virtual TTimeIntervalMicroSeconds getPositionL() = 0;
+
+        /**
+        * To set the position of the clip
+        * @since 3.2
+        * @param TTimeIntervalMicroSeconds
+        * @return void
+        */
+        virtual void setPositionL(TTimeIntervalMicroSeconds) = 0;
+        
+        /**
+        * Handles the incoming call
+        * @param none
+        * @return void
+        */
+        virtual void HandleInComingCallL() = 0;
+
+    public: // New virtual methods
+
+        /**
+        * Handles Notifications from Browser
+        * @since 3.2
+        * @param TBool: Tell bavp plugin if Browser is in or out of focus
+        * @return void
+        */
+        virtual void HandleBrowserNotification( TBool aBrowserFocus );
+
+        /**
+        * Handles the error
+        * @param TInt aError: error to be handled
+        * @return void
+        */
+        virtual void HandleError( TInt aError );
+
+        /**
+        * Handles the keys offered by the CCoeControl
+        * @since 3.2
+        * @param TInt aKeyEvent: Which key pressed
+        * @param TInt aEventCode: Key down, key up...
+        * @return TKeyResponse: Was the key consumed
+        */
+        virtual TKeyResponse HandleKeysL( const TKeyEvent& aKeyEvent,
+                                          TEventCode aType );
+
+        /**
+        * Handles commands from Option Menu, defined in resource files
+        * @since 3.2
+        * @param TBavpCommandIds aCommand:  a Command Id
+        * @return void
+        */
+        virtual void HandleCommandL( TBavpCommandIds aCommand );
+
+        /**
+        * Called by CBavpView to CBavpPlugin whenever Bavp focus changes
+        * @since 3.2
+        * @param aFocus True if plugin has focus
+        * @return none
+        */
+        virtual void BavpFocusChanged( TBool aFocus );
+        
+        virtual TBool HandleGesture(RT_GestureHelper::TGestureEvent *gesture); 
+
+    public: // New methods
+
+        /**
+        * Sets volume using the value from <object> attribute
+        * @since 3.2
+        * @param aVolume
+        * @return void
+        */
+        void SetVolumeFromAttribute( TInt aVolume );
+
+        /**
+        * Sets loop using the value from <object> attribute
+        * @since 3.2
+        * @param aLoopValue: The number of times to play file
+        * @param aInfiniteFlag: Set to ETrue if play infinitely, we use a loop
+        *        countValue = 50 for infinite and always set this to EFalse
+        * @return void
+        */
+        void SetLoopFromAttribute( TInt aLoopValue, TBool aInfiniteFlag );
+
+        /**
+        * Refresh the coordinates of the rectangle to be drawn
+        * @since 3.2
+        * @param none
+        * @return void
+        */
+        virtual void RefreshRectCoordinatesL();
+
+        /**
+        * Sets original file name (used for scripting functionality)
+        * @since 3.2
+        * @param originalFilename
+        * @return void
+        */
+        void SetOriginalFileName( const TDesC* originalFileName );
+
+
+        /**
+        * Sets the mime type(used for scripting functionality)
+        * @since 3.2
+        * @param mime type
+        * @return void
+        */
+        void SetMimeType( const TDesC8* mimetype );
+
+    public: // New inline methods
+
+        /**
+        * Bavp has focus
+        * @since 3.2
+        * @param void
+        * @return : TBool 0 or 1 indicating the focus
+        */
+        inline TBool BavpHasFocus()
+            {
+            return iBavpHasFocus;
+            }
+
+        /**
+        * Returns the video player plugin current state
+        * @since 3.2
+        * @param none
+        * @return TVideoState
+        */
+        inline TAudioVideoState State()
+            {
+            return iCurrentState;
+            }
+
+        /**
+        * returns ETrue is the volume is muted
+        * @param none
+        * @return TBool
+        */
+        inline TBool IsVolumeMuted()
+            {
+            return ( iCurrentVolume == KCRVolumeMute );
+            }
+
+        /**
+        * Returns ETrue is this is a video clip
+        * @since 3.2
+        * @param none
+        * @return TBool
+        */
+        inline TBool IsClipVideo()
+            {
+            return iClipInfo->iVideoTrack;
+            }
+
+        /**
+        * Returns ETrue is the clip is seekable.
+        * @param none
+        * @return TBool
+        */
+        inline TBool IsClipSeekable()
+           {
+           return iClipInfo->iSeekable;
+           }
+
+        /**
+        * returns ETrue is the content is local media file.
+        * Local files can be FF and Rewind
+        * @param none
+        * @return TBool
+        */
+        inline TBool IsClipLocalMedia()
+            {
+            return ( iClipInfo->iMediaType == ELocalVideoFile ||
+                     iClipInfo->iMediaType == ELocalAudioFile );
+            }
+
+        /**
+        * Returns TRUE if the display is on full screen, otherwise FALSE
+        * @since 3.2
+        * @param none
+        * @return TBool
+        */
+        inline TBool IsClipFullScreen()
+            {
+            return iClipInfo->iInFullScreenMode;
+            }
+
+        /**
+        * Returns TRUE if the content is being fast-forwarded,
+        * otherwise FALSE
+        * @since 3.2
+        * @param none
+        * @return TBool
+        */
+        inline TBool IsClipFastForwarding()
+            {
+            return ( iCurrentState == EBavpFastForwarding );
+            }
+
+        /**
+        * Returns TRUE if the content is being rewound,
+        * otherwise FALSE
+        * @since 3.2
+        * @param none
+        * @return TBool
+        */
+        inline TBool IsClipRewinding()
+            {
+            return ( iCurrentState == EBavpRewinding );
+            }
+
+        /**
+        * Returns ETrue is the clip is onDemand stream.
+        * @param none
+        * @return TBool
+        */
+        inline TBool IsClipOnDemand()
+            {
+            return ( iClipInfo->iMediaType != ELocalVideoFile && iClipInfo->iSeekable );
+            }
+
+        /**
+        * Returns ETrue is the clip is live stream.
+        * @param none
+        * @return TBool
+        */
+        inline TBool IsClipLive()
+            {
+            return ( iClipInfo->iLiveStream );
+            }
+
+
+        /** Returns the original filename of the clip
+        * @param none
+        * @return HBufC*
+        */
+        inline const HBufC& ClipName()
+            {
+            return *iOriginalFileName;
+            }
+
+        /** Returns the duration of the clip
+        * @param none
+        * @return TTimeIntervalMicroSeconds
+        */
+        inline TTimeIntervalMicroSeconds Duration()
+            {
+            return ( iClipInfo->iDurationInSeconds );
+            }
+
+        /** Returns the mime type of the clip
+        * @param none
+        * @return HBufC*
+        */
+        inline const HBufC8& MimeType()
+            {
+            return *iMimeType;
+            }
+
+
+
+    protected:  // New methods
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        * @param none
+        * @return void
+        */
+        void BaseConstructL( TBavpMediaType aMediaType,
+                             const TDesC& aFileName );
+
+        /**
+        * Parse the ram file
+        * @param none
+        * @return void
+        */
+        void ParseRamFileL();
+#if defined(BRDO_ASX_FF) 
+    /**
+	* Parse the asx file
+	* @param none
+	* @return void
+	*/
+        void ParseAsxFileL();
+#endif //BRDO_ASX_FF
+        /**
+        * Set the rectangle to prepare the display
+        * @param TRect
+        * @return TRect aRect
+        */
+        TRect GetClipRect( TRect aRect );
+
+        /**
+        * Create a query dialog for the volume setting list
+        * @param none
+        * @return void
+        */
+        void CreateVolumeListDlgL();
+
+        /**
+        * Check if an incoming call comes
+        * @param none
+        * @return TBool
+        */
+        TBool IsVideoOrAudioCall();
+
+        /**
+        * Check if other audio or video controllers are playing
+        * @param none
+        * @return TBool
+        */
+        TBool IsAnotherControllerPlaying();
+
+        /**
+        * Pause or Stop the other audio or video controllers from playing
+        * @param none
+        * @return void
+        */
+        void PauseOtherControllersPlaying();
+
+        /**
+        * Handle the error from MMF for multiple media object case
+        * @param aError error code from MMF
+        * @return void
+        */
+        void HandleMultiInstanceError();
+
+    protected:  // Methods from CActive
+
+        /**
+        * Implements cancellation of an outstanding request.
+        * @param none
+        * @return void
+        */
+        void DoCancel() { /* Not implemented */ }
+
+        /**
+        * Handles an active object’s request completion event.
+        * @param none
+        * @return void
+        */
+        void RunL();
+
+    public: // Methods from MBavpVolumeObserver
+
+        /**
+        * Updates the volume
+        * From MBavpVolumeObserver
+        * @since 3.2
+        * @param TInt aVolume: volume value
+        * @return void
+        */
+        void UpdateVolume( TInt aVolume );
+
+    private:       // From MHwKeyEventsObserver
+
+        /**
+        * Called when volume level should be changed.
+        * Set volume control visible into navi pane.
+        * @param aVolumeChange: +1 change volume up
+        *                       -1 change volume down
+        */
+        void BavpHwKeyVolumeChange( TInt aVolumeChange );
+
+        /**
+        * Called when a media hardware key (play, pause...) was presed.
+        * @since 3.2
+        * @param aCommand: Command ID representing Play, Pause, ...
+        * @return void
+        */
+        // void BavpHwKeyCommand( TBavpCommandIds aCommand );
+
+    public:         // Data, public
+
+        // Is Bavp Plugin in focus
+        TBool iBavpHasFocus;
+
+        // Audio Video plugin current state
+        TAudioVideoState iCurrentState;
+
+        // ClipInfo contains our metadata from the MMF/Helix and content file
+        CBavpClipInfo* iClipInfo;
+
+        // Array of pointers of CBavpController (this) instances
+        static RPointerArray<CBavpController> iBavpControllerArray;
+
+    protected:      // Data
+
+        // The player is initialized and ready to be used
+        TBool iPlayerInitialized;
+
+        // Bavp plugin previous state - used when handling interrupted
+        // media, because of a phone call
+        TAudioVideoState iPreCallState;
+
+        // Last command
+        TBavpCommandIds iLastCommand;
+
+        // The number of times the audio or video file will play (loop)
+        TInt iLoopCount;
+
+        // Hold the initial value of loop
+        TInt iInitLoopCount;
+
+        // The infinite loop flag, we currently set to EFalse and use loop=50
+        // if a web site requests infinite looping
+        TBool iInfiniteLoopFlag;
+
+        // Access pt id
+        TUint iAccessPtId;
+
+        // Bavp View
+        MBavpView* iBavpView;
+
+        // Events from Hardware Keys
+        CBavpHwKeyEvents* iHwKeyEvents;
+
+        // System state
+        RProperty iIncomingCalls;
+
+        // Volume hander
+        CBavpVolumeHandler* iBavpVolumeHandler;
+
+        // Current volume level
+        TInt iCurrentVolume;
+
+        // Audio or Video player max volume
+        TInt iPlayerMaxVolume;
+
+        // Timer to jump to a new position, used for Fast Forward, Rewind
+        CPeriodic* iPositionUpdater;
+
+        // original file name. added for scripting functionality
+        HBufC* iOriginalFileName;
+
+        // mime type. added for scripting functionality
+        HBufC8* iMimeType;
+
+        //Normal display mode screen rect
+        TRect iNormalScreenRect;
+    };
+
+#endif      // CBAVPCONTROLLER_H
+
+// End of File