mdfdevvideoextensions/nga_mdf_postprocessor/src/NGAPostProcHwDevice.cpp
branchRCL_3
changeset 7 94dbab0a2133
parent 0 40261b775718
child 8 bc06d8566074
--- a/mdfdevvideoextensions/nga_mdf_postprocessor/src/NGAPostProcHwDevice.cpp	Sat Feb 20 00:20:15 2010 +0200
+++ b/mdfdevvideoextensions/nga_mdf_postprocessor/src/NGAPostProcHwDevice.cpp	Fri Mar 12 15:50:33 2010 +0200
@@ -55,27 +55,27 @@
 
 CMMFVideoPostProcHwDevice* CNGAPostProcHwDevice::NewL() 
 { 
-   PP_DEBUG(_L("CNGAPostProcHwDevice:NewL() ++"));
+   PP_DEBUG(_L("CNGAPostProcHwDevice::NewL() ++"));
 
     CNGAPostProcHwDevice* self = new (ELeave) CNGAPostProcHwDevice; 
     CleanupStack::PushL(self);
     self->ConstructL(); 
     CleanupStack::Pop();
 
-   PP_DEBUG(_L("CNGAPostProcHwDevice:NewL() --"));
+   PP_DEBUG(_L("CNGAPostProcHwDevice::NewL() --"));
     return (CMMFVideoPostProcHwDevice*)self; 
 }
 
 void CNGAPostProcHwDevice::ConstructL() 
 { 
-   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ConstructL() ++"), this);
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::ConstructL() ++"), this);
     
     // support for VBM buffer interface
     iVBMBufferOptions.iNumInputBuffers  = KMaxVBMBuffers; 
     iVBMBufferOptions.iBufferSize = TSize(KMaxVBMInputWidth, KMaxVBMInputHeight);
     iPostingTimer = CNGAPostProcTimer::NewL(*this);
     iWsSession.Connect();
-   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:ConstructL() --"), this);
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::ConstructL() --"), this);
 }
 
 CNGAPostProcHwDevice::CNGAPostProcHwDevice() 
@@ -106,14 +106,13 @@
             iKeyFrameMode(EFalse),
             iFPObserver(NULL)
 {
-	iRedrawSurfaceId = TSurfaceId::CreateNullId();
 	iSurfaceId 		 = TSurfaceId::CreateNullId();
 	iAttributes().iPixelFormat    = EUidPixelFormatYUV_422Interleaved;
 }
 
 CNGAPostProcHwDevice::~CNGAPostProcHwDevice()
 {
-   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:~() ++"), this);
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::~CNGAPostProcHwDevice() ++"), this);
    	if (iSessionManager)
     {
         iSessionManager->CancelUpdate();
@@ -655,7 +654,7 @@
 
 void CNGAPostProcHwDevice::MmavsoSetAllowedOutputL(TUint aAllowedOutputMask)
 {
-   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmavsoSetAllowedOutputL aAllowedOutputMask=%d ++"), this,aAllowedOutputMask);  
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmavsoSetAllowedOutputL aAllowedOutputMask=0x%08x ++"), this,aAllowedOutputMask);  
    TInt err = KErrNone;
    iSurfaceMask = surfaceHints::EAllowInternalOnly;
     if (aAllowedOutputMask == EVideoAllowAll)
@@ -816,6 +815,14 @@
 	TInt err = KErrNone;
 	if(iResourceLost)
 	{
+        err = AddHints();
+        if (err != KErrNone)
+        {
+            PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvroResourcesLost -- failed to AddHints %d"), 
+                         this, err);
+            iProxy->MdvppFatalError(this, err);	
+            return;   
+        }
 		err = RegisterSurface(iSurfaceId);
 		if (err != KErrNone)
 		{
@@ -826,19 +833,12 @@
 			iProxy->MdvppFatalError(this, err);	
 			return;   				
 		}
-        err = AddHints();
-        if (err != KErrNone)
-		{
-		   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvroResourcesLost -- failed to AddHints %d"), 
-		   				this, err);
-			iProxy->MdvppFatalError(this, err);	
-			return;   				
-		}
-		iSessionManager->PostPicture(iSurfaceId, 0, 1, EFalse);
-	   	PublishSurfaceCreated();
-	   	iResourceLost = EFalse;
-	}
-	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Redraw --"), this);
+
+        iSessionManager->PostPicture(iSurfaceId, 0, 1, EFalse);
+        PublishSurfaceCreated();
+        iResourceLost = EFalse;
+    }
+    PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Redraw --"), this);
 }
 
 void CNGAPostProcHwDevice::Start() 
