* commit 'e0b164576f7467b7b1127c18175e215dc1df011f': qsv: Add VP8 decoder
Unified · Split
| @@ -2730,6 +2730,7 @@ vp9_cuvid_hwaccel_deps="cuda cuvid" · 2729 unmodified lines | |||
| 2730 | vp9_cuvid_hwaccel_select="vp9_cuvid_decoder" | 2730 | vp9_cuvid_hwaccel_select="vp9_cuvid_decoder" |
| 2731 | vp8_mediacodec_decoder_deps="mediacodec" | 2731 | vp8_mediacodec_decoder_deps="mediacodec" |
| 2732 | vp8_mediacodec_hwaccel_deps="mediacodec" | 2732 | vp8_mediacodec_hwaccel_deps="mediacodec" |
| 2733 | vp8_qsv_hwaccel_deps="libmfx" | ||
| 2733 | vp9_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_VP9" | 2734 | vp9_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_VP9" |
| 2734 | vp9_d3d11va_hwaccel_select="vp9_decoder" | 2735 | vp9_d3d11va_hwaccel_select="vp9_decoder" |
| 2735 | vp9_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_VP9" | 2736 | vp9_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_VP9" |
| @@ -2792,6 +2793,8 @@ nvenc_hevc_encoder_deps="nvenc" · 56 unmodified lines | |||
| 2792 | 2793 | ||
| 2793 | vc1_cuvid_decoder_deps="cuda cuvid" | 2794 | vc1_cuvid_decoder_deps="cuda cuvid" |
| 2794 | vp8_cuvid_decoder_deps="cuda cuvid" | 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 | vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8" | 2798 | vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8" |
| 2796 | vp8_vaapi_encoder_select="vaapi_encode" | 2799 | vp8_vaapi_encoder_select="vaapi_encode" |
| 2797 | vp9_cuvid_decoder_deps="cuda cuvid" | 2800 | vp9_cuvid_decoder_deps="cuda cuvid" |
| @@ -609,6 +609,7 @@ OBJS-$(CONFIG_VP7_DECODER) += vp8.o vp56rac.o · 608 unmodified lines | |||
| 609 | OBJS-$(CONFIG_VP8_DECODER) += vp8.o vp56rac.o | 609 | OBJS-$(CONFIG_VP8_DECODER) += vp8.o vp56rac.o |
| 610 | OBJS-$(CONFIG_VP8_CUVID_DECODER) += cuvid.o | 610 | OBJS-$(CONFIG_VP8_CUVID_DECODER) += cuvid.o |
| 611 | OBJS-$(CONFIG_VP8_MEDIACODEC_DECODER) += mediacodecdec.o | 611 | OBJS-$(CONFIG_VP8_MEDIACODEC_DECODER) += mediacodecdec.o |
| 612 | OBJS-$(CONFIG_VP8_QSV_DECODER) += qsvdec_other.o | ||
| 612 | OBJS-$(CONFIG_VP8_VAAPI_ENCODER) += vaapi_encode_vp8.o | 613 | OBJS-$(CONFIG_VP8_VAAPI_ENCODER) += vaapi_encode_vp8.o |
| 613 | OBJS-$(CONFIG_VP9_DECODER) += vp9.o vp9data.o vp9dsp.o vp9lpf.o vp9recon.o \ | 614 | OBJS-$(CONFIG_VP9_DECODER) += vp9.o vp9data.o vp9dsp.o vp9lpf.o vp9recon.o \ |
| 614 | vp9block.o vp9prob.o vp9mvs.o vp56rac.o \ | 615 | vp9block.o vp9prob.o vp9mvs.o vp56rac.o \ |
| @@ -111,6 +111,7 @@ static void register_all(void) · 110 unmodified lines | |||
| 111 | REGISTER_HWACCEL(VC1_QSV, vc1_qsv); | 111 | REGISTER_HWACCEL(VC1_QSV, vc1_qsv); |
| 112 | REGISTER_HWACCEL(VP8_CUVID, vp8_cuvid); | 112 | REGISTER_HWACCEL(VP8_CUVID, vp8_cuvid); |
| 113 | REGISTER_HWACCEL(VP8_MEDIACODEC, vp8_mediacodec); | 113 | REGISTER_HWACCEL(VP8_MEDIACODEC, vp8_mediacodec); |
| 114 | REGISTER_HWACCEL(VP8_QSV, vp8_qsv); | ||
| 114 | REGISTER_HWACCEL(VP9_CUVID, vp9_cuvid); | 115 | REGISTER_HWACCEL(VP9_CUVID, vp9_cuvid); |
| 115 | REGISTER_HWACCEL(VP9_D3D11VA, vp9_d3d11va); | 116 | REGISTER_HWACCEL(VP9_D3D11VA, vp9_d3d11va); |
| 116 | REGISTER_HWACCEL(VP9_DXVA2, vp9_dxva2); | 117 | REGISTER_HWACCEL(VP9_DXVA2, vp9_dxva2); |
| @@ -668,6 +669,7 @@ static void register_all(void) · 551 unmodified lines | |||
| 668 | REGISTER_DECODER(VC1_CUVID, vc1_cuvid); | 669 | REGISTER_DECODER(VC1_CUVID, vc1_cuvid); |
| 669 | REGISTER_DECODER(VP8_CUVID, vp8_cuvid); | 670 | REGISTER_DECODER(VP8_CUVID, vp8_cuvid); |
| 670 | REGISTER_DECODER(VP8_MEDIACODEC, vp8_mediacodec); | 671 | REGISTER_DECODER(VP8_MEDIACODEC, vp8_mediacodec); |
| 672 | REGISTER_DECODER(VP8_QSV, vp8_qsv); | ||
| 671 | REGISTER_ENCODER(VP8_VAAPI, vp8_vaapi); | 673 | REGISTER_ENCODER(VP8_VAAPI, vp8_vaapi); |
| 672 | REGISTER_DECODER(VP9_CUVID, vp9_cuvid); | 674 | REGISTER_DECODER(VP9_CUVID, vp9_cuvid); |
| 673 | REGISTER_DECODER(VP9_MEDIACODEC, vp9_mediacodec); | 675 | REGISTER_DECODER(VP9_MEDIACODEC, vp9_mediacodec); |
| @@ -34,6 +34,10 @@ · 33 unmodified lines | |||
| 34 | #include "avcodec.h" | 34 | #include "avcodec.h" |
| 35 | #include "qsv_internal.h" | 35 | #include "qsv_internal.h" |
| 36 | 36 | ||
| 37 | #if QSV_VERSION_ATLEAST(1, 12) | ||
| 38 | #include "mfx/mfxvp8.h" | ||
| 39 | #endif | ||
| 40 | |||
| 37 | int ff_qsv_codec_id_to_mfx(enum AVCodecID codec_id) | 41 | int ff_qsv_codec_id_to_mfx(enum AVCodecID codec_id) |
| 38 | { | 42 | { |
| 39 | switch (codec_id) { | 43 | switch (codec_id) { |
| @@ -48,6 +52,10 @@ int ff_qsv_codec_id_to_mfx(enum AVCodecID codec_id) · 8 unmodified lines | |||
| 48 | return MFX_CODEC_MPEG2; | 52 | return MFX_CODEC_MPEG2; |
| 49 | case AV_CODEC_ID_VC1: | 53 | case AV_CODEC_ID_VC1: |
| 50 | return MFX_CODEC_VC1; | 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 | default: | 59 | default: |
| 52 | break; | 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 | * copyright (c) 2015 Anton Khirnov | 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 | QSVOtherContext *s = avctx->priv_data; | 74 | QSVOtherContext *s = avctx->priv_data; |
| 75 | int ret; | 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 | s->packet_fifo = av_fifo_alloc(sizeof(AVPacket)); | 88 | s->packet_fifo = av_fifo_alloc(sizeof(AVPacket)); |
| 78 | if (!s->packet_fifo) { | 89 | if (!s->packet_fifo) { |
| 79 | ret = AVERROR(ENOMEM); | 90 | ret = AVERROR(ENOMEM); |
| @@ -216,3 +227,38 @@ AVCodec ff_vc1_qsv_decoder = { · 136 unmodified lines | |||
| 216 | AV_PIX_FMT_NONE }, | 227 | AV_PIX_FMT_NONE }, |
| 217 | }; | 228 | }; |
| 218 | #endif | 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 | ||