* commit 'e0b164576f7467b7b1127c18175e215dc1df011f': qsv: Add VP8 decoder
Unified · Split
| @@ -2730,6 +2730,7 @@ vp9_cuvid_hwaccel_deps="cuda cuvid" · 2729 unmodified lines | ||
| 2730 | 2730 | vp9_cuvid_hwaccel_select="vp9_cuvid_decoder" |
| 2731 | 2731 | vp8_mediacodec_decoder_deps="mediacodec" |
| 2732 | 2732 | vp8_mediacodec_hwaccel_deps="mediacodec" |
| 2733 | +vp8_qsv_hwaccel_deps="libmfx" | |
| 2733 | 2734 | vp9_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_VP9" |
| 2734 | 2735 | vp9_d3d11va_hwaccel_select="vp9_decoder" |
| 2735 | 2736 | vp9_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_VP9" |
| @@ -2792,6 +2793,8 @@ nvenc_hevc_encoder_deps="nvenc" · 56 unmodified lines | ||
| 2792 | 2793 | |
| 2793 | 2794 | vc1_cuvid_decoder_deps="cuda cuvid" |
| 2794 | 2795 | vp8_cuvid_decoder_deps="cuda cuvid" |
| 2796 | +vp8_qsv_decoder_deps="libmfx" | |
| 2797 | +vp8_qsv_decoder_select="qsvdec vp8_qsv_hwaccel vp8_parser" | |
| 2795 | 2798 | vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8" |
| 2796 | 2799 | vp8_vaapi_encoder_select="vaapi_encode" |
| 2797 | 2800 | vp9_cuvid_decoder_deps="cuda cuvid" |
| @@ -609,6 +609,7 @@ OBJS-$(CONFIG_VP7_DECODER) += vp8.o vp56rac.o · 608 unmodified lines | ||
| 609 | 609 | OBJS-$(CONFIG_VP8_DECODER) += vp8.o vp56rac.o |
| 610 | 610 | OBJS-$(CONFIG_VP8_CUVID_DECODER) += cuvid.o |
| 611 | 611 | OBJS-$(CONFIG_VP8_MEDIACODEC_DECODER) += mediacodecdec.o |
| 612 | +OBJS-$(CONFIG_VP8_QSV_DECODER) += qsvdec_other.o | |
| 612 | 613 | OBJS-$(CONFIG_VP8_VAAPI_ENCODER) += vaapi_encode_vp8.o |
| 613 | 614 | OBJS-$(CONFIG_VP9_DECODER) += vp9.o vp9data.o vp9dsp.o vp9lpf.o vp9recon.o \ |
| 614 | 615 | vp9block.o vp9prob.o vp9mvs.o vp56rac.o \ |
| @@ -111,6 +111,7 @@ static void register_all(void) · 110 unmodified lines | ||
| 111 | 111 | REGISTER_HWACCEL(VC1_QSV, vc1_qsv); |
| 112 | 112 | REGISTER_HWACCEL(VP8_CUVID, vp8_cuvid); |
| 113 | 113 | REGISTER_HWACCEL(VP8_MEDIACODEC, vp8_mediacodec); |
| 114 | + REGISTER_HWACCEL(VP8_QSV, vp8_qsv); | |
| 114 | 115 | REGISTER_HWACCEL(VP9_CUVID, vp9_cuvid); |
| 115 | 116 | REGISTER_HWACCEL(VP9_D3D11VA, vp9_d3d11va); |
| 116 | 117 | REGISTER_HWACCEL(VP9_DXVA2, vp9_dxva2); |
| @@ -668,6 +669,7 @@ static void register_all(void) · 551 unmodified lines | ||
| 668 | 669 | REGISTER_DECODER(VC1_CUVID, vc1_cuvid); |
| 669 | 670 | REGISTER_DECODER(VP8_CUVID, vp8_cuvid); |
| 670 | 671 | REGISTER_DECODER(VP8_MEDIACODEC, vp8_mediacodec); |
| 672 | + REGISTER_DECODER(VP8_QSV, vp8_qsv); | |
| 671 | 673 | REGISTER_ENCODER(VP8_VAAPI, vp8_vaapi); |
| 672 | 674 | REGISTER_DECODER(VP9_CUVID, vp9_cuvid); |
| 673 | 675 | REGISTER_DECODER(VP9_MEDIACODEC, vp9_mediacodec); |
| @@ -34,6 +34,10 @@ · 33 unmodified lines | ||
| 34 | 34 | #include "avcodec.h" |
| 35 | 35 | #include "qsv_internal.h" |
| 36 | 36 | |
| 37 | +#if QSV_VERSION_ATLEAST(1, 12) | |
| 38 | +#include "mfx/mfxvp8.h" | |
| 39 | +#endif | |
| 40 | + | |
| 37 | 41 | int ff_qsv_codec_id_to_mfx(enum AVCodecID codec_id) |
| 38 | 42 | { |
| 39 | 43 | switch (codec_id) { |
| @@ -48,6 +52,10 @@ int ff_qsv_codec_id_to_mfx(enum AVCodecID codec_id) · 8 unmodified lines | ||
| 48 | 52 | return MFX_CODEC_MPEG2; |
| 49 | 53 | case AV_CODEC_ID_VC1: |
| 50 | 54 | return MFX_CODEC_VC1; |
| 55 | +#if QSV_VERSION_ATLEAST(1, 12) | |
| 56 | + case AV_CODEC_ID_VP8: | |
| 57 | + return MFX_CODEC_VP8; | |
| 58 | +#endif | |
| 51 | 59 | default: |
| 52 | 60 | break; |
| 53 | 61 | } |
| @@ -1,5 +1,5 @@ | ||
| 1 | 1 | /* |
| 2 | − * Intel MediaSDK QSV based MPEG-2 and VC-1 decoders | |
| 2 | + * Intel MediaSDK QSV based MPEG-2, VC-1 and VP8 decoders | |
| 3 | 3 | * |
| 4 | 4 | * copyright (c) 2015 Anton Khirnov |
| 5 | 5 | * |
| @@ -74,6 +74,17 @@ static av_cold int qsv_decode_init(AVCodecContext *avctx) · 68 unmodified lines | ||
| 74 | 74 | QSVOtherContext *s = avctx->priv_data; |
| 75 | 75 | int ret; |
| 76 | 76 | |
| 77 | +#if CONFIG_VP8_QSV_DECODER | |
| 78 | + if (avctx->codec_id == AV_CODEC_ID_VP8) { | |
| 79 | + static const char *uid_vp8dec_hw = "f622394d8d87452f878c51f2fc9b4131"; | |
| 80 | + | |
| 81 | + av_freep(&s->qsv.load_plugins); | |
| 82 | + s->qsv.load_plugins = av_strdup(uid_vp8dec_hw); | |
| 83 | + if (!s->qsv.load_plugins) | |
| 84 | + return AVERROR(ENOMEM); | |
| 85 | + } | |
| 86 | +#endif | |
| 87 | + | |
| 77 | 88 | s->packet_fifo = av_fifo_alloc(sizeof(AVPacket)); |
| 78 | 89 | if (!s->packet_fifo) { |
| 79 | 90 | ret = AVERROR(ENOMEM); |
| @@ -216,3 +227,38 @@ AVCodec ff_vc1_qsv_decoder = { · 136 unmodified lines | ||
| 216 | 227 | AV_PIX_FMT_NONE }, |
| 217 | 228 | }; |
| 218 | 229 | #endif |
| 230 | + | |
| 231 | +#if CONFIG_VP8_QSV_HWACCEL | |
| 232 | +AVHWAccel ff_vp8_qsv_hwaccel = { | |
| 233 | + .name = "vp8_qsv", | |
| 234 | + .type = AVMEDIA_TYPE_VIDEO, | |
| 235 | + .id = AV_CODEC_ID_VP8, | |
| 236 | + .pix_fmt = AV_PIX_FMT_QSV, | |
| 237 | +}; | |
| 238 | +#endif | |
| 239 | + | |
| 240 | +#if CONFIG_VP8_QSV_DECODER | |
| 241 | +static const AVClass vp8_qsv_class = { | |
| 242 | + .class_name = "vp8_qsv", | |
| 243 | + .item_name = av_default_item_name, | |
| 244 | + .option = options, | |
| 245 | + .version = LIBAVUTIL_VERSION_INT, | |
| 246 | +}; | |
| 247 | + | |
| 248 | +AVCodec ff_vp8_qsv_decoder = { | |
| 249 | + .name = "vp8_qsv", | |
| 250 | + .long_name = NULL_IF_CONFIG_SMALL("VP8 video (Intel Quick Sync Video acceleration)"), | |
| 251 | + .priv_data_size = sizeof(QSVOtherContext), | |
| 252 | + .type = AVMEDIA_TYPE_VIDEO, | |
| 253 | + .id = AV_CODEC_ID_VP8, | |
| 254 | + .init = qsv_decode_init, | |
| 255 | + .decode = qsv_decode_frame, | |
| 256 | + .flush = qsv_decode_flush, | |
| 257 | + .close = qsv_decode_close, | |
| 258 | + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING, | |
| 259 | + .priv_class = &vp8_qsv_class, | |
| 260 | + .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, | |
| 261 | + AV_PIX_FMT_QSV, | |
| 262 | + AV_PIX_FMT_NONE }, | |
| 263 | +}; | |
| 264 | +#endif | |