@@ -1274,16 +1274,11 @@
 void CNGAPostProcHwDevice::MmvssSurfaceRemovedL(const TSurfaceId& aSurfaceId)
 {
 	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssSurfaceRemovedL()++"), this);
-	if(iSurfaceId == aSurfaceId && !aSurfaceId.IsNull())
+	if(!aSurfaceId.IsNull())
 	{
-		if(iInfo().iBuffers > 1) // No need to return temprory redraw surface buffer to decoder
-		{
-			ReleaseProcessQ();
-		}
 		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssSurfaceRemovedL(): UnregisterSurface ID = 0x%x"), this, aSurfaceId );
-		iWsSession.UnregisterSurface(0, iSurfaceId);
-		iSurfaceHandler->DestroySurface(iSurfaceId);
-		iSurfaceId = TSurfaceId::CreateNullId();
+		iWsSession.UnregisterSurface(0, aSurfaceId);
+		iSurfaceHandler->DestroySurface(aSurfaceId);
 	}
 		
 	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvssSurfaceRemovedL() --"), this);
@@ -1318,21 +1313,12 @@
 void CNGAPostProcHwDevice::MmvroResourcesLost(TUid )
 {
     PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvroResourcesLost ++"), this);
-    if(!iRedrawSurfaceId.IsNull())
-	{
-		iResourceLost = ETrue;
-		Pause();
-		ReleaseInputQ();
-		iSessionManager->CancelUpdate();
-		ReleaseProcessQ();
-		iWsSession.UnregisterSurface(0, iRedrawSurfaceId);
-		iSurfaceHandler->DestroySurface(iRedrawSurfaceId);
-		iRedrawSurfaceId = TSurfaceId::CreateNullId();
-	}
-	else
-	{
-		PP_DEBUG(_L("CNGAPostProcHwDevice[%x]::MmvroResourcesLost ERROR iRedrawSurfaceId NULL"), this);
-	}
+	iResourceLost = ETrue;
+	Pause();
+	ReleaseInputQ();
+	iSessionManager->CancelUpdate();
+	ReleaseProcessQ();
+	iVideoSurfaceObserver->MmvsoRemoveSurface();
     PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:MmvroResourcesLost --"), this);
 }
 
@@ -1382,8 +1368,6 @@
    	TInt err = KErrNone;
 	SetSurfaceAttributes(surfaceSize, 1); 
 	
-	iRedrawSurfaceId = iSurfaceId;
-	
   	err = iSurfaceHandler->CreateSurface(iAttributes, iSurfaceId);
   	if (err != KErrNone)
 	{
@@ -1438,8 +1422,7 @@
     if(!iSurfaceId.IsNull())
     {
     	PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetupExternalSurface Cleaning ReDraw Surface"), this);
-	    iWsSession.UnregisterSurface(0, iSurfaceId);
-		iSurfaceHandler->DestroySurface(iSurfaceId);
+		iVideoSurfaceObserver->MmvsoRemoveSurface();
 	}
     
     iSurfaceId            = aSurfaceID;
@@ -1464,6 +1447,13 @@
 	   				this, err);
 	    return err;
 	}
+    err = AddHints();
+    if (err != KErrNone)
+    {
+        PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetupExternalSurface -- failed to AddHints %d"), 
+                    this, err);
+        return err;
+    }
 	err = RegisterSurface(iSurfaceId);
 	if (err != KErrNone)
 	{
@@ -1473,21 +1463,15 @@
 	   	iSurfaceId = TSurfaceId::CreateNullId();
 	    return err;
 	}
-	err = AddHints();
-	if (err != KErrNone)
-	{
-	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetupExternalSurface -- failed to AddHints %d"), 
-	   				this, err);
-	    return err;
-	}
-	err = iSurfaceHandler->SurfaceInfo(iSurfaceId, iInfo);
-	if (err != KErrNone)
-	{
-	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetupExternalSurface -- failed to get Surface info %d"), 
-	   				this, err);
-	    return err;
-	}		
-	  
+
+    err = iSurfaceHandler->SurfaceInfo(iSurfaceId, iInfo);
+    if (err != KErrNone)
+    {
+        PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetupExternalSurface -- failed to get Surface info %d"), 
+                     this, err);
+        return err;
+    }
+ 
   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:SetupExternalSurface err=%d"), this, err);
    return err;
 }
@@ -1790,20 +1774,21 @@
 	   		iSurfaceId = TSurfaceId::CreateNullId();
     	    return err;
     	}
-    	err = RegisterSurface(iSurfaceId);
-    	if (err != KErrNone)
-    	{
-    	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize -- failed to RegisterSurface %d"), this, err);
-    	   	iSurfaceHandler->DestroySurface(iSurfaceId);
-	   		iSurfaceId = TSurfaceId::CreateNullId();
-    	    return err;
-    	}
-   	    err = AddHints();
-   	    if (err != KErrNone)
-    	{
-    	   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize -- failed to AddHints %d"), this, err);
-    	    return err;
-    	}
+        err = AddHints();
+        if (err != KErrNone)
+        {
+            PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize -- failed to AddHints %d"), this, err);
+            return err;
+        }
+        err = RegisterSurface(iSurfaceId);
+        if (err != KErrNone)
+        {
+            PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:Initialize -- failed to RegisterSurface %d"), this, err);
+            iSurfaceHandler->DestroySurface(iSurfaceId);
+            iSurfaceId = TSurfaceId::CreateNullId();
+            return err;
+        }
+
     }
     return err;
 } 
@@ -2087,7 +2072,7 @@
 
 TInt CNGAPostProcHwDevice::AddHints()
 {
-   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:AddHints ++"), this);
+   PP_DEBUG(_L("CNGAPostProcHwDevice[%x]:AddHints iSurfaceMask 0x%08x ++"), this, iSurfaceMask);
    TInt err = KErrNone;
    iHint.Set(iSurfaceKey,iSurfaceMask,ETrue);
    err = iSurfaceHandler->AddSurfaceHint(iSurfaceId,iHint);