mirror of https://git.ffmpeg.org/ffmpeg.git
hwcontext_d3d11va: properly reset values after release/close
Makes the uninit function re-entrable, which can be a common case when an API user first tries to initialize its context, fails, and then finally unrefs the AVHWDevice. Fixes a crash reported by sm2345 on IRC.
This commit is contained in:
parent
fbdd78fa3e
commit
f6d49a0dc8
|
@ -458,20 +458,31 @@ static void d3d11va_device_uninit(AVHWDeviceContext *hwdev)
|
|||
{
|
||||
AVD3D11VADeviceContext *device_hwctx = hwdev->hwctx;
|
||||
|
||||
if (device_hwctx->device)
|
||||
if (device_hwctx->device) {
|
||||
ID3D11Device_Release(device_hwctx->device);
|
||||
device_hwctx->device = NULL;
|
||||
}
|
||||
|
||||
if (device_hwctx->device_context)
|
||||
if (device_hwctx->device_context) {
|
||||
ID3D11DeviceContext_Release(device_hwctx->device_context);
|
||||
device_hwctx->device_context = NULL;
|
||||
}
|
||||
|
||||
if (device_hwctx->video_device)
|
||||
if (device_hwctx->video_device) {
|
||||
ID3D11VideoDevice_Release(device_hwctx->video_device);
|
||||
device_hwctx->video_device = NULL;
|
||||
}
|
||||
|
||||
if (device_hwctx->video_context)
|
||||
if (device_hwctx->video_context) {
|
||||
ID3D11VideoContext_Release(device_hwctx->video_context);
|
||||
device_hwctx->video_context = NULL;
|
||||
}
|
||||
|
||||
if (device_hwctx->lock == d3d11va_default_lock)
|
||||
if (device_hwctx->lock == d3d11va_default_lock) {
|
||||
CloseHandle(device_hwctx->lock_ctx);
|
||||
device_hwctx->lock_ctx = INVALID_HANDLE_VALUE;
|
||||
device_hwctx->lock = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static int d3d11va_device_create(AVHWDeviceContext *ctx, const char *device,
|
||||
|
|
Loading…
Reference in New Issue