1 /* 2 * This file is part of FFmpeg. 3 * 4 * FFmpeg is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * FFmpeg is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with FFmpeg; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18 19 /** 20 * @file 21 * Intel Quick Sync Video VPP base function 22 */ 23 24 #ifndef AVFILTER_QSVVPP_H 25 #define AVFILTER_QSVVPP_H 26 27 #include <mfx/mfxvideo.h> 28 29 #include "avfilter.h" 30 31 #define FF_INLINK_IDX(link) ((int)((link)->dstpad - (link)->dst->input_pads)) 32 #define FF_OUTLINK_IDX(link) ((int)((link)->srcpad - (link)->src->output_pads)) 33 34 #define QSV_VERSION_ATLEAST(MAJOR, MINOR) \ 35 (MFX_VERSION_MAJOR > (MAJOR) || \ 36 MFX_VERSION_MAJOR == (MAJOR) && MFX_VERSION_MINOR >= (MINOR)) 37 38 #define QSV_RUNTIME_VERSION_ATLEAST(MFX_VERSION, MAJOR, MINOR) \ 39 ((MFX_VERSION.Major > (MAJOR)) || \ 40 (MFX_VERSION.Major == (MAJOR) && MFX_VERSION.Minor >= (MINOR))) 41 42 typedef struct QSVVPPContext QSVVPPContext; 43 44 typedef struct QSVVPPCrop { 45 int in_idx; ///< Input index 46 int x, y, w, h; ///< Crop rectangle 47 } QSVVPPCrop; 48 49 typedef struct QSVVPPParam { 50 /* default is ff_filter_frame */ 51 int (*filter_frame)(AVFilterLink *outlink, AVFrame *frame); 52 53 /* To fill with MFX enhanced filter configurations */ 54 int num_ext_buf; 55 mfxExtBuffer **ext_buf; 56 57 /* Real output format */ 58 enum AVPixelFormat out_sw_format; 59 60 /* Crop information for each input, if needed */ 61 int num_crop; 62 QSVVPPCrop *crop; 63 } QSVVPPParam; 64 65 /* create and initialize the QSV session */ 66 int ff_qsvvpp_create(AVFilterContext *avctx, QSVVPPContext **vpp, QSVVPPParam *param); 67 68 /* release the resources (eg.surfaces) */ 69 int ff_qsvvpp_free(QSVVPPContext **vpp); 70 71 /* vpp filter frame and call the cb if needed */ 72 int ff_qsvvpp_filter_frame(QSVVPPContext *vpp, AVFilterLink *inlink, AVFrame *frame); 73 74 int ff_qsvvpp_print_iopattern(void *log_ctx, int mfx_iopattern, 75 const char *extra_string); 76 77 int ff_qsvvpp_print_error(void *log_ctx, mfxStatus err, 78 const char *error_string); 79 80 int ff_qsvvpp_print_warning(void *log_ctx, mfxStatus err, 81 const char *warning_string); 82 83 #endif /* AVFILTER_QSVVPP_H */ 84