Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6147 serge 1
/*
2
 * Intel MediaSDK QSV based VC-1 video decoder
3
 *
4
 * This file is part of FFmpeg.
5
 *
6
 * FFmpeg is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU Lesser General Public
8
 * License as published by the Free Software Foundation; either
9
 * version 2.1 of the License, or (at your option) any later version.
10
 *
11
 * FFmpeg is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
 * Lesser General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU Lesser General Public
17
 * License along with FFmpeg; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
 */
20
 
21
#include 
22
#include 
23
 
24
#include "libavutil/common.h"
25
#include "libavutil/fifo.h"
26
#include "libavutil/opt.h"
27
 
28
#include "avcodec.h"
29
#include "qsvdec.h"
30
 
31
typedef struct QSVVC1Context {
32
    AVClass *class;
33
    QSVContext qsv;
34
} QSVVC1Context;
35
 
36
 
37
static av_cold int qsv_decode_close(AVCodecContext *avctx)
38
{
39
    QSVVC1Context *s = avctx->priv_data;
40
 
41
    ff_qsv_decode_close(&s->qsv);
42
 
43
    return 0;
44
}
45
 
46
static int qsv_decode_frame(AVCodecContext *avctx, void *data,
47
                            int *got_frame, AVPacket *avpkt)
48
{
49
    QSVVC1Context *s = avctx->priv_data;
50
    AVFrame *frame    = data;
51
 
52
    return ff_qsv_decode(avctx, &s->qsv, frame, got_frame, avpkt);
53
}
54
 
55
AVHWAccel ff_vc1_qsv_hwaccel = {
56
    .name           = "vc1_qsv",
57
    .type           = AVMEDIA_TYPE_VIDEO,
58
    .id             = AV_CODEC_ID_VC1,
59
    .pix_fmt        = AV_PIX_FMT_QSV,
60
};
61
 
62
#define OFFSET(x) offsetof(QSVVC1Context, x)
63
#define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
64
static const AVOption options[] = {
65
    { "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 },
66
    { NULL },
67
};
68
 
69
static const AVClass class = {
70
    .class_name = "vc1_qsv",
71
    .item_name  = av_default_item_name,
72
    .option     = options,
73
    .version    = LIBAVUTIL_VERSION_INT,
74
};
75
 
76
AVCodec ff_vc1_qsv_decoder = {
77
    .name           = "vc1_qsv",
78
    .long_name      = NULL_IF_CONFIG_SMALL("VC-1 video (Intel Quick Sync Video acceleration)"),
79
    .priv_data_size = sizeof(QSVVC1Context),
80
    .type           = AVMEDIA_TYPE_VIDEO,
81
    .id             = AV_CODEC_ID_VC1,
82
    .init           = NULL,
83
    .decode         = qsv_decode_frame,
84
    .flush          = NULL,
85
    .close          = qsv_decode_close,
86
    .capabilities   = AV_CODEC_CAP_DELAY,
87
    .priv_class     = &class,
88
};