好吧,所以我写了一个自定义的VMR9 Allocator/Presenter,似乎工作正常。但是,当我尝试将视频帧从分配器/演示者表面复制到我的应用程序表面时,视频看起来闪烁。音频播放是好的,所以我相当肯定这不是一个机器陷入困境或任何问题。这是我在渲染循环中的代码。DirectX闪烁视频
g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_ARGB(255, 0, 0, 0), 1.0f, 0);
// render the scene
if (SUCCEEDED(g_pd3dDevice->BeginScene()))
{
//g_pd3dDevice->SetRenderTarget(0, g_pd3dSurface);
g_pd3dDevice->StretchRect(vmr9_ap->renderSurface, src, g_pd3dSurface, dest, D3DTEXF_NONE);
// end the scene
g_pd3dDevice->EndScene();
}
但是,如果我将其更改为这个(注释掉清除缓存)
// g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_ARGB(255, 0, 0, 0), 1.0f, 0);
// render the scene
if (SUCCEEDED(g_pd3dDevice->BeginScene()))
{
//g_pd3dDevice->SetRenderTarget(0, g_pd3dSurface);
g_pd3dDevice->StretchRect(vmr9_ap->renderSurface, src, g_pd3dSurface, dest, D3DTEXF_NONE);
// end the scene
g_pd3dDevice->EndScene();
}
这个闪烁消失。我担心这种方式很糟糕,可能会导致比解决问题更多的问题。有没有人有这方面的经验?有更好的解决方案吗?
谢谢!
谢谢!这很有道理。如果我有声望,我会投票赞成。 – Alex 2009-09-20 06:17:12
哦,并且绘图是在D3Dmage中响应WPF中的CompositionTarget.Rendering事件完成的。 – Alex 2009-09-20 06:20:36
重新编辑:在BeginScene周围的每张DX卡上都不会做任何事......它不是,甚至不需要,严格来说是需要的 – Goz 2009-09-20 08:46:10