diff -r 95754dcd27ad -r ce86b6d44a6d mmsharing/mmshui/src/musuilivesharingcontroller.cpp --- a/mmsharing/mmshui/src/musuilivesharingcontroller.cpp Tue May 25 12:38:39 2010 +0300 +++ b/mmsharing/mmshui/src/musuilivesharingcontroller.cpp Wed Jun 09 09:37:52 2010 +0300 @@ -31,6 +31,7 @@ #include "mussettingskeys.h" #include "muslogger.h" // debug logging #include "musuigeneralview.h" +#include "musuiactivetimer.h" #include #include @@ -41,8 +42,8 @@ using namespace NMusResourceApi; using namespace MusSettingsKeys; +const TInt KMusUiPauseResumeGuardPeriod = 500000; -const TInt KMusUiIntervalToPlay = 5000000; // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -74,6 +75,7 @@ { MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::~CMusUiLiveSharingController" ); delete iSession; + delete iPauseResumeGuardTimer; MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::~CMusUiLiveSharingController" ); } @@ -122,6 +124,8 @@ { iSession->SetSupportedVideoCodecListL( *iVideoCodec ); } + + iPauseResumeGuardTimer = CMusUiActiveTimer::NewL( NULL ); MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::ConstructL" ); } @@ -151,34 +155,15 @@ void CMusUiLiveSharingController::RefreshCameraOrientationL() { MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::RefreshCameraOrientationL" ); - if ( IsPlayingL() ) - { - MUS_LOG( "mus: [MUSUI ] -> Playing, pause/stop to restart camera" ); - TTimeIntervalMicroSeconds32 interval( KMusUiIntervalToPlay ); - PauseL(); - EnableDisplayL(false); - EnableDisplayL(true); - PlayL(); - } - else - { - MUS_LOG( "mus: [MUSUI ] -> Not Playing, try display to restart camera"); - if ( IsDisplayEnabledL() ) - { - //Disabling of display will cause disabling of viewfinder and in its - //turn releasing of camera, enabling of display will recreate a camera - //with new orientation - MUS_LOG( "mus: [MUSUI ] -> display is enabled, disable/enable it"); - EnableDisplayL(false); - EnableDisplayL(true); - } - else - { - MUS_LOG( "mus: [MUSUI ] -> Not refreshing "); - } - } + + if ( EngineSession() ){ + EngineSession()->RefreshOrientationL(); + } + MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::RefreshCameraOrientationL" ); } + +// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // @@ -318,18 +303,14 @@ case EMusuiCmdToolbarPauseLive: { HandleCommandL( EMusuiCmdViewPause ); - iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarPauseLive, - EMusuiCmdToolbarUnPauseLive, - ETrue ); + HandlePauseResumeInToolbar(); break; } case EMusuiCmdToolbarUnPauseLive: { HandleCommandL( EMusuiCmdViewContinue ); - iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarUnPauseLive, - EMusuiCmdToolbarPauseLive, - ETrue ); + HandlePauseResumeInToolbar(); break; } case EMusuiCmdToolbarZoom: @@ -393,13 +374,12 @@ { case EMusuiCmdViewPause: { - PauseL(); - iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPause ); + UserInitiatedCameraStateChangeL(EFalse); break; } case EMusuiCmdViewContinue: { - PlayL(); + UserInitiatedCameraStateChangeL(ETrue); break; } @@ -770,7 +750,17 @@ TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL( R_MUS_VIEW_NOTE_MEMORY_LOW ) ) ); iDiskFull = ETrue; } - + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiLiveSharingController::OrientationRefreshEnded() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::OrientationRefreshEnded" ); + iLiveObserver.DoRefreshView(); + MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::OrientationRefreshEnded" ); + } // ----------------------------------------------------------------------------- // @@ -932,40 +922,6 @@ MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::InactivityTimeout" ); } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::AsyncRefreshView() - { - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncRefreshView ) ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::HandleAsyncEventL( TMusUiAsyncEvent aEventId ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::HandleAsyncEventL" ); - switch ( aEventId ) - { - case EMusUiAsyncRefreshView: - { - iLiveObserver.DoRefreshView(); - break; - } - default: - { - // Not live sharing specific, let the base class handle - CMusUiSendController::HandleAsyncEventL( aEventId ); - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::HandleAsyncEventL" ); - - } - // ----------------------------------------------------------------------------- // Determines whether Session established or not // ----------------------------------------------------------------------------- @@ -975,5 +931,58 @@ return iSessionEstablished; } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiLiveSharingController::HandlePauseResumeInToolbar() + { + TBool isPlaying( EFalse ); + TRAP_IGNORE( isPlaying = IsPlayingL() ) + if ( isPlaying ) + { + iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarUnPauseLive, + EMusuiCmdToolbarPauseLive, + ETrue ); + } + else + { + iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarPauseLive, + EMusuiCmdToolbarUnPauseLive, + ETrue ); + } + } + +// ----------------------------------------------------------------------------- +// Workaround for problem at lower level (encoder side) which causes crash +// if several sequential pause/resumes are done too rapidly. Discard state change +// attempt if it occurs too quickly after previous state change. +// ----------------------------------------------------------------------------- +// +void CMusUiLiveSharingController::UserInitiatedCameraStateChangeL( TBool aEnable ) + { + MUS_LOG1( "mus: [MUSUI ] -> CMusUiLiveSharingController::UserInitiatedCameraStateChangeL, enable:", + aEnable ); + + if ( iPauseResumeGuardTimer->IsActive() ){ + MUS_LOG( "mus: [MUSUI ] <- State change ignored as guard timer is running!" ); + return; + } + + if ( aEnable ) + { + PlayL(); + } + else + { + PauseL(); + } + + iPauseResumeGuardTimer->After( KMusUiPauseResumeGuardPeriod ); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::UserInitiatedCameraStateChangeL" ); + } + + // End of file