|
|
|
@ -36,6 +36,7 @@ |
|
|
|
|
#include "hwcontext_d3d11va.h" |
|
|
|
|
#endif |
|
|
|
|
#if CONFIG_DXVA2 |
|
|
|
|
#include <initguid.h> |
|
|
|
|
#include "hwcontext_dxva2.h" |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
@ -904,9 +905,11 @@ static int qsv_d3d9_update_config(void *ctx, mfxHDL handle, mfxConfig cfg) |
|
|
|
|
#if CONFIG_DXVA2 |
|
|
|
|
mfxStatus sts; |
|
|
|
|
IDirect3DDeviceManager9* devmgr = handle; |
|
|
|
|
IDirect3DDevice9Ex *device = NULL; |
|
|
|
|
IDirect3DDevice9 *device = NULL; |
|
|
|
|
IDirect3DDevice9Ex *device_ex = NULL; |
|
|
|
|
HANDLE device_handle = 0; |
|
|
|
|
IDirect3D9Ex *d3d9ex = NULL; |
|
|
|
|
IDirect3D9 *d3d9 = NULL; |
|
|
|
|
LUID luid; |
|
|
|
|
D3DDEVICE_CREATION_PARAMETERS params; |
|
|
|
|
HRESULT hr; |
|
|
|
@ -924,18 +927,31 @@ static int qsv_d3d9_update_config(void *ctx, mfxHDL handle, mfxConfig cfg) |
|
|
|
|
IDirect3DDeviceManager9_CloseDeviceHandle(devmgr, device_handle); |
|
|
|
|
goto fail; |
|
|
|
|
} |
|
|
|
|
hr = IDirect3DDevice9_QueryInterface(device, &IID_IDirect3DDevice9Ex, (void **)&device_ex); |
|
|
|
|
IDirect3DDevice9_Release(device); |
|
|
|
|
if (FAILED(hr)) { |
|
|
|
|
av_log(ctx, AV_LOG_ERROR, "Error IDirect3DDevice9_QueryInterface %d\n", hr); |
|
|
|
|
goto unlock; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
hr = IDirect3DDevice9Ex_GetCreationParameters(device, ¶ms); |
|
|
|
|
hr = IDirect3DDevice9Ex_GetCreationParameters(device_ex, ¶ms); |
|
|
|
|
if (FAILED(hr)) { |
|
|
|
|
av_log(ctx, AV_LOG_ERROR, "Error IDirect3DDevice9_GetCreationParameters %d\n", hr); |
|
|
|
|
IDirect3DDevice9Ex_Release(device); |
|
|
|
|
IDirect3DDevice9Ex_Release(device_ex); |
|
|
|
|
goto unlock; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
hr = IDirect3DDevice9Ex_GetDirect3D(device, &d3d9ex); |
|
|
|
|
hr = IDirect3DDevice9Ex_GetDirect3D(device_ex, &d3d9); |
|
|
|
|
if (FAILED(hr)) { |
|
|
|
|
av_log(ctx, AV_LOG_ERROR, "Error IDirect3DDevice9Ex_GetAdapterLUID %d\n", hr); |
|
|
|
|
IDirect3DDevice9Ex_Release(device); |
|
|
|
|
av_log(ctx, AV_LOG_ERROR, "Error IDirect3DDevice9Ex_GetDirect3D %d\n", hr); |
|
|
|
|
IDirect3DDevice9Ex_Release(device_ex); |
|
|
|
|
goto unlock; |
|
|
|
|
} |
|
|
|
|
hr = IDirect3D9_QueryInterface(d3d9, &IID_IDirect3D9Ex, (void **)&d3d9ex); |
|
|
|
|
IDirect3D9_Release(d3d9); |
|
|
|
|
if (FAILED(hr)) { |
|
|
|
|
av_log(ctx, AV_LOG_ERROR, "Error IDirect3D9_QueryInterface3D %d\n", hr); |
|
|
|
|
IDirect3DDevice9Ex_Release(device_ex); |
|
|
|
|
goto unlock; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -959,7 +975,7 @@ static int qsv_d3d9_update_config(void *ctx, mfxHDL handle, mfxConfig cfg) |
|
|
|
|
|
|
|
|
|
release: |
|
|
|
|
IDirect3D9Ex_Release(d3d9ex); |
|
|
|
|
IDirect3DDevice9Ex_Release(device); |
|
|
|
|
IDirect3DDevice9Ex_Release(device_ex); |
|
|
|
|
|
|
|
|
|
unlock: |
|
|
|
|
IDirect3DDeviceManager9_UnlockDevice(devmgr, device_handle, FALSE); |
|
|
|
@ -1519,8 +1535,9 @@ static int qsv_frames_derive_from(AVHWFramesContext *dst_ctx, |
|
|
|
|
case AV_HWDEVICE_TYPE_D3D11VA: |
|
|
|
|
{ |
|
|
|
|
D3D11_TEXTURE2D_DESC texDesc; |
|
|
|
|
AVD3D11VAFramesContext *dst_hwctx; |
|
|
|
|
dst_ctx->initial_pool_size = src_ctx->initial_pool_size; |
|
|
|
|
AVD3D11VAFramesContext *dst_hwctx = dst_ctx->hwctx; |
|
|
|
|
dst_hwctx = dst_ctx->hwctx; |
|
|
|
|
dst_hwctx->texture_infos = av_calloc(src_hwctx->nb_surfaces, |
|
|
|
|
sizeof(*dst_hwctx->texture_infos)); |
|
|
|
|
if (!dst_hwctx->texture_infos) |
|
|
|
|