]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/qsvdec.h
lavc: add a null bitstream filter
[ffmpeg] / libavcodec / qsvdec.h
index 79ecaed06854e879f7395a1d67a51720f72fd139..c6ec99af1528e6fff6b245f4deb1fee4379a20ad 100644 (file)
 
 #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
@@ -50,27 +43,38 @@ typedef struct QSVContext {
     // one
     mfxSession internal_session;
 
+    QSVFramesContext frames_ctx;
+
     /**
      * a linked list of frames currently being used by QSV
      */
     QSVFrame *work_frames;
 
+    AVFifoBuffer *async_fifo;
+    int zero_consume_run;
+
+    // the internal parser and codec context for parsing the data
+    AVCodecParserContext *parser;
+    AVCodecContext *avctx_internal;
+    enum AVPixelFormat orig_pix_fmt;
+    uint32_t fourcc;
+    mfxFrameInfo frame_info;
+
     // options set by the caller
     int async_depth;
     int iopattern;
 
+    char *load_plugins;
+
     mfxExtBuffer **ext_buffers;
     int         nb_ext_buffers;
 } QSVContext;
 
-int ff_qsv_map_pixfmt(enum AVPixelFormat format);
-
-int ff_qsv_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 */