X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Fqsvvpp.h;h=e0f4c8f5bb4a1828c9e070e9bd059fae60984cba;hb=a240097ecd4fb1639db99e7becb888ae478405cd;hp=ff02b64c411a43c677a59054198b805bfed78721;hpb=39278ff0de5b5e3397c22538978bffbb38ee099b;p=ffmpeg diff --git a/libavfilter/qsvvpp.h b/libavfilter/qsvvpp.h index ff02b64c411..e0f4c8f5bb4 100644 --- a/libavfilter/qsvvpp.h +++ b/libavfilter/qsvvpp.h @@ -27,6 +27,7 @@ #include #include "avfilter.h" +#include "libavutil/fifo.h" #define FF_INLINK_IDX(link) ((int)((link)->dstpad - (link)->dst->input_pads)) #define FF_OUTLINK_IDX(link) ((int)((link)->srcpad - (link)->src->output_pads)) @@ -36,10 +37,44 @@ MFX_VERSION_MAJOR == (MAJOR) && MFX_VERSION_MINOR >= (MINOR)) #define QSV_RUNTIME_VERSION_ATLEAST(MFX_VERSION, MAJOR, MINOR) \ - (MFX_VERSION.Major > (MAJOR)) || \ - (MFX_VERSION.Major == (MAJOR) && MFX_VERSION.Minor >= (MINOR)) - -typedef struct QSVVPPContext QSVVPPContext; + ((MFX_VERSION.Major > (MAJOR)) || \ + (MFX_VERSION.Major == (MAJOR) && MFX_VERSION.Minor >= (MINOR))) + +typedef struct QSVFrame { + AVFrame *frame; + mfxFrameSurface1 surface; + struct QSVFrame *next; + int queued; +} QSVFrame; + +typedef struct QSVVPPContext { + mfxSession session; + int (*filter_frame) (AVFilterLink *outlink, AVFrame *frame); /**< callback */ + enum AVPixelFormat out_sw_format; /**< Real output format */ + mfxVideoParam vpp_param; + mfxFrameInfo *frame_infos; /**< frame info for each input */ + + /** members related to the input/output surface */ + int in_mem_mode; + int out_mem_mode; + QSVFrame *in_frame_list; + QSVFrame *out_frame_list; + int nb_surface_ptrs_in; + int nb_surface_ptrs_out; + mfxFrameSurface1 **surface_ptrs_in; + mfxFrameSurface1 **surface_ptrs_out; + + /** MFXVPP extern parameters */ + mfxExtOpaqueSurfaceAlloc opaque_alloc; + mfxExtBuffer **ext_buffers; + int nb_ext_buffers; + + int got_frame; + int async_depth; + int eof; + /** order with frame_out, sync */ + AVFifoBuffer *async_fifo; +} QSVVPPContext; typedef struct QSVVPPCrop { int in_idx; ///< Input index @@ -60,6 +95,8 @@ typedef struct QSVVPPParam { /* Crop information for each input, if needed */ int num_crop; QSVVPPCrop *crop; + + int async_depth; } QSVVPPParam; /* create and initialize the QSV session */ @@ -71,4 +108,13 @@ int ff_qsvvpp_free(QSVVPPContext **vpp); /* vpp filter frame and call the cb if needed */ int ff_qsvvpp_filter_frame(QSVVPPContext *vpp, AVFilterLink *inlink, AVFrame *frame); +int ff_qsvvpp_print_iopattern(void *log_ctx, int mfx_iopattern, + const char *extra_string); + +int ff_qsvvpp_print_error(void *log_ctx, mfxStatus err, + const char *error_string); + +int ff_qsvvpp_print_warning(void *log_ctx, mfxStatus err, + const char *warning_string); + #endif /* AVFILTER_QSVVPP_H */