mmsharing/mmshui/src/musuilivesharingcontroller.cpp
branchRCL_3
changeset 21 ce86b6d44a6d
parent 19 95754dcd27ad
child 30 2d2c7d1515f7
--- 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 <musui.rsg>
 #include <avkon.hrh>
@@ -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