diff -r 6385c4c93049 -r 8e6fa1719340 browserplugins/browseraudiovideoplugin/inc/BavpControllerVideo.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserplugins/browseraudiovideoplugin/inc/BavpControllerVideo.h Wed Sep 01 12:31:04 2010 +0100 @@ -0,0 +1,431 @@ +/* +* 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: Controller class for handling browser requests to play video. +* +*/ + + +#ifndef BAVPCONTROLLERVIDEO_H +#define BAVPCONTROLLERVIDEO_H + +// INCLUDES +#include + +#ifdef BRDO_VIDEOPLAYER2_ENABLED_FF +#include +#else +#include +#endif +#include "BavpController.h" + +// FORWARD DECLARATIONS +class MBavpView; +class CBavpViewFullScreen; + + +// CLASS DECLARATIONS +/** +* CBavpController. +* Controller class for handling browser requests to play video. +* @lib npBrowserVideoPlugin.lib +* @since 3.2 +*/ +class CBavpControllerVideo : public CBavpController, + public MVideoPlayerUtilityObserver, + public MVideoLoadingObserver, + public MBeating + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CBavpControllerVideo* NewL( MBavpView* aView, + TUint aAccessPtId, + TBavpMediaType aMediaType, + const TDesC& aFileName ); + + /** + * Destructor. + */ + ~CBavpControllerVideo(); + + private: // New methods + + /** + * C++ default constructor. + */ + CBavpControllerVideo( MBavpView* aView, TUint aAccessPtId ); + + /** + * By default Symbian 2nd phase constructor is private. + * @param none + * @return void + */ + void ConstructL( TBavpMediaType aMediaType, const TDesC& aFileName ); + + /** + * Open a video URL link + * @since 3.2 + * @param none + * @return void + */ + void OpenVideoUrlL(); + + /** + * Opens the video file to be played. + * @param none + * @return void + */ + void OpenVideoFileL(); + + /** + * Handle the leaving methods needed by MvpuoPrepareComplete + * @param none + * @return void + */ + void PrepareCompleteL(); + + /** + * Non leaving version of initialize the video player plugin + * @param none + * @return void + */ + void InitVideoPlayer(); + + /** + * Initialize the video player plugin + * @param none + * @return void + */ + void InitVideoPlayerL(); + + /** + * Closes the player and delete the player instance + * @param none + * @return void + */ + void UnInitVideoPlayer(); + + /** + * Rotate the screen if its height is bigger than width + * @param none + * @return void + */ + void RotateScreen90(); + + /** + * Switch from normal screen to full screen display + * @param none + * @return void + */ + void RevertToFullScreenL(); + + /** + * Switch from full screen to normal screen display + * @param none + * @return void + */ + void RevertToNormalScreenL(); + + /** + * Switch between normal screen display and full screen display + * @since 3.2 + * @param none + * @return void + */ + void ToggleScreen(); + + /** + * Refresh the coordinates of the rectangle to be drawn + * @since 3.2 + * @param none + * @return void + */ + void RefreshRectCoordinatesL(); + + /** + * Switches between normal screen display and full screen display + * @since 3.2 + * @param TAny* aThisData: the controller itself + * @return TInt error code + */ + static TInt WaitForScreenSwitch( TAny* aThisData ); + + /** + * wrapper function for WaitForScreenSwitch, that leaves + * Switches between normal screen display and full screen display + * @since 3.2 + * @param TAny* aThisData: the controller itself + * @return TInt error code + */ + static void WaitForScreenSwitchL( TAny* aThisData ); + + /** + * Fastforward the video file currently being played or paused + * @since S60 v3.2 + * @param TAny* aThisData: the controller itself + * @return TInt error code + */ + static TInt DoFastForwardL( TAny* aThisData ); + + /** + * Rewind the video file currently being played or paused + * @since S60 v3.2 + * @param TAny* aThisData: the controller itself + * @return TInt error code + */ + static TInt DoRewindL( TAny* aThisData ); + + public: // Methods overridden from base class CBavpController + + /** + * Handles the error + * @param TInt aError: error to be handled + * @return void + */ + 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 + */ + 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 + */ + void HandleCommandL( TBavpCommandIds aCommand ); + + TBool HandleGesture(RT_GestureHelper::TGestureEvent *gesture); + + public: // From MBavpController + + /** + * Handles request to play the audio or video content + * @since 3.2 + * @param none + * @return void + */ + void PlayAudioVideoL(); + + /** + * Handles request to stop playing the content + * @param none + * @return void + */ + void Stop(); + + /** + * Handles request to play content + * @param none + * @return void + */ + void PlayL(); + + /** + * Handles request to pause playing content + * @param none + * @return void + */ + void PauseL(); + + /** + * Handles request to fast forward content + * @param none + * @return void + */ + void FastForwardL(); + + /** + * Handles request to rewind content + * @param none + * @return void + */ + void RewindL(); + + /** + * Set the volume in the player, we send volume value 0-10, this method + * will scale before calling player's SetVolume() + * @param aVolume the new volume: 0(mute) - 10(max) + * @return void + */ + void SetPlayerVolume( TInt aVolume ); + + /** + * 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) + */ + TInt GetPlayerVolume(); + + /** + * To get the current position of the clip + * @since 3.2 + * @param none + * @return TTimeIntervalMicroSeconds + */ + TTimeIntervalMicroSeconds getPositionL(); + + /** + * To set the position of the clip + * @since 3.2 + * @param TTimeIntervalMicroSeconds + * @return void + */ + void setPositionL(TTimeIntervalMicroSeconds); + + /** + * Handles the incoming call + * @param none + * @return void + */ + void HandleInComingCallL(); + + + public: // Methods from MVideoPlayerUtilityObserver + + /** + * Notification to the client that the opening of the video clip has completed, successfully, or otherwise. + * with the system clock + * @since 3.2 + * @param TInt aError: The status of the video sample after opening + * @return void + */ + void MvpuoOpenComplete( TInt aError ); + + /** + * Notification to the client that the opening of the video clip has been prepared + * successfully, or otherwise. This callback is called in response to a call to CVideoPlayerUtility::Prepare(). + * @since 3.2 + * @param TInt aError: The status of the video sample after opening + * @return void + */ + void MvpuoPrepareComplete( TInt aError ); + + /** + * Notification that the frame requested by a call to GetFrameL is ready + * @since 3.2 + * @param TInt aError: The status of the video sample after opening + * @return void + */ + void MvpuoFrameReady( CFbsBitmap& /*aFrame*/, TInt /*aError*/ ) {}; + + /** + * Notification that video playback has completed. This is not called if playback is + * explicitly stopped by calling Stop. + * @since 3.2 + * @param TInt aError: The status of the video sample after opening + * @return void + */ + void MvpuoPlayComplete( TInt aError ); + + /** + * General event notification from controller. These events are specified by the + * supplier of the controller + * @since 3.2 + * @param TMMFEvent &aEvent: multimedia framework event + * @return void + */ + void MvpuoEvent( const TMMFEvent &aEvent ); + + /** + * Notification that video clip loading/rebuffering has completed + * @since 3.2 + * @param TMMFEvent &aEvent: multimedia framework event + * @return void + */ + void MvloLoadingStarted(); + + /** + * Notification that video clip loading/rebuffering has started + * @since 3.2 + * @param TMMFEvent &aEvent: multimedia framework event + * @return void + */ + void MvloLoadingComplete(); + // MBeating + public: + /** + * Handles a regular heartbeat timer event + * @since S60 v3.2 + * @param none + * @return void + */ + void Beat(); + + /** + * Handles a heartbeat timer event where the timer completes out of synchronisation + * with the system clock + * @since S60 v3.2 + * @param none + * @return void + */ + void Synchronize(); + + private: + /** + * Handles the heart beat to retrieve the current playback position + * @param none + * @return void + */ + void HandleScreenSaver(); + + TBool NoScreenSaverMode(); + void SetDefaultAspectRatioL(); +#ifdef BRDO_VIDEOPLAYER2_ENABLED_FF + /** + * Handles a window rect update timer event where the timer completes the KWindowChangeUpdateTimeout + * with the system clock + * @since S60 v5.2 + * @param none + * @return void + */ + void UpdateWindowSize(); +#endif + private: // Data + + // Used to call MMF for video functionality +#ifdef BRDO_VIDEOPLAYER2_ENABLED_FF + /** + * MMF Client API has updated with new methods to control video display + *windows and video picture positioning to produce a new version of the API, + *CVideoPlayerUtility2. The new API is the preferred way to play video on graphics + *surfaces, and will support new features such as more flexible window positioning. + */ + CVideoPlayerUtility2* iVideoPlayer; +#else + CVideoPlayerUtility* iVideoPlayer; +#endif + // Active object for display update + CIdle* iDisplayUpdater; + + // The full screen view + CBavpViewFullScreen* iBavpViewFullScreen; + //heart beat progress + CHeartbeat* iBackLightUpdater; + TRect iNormalScreenRect; + RWindow* iActiveWindow; + }; + +#endif // CBAVPCONTROLLERVIDEO_H + +// End of File