summaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authoragalin89 <[email protected]>2020-10-22 14:02:21 +0100
committerScott <[email protected]>2020-11-12 19:36:59 +0000
commit25fd847fc82af409afc46c9b273e072bc80b7dbd (patch)
treecd66c10abd8332d77519ff5028252de7e64646e3 /contrib
parentcc7b7e6878617573b9e8251830c92488a8b4b5a5 (diff)
qsv: added AV1 HW decoding capabilities
Diffstat (limited to 'contrib')
-rw-r--r--contrib/ffmpeg/A21-qsv-av1-decoder.patch77
1 files changed, 77 insertions, 0 deletions
diff --git a/contrib/ffmpeg/A21-qsv-av1-decoder.patch b/contrib/ffmpeg/A21-qsv-av1-decoder.patch
new file mode 100644
index 000000000..90891bede
--- /dev/null
+++ b/contrib/ffmpeg/A21-qsv-av1-decoder.patch
@@ -0,0 +1,77 @@
+diff --git a/configure b/configure
+index 8569a60bf8..7be6c8f7e5 100755
+--- a/configure
++++ b/configure
+@@ -3128,6 +3128,7 @@ vp9_qsv_encoder_deps="libmfx MFX_CODEC_VP9"
+ vp9_qsv_encoder_select="qsvenc"
+ vp9_v4l2m2m_decoder_deps="v4l2_m2m vp9_v4l2_m2m"
+ wmv3_crystalhd_decoder_select="crystalhd"
++av1_qsv_decoder_select="qsvdec"
+
+ # parsers
+ aac_parser_select="adts_header"
+diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
+index 80f128cade..7176a36af9 100644
+--- a/libavcodec/allcodecs.c
++++ b/libavcodec/allcodecs.c
+@@ -808,6 +808,7 @@ extern AVCodec ff_vp9_mediacodec_decoder;
+ extern AVCodec ff_vp9_qsv_decoder;
+ extern AVCodec ff_vp9_vaapi_encoder;
+ extern AVCodec ff_vp9_qsv_encoder;
++extern AVCodec ff_av1_qsv_decoder;
+
+ // The iterate API is not usable with ossfuzz due to the excessive size of binaries created
+ #if CONFIG_OSSFUZZ
+diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c
+index 1c9b649c10..616cc2462b 100644
+--- a/libavcodec/qsv.c
++++ b/libavcodec/qsv.c
+@@ -66,6 +66,10 @@ int ff_qsv_codec_id_to_mfx(enum AVCodecID codec_id)
+ case AV_CODEC_ID_VP9:
+ return MFX_CODEC_VP9;
+ #endif
++#if QSV_VERSION_ATLEAST(1, 34)
++ case AV_CODEC_ID_AV1:
++ return MFX_CODEC_AV1;
++#endif
+
+ default:
+ break;
+diff --git a/libavcodec/qsvdec_other.c b/libavcodec/qsvdec_other.c
+index b4df76739c..0629fc710c 100644
+--- a/libavcodec/qsvdec_other.c
++++ b/libavcodec/qsvdec_other.c
+@@ -327,3 +327,32 @@ AVCodec ff_vp9_qsv_decoder = {
+ .wrapper_name = "qsv",
+ };
+ #endif
++
++#if CONFIG_AV1_QSV_DECODER
++static const AVClass av1_qsv_class = {
++ .class_name = "av1_qsv",
++ .item_name = av_default_item_name,
++ .option = options,
++ .version = LIBAVUTIL_VERSION_INT,
++};
++
++AVCodec ff_av1_qsv_decoder = {
++ .name = "av1_qsv",
++ .long_name = NULL_IF_CONFIG_SMALL("AV1 video (Intel Quick Sync Video acceleration)"),
++ .priv_data_size = sizeof(QSVOtherContext),
++ .type = AVMEDIA_TYPE_VIDEO,
++ .id = AV_CODEC_ID_AV1,
++ .init = qsv_decode_init,
++ .decode = qsv_decode_frame,
++ .flush = qsv_decode_flush,
++ .close = qsv_decode_close,
++ .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HYBRID,
++ .priv_class = &av1_qsv_class,
++ .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12,
++ AV_PIX_FMT_P010,
++ AV_PIX_FMT_QSV,
++ AV_PIX_FMT_NONE },
++ .hw_configs = ff_qsv_hw_configs,
++ .wrapper_name = "qsv",
++};
++#endif
+\ No newline at end of file