[vlc-devel] [PATCH] direct3d11: call SetMultithreadProtected() as soon as the device is created
Steve Lhomme
robux4 at gmail.com
Tue May 2 14:02:56 CEST 2017
Actually it fixes the issue with --avcodec-threads=2 but not
--avcodec-threads=0...
On Tue, May 2, 2017 at 1:51 PM, Steve Lhomme <robux4 at videolabs.io> wrote:
> Fixes #18261
> ---
> modules/codec/avcodec/d3d11va.c | 14 +++++++-------
> modules/video_output/win32/direct3d11.c | 15 +++++++--------
> 2 files changed, 14 insertions(+), 15 deletions(-)
>
> diff --git a/modules/codec/avcodec/d3d11va.c b/modules/codec/avcodec/d3d11va.c
> index 1f96940e4a..dafd3d9180 100644
> --- a/modules/codec/avcodec/d3d11va.c
> +++ b/modules/codec/avcodec/d3d11va.c
> @@ -582,6 +582,13 @@ static int D3dCreateDevice(vlc_va_t *va)
> msg_Err(va, "D3D11CreateDevice failed. (hr=0x%lX)", hr);
> return VLC_EGENERIC;
> }
> + ID3D10Multithread *pMultithread;
> + hr = ID3D11Device_QueryInterface( d3ddev, &IID_ID3D10Multithread, (void **)&pMultithread);
> + if (SUCCEEDED(hr)) {
> + ID3D10Multithread_SetMultithreadProtected(pMultithread, TRUE);
> + ID3D10Multithread_Release(pMultithread);
> + }
> +
> dx_sys->d3ddev = (IUnknown*) d3ddev;
> va->sys->d3dctx = d3dctx;
>
> @@ -961,13 +968,6 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id, const video_forma
> directx_sys_t *dx_sys = &va->sys->dx_sys;
> HRESULT hr;
>
> - ID3D10Multithread *pMultithread;
> - hr = ID3D11Device_QueryInterface( (ID3D11Device*) dx_sys->d3ddev, &IID_ID3D10Multithread, (void **)&pMultithread);
> - if (SUCCEEDED(hr)) {
> - ID3D10Multithread_SetMultithreadProtected(pMultithread, TRUE);
> - ID3D10Multithread_Release(pMultithread);
> - }
> -
> #if VLC_WINSTORE_APP
> /* On the Xbox 1/S, any decoding of H264 with one dimension over 2304
> * crashes totally the device */
> diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c
> index 8b24ad4870..ff318e4fbc 100644
> --- a/modules/video_output/win32/direct3d11.c
> +++ b/modules/video_output/win32/direct3d11.c
> @@ -745,14 +745,6 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned pool_size)
> pool_cfg.lock = Direct3D11MapPoolTexture;
> //pool_cfg.unlock = Direct3D11UnmapPoolTexture;
> }
> - } else {
> - HRESULT hr;
> - ID3D10Multithread *pMultithread;
> - hr = ID3D11Device_QueryInterface( sys->d3ddevice, &IID_ID3D10Multithread, (void **)&pMultithread);
> - if (SUCCEEDED(hr)) {
> - ID3D10Multithread_SetMultithreadProtected(pMultithread, TRUE);
> - ID3D10Multithread_Release(pMultithread);
> - }
> }
>
> pictures = calloc(pool_size, sizeof(*pictures));
> @@ -1564,6 +1556,13 @@ static int Direct3D11Open(vout_display_t *vd, video_format_t *fmt)
> return VLC_EGENERIC;
> }
>
> + ID3D10Multithread *pMultithread;
> + hr = ID3D11Device_QueryInterface( sys->d3ddevice, &IID_ID3D10Multithread, (void **)&pMultithread);
> + if (SUCCEEDED(hr)) {
> + ID3D10Multithread_SetMultithreadProtected(pMultithread, TRUE);
> + ID3D10Multithread_Release(pMultithread);
> + }
> +
> IDXGIAdapter *dxgiadapter = D3D11DeviceAdapter(sys->d3ddevice);
> if (FAILED(hr)) {
> msg_Err(vd, "Could not get the DXGI Adapter");
> --
> 2.12.1
>
More information about the vlc-devel
mailing list