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
3 3
4version <next>:4version <next>:
5- Intel QSV-accelerated MJPEG decoding5- Intel QSV-accelerated MJPEG decoding
6- Intel QSV-accelerated VP9 decoding
6 7
7version 4.2:8version 4.2:
8- tpad filter9- tpad filter
configure+1−0
@@ -3082,6 +3082,7 @@ vp8_v4l2m2m_decoder_deps="v4l2_m2m vp8_v4l2_m2m" · 3081 unmodified lines
3082vp8_v4l2m2m_encoder_deps="v4l2_m2m vp8_v4l2_m2m"3082vp8_v4l2m2m_encoder_deps="v4l2_m2m vp8_v4l2_m2m"
3083vp9_cuvid_decoder_deps="cuvid"3083vp9_cuvid_decoder_deps="cuvid"
3084vp9_mediacodec_decoder_deps="mediacodec"3084vp9_mediacodec_decoder_deps="mediacodec"
3085vp9_qsv_decoder_select="qsvdec"
3085vp9_rkmpp_decoder_deps="rkmpp"3086vp9_rkmpp_decoder_deps="rkmpp"
3086vp9_vaapi_encoder_deps="VAEncPictureParameterBufferVP9"3087vp9_vaapi_encoder_deps="VAEncPictureParameterBufferVP9"
3087vp9_vaapi_encoder_select="vaapi_encode"3088vp9_vaapi_encoder_select="vaapi_encode"
libavcodec/allcodecs.c+1−0
@@ -780,6 +780,7 @@ extern AVCodec ff_vp8_v4l2m2m_encoder; · 779 unmodified lines
780extern AVCodec ff_vp8_vaapi_encoder;780extern AVCodec ff_vp8_vaapi_encoder;
781extern AVCodec ff_vp9_cuvid_decoder;781extern AVCodec ff_vp9_cuvid_decoder;
782extern AVCodec ff_vp9_mediacodec_decoder;782extern AVCodec ff_vp9_mediacodec_decoder;
783extern AVCodec ff_vp9_qsv_decoder;
783extern AVCodec ff_vp9_vaapi_encoder;784extern AVCodec ff_vp9_vaapi_encoder;
784 785
785// The iterate API is not usable with ossfuzz due to the excessive size of binaries created786// 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
60#endif60#endif
61 case AV_CODEC_ID_MJPEG:61 case AV_CODEC_ID_MJPEG:
62 return MFX_CODEC_JPEG;62 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
63 default:68 default:
64 break;69 break;
65 }70 }
libavcodec/qsvdec_other.c+43−3
@@ -1,5 +1,5 @@
1/*1/*
2 * Intel MediaSDK QSV based MPEG-2, VC-1, VP8 and MJPEG decoders2 * Intel MediaSDK QSV based MPEG-2, VC-1, VP8, MJPEG and VP9 decoders
3 *3 *
4 * copyright (c) 2015 Anton Khirnov4 * copyright (c) 2015 Anton Khirnov
5 *5 *
@@ -60,8 +60,8 @@ static av_cold int qsv_decode_close(AVCodecContext *avctx) · 54 unmodified lines
60{60{
61 QSVOtherContext *s = avctx->priv_data;61 QSVOtherContext *s = avctx->priv_data;
62 62
63#if CONFIG_VP8_QSV_DECODER63#if CONFIG_VP8_QSV_DECODER || CONFIG_VP9_QSV_DECODER
64 if (avctx->codec_id == AV_CODEC_ID_VP8)64 if (avctx->codec_id == AV_CODEC_ID_VP8 || avctx->codec_id == AV_CODEC_ID_VP9)
65 av_freep(&s->qsv.load_plugins);65 av_freep(&s->qsv.load_plugins);
66#endif66#endif
67 67
@@ -90,6 +90,17 @@ static av_cold int qsv_decode_init(AVCodecContext *avctx) · 22 unmodified lines
90 }90 }
91#endif91#endif
92 92
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
93 s->qsv.orig_pix_fmt = AV_PIX_FMT_NV12;104 s->qsv.orig_pix_fmt = AV_PIX_FMT_NV12;
94 s->packet_fifo = av_fifo_alloc(sizeof(AVPacket));105 s->packet_fifo = av_fifo_alloc(sizeof(AVPacket));
95 if (!s->packet_fifo) {106 if (!s->packet_fifo) {
@@ -282,3 +293,32 @@ AVCodec ff_mjpeg_qsv_decoder = { · 186 unmodified lines
282 AV_PIX_FMT_NONE },293 AV_PIX_FMT_NONE },
283};294};
284#endif295#endif
296
297#if CONFIG_VP9_QSV_DECODER
298static 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
305AVCodec 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