diff -r c499df2dbb33 -r 112f0ac2d1f0 tvout/tvoutengine/src/glxhdmicontroller.cpp --- a/tvout/tvoutengine/src/glxhdmicontroller.cpp Mon May 03 12:31:32 2010 +0300 +++ b/tvout/tvoutengine/src/glxhdmicontroller.cpp Mon May 03 00:53:50 2010 +0530 @@ -73,6 +73,7 @@ } if (iGlxTvOut->IsHDMIConnected()) { + iIsPostingMode = ETrue; // the image should be in posting mode GLX_LOG_INFO("CGlxHdmiController::SetImageL() - 2"); // do not close the surface , use the same surface instead. // Call a function to pass imagefile @@ -139,8 +140,10 @@ EXPORT_C void CGlxHdmiController::ShiftToCloningMode() { TRACER("CGlxHdmiController::ShiftToCloningMode()"); + // Shift to cloning only if HDMI is connected and surfaceupdater available. if (iGlxTvOut->IsHDMIConnected() && iSurfaceUpdater) { + iIsPostingMode = EFalse; iSurfaceUpdater->ShiftToCloningMode(); } } @@ -151,14 +154,27 @@ EXPORT_C void CGlxHdmiController::ShiftToPostingMode() { TRACER("CGlxHdmiController::ShiftToPostingMode()"); - if (iGlxTvOut->IsHDMIConnected() && iSurfaceUpdater) + if (iGlxTvOut->IsHDMIConnected()) { - iSurfaceUpdater->ShiftToPostingMode(); + if (!iSurfaceUpdater) + { + GLX_LOG_INFO("CGlxHdmiController::ShiftToPostingMode() - 1"); + // This case would come when HDMI connected, TvOut /headphones being connected + // and then it shows a popup of "microphone connected" + // thus Background - Foreground when headphones connected during HDMI connected + SetImageL(iStoredImagePath->Des(), iFsBitmap, EFalse); + } + else + { + GLX_LOG_INFO("CGlxHdmiController::ShiftToPostingMode() - 2"); + iSurfaceUpdater->ShiftToPostingMode(); + } + iIsPostingMode = ETrue; } } // ----------------------------------------------------------------------------- -// HandleTvStatusChangedL +// IsHDMIConnected // ----------------------------------------------------------------------------- EXPORT_C TBool CGlxHdmiController::IsHDMIConnected() { @@ -171,7 +187,8 @@ // Constructor // ----------------------------------------------------------------------------- CGlxHdmiController::CGlxHdmiController(): - iFsBitmap(NULL) + iFsBitmap(NULL), + iIsPostingMode(EFalse) { TRACER("CGlxHdmiController::CGlxHdmiController()"); // Implement nothing here @@ -211,6 +228,7 @@ delete iSurfaceUpdater; iSurfaceUpdater = NULL; } + iIsPostingMode = EFalse; } // ----------------------------------------------------------------------------- @@ -264,7 +282,14 @@ TRACER("CGlxHdmiController::HandleTvStatusChangedL()"); if ( aChangeType == ETvConnectionChanged ) { - if ( iGlxTvOut->IsHDMIConnected() && iIsImageSupported ) + if ( iGlxTvOut->IsHDMIConnected() && iGlxTvOut->IsConnected() && iSurfaceUpdater) + { + GLX_LOG_INFO("CGlxHdmiController::HandleTvStatusChangedL() - HDMI and TV Connected"); + // Do nothing , as this means HDMI is already connected and headset/tv cable connected + // meaning we shouldnt destroy HDMI and neither have to create surface updater. + return; + } + else if ( iGlxTvOut->IsHDMIConnected() && iIsImageSupported && iIsPostingMode) { GLX_LOG_INFO("CGlxHdmiController::HandleTvStatusChangedL() - HDMI Connected"); // Calling SetImageL() with appropriate parameters @@ -272,8 +297,8 @@ } else { - GLX_LOG_INFO2("CGlxHdmiController::HandleTvStatusChangedL() iIsImageSupported=%d, iGlxTvOut->IsHDMIConnected()=%d", - iIsImageSupported,iGlxTvOut->IsHDMIConnected()); + GLX_LOG_INFO3("CGlxHdmiController::HandleTvStatusChangedL() iIsImageSupported=%d, iGlxTvOut->IsHDMIConnected()=%d, iIsPostingMode=%d", + iIsImageSupported,iGlxTvOut->IsHDMIConnected(),iIsPostingMode); // if it gets disconnected, destroy the surface GLX_LOG_INFO("CGlxHdmiController::HandleTvStatusChangedL() - HDMI Not Connected"); DestroySurfaceUpdater();