]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/qsvdec.h
Merge commit 'd60c2d5216930ef98c7d4d6837d6229b37e0dcb3'
[ffmpeg] / libavcodec / qsvdec.h
index 97a3315b75b5e8d85b7f85af26911a097b110e4c..41fb71682c27e5639da4a0fc0060d826bb1d44d9 100644 (file)
@@ -41,7 +41,9 @@ typedef struct QSVContext {
 
     // the session we allocated internally, in case the caller did not provide
     // one
-    QSVSession internal_qs;
+    mfxSession internal_session;
+
+    QSVFramesContext frames_ctx;
 
     /**
      * a linked list of frames currently being used by QSV
@@ -49,22 +51,13 @@ typedef struct QSVContext {
     QSVFrame *work_frames;
 
     AVFifoBuffer *async_fifo;
-    AVFifoBuffer *input_fifo;
-
-    // we should to buffer input packets at some cases
-    // else it is not possible to handle dynamic stream changes correctly
-    // this fifo uses for input packets buffering
-    AVFifoBuffer *pkt_fifo;
 
-    // this flag indicates that header parsed,
-    // decoder instance created and ready to general decoding
-    int engine_ready;
-
-    // we can not just re-init decoder if different sequence header arrived
-    // we should to deliver all buffered frames but we can not decode new packets
-    // this time. So when reinit_pending is non-zero we flushing decoder and
-    // accumulate new arrived packets into pkt_fifo
-    int reinit_pending;
+    // 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;
@@ -76,13 +69,10 @@ typedef struct QSVContext {
     int         nb_ext_buffers;
 } QSVContext;
 
-int ff_qsv_map_pixfmt(enum AVPixelFormat format);
-
-int ff_qsv_decode(AVCodecContext *s, QSVContext *q,
-                  AVFrame *frame, int *got_frame,
-                  AVPacket *avpkt);
+int ff_qsv_process_data(AVCodecContext *avctx, QSVContext *q,
+                        AVFrame *frame, int *got_frame, AVPacket *pkt);
 
-void ff_qsv_decode_reset(AVCodecContext *avctx, QSVContext *q);
+void ff_qsv_decode_flush(AVCodecContext *avctx, QSVContext *q);
 
 int ff_qsv_decode_close(QSVContext *q);