Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Ivan Uskov authored on 2015/07/26 01:28:11... | ... |
@@ -16,6 +16,7 @@ version <next>: |
16 | 16 |
- removegrain video filter |
17 | 17 |
- Intel QSV-accelerated MPEG-2 video and HEVC encoding |
18 | 18 |
- Intel QSV-accelerated MPEG-2 video decoding |
19 |
+- Intel QSV-accelerated VC-1 video decoding |
|
19 | 20 |
- libkvazaar HEVC encoder |
20 | 21 |
- erosion, dilation, deflate and inflate video filters |
21 | 22 |
- Dynamic Audio Normalizer as dynaudnorm filter |
... | ... |
@@ -2340,6 +2340,8 @@ utvideo_encoder_select="bswapdsp huffman huffyuvencdsp" |
2340 | 2340 |
vble_decoder_select="huffyuvdsp" |
2341 | 2341 |
vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp startcode" |
2342 | 2342 |
vc1image_decoder_select="vc1_decoder" |
2343 |
+vc1_qsv_decoder_deps="libmfx" |
|
2344 |
+vc1_qsv_decoder_select="qsvdec vc1_qsv_hwaccel" |
|
2343 | 2345 |
vorbis_decoder_select="mdct" |
2344 | 2346 |
vorbis_encoder_select="mdct" |
2345 | 2347 |
vp3_decoder_select="hpeldsp vp3dsp videodsp" |
... | ... |
@@ -2454,6 +2456,8 @@ vc1_vdpau_decoder_deps="vdpau" |
2454 | 2454 |
vc1_vdpau_decoder_select="vc1_decoder" |
2455 | 2455 |
vc1_vdpau_hwaccel_deps="vdpau" |
2456 | 2456 |
vc1_vdpau_hwaccel_select="vc1_decoder" |
2457 |
+vc1_qsv_hwaccel_deps="libmfx" |
|
2458 |
+vc1_qsv_hwaccel_select="qsvdec_vc1" |
|
2457 | 2459 |
wmv3_crystalhd_decoder_select="crystalhd" |
2458 | 2460 |
wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel" |
2459 | 2461 |
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel" |
... | ... |
@@ -521,6 +521,7 @@ OBJS-$(CONFIG_VC1_DECODER) += vc1dec.o vc1_block.o vc1_loopfilter.o |
521 | 521 |
vc1dsp.o \ |
522 | 522 |
msmpeg4dec.o msmpeg4.o msmpeg4data.o \ |
523 | 523 |
wmv2dsp.o |
524 |
+OBJS-$(CONFIG_VC1_QSV_DECODER) += qsvdec_vc1.o |
|
524 | 525 |
OBJS-$(CONFIG_VCR1_DECODER) += vcr1.o |
525 | 526 |
OBJS-$(CONFIG_VMDAUDIO_DECODER) += vmdaudio.o |
526 | 527 |
OBJS-$(CONFIG_VMDVIDEO_DECODER) += vmdvideo.o |
... | ... |
@@ -101,6 +101,7 @@ void avcodec_register_all(void) |
101 | 101 |
REGISTER_HWACCEL(VC1_DXVA2, vc1_dxva2); |
102 | 102 |
REGISTER_HWACCEL(VC1_VAAPI, vc1_vaapi); |
103 | 103 |
REGISTER_HWACCEL(VC1_VDPAU, vc1_vdpau); |
104 |
+ REGISTER_HWACCEL(VC1_QSV, vc1_qsv); |
|
104 | 105 |
REGISTER_HWACCEL(WMV3_D3D11VA, wmv3_d3d11va); |
105 | 106 |
REGISTER_HWACCEL(WMV3_DXVA2, wmv3_dxva2); |
106 | 107 |
REGISTER_HWACCEL(WMV3_VAAPI, wmv3_vaapi); |
... | ... |
@@ -305,6 +306,7 @@ void avcodec_register_all(void) |
305 | 305 |
REGISTER_DECODER(VC1_CRYSTALHD, vc1_crystalhd); |
306 | 306 |
REGISTER_DECODER(VC1_VDPAU, vc1_vdpau); |
307 | 307 |
REGISTER_DECODER(VC1IMAGE, vc1image); |
308 |
+ REGISTER_DECODER(VC1_QSV, vc1_qsv); |
|
308 | 309 |
REGISTER_DECODER(VCR1, vcr1); |
309 | 310 |
REGISTER_DECODER(VMDVIDEO, vmdvideo); |
310 | 311 |
REGISTER_DECODER(VMNC, vmnc); |
311 | 312 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,88 @@ |
0 |
+/* |
|
1 |
+ * Intel MediaSDK QSV based VC-1 video decoder |
|
2 |
+ * |
|
3 |
+ * This file is part of FFmpeg. |
|
4 |
+ * |
|
5 |
+ * FFmpeg is free software; you can redistribute it and/or |
|
6 |
+ * modify it under the terms of the GNU Lesser General Public |
|
7 |
+ * License as published by the Free Software Foundation; either |
|
8 |
+ * version 2.1 of the License, or (at your option) any later version. |
|
9 |
+ * |
|
10 |
+ * FFmpeg is distributed in the hope that it will be useful, |
|
11 |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
13 |
+ * Lesser General Public License for more details. |
|
14 |
+ * |
|
15 |
+ * You should have received a copy of the GNU Lesser General Public |
|
16 |
+ * License along with FFmpeg; if not, write to the Free Software |
|
17 |
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
|
18 |
+ */ |
|
19 |
+ |
|
20 |
+#include <stdint.h> |
|
21 |
+#include <string.h> |
|
22 |
+ |
|
23 |
+#include "libavutil/common.h" |
|
24 |
+#include "libavutil/fifo.h" |
|
25 |
+#include "libavutil/opt.h" |
|
26 |
+ |
|
27 |
+#include "avcodec.h" |
|
28 |
+#include "qsvdec.h" |
|
29 |
+ |
|
30 |
+typedef struct QSVVC1Context { |
|
31 |
+ AVClass *class; |
|
32 |
+ QSVContext qsv; |
|
33 |
+} QSVVC1Context; |
|
34 |
+ |
|
35 |
+ |
|
36 |
+static av_cold int qsv_decode_close(AVCodecContext *avctx) |
|
37 |
+{ |
|
38 |
+ QSVVC1Context *s = avctx->priv_data; |
|
39 |
+ |
|
40 |
+ ff_qsv_decode_close(&s->qsv); |
|
41 |
+ |
|
42 |
+ return 0; |
|
43 |
+} |
|
44 |
+ |
|
45 |
+static int qsv_decode_frame(AVCodecContext *avctx, void *data, |
|
46 |
+ int *got_frame, AVPacket *avpkt) |
|
47 |
+{ |
|
48 |
+ QSVVC1Context *s = avctx->priv_data; |
|
49 |
+ AVFrame *frame = data; |
|
50 |
+ |
|
51 |
+ return ff_qsv_decode(avctx, &s->qsv, frame, got_frame, avpkt); |
|
52 |
+} |
|
53 |
+ |
|
54 |
+AVHWAccel ff_vc1_qsv_hwaccel = { |
|
55 |
+ .name = "vc1_qsv", |
|
56 |
+ .type = AVMEDIA_TYPE_VIDEO, |
|
57 |
+ .id = AV_CODEC_ID_VC1, |
|
58 |
+ .pix_fmt = AV_PIX_FMT_QSV, |
|
59 |
+}; |
|
60 |
+ |
|
61 |
+#define OFFSET(x) offsetof(QSVVC1Context, x) |
|
62 |
+#define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM |
|
63 |
+static const AVOption options[] = { |
|
64 |
+ { "async_depth", "Internal parallelization depth, the higher the value the higher the latency.", OFFSET(qsv.async_depth), AV_OPT_TYPE_INT, { .i64 = ASYNC_DEPTH_DEFAULT }, 0, INT_MAX, VD }, |
|
65 |
+ { NULL }, |
|
66 |
+}; |
|
67 |
+ |
|
68 |
+static const AVClass class = { |
|
69 |
+ .class_name = "vc1_qsv", |
|
70 |
+ .item_name = av_default_item_name, |
|
71 |
+ .option = options, |
|
72 |
+ .version = LIBAVUTIL_VERSION_INT, |
|
73 |
+}; |
|
74 |
+ |
|
75 |
+AVCodec ff_vc1_qsv_decoder = { |
|
76 |
+ .name = "vc1_qsv", |
|
77 |
+ .long_name = NULL_IF_CONFIG_SMALL("VC-1 video (Intel Quick Sync Video acceleration)"), |
|
78 |
+ .priv_data_size = sizeof(QSVVC1Context), |
|
79 |
+ .type = AVMEDIA_TYPE_VIDEO, |
|
80 |
+ .id = AV_CODEC_ID_VC1, |
|
81 |
+ .init = NULL, |
|
82 |
+ .decode = qsv_decode_frame, |
|
83 |
+ .flush = NULL, |
|
84 |
+ .close = qsv_decode_close, |
|
85 |
+ .capabilities = CODEC_CAP_DELAY, |
|
86 |
+ .priv_class = &class, |
|
87 |
+}; |
... | ... |
@@ -29,7 +29,7 @@ |
29 | 29 |
#include "libavutil/version.h" |
30 | 30 |
|
31 | 31 |
#define LIBAVCODEC_VERSION_MAJOR 56 |
32 |
-#define LIBAVCODEC_VERSION_MINOR 53 |
|
32 |
+#define LIBAVCODEC_VERSION_MINOR 54 |
|
33 | 33 |
#define LIBAVCODEC_VERSION_MICRO 100 |
34 | 34 |
|
35 | 35 |
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ |