From 2fb764e1f3932ddb5a2a071d238a4db83e6d5a1b Mon Sep 17 00:00:00 2001 From: OvchinnikovDmitrii Date: Thu, 15 Oct 2020 03:16:21 +0300 Subject: [PATCH] lavc/amfenc: Add hardware config metadata Without this metadata section the ffmpeg utility thinks that the AMF encoder does not support input from D3D11 and DXVA2 hardware surfaces, causing hardware pipelines to fail. Fixes #8953. --- libavcodec/amfenc.c | 12 ++++++++++++ libavcodec/amfenc.h | 3 +++ libavcodec/amfenc_h264.c | 1 + libavcodec/amfenc_hevc.c | 1 + 4 files changed, 17 insertions(+) diff --git a/libavcodec/amfenc.c b/libavcodec/amfenc.c index da0652943d..e234cfd354 100644 --- a/libavcodec/amfenc.c +++ b/libavcodec/amfenc.c @@ -782,3 +782,15 @@ int ff_amf_receive_packet(AVCodecContext *avctx, AVPacket *avpkt) } return ret; } + +const AVCodecHWConfigInternal *const ff_amfenc_hw_configs[] = { +#if CONFIG_D3D11VA + HW_CONFIG_ENCODER_FRAMES(D3D11, D3D11VA), + HW_CONFIG_ENCODER_DEVICE(NONE, D3D11VA), +#endif +#if CONFIG_DXVA2 + HW_CONFIG_ENCODER_FRAMES(DXVA2_VLD, DXVA2), + HW_CONFIG_ENCODER_DEVICE(NONE, DXVA2), +#endif + NULL, +}; diff --git a/libavcodec/amfenc.h b/libavcodec/amfenc.h index 80658c6b2a..358b2ef778 100644 --- a/libavcodec/amfenc.h +++ b/libavcodec/amfenc.h @@ -27,6 +27,7 @@ #include "libavutil/fifo.h" #include "avcodec.h" +#include "hwconfig.h" /** @@ -117,6 +118,8 @@ typedef struct AmfContext { int tier; } AmfContext; +extern const AVCodecHWConfigInternal *const ff_amfenc_hw_configs[]; + /** * Common encoder initization function */ diff --git a/libavcodec/amfenc_h264.c b/libavcodec/amfenc_h264.c index 7a8029f3b7..622ee85946 100644 --- a/libavcodec/amfenc_h264.c +++ b/libavcodec/amfenc_h264.c @@ -392,4 +392,5 @@ AVCodec ff_h264_amf_encoder = { .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .pix_fmts = ff_amf_pix_fmts, .wrapper_name = "amf", + .hw_configs = ff_amfenc_hw_configs, }; diff --git a/libavcodec/amfenc_hevc.c b/libavcodec/amfenc_hevc.c index fa12a3a3f6..bb224c5fec 100644 --- a/libavcodec/amfenc_hevc.c +++ b/libavcodec/amfenc_hevc.c @@ -322,4 +322,5 @@ AVCodec ff_hevc_amf_encoder = { .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .pix_fmts = ff_amf_pix_fmts, .wrapper_name = "amf", + .hw_configs = ff_amfenc_hw_configs, };