diff -r f7d9134af83e -r 94dbab0a2133 mdfdevvideoextensions/nga_mdf_postprocessor/src/NGAPostProcHwDevice.cpp --- 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);