diff -r bcb43dc84c44 -r 2dac0fdba72b photosgallery/viewframework/tvout/src/glxhdmisurfaceupdater.cpp --- a/photosgallery/viewframework/tvout/src/glxhdmisurfaceupdater.cpp Wed Mar 31 21:31:03 2010 +0300 +++ b/photosgallery/viewframework/tvout/src/glxhdmisurfaceupdater.cpp Wed Apr 14 15:57:24 2010 +0300 @@ -24,6 +24,7 @@ #include #include #include +#include #include "glxactivecallback.h" #include "glxhdmisurfaceupdater.h" @@ -64,7 +65,7 @@ { iWindow->RemoveBackgroundSurface(ETrue); } - if(iTimer->IsActive()) + if(iTimer && iTimer->IsActive()) // Check for a CPeriodic Instance { iTimer->Cancel(); } @@ -154,22 +155,25 @@ User::LeaveIfError(error); iBitmapReady = EFalse; + iShiftToCloning = EFalse; // Create the active object iGlxDecoderAO = CGlxHdmiDecoderAO::NewL(this); CreateImageDecoderL(iImagePath); CreateBitmapL(); - CreateHdmiL(); - error = iSurfUpdateSession.Connect(); - GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::ConstructL() Surface update Session Connect error = %d", error); - User::LeaveIfError(error); - iSurfSessionConnected = ETrue; - + TRAP_IGNORE(CreateHdmiL()); + if(iSurfManager) + { + error = iSurfUpdateSession.Connect(); + GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::ConstructL() Surface update Session Connect error = %d", error); + User::LeaveIfError(error); + iSurfSessionConnected = ETrue; + #ifdef _DEBUG - iStartTime.HomeTime(); + iStartTime.HomeTime(); #endif - //start decoding the image - iGlxDecoderAO->ConvertImageL(*iDecodedBitmap,iImageDecoder); - + //start decoding the image + iGlxDecoderAO->ConvertImageL(*iDecodedBitmap,iImageDecoder); + } iLeftCornerForZoom.iX = 0; iLeftCornerForZoom.iY = 0; iTimer = CPeriodic::NewL( CActive::EPriorityStandard ); @@ -195,12 +199,22 @@ ReleaseContent(); CreateImageDecoderL(aImageFile); CreateBitmapL(); - CreateHdmiL(EFalse); + if(iSurfManager) + { + CreateHdmiL(EFalse); + } + else + { + TRAP_IGNORE(CreateHdmiL(ETrue)); + } #ifdef _DEBUG iStartTime.HomeTime(); #endif - //start decoding the image - iGlxDecoderAO->ConvertImageL(*iDecodedBitmap,iImageDecoder); + if(iSurfManager) + { + //start decoding the image + iGlxDecoderAO->ConvertImageL(*iDecodedBitmap,iImageDecoder); + } } // ----------------------------------------------------------------------------- @@ -249,6 +263,19 @@ error = iSurfManager->CreateSurface(attributes, iSurfId); GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::CreateSurfaceL, Creating surface error : %d",error); + if(error == KErrNoMemory) + { + GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::CreateSurfaceL(). iSurfManager->Close()"); + iSurfManager->Close(); + delete iSurfManager; + iSurfManager = NULL; + if(iShiftToCloning == EFalse) + { + GlxGeneralUiUtilities::ShowErrorNoteL(error); // Show Low Memory Popup Once before shifting to Cloning Mode + iShiftToCloning = ETrue; + } + ShiftToCloningMode(); // Shift from Posting Mode to Cloning Mode + } User::LeaveIfError(error); //Map the surface and stride the surface info @@ -397,7 +424,7 @@ GLX_LOG_INFO("HandleRunL - Convert failed"); ShiftToCloningMode(); } - else + else if(iSurfManager) { iZoomRectSz = iDecodedBitmap->SizeInPixels(); if (iSurfBufferAO->iStatus != KRequestPending @@ -593,14 +620,18 @@ void CGlxHdmiSurfaceUpdater::ShiftToPostingMode() { TRACER("CGlxHdmiSurfaceUpdater::ShiftToPostingMode()"); + if(iSurfManager) + { #ifdef _DEBUG - TRect ex, vp; - iConfig.GetExtent(ex); - iConfig.GetViewport(vp); - GLX_LOG_INFO2("CGlxHdmiSurfaceUpdater::ShiftToPostingMode() - vp - TL=%d, %d",vp.iTl.iX,vp.iTl.iY); - GLX_LOG_INFO2("CGlxHdmiSurfaceUpdater::ShiftToPostingMode() - vp - BR=%d, %d",vp.iBr.iX,vp.iBr.iY); - GLX_LOG_INFO2("CGlxHdmiSurfaceUpdater::ShiftToPostingMode() - ex - TL=%d, %d",ex.iTl.iX,ex.iTl.iY); - GLX_LOG_INFO2("CGlxHdmiSurfaceUpdater::ShiftToPostingMode() - ex - BR=%d, %d",ex.iBr.iX,ex.iBr.iY); + TRect ex, vp; + iConfig.GetExtent(ex); + iConfig.GetViewport(vp); + GLX_LOG_INFO2("CGlxHdmiSurfaceUpdater::ShiftToPostingMode() - vp - TL=%d, %d",vp.iTl.iX,vp.iTl.iY); + GLX_LOG_INFO2("CGlxHdmiSurfaceUpdater::ShiftToPostingMode() - vp - BR=%d, %d",vp.iBr.iX,vp.iBr.iY); + GLX_LOG_INFO2("CGlxHdmiSurfaceUpdater::ShiftToPostingMode() - ex - TL=%d, %d",ex.iTl.iX,ex.iTl.iY); + GLX_LOG_INFO2("CGlxHdmiSurfaceUpdater::ShiftToPostingMode() - ex - BR=%d, %d",ex.iBr.iX,ex.iBr.iY); #endif - iWindow->SetBackgroundSurface(iConfig, ETrue); + iWindow->SetBackgroundSurface(iConfig, ETrue); + iShiftToCloning = EFalse; + } }