#include <mfx/mfxvideo.h>
+#include "libavutil/fifo.h"
#include "libavutil/frame.h"
#include "libavutil/pixfmt.h"
#include "avcodec.h"
-
-typedef struct QSVFrame {
- AVFrame *frame;
- mfxFrameSurface1 *surface;
-
- mfxFrameSurface1 surface_internal;
-
- struct QSVFrame *next;
-} QSVFrame;
+#include "qsv_internal.h"
typedef struct QSVContext {
// the session used for decoding
*/
QSVFrame *work_frames;
+ AVFifoBuffer *async_fifo;
+
+ // the internal parser and codec context for parsing the data
+ AVCodecParserContext *parser;
+ AVCodecContext *avctx_internal;
+ enum AVPixelFormat orig_pix_fmt;
+
// options set by the caller
int async_depth;
int iopattern;
int ff_qsv_map_pixfmt(enum AVPixelFormat format);
-int ff_qsv_init(AVCodecContext *s, QSVContext *q, mfxSession session);
+int ff_qsv_decode_init(AVCodecContext *s, QSVContext *q, mfxSession session);
+
+int ff_qsv_process_data(AVCodecContext *avctx, QSVContext *q,
+ AVFrame *frame, int *got_frame, AVPacket *pkt);
-int ff_qsv_decode(AVCodecContext *s, QSVContext *q,
- AVFrame *frame, int *got_frame,
- AVPacket *avpkt);
+void ff_qsv_decode_flush(AVCodecContext *avctx, QSVContext *q);
-int ff_qsv_close(QSVContext *q);
+int ff_qsv_decode_close(QSVContext *q);
#endif /* AVCODEC_QSVDEC_H */