首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多显示器的Windows Media Player中的DXVA2解码器

具有多显示器的Windows Media Player中的DXVA2解码器
EN

Stack Overflow用户
提问于 2017-01-06 01:24:57
回答 0查看 98关注 0票数 0

当Windows Media Player的中心被拖到辅助显示器(或在辅助显示器上启动)时,我的DXVA2解码器会“空白”。将视频移回主映像时,视频将重新显示。请注意,我没有设置D3DPRESENTFLAG_DEVICECLIP。

虽然我更喜欢找到一种不需要处理的方法来解决这个问题,但我确实收到了IDirect3DDeviceManager9::TestDevice( )返回DXVA2_E_NEW_VIDEO_DEVICE的通知。

IDirect3DDeviceManager9::CloseDeviceHandle / OpenDeviceHandle没有裁剪它(尽管MSDN指出了所有需要的东西),所以我的重置处理程序类似于:

代码语言:javascript
复制
ReleaseBuffers();   // free surfaces

SAFE_RELEASE(m_decoderService);

hr = m_pDXManager->CloseDeviceHandle(m_hDevice);
hr = m_pDXManager->OpenDeviceHandle(&m_hDevice);
hr = m_pDXManager->LockDevice(m_hDevice, &pDev, true);

hr = pDev->Reset(d3DPP);  // FAILS 0x8876086c !!!!

所以我尝试创建一个新的dx设备(使用桌面作为hwnd),然后

代码语言:javascript
复制
 m_pDXManager->ResetDevice( new_device, token); 

但是在IDirect3DDevice9::Reset()上仍然没有乐趣。

我还尝试使用DXVA2CreateDirect3DDeviceManager9创建一个新的IDirect3DDeviceManager9,但无济于事。

顺便说一句,我使用IDirect3DDevice9::Reset()在初始化过程中没有问题,并在以后使用相同的D3DPRESENT_PARAMETERS,所以不要认为这些是问题所在,但它们在这里( post调用)

代码语言:javascript
复制
    d3DPP[n].BackBufferWidth = 1920;
    d3DPP[n].BackBufferHeight = 1080;
    d3DPP[n].BackBufferCount = 1;
    d3DPP[n].BackBufferFormat = D3DFMT_X8R8G8B8;
    d3DPP[n].SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3DPP[n].hDeviceWindow = NULL;
    d3DPP[n].Windowed = true;
    d3DPP[n].Flags = D3DPRESENTFLAG_VIDEO;
    d3DPP[n].FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
    d3DPP[n].PresentationInterval = D3DPRESENT_INTERVAL_ONE;

任何遗失的都是零。

我对win8和win10也有同样的问题。

如有任何帮助/建议,我将不胜感激。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41491087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档