vlc | branch: master | Steve Lhomme <[email protected]> | Thu Nov 30 11:28:07 2017 +0100| [031536832f4356e3cae4e3769aee4ebb57bccbce] | committer: Steve Lhomme
hw:d3d11: move the code to get the D3D11DeviceContext mutex in D3D11_FilterHoldInstance > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=031536832f4356e3cae4e3769aee4ebb57bccbce --- modules/hw/d3d11/d3d11_deinterlace.c | 7 ------- modules/hw/d3d11/d3d11_filters.c | 7 ------- modules/hw/d3d11/d3d11_instance.c | 16 ++++++++++++++-- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/modules/hw/d3d11/d3d11_deinterlace.c b/modules/hw/d3d11/d3d11_deinterlace.c index e385f8213c..2a4e6a60e4 100644 --- a/modules/hw/d3d11/d3d11_deinterlace.c +++ b/modules/hw/d3d11/d3d11_deinterlace.c @@ -382,13 +382,6 @@ int D3D11OpenDeinterlace(vlc_object_t *obj) goto error; } - HANDLE context_lock = INVALID_HANDLE_VALUE; - UINT dataSize = sizeof(context_lock); - hr = ID3D11Device_GetPrivateData(sys->d3d_dev.d3ddevice, &GUID_CONTEXT_MUTEX, &dataSize, &context_lock); - if (FAILED(hr)) - msg_Warn(filter, "No mutex found to lock the decoder"); - sys->d3d_dev.context_mutex = context_lock; - const video_format_t *fmt = &filter->fmt_out.video; D3D11_VIDEO_PROCESSOR_CONTENT_DESC processorDesc = { diff --git a/modules/hw/d3d11/d3d11_filters.c b/modules/hw/d3d11/d3d11_filters.c index 369a624520..cba82af128 100644 --- a/modules/hw/d3d11/d3d11_filters.c +++ b/modules/hw/d3d11/d3d11_filters.c @@ -379,13 +379,6 @@ static int D3D11OpenAdjust(vlc_object_t *obj) goto error; } - HANDLE context_lock = INVALID_HANDLE_VALUE; - UINT dataSize = sizeof(context_lock); - hr = ID3D11Device_GetPrivateData(sys->d3d_dev.d3ddevice, &GUID_CONTEXT_MUTEX, &dataSize, &context_lock); - if (FAILED(hr)) - msg_Warn(filter, "No mutex found to lock the decoder"); - sys->d3d_dev.context_mutex = context_lock; - const video_format_t *fmt = &filter->fmt_out.video; D3D11_VIDEO_PROCESSOR_CONTENT_DESC processorDesc = { diff --git a/modules/hw/d3d11/d3d11_instance.c b/modules/hw/d3d11/d3d11_instance.c index d9a2ebfb0d..e9aa7ce314 100644 --- a/modules/hw/d3d11/d3d11_instance.c +++ b/modules/hw/d3d11/d3d11_instance.c @@ -35,12 +35,12 @@ #include "d3d11_filters.h" static vlc_mutex_t inst_lock = VLC_STATIC_MUTEX; -static d3d11_device_t device = { .d3dcontext = NULL }; +static d3d11_device_t device = { .context_mutex = INVALID_HANDLE_VALUE }; static size_t instances = 0; void D3D11_FilterHoldInstance(filter_t *filter, d3d11_device_t *out, D3D11_TEXTURE2D_DESC *dstDesc) { - out->d3dcontext = NULL; + *out = (d3d11_device_t) { .context_mutex = INVALID_HANDLE_VALUE }; picture_t *pic = filter_NewPicture(filter); if (!pic) return; @@ -52,12 +52,24 @@ void D3D11_FilterHoldInstance(filter_t *filter, d3d11_device_t *out, D3D11_TEXTU { out->d3dcontext = p_sys->context; ID3D11DeviceContext_GetDevice(out->d3dcontext, &out->d3ddevice); + + UINT dataSize = sizeof(out->context_mutex); + HRESULT hr = ID3D11Device_GetPrivateData(out->d3ddevice, &GUID_CONTEXT_MUTEX, + &dataSize, &out->context_mutex); + if (FAILED(hr) || dataSize != sizeof(out->context_mutex)) + { + msg_Warn(filter, "No mutex found to lock the decoder"); + out->context_mutex = INVALID_HANDLE_VALUE; + } + ID3D11Device_Release(out->d3ddevice); if (device.d3dcontext == NULL) { device = *out; instances++; } + if (device.context_mutex == INVALID_HANDLE_VALUE) + device.context_mutex = out->context_mutex; ID3D11Texture2D_GetDesc(p_sys->texture[KNOWN_DXGI_INDEX], dstDesc); } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
