Libav
qsv_internal.h
Go to the documentation of this file.
1 /*
2  * Intel MediaSDK QSV encoder/decoder shared code
3  *
4  * This file is part of Libav.
5  *
6  * Libav 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  * Libav 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 Libav; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #ifndef AVCODEC_QSV_INTERNAL_H
22 #define AVCODEC_QSV_INTERNAL_H
23 
24 #include <mfx/mfxvideo.h>
25 
26 #include "libavutil/frame.h"
27 
28 #include "avcodec.h"
29 
30 #define QSV_VERSION_MAJOR 1
31 #define QSV_VERSION_MINOR 1
32 
33 #define ASYNC_DEPTH_DEFAULT 4 // internal parallelism
34 
35 #define QSV_VERSION_ATLEAST(MAJOR, MINOR) \
36  (MFX_VERSION_MAJOR > (MAJOR) || \
37  MFX_VERSION_MAJOR == (MAJOR) && MFX_VERSION_MINOR >= (MINOR))
38 
39 typedef struct QSVFrame {
41  mfxFrameSurface1 *surface;
42 
43  mfxFrameSurface1 surface_internal;
44 
45  int queued;
46 
47  struct QSVFrame *next;
48 } QSVFrame;
49 
50 typedef struct QSVFramesContext {
52  mfxFrameInfo info;
53  mfxMemId *mids;
54  int nb_mids;
56 
60 int ff_qsv_map_error(mfxStatus mfx_err, const char **desc);
61 
62 int ff_qsv_print_error(void *log_ctx, mfxStatus err,
63  const char *error_string);
64 
65 int ff_qsv_print_warning(void *log_ctx, mfxStatus err,
66  const char *warning_string);
67 
69 
70 int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc);
71 
72 int ff_qsv_init_internal_session(AVCodecContext *avctx, mfxSession *session,
73  const char *load_plugins);
74 
75 int ff_qsv_init_session_hwcontext(AVCodecContext *avctx, mfxSession *session,
76  QSVFramesContext *qsv_frames_ctx,
77  const char *load_plugins, int opaque);
78 
79 #endif /* AVCODEC_QSV_INTERNAL_H */
uint32_t fourcc
Definition: hwcontext_qsv.c:90
This structure describes decoded (raw) audio or video data.
Definition: frame.h:140
mfxFrameInfo info
Definition: qsv_internal.h:52
const char * desc
Definition: nvenc.c:101
mfxFrameSurface1 * surface
Definition: qsv_internal.h:41
AVBufferRef * hw_frames_ctx
Definition: qsv_internal.h:51
int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc)
Definition: qsv.c:132
int ff_qsv_codec_id_to_mfx(enum AVCodecID codec_id)
Definition: qsv.c:36
int queued
Definition: qsv_internal.h:45
int ff_qsv_init_session_hwcontext(AVCodecContext *avctx, mfxSession *session, QSVFramesContext *qsv_frames_ctx, const char *load_plugins, int opaque)
Definition: qsv.c:290
int ff_qsv_map_error(mfxStatus mfx_err, const char **desc)
Convert a libmfx error code into a libav error code.
Definition: qsv.c:97
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: avcodec.h:193
reference-counted frame API
enum AVCodecID codec_id
Definition: avconv_vaapi.c:149
mfxFrameSurface1 surface_internal
Definition: qsv_internal.h:43
Libavcodec external API header.
main external API structure.
Definition: avcodec.h:1409
struct QSVFrame * next
Definition: qsv_internal.h:47
const char * format
Definition: movenc.c:47
int ff_qsv_print_error(void *log_ctx, mfxStatus err, const char *error_string)
Definition: qsv.c:112
mfxMemId * mids
Definition: qsv_internal.h:53
int ff_qsv_print_warning(void *log_ctx, mfxStatus err, const char *warning_string)
Definition: qsv.c:122
A reference to a data buffer.
Definition: buffer.h:81
AVFrame * frame
Definition: qsv_internal.h:40
int ff_qsv_init_internal_session(AVCodecContext *avctx, mfxSession *session, const char *load_plugins)
Definition: qsv.c:200
AVPixelFormat
Pixel format.
Definition: pixfmt.h:57