aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOvchinnikovDmitrii <ovchinnikov.dmitrii@gmail.com>2020-10-15 03:16:21 +0300
committerMark Thompson <sw@jkqxz.net>2020-11-08 19:05:17 +0000
commit2fb764e1f3932ddb5a2a071d238a4db83e6d5a1b (patch)
treee7cc6dceddb5e0a2bcd6da53f5c2d253ddde3d8e
parentcd322794eecf1dd7d975ce3dcf1c18bbd8b91ad1 (diff)
downloadffmpeg-2fb764e1f3932ddb5a2a071d238a4db83e6d5a1b.tar.gz
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.
-rw-r--r--libavcodec/amfenc.c12
-rw-r--r--libavcodec/amfenc.h3
-rw-r--r--libavcodec/amfenc_h264.c1
-rw-r--r--libavcodec/amfenc_hevc.c1
4 files changed, 17 insertions, 0 deletions
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,
};