blob: 4e86e4b7f8f8911ab51775d92632ba4c677faea6
1 | /* |
2 | * Intel MediaSDK QSV utility functions |
3 | * |
4 | * copyright (c) 2013 Luca Barbato |
5 | * |
6 | * This file is part of FFmpeg. |
7 | * |
8 | * FFmpeg is free software; you can redistribute it and/or |
9 | * modify it under the terms of the GNU Lesser General Public |
10 | * License as published by the Free Software Foundation; either |
11 | * version 2.1 of the License, or (at your option) any later version. |
12 | * |
13 | * FFmpeg is distributed in the hope that it will be useful, |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
16 | * Lesser General Public License for more details. |
17 | * |
18 | * You should have received a copy of the GNU Lesser General Public |
19 | * License along with FFmpeg; if not, write to the Free Software |
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
21 | */ |
22 | |
23 | #ifndef AVCODEC_QSVDEC_H |
24 | #define AVCODEC_QSVDEC_H |
25 | |
26 | #include <stdint.h> |
27 | #include <sys/types.h> |
28 | |
29 | #include <mfx/mfxvideo.h> |
30 | |
31 | #include "libavutil/fifo.h" |
32 | #include "libavutil/frame.h" |
33 | #include "libavutil/pixfmt.h" |
34 | |
35 | #include "avcodec.h" |
36 | #include "qsv_internal.h" |
37 | |
38 | typedef struct QSVContext { |
39 | // the session used for decoding |
40 | mfxSession session; |
41 | |
42 | // the session we allocated internally, in case the caller did not provide |
43 | // one |
44 | mfxSession internal_session; |
45 | |
46 | QSVFramesContext frames_ctx; |
47 | |
48 | /** |
49 | * a linked list of frames currently being used by QSV |
50 | */ |
51 | QSVFrame *work_frames; |
52 | |
53 | AVFifoBuffer *async_fifo; |
54 | int zero_consume_run; |
55 | |
56 | // the internal parser and codec context for parsing the data |
57 | AVCodecParserContext *parser; |
58 | AVCodecContext *avctx_internal; |
59 | enum AVPixelFormat orig_pix_fmt; |
60 | uint32_t fourcc; |
61 | mfxFrameInfo frame_info; |
62 | |
63 | // options set by the caller |
64 | int async_depth; |
65 | int iopattern; |
66 | |
67 | char *load_plugins; |
68 | |
69 | mfxExtBuffer **ext_buffers; |
70 | int nb_ext_buffers; |
71 | } QSVContext; |
72 | |
73 | int ff_qsv_process_data(AVCodecContext *avctx, QSVContext *q, |
74 | AVFrame *frame, int *got_frame, AVPacket *pkt); |
75 | |
76 | void ff_qsv_decode_flush(AVCodecContext *avctx, QSVContext *q); |
77 | |
78 | int ff_qsv_decode_close(QSVContext *q); |
79 | |
80 | #endif /* AVCODEC_QSVDEC_H */ |
81 |