History

lavc/qsvdec: Add VP9 decoder support

VP9 decoder is support on Intel kabyLake+ platforms with MSDK Version 1.19+

Zhong Li committed 7 years ago

Commit 655ff471 parent 7555cfd5 files · +51 −3Browse files

Unified · Split

5 files
  1. Changelog +1 −0
  2. configure +1 −0
  3. libavcodec/allcodecs.c +1 −0
  4. libavcodec/qsv.c +5 −0
  5. libavcodec/qsvdec_other.c +43 −3
Changelog+1−0
@@ -3,6 +3,7 @@ releases are sorted from youngest to oldest. · 2 unmodified lines
33
44 version <next>:
55 - Intel QSV-accelerated MJPEG decoding
6+- Intel QSV-accelerated VP9 decoding
67
78 version 4.2:
89 - tpad filter
configure+1−0
@@ -3082,6 +3082,7 @@ vp8_v4l2m2m_decoder_deps="v4l2_m2m vp8_v4l2_m2m" · 3081 unmodified lines
30823082 vp8_v4l2m2m_encoder_deps="v4l2_m2m vp8_v4l2_m2m"
30833083 vp9_cuvid_decoder_deps="cuvid"
30843084 vp9_mediacodec_decoder_deps="mediacodec"
3085+vp9_qsv_decoder_select="qsvdec"
30853086 vp9_rkmpp_decoder_deps="rkmpp"
30863087 vp9_vaapi_encoder_deps="VAEncPictureParameterBufferVP9"
30873088 vp9_vaapi_encoder_select="vaapi_encode"
libavcodec/allcodecs.c+1−0
@@ -780,6 +780,7 @@ extern AVCodec ff_vp8_v4l2m2m_encoder; · 779 unmodified lines
780780 extern AVCodec ff_vp8_vaapi_encoder;
781781 extern AVCodec ff_vp9_cuvid_decoder;
782782 extern AVCodec ff_vp9_mediacodec_decoder;
783+extern AVCodec ff_vp9_qsv_decoder;
783784 extern AVCodec ff_vp9_vaapi_encoder;
784785
785786 // The iterate API is not usable with ossfuzz due to the excessive size of binaries created
libavcodec/qsv.c+5−0
@@ -60,6 +60,11 @@ int ff_qsv_codec_id_to_mfx(enum AVCodecID codec_id) · 59 unmodified lines
6060 #endif
6161 case AV_CODEC_ID_MJPEG:
6262 return MFX_CODEC_JPEG;
63+#if QSV_VERSION_ATLEAST(1, 19)
64+ case AV_CODEC_ID_VP9:
65+ return MFX_CODEC_VP9;
66+#endif
67+
6368 default:
6469 break;
6570 }
libavcodec/qsvdec_other.c+43−3
@@ -1,5 +1,5 @@
11 /*
2− * Intel MediaSDK QSV based MPEG-2, VC-1, VP8 and MJPEG decoders
2+ * Intel MediaSDK QSV based MPEG-2, VC-1, VP8, MJPEG and VP9 decoders
33 *
44 * copyright (c) 2015 Anton Khirnov
55 *
@@ -60,8 +60,8 @@ static av_cold int qsv_decode_close(AVCodecContext *avctx) · 54 unmodified lines
6060 {
6161 QSVOtherContext *s = avctx->priv_data;
6262
63−#if CONFIG_VP8_QSV_DECODER
64− if (avctx->codec_id == AV_CODEC_ID_VP8)
63+#if CONFIG_VP8_QSV_DECODER || CONFIG_VP9_QSV_DECODER
64+ if (avctx->codec_id == AV_CODEC_ID_VP8 || avctx->codec_id == AV_CODEC_ID_VP9)
6565 av_freep(&s->qsv.load_plugins);
6666 #endif
6767
@@ -90,6 +90,17 @@ static av_cold int qsv_decode_init(AVCodecContext *avctx) · 22 unmodified lines
9090 }
9191 #endif
9292
93+#if CONFIG_VP9_QSV_DECODER
94+ if (avctx->codec_id == AV_CODEC_ID_VP9) {
95+ static const char *uid_vp9dec_hw = "a922394d8d87452f878c51f2fc9b4131";
96+
97+ av_freep(&s->qsv.load_plugins);
98+ s->qsv.load_plugins = av_strdup(uid_vp9dec_hw);
99+ if (!s->qsv.load_plugins)
100+ return AVERROR(ENOMEM);
101+ }
102+#endif
103+
93104 s->qsv.orig_pix_fmt = AV_PIX_FMT_NV12;
94105 s->packet_fifo = av_fifo_alloc(sizeof(AVPacket));
95106 if (!s->packet_fifo) {
@@ -282,3 +293,32 @@ AVCodec ff_mjpeg_qsv_decoder = { · 186 unmodified lines
282293 AV_PIX_FMT_NONE },
283294 };
284295 #endif
296+
297+#if CONFIG_VP9_QSV_DECODER
298+static const AVClass vp9_qsv_class = {
299+ .class_name = "vp9_qsv",
300+ .item_name = av_default_item_name,
301+ .option = options,
302+ .version = LIBAVUTIL_VERSION_INT,
303+};
304+
305+AVCodec ff_vp9_qsv_decoder = {
306+ .name = "vp9_qsv",
307+ .long_name = NULL_IF_CONFIG_SMALL("VP9 video (Intel Quick Sync Video acceleration)"),
308+ .priv_data_size = sizeof(QSVOtherContext),
309+ .type = AVMEDIA_TYPE_VIDEO,
310+ .id = AV_CODEC_ID_VP9,
311+ .init = qsv_decode_init,
312+ .decode = qsv_decode_frame,
313+ .flush = qsv_decode_flush,
314+ .close = qsv_decode_close,
315+ .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HYBRID,
316+ .priv_class = &vp9_qsv_class,
317+ .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12,
318+ AV_PIX_FMT_P010,
319+ AV_PIX_FMT_QSV,
320+ AV_PIX_FMT_NONE },
321+ .hw_configs = ff_qsv_hw_configs,
322+ .wrapper_name = "qsv",
323+};
324+#endif

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t