Go to the documentation of this file.
41 #define OFFSET(x) offsetof(VPPContext, x)
42 #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_FILTERING_PARAM)
45 #define ENH_FILTERS_COUNT (7)
46 #define QSV_HAVE_ROTATION QSV_VERSION_ATLEAST(1, 17)
47 #define QSV_HAVE_MIRRORING QSV_VERSION_ATLEAST(1, 19)
99 {
"deinterlace",
"deinterlace mode: 0=off, 1=bob, 2=advanced",
OFFSET(deinterlace),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, MFX_DEINTERLACING_ADVANCED, .flags =
FLAGS,
"deinterlace" },
100 {
"bob",
"Bob deinterlace mode.", 0,
AV_OPT_TYPE_CONST, { .i64 = MFX_DEINTERLACING_BOB }, .flags =
FLAGS,
"deinterlace" },
101 {
"advanced",
"Advanced deinterlace mode. ", 0,
AV_OPT_TYPE_CONST, { .i64 = MFX_DEINTERLACING_ADVANCED }, .flags =
FLAGS,
"deinterlace" },
161 #define PASS_EXPR(e, s) {\
162 ret = av_expr_parse(&e, s, var_names, NULL, NULL, NULL, NULL, 0, ctx); \
164 av_log(ctx, AV_LOG_ERROR, "Error when passing '%s'.\n", s);\
168 #define CALC_EXPR(e, v, i) {\
169 i = v = av_expr_eval(e, var_values, NULL); \
308 if (!
inlink->hw_frames_ctx || !
inlink->hw_frames_ctx->data)
313 in_format =
inlink->format;
335 MFX_DEINTERLACING_BOB : MFX_DEINTERLACING_ADVANCED;
341 memset(&vpp->
frc_conf, 0,
sizeof(mfxExtVPPFrameRateConversion));
342 vpp->
frc_conf.Header.BufferId = MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION;
343 vpp->
frc_conf.Header.BufferSz =
sizeof(mfxExtVPPFrameRateConversion);
344 vpp->
frc_conf.Algorithm = MFX_FRCALGM_DISTRIBUTED_TIMESTAMP;
350 memset(&vpp->
denoise_conf, 0,
sizeof(mfxExtVPPDenoise));
351 vpp->
denoise_conf.Header.BufferId = MFX_EXTBUFF_VPP_DENOISE;
352 vpp->
denoise_conf.Header.BufferSz =
sizeof(mfxExtVPPDenoise);
359 memset(&vpp->
detail_conf, 0,
sizeof(mfxExtVPPDetail));
360 vpp->
detail_conf.Header.BufferId = MFX_EXTBUFF_VPP_DETAIL;
361 vpp->
detail_conf.Header.BufferSz =
sizeof(mfxExtVPPDetail);
368 memset(&vpp->
procamp_conf, 0,
sizeof(mfxExtVPPProcAmp));
369 vpp->
procamp_conf.Header.BufferId = MFX_EXTBUFF_VPP_PROCAMP;
370 vpp->
procamp_conf.Header.BufferSz =
sizeof(mfxExtVPPProcAmp);
380 #ifdef QSV_HAVE_ROTATION
383 vpp->
rotate = MFX_ANGLE_270;
384 vpp->
hflip = MFX_MIRRORING_HORIZONTAL;
387 vpp->
rotate = MFX_ANGLE_90;
388 vpp->
hflip = MFX_MIRRORING_DISABLED;
391 vpp->
rotate = MFX_ANGLE_270;
392 vpp->
hflip = MFX_MIRRORING_DISABLED;
395 vpp->
rotate = MFX_ANGLE_90;
396 vpp->
hflip = MFX_MIRRORING_HORIZONTAL;
399 vpp->
rotate = MFX_ANGLE_180;
400 vpp->
hflip = MFX_MIRRORING_DISABLED;
403 vpp->
rotate = MFX_ANGLE_0;
404 vpp->
hflip = MFX_MIRRORING_HORIZONTAL;
407 vpp->
rotate = MFX_ANGLE_180;
408 vpp->
hflip = MFX_MIRRORING_HORIZONTAL;
416 "not supported with this MSDK version.\n");
422 #ifdef QSV_HAVE_ROTATION
424 vpp->
rotation_conf.Header.BufferId = MFX_EXTBUFF_VPP_ROTATION;
425 vpp->
rotation_conf.Header.BufferSz =
sizeof(mfxExtVPPRotation);
428 if (MFX_ANGLE_90 == vpp->
rotate || MFX_ANGLE_270 == vpp->
rotate) {
430 FFSWAP(
int, outlink->
w, outlink->
h);
437 "not supported with this MSDK version.\n");
443 #ifdef QSV_HAVE_MIRRORING
452 "not supported with this MSDK version.\n");
463 if (
inlink->hw_frames_ctx)
508 &
ctx->inputs[0]->outcfg.formats);
512 &
ctx->outputs[0]->incfg.formats);
#define AV_LOG_WARNING
Something somehow does not look correct.
AVPixelFormat
Pixel format.
static av_cold int init(AVCodecContext *avctx)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
#define FFSWAP(type, a, b)
#define FF_FILTER_FLAG_HWFRAME_AWARE
The filter is aware of hardware frames, and any hardware frame context should not be automatically pr...
enum AVPixelFormat out_sw_format
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
The exact code depends on how similar the blocks are and how related they are to the and needs to apply these operations to the correct inlink or outlink if there are several Macros are available to factor that when no extra processing is inlink
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
This structure describes decoded (raw) audio or video data.
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
static av_cold void vpp_uninit(AVFilterContext *ctx)
#define AV_LOG_VERBOSE
Detailed information.
const char * name
Filter name.
A link between two filters.
enum AVPixelFormat out_format
Output sw format.
void av_expr_free(AVExpr *e)
Free a parsed expression previously created with av_expr_parse().
A filter pad used for either input or output.
static enum AVPixelFormat in_pix_fmts[]
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
mfxExtVPPDenoise denoise_conf
int ff_qsvvpp_create(AVFilterContext *avctx, QSVVPPContext **vpp, QSVVPPParam *param)
static const AVFilterPad outputs[]
AVRational frame_rate
Frame rate of the stream on the link, or 1/0 if unknown or variable; if left to 0/0,...
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
mfxExtVPPDetail detail_conf
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
static const AVOption options[]
#define LIBAVUTIL_VERSION_INT
Describe the class of an AVClass context structure.
#define ENH_FILTERS_COUNT
@ AV_PIX_FMT_YUYV422
packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
Rational number (pair of numerator and denominator).
const char * av_default_item_name(void *ptr)
Return the context name.
#define CALC_EXPR(e, v, i)
mfxExtVPPDeinterlacing deinterlace_conf
mfxExtVPPFrameRateConversion frc_conf
static const AVFilterPad vpp_inputs[]
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several inputs
@ AV_PIX_FMT_QSV
HW acceleration through QSV, data[3] contains a pointer to the mfxFrameSurface1 structure.
int ff_qsvvpp_free(QSVVPPContext **vpp)
static int query_formats(AVFilterContext *ctx)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
static int config_input(AVFilterLink *inlink)
#define AV_NOPTS_VALUE
Undefined timestamp value.
AVFilterContext * src
source filter
mfxExtVPPProcAmp procamp_conf
static int config_output(AVFilterLink *outlink)
int w
agreed upon image width
AVBufferRef * hw_frames_ctx
For hwaccel pixel formats, this should be a reference to the AVHWFramesContext describing the frames.
mfxExtVPPRotation rotation_conf
static enum AVPixelFormat out_pix_fmts[]
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
int(* filter_frame)(AVFilterLink *outlink, AVFrame *frame)
const char * name
Pad name.
static int filter_frame(AVFilterLink *inlink, AVFrame *picref)
static av_cold int vpp_init(AVFilterContext *ctx)
static int av_cmp_q(AVRational a, AVRational b)
Compare two rationals.
This struct describes a set or pool of "hardware" frames (i.e.
@ AV_PIX_FMT_NV12
planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (firs...
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
enum AVPixelFormat av_get_pix_fmt(const char *name)
Return the pixel format corresponding to name.
int ff_qsvvpp_filter_frame(QSVVPPContext *s, AVFilterLink *inlink, AVFrame *picref)
static int eval_expr(AVFilterContext *ctx)
int h
agreed upon image height
static const AVClass vpp_class
AVRational time_base
Define the time base used by the PTS of the frames/samples which will pass through this link.
AVBufferRef * av_buffer_ref(AVBufferRef *buf)
Create a new reference to an AVBuffer.
static const char *const var_names[]
mfxExtVPPMirroring mirroring_conf
static av_cold int uninit(AVCodecContext *avctx)
static const AVFilterPad vpp_outputs[]