DX11VideoRenderer线程安全吗?

问题描述 投票:0回答:1

我正在使用Microsoft示例DX11VideoRenderer在Windows 10中渲染实时视频。当我仅运行一个流时,该视频看起来很棒。但是,当我运行4个或5个以上的流时,它们各自窗口中的某些视频会间歇性地消隐。效果可以仅覆盖每个视频窗口的一部分或全部。

此外,我在日志文件中也从此函数调用中遇到一些间歇性错误:

hr = pVideoContext->VideoProcessorBlt(m_pVideoProcessor, pOutputView, 0, 1, &StreamData );

返回的错误是:E_INVALIDARG一个或多个参数无效0x80070057

我仅在代码中使用DX11VideoRendererPresenter.cppdisplay.cpp模块。源位于:DirectX video rendering sample

我在此阶段的最初怀疑是DXVideoRenderer可能不是线程安全的。我发现了有关多线程的信息:Introduction to Multithreading in Direct3D 11,其中指出:

虽然使用设备上下文(ID3D11DeviceContext)并不是线程安全的,但使用Direct3D 11设备(ID3D11Device)也是线程安全的。

但是似乎由于我为每个窗口使用CPresenter类的单独实例,所以ID3D11DeviceContext不是线程安全的应该没有问题,因为每个窗口都应具有其自己的实例。 ID3D11DeviceContext

有人对此DX11VideoRenderer软件示例有任何经验或想法,什么可能导致此问题?

谢谢!

-UPDATE-

我已经能够仅用一个窗口来复制问题,因此它不再似乎是线程问题。如果我多次手动调整窗口大小,有时可以使窗口中的视频闪烁。发生这种情况时,我在日志中看到对VideoProcessorBlt()的相同函数调用因相同的返回码E_INVALIDARG而失败。

我正在使用Microsoft示例DX11VideoRenderer在Windows 10中渲染实时视频。当我仅运行一个流时,该视频看起来很棒。但是,当我运行4个或5个以上的流时,某些...

directx directx-11 ms-media-foundation hardware-acceleration dxva
1个回答
0
投票

如果我多次手动调整窗口大小,有时可以使窗口中的视频闪烁。发生这种情况时,我在日志中看到对VideoProcessorBlt()的相同函数调用因相同的返回码E_INVALIDARG而失败。

© www.soinside.com 2019 - 2024. All rights reserved.