diff -r 6385c4c93049 -r 8e6fa1719340 browserplugins/browseraudiovideoplugin/inc/BavpController.h --- /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 +#include +#include // 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 + +// 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 attribute + * @since 3.2 + * @param aVolume + * @return void + */ + void SetVolumeFromAttribute( TInt aVolume ); + + /** + * Sets loop using the value from 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 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