/*
- * Intel MediaSDK QSV utility functions
- *
- * copyright (c) 2013 Luca Barbato
+ * Intel MediaSDK QSV encoder/decoder shared code
*
* This file is part of Libav.
*
#ifndef AVCODEC_QSV_INTERNAL_H
#define AVCODEC_QSV_INTERNAL_H
-#include <stdint.h>
-#include <sys/types.h>
-
#include <mfx/mfxvideo.h>
#include "libavutil/frame.h"
-#include "libavutil/pixfmt.h"
-
-#include "avcodec.h"
#define QSV_VERSION_MAJOR 1
#define QSV_VERSION_MINOR 1
#define ASYNC_DEPTH_DEFAULT 4 // internal parallelism
+#define QSV_VERSION_ATLEAST(MAJOR, MINOR) \
+ (MFX_VERSION_MAJOR > (MAJOR) || \
+ MFX_VERSION_MAJOR == (MAJOR) && MFX_VERSION_MINOR >= (MINOR))
+
typedef struct QSVFrame {
AVFrame *frame;
mfxFrameSurface1 *surface;
mfxFrameSurface1 surface_internal;
+ int queued;
+
struct QSVFrame *next;
} QSVFrame;
-typedef struct QSVContext {
- // the session used for decoding
- mfxSession session;
-
- // the session we allocated internally, in case the caller did not provide
- // one
- mfxSession internal_session;
-
- /**
- * a linked list of frames currently being used by QSV
- */
- QSVFrame *work_frames;
-
- // options set by the caller
- int async_depth;
- int iopattern;
-
- mfxExtBuffer **ext_buffers;
- int nb_ext_buffers;
-} QSVContext;
-
/**
* Convert a libmfx error code into a libav error code.
*/
int ff_qsv_error(int mfx_err);
-int ff_qsv_map_pixfmt(enum AVPixelFormat format);
-
-int ff_qsv_init(AVCodecContext *s, QSVContext *q, mfxSession session);
-
-int ff_qsv_decode(AVCodecContext *s, QSVContext *q,
- AVFrame *frame, int *got_frame,
- AVPacket *avpkt);
+int ff_qsv_codec_id_to_mfx(enum AVCodecID codec_id);
-int ff_qsv_close(QSVContext *q);
+int ff_qsv_init_internal_session(AVCodecContext *avctx, mfxSession *session,
+ const char *load_plugins);
#endif /* AVCODEC_QSV_INTERNAL_H */