/* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * Intel Quick Sync Video VPP base function */ #ifndef AVFILTER_QSVVPP_H #define AVFILTER_QSVVPP_H #include <mfx/mfxvideo.h> #include "avfilter.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)) #define QSV_VERSION_ATLEAST(MAJOR, MINOR) \ (MFX_VERSION_MAJOR > (MAJOR) || \ 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; typedef struct QSVVPPCrop { int in_idx; ///< Input index int x, y, w, h; ///< Crop rectangle } QSVVPPCrop; typedef struct QSVVPPParam { /* default is ff_filter_frame */ int (*filter_frame)(AVFilterLink *outlink, AVFrame *frame); /* To fill with MFX enhanced filter configurations */ int num_ext_buf; mfxExtBuffer **ext_buf; /* Real output format */ enum AVPixelFormat out_sw_format; /* Crop information for each input, if needed */ int num_crop; QSVVPPCrop *crop; } QSVVPPParam; /* create and initialize the QSV session */ int ff_qsvvpp_create(AVFilterContext *avctx, QSVVPPContext **vpp, QSVVPPParam *param); /* release the resources (eg.surfaces) */ 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); #endif /* AVFILTER_QSVVPP_H */