]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/qsv_internal.h
doc: Improve the channelsplit example
[ffmpeg] / libavcodec / qsv_internal.h
index 8ab149a797152c43ea7f97de872990d599e15c07..949f6ebf9b1cbb2e2bc16fcf629a8fa6cd1435a6 100644 (file)
@@ -1,7 +1,5 @@
 /*
- * 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 */