|
|
|
@@ -213,6 +213,7 @@ static int amf_init_from_dxva2_device(AVCodecContext *avctx, AVDXVA2DeviceContex |
|
|
|
static int amf_init_context(AVCodecContext *avctx) |
|
|
|
{ |
|
|
|
AmfContext *ctx = avctx->priv_data; |
|
|
|
AMFContext1 *context1 = NULL; |
|
|
|
AMF_RESULT res; |
|
|
|
av_unused int ret; |
|
|
|
|
|
|
|
@@ -311,8 +312,20 @@ static int amf_init_context(AVCodecContext *avctx) |
|
|
|
if (res == AMF_OK) { |
|
|
|
av_log(avctx, AV_LOG_VERBOSE, "AMF initialisation succeeded via D3D9.\n"); |
|
|
|
} else { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "AMF initialisation failed via D3D9: error %d.\n", res); |
|
|
|
return AVERROR(ENOSYS); |
|
|
|
AMFGuid guid = IID_AMFContext1(); |
|
|
|
res = ctx->context->pVtbl->QueryInterface(ctx->context, &guid, (void**)&context1); |
|
|
|
AMF_RETURN_IF_FALSE(ctx, res == AMF_OK, AVERROR_UNKNOWN, "CreateContext1() failed with error %d\n", res); |
|
|
|
|
|
|
|
res = context1->pVtbl->InitVulkan(context1, NULL); |
|
|
|
context1->pVtbl->Release(context1); |
|
|
|
if (res != AMF_OK) { |
|
|
|
if (res == AMF_NOT_SUPPORTED) |
|
|
|
av_log(avctx, AV_LOG_ERROR, "AMF via Vulkan is not supported on the given device.\n"); |
|
|
|
else |
|
|
|
av_log(avctx, AV_LOG_ERROR, "AMF failed to initialise on the given Vulkan device: %d.\n", res); |
|
|
|
return AVERROR(ENOSYS); |
|
|
|
} |
|
|
|
av_log(avctx, AV_LOG_VERBOSE, "AMF initialisation succeeded via Vulkan.\n"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|