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 (8)
103 {
"deinterlace",
"deinterlace mode: 0=off, 1=bob, 2=advanced",
OFFSET(deinterlace),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, MFX_DEINTERLACING_ADVANCED, .flags =
FLAGS,
"deinterlace" },
104 {
"bob",
"Bob deinterlace mode.", 0,
AV_OPT_TYPE_CONST, { .i64 = MFX_DEINTERLACING_BOB }, .flags =
FLAGS,
"deinterlace" },
105 {
"advanced",
"Advanced deinterlace mode. ", 0,
AV_OPT_TYPE_CONST, { .i64 = MFX_DEINTERLACING_ADVANCED }, .flags =
FLAGS,
"deinterlace" },
135 {
"async_depth",
"Internal parallelization depth, the higher the value the higher the latency.",
OFFSET(async_depth),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, .flags =
FLAGS },
136 {
"scale_mode",
"scale mode: 0=auto, 1=low power, 2=high quality",
OFFSET(scale_mode),
AV_OPT_TYPE_INT, { .i64 = MFX_SCALING_MODE_DEFAULT }, MFX_SCALING_MODE_DEFAULT, MFX_SCALING_MODE_QUALITY, .flags =
FLAGS,
"scale mode" },
166 #define PASS_EXPR(e, s) {\
167 ret = av_expr_parse(&e, s, var_names, NULL, NULL, NULL, NULL, 0, ctx); \
169 av_log(ctx, AV_LOG_ERROR, "Error when passing '%s'.\n", s);\
173 #define CALC_EXPR(e, v, i) {\
174 i = v = av_expr_eval(e, var_values, NULL); \
300 if (
inlink->hw_frames_ctx) {
303 }
else if (
ctx->hw_device_ctx) {
304 device_ref =
ctx->hw_device_ctx;
308 mfx_version->Major = 0;
309 mfx_version->Minor = 0;
314 device_hwctx = device_ctx->
hwctx;
316 return MFXQueryVersion(device_hwctx->
session, mfx_version);
326 mfxVersion mfx_version;
346 if (!
inlink->hw_frames_ctx || !
inlink->hw_frames_ctx->data)
351 in_format =
inlink->format;
373 MFX_DEINTERLACING_BOB : MFX_DEINTERLACING_ADVANCED;
379 memset(&vpp->
frc_conf, 0,
sizeof(mfxExtVPPFrameRateConversion));
380 vpp->
frc_conf.Header.BufferId = MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION;
381 vpp->
frc_conf.Header.BufferSz =
sizeof(mfxExtVPPFrameRateConversion);
382 vpp->
frc_conf.Algorithm = MFX_FRCALGM_DISTRIBUTED_TIMESTAMP;
388 memset(&vpp->
denoise_conf, 0,
sizeof(mfxExtVPPDenoise));
389 vpp->
denoise_conf.Header.BufferId = MFX_EXTBUFF_VPP_DENOISE;
390 vpp->
denoise_conf.Header.BufferSz =
sizeof(mfxExtVPPDenoise);
397 memset(&vpp->
detail_conf, 0,
sizeof(mfxExtVPPDetail));
398 vpp->
detail_conf.Header.BufferId = MFX_EXTBUFF_VPP_DETAIL;
399 vpp->
detail_conf.Header.BufferSz =
sizeof(mfxExtVPPDetail);
406 memset(&vpp->
procamp_conf, 0,
sizeof(mfxExtVPPProcAmp));
407 vpp->
procamp_conf.Header.BufferId = MFX_EXTBUFF_VPP_PROCAMP;
408 vpp->
procamp_conf.Header.BufferSz =
sizeof(mfxExtVPPProcAmp);
421 vpp->
rotate = MFX_ANGLE_270;
422 vpp->
hflip = MFX_MIRRORING_HORIZONTAL;
425 vpp->
rotate = MFX_ANGLE_90;
426 vpp->
hflip = MFX_MIRRORING_DISABLED;
429 vpp->
rotate = MFX_ANGLE_270;
430 vpp->
hflip = MFX_MIRRORING_DISABLED;
433 vpp->
rotate = MFX_ANGLE_90;
434 vpp->
hflip = MFX_MIRRORING_HORIZONTAL;
437 vpp->
rotate = MFX_ANGLE_180;
438 vpp->
hflip = MFX_MIRRORING_DISABLED;
441 vpp->
rotate = MFX_ANGLE_0;
442 vpp->
hflip = MFX_MIRRORING_HORIZONTAL;
445 vpp->
rotate = MFX_ANGLE_180;
446 vpp->
hflip = MFX_MIRRORING_HORIZONTAL;
454 "not supported with this MSDK version.\n");
462 vpp->
rotation_conf.Header.BufferId = MFX_EXTBUFF_VPP_ROTATION;
463 vpp->
rotation_conf.Header.BufferSz =
sizeof(mfxExtVPPRotation);
466 if (MFX_ANGLE_90 == vpp->
rotate || MFX_ANGLE_270 == vpp->
rotate) {
468 FFSWAP(
int, outlink->
w, outlink->
h);
475 "not supported with this MSDK version.\n");
490 "not supported with this MSDK version.\n");
497 memset(&vpp->
scale_conf, 0,
sizeof(mfxExtVPPScaling));
498 vpp->
scale_conf.Header.BufferId = MFX_EXTBUFF_VPP_SCALING;
499 vpp->
scale_conf.Header.BufferSz =
sizeof(mfxExtVPPScaling);
505 "not supported with this MSDK version.\n");
514 if (
inlink->hw_frames_ctx)
611 &
ctx->inputs[0]->outcfg.formats);
615 &
ctx->outputs[0]->incfg.formats);
void * hwctx
The format-specific data, allocated and freed by libavutil along with this context.
#define AV_LOG_WARNING
Something somehow does not look correct.
const AVFilter ff_vf_vpp_qsv
AVPixelFormat
Pixel format.
they must not be accessed directly The fifo field contains the frames that are queued in the input for processing by the filter The status_in and status_out fields contains the queued status(EOF or error) of the link
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 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.
#define AVERROR_EOF
End of file.
uint8_t * data
The data buffer.
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).
This struct is allocated as AVHWDeviceContext.hwctx.
#define FILTER_QUERY_FUNC(func)
static av_cold void vpp_uninit(AVFilterContext *ctx)
#define AV_LOG_VERBOSE
Detailed information.
AVBufferRef * av_buffer_ref(const AVBufferRef *buf)
Create a new reference to an AVBuffer.
const char * name
Filter name.
A link between two filters.
#define FF_FILTER_FORWARD_STATUS_BACK(outlink, inlink)
Forward the status on an output link to an input link.
int ff_inlink_consume_frame(AVFilterLink *link, AVFrame **rframe)
Take a frame from the link's FIFO and update the link's stats.
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.
This struct aggregates all the (hardware/vendor-specific) "high-level" state, i.e.
static enum AVPixelFormat in_pix_fmts[]
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static void ff_outlink_set_status(AVFilterLink *link, int status, int64_t pts)
Set the status field of a link from the source filter.
mfxExtVPPDenoise denoise_conf
int ff_qsvvpp_create(AVFilterContext *avctx, QSVVPPContext **vpp, QSVVPPParam *param)
#define QSV_RUNTIME_VERSION_ATLEAST(MFX_VERSION, MAJOR, MINOR)
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.
static int activate(AVFilterContext *ctx)
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)
#define FILTER_INPUTS(array)
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).
AVBufferRef * device_ref
A reference to the parent AVHWDeviceContext.
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[]
@ AV_PIX_FMT_QSV
HW acceleration through QSV, data[3] contains a pointer to the mfxFrameSurface1 structure.
int ff_inlink_acknowledge_status(AVFilterLink *link, int *rstatus, int64_t *rpts)
Test and acknowledge the change of status on the link.
int ff_qsvvpp_free(QSVVPPContext **vpp)
mfxExtVPPScaling scale_conf
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
FF_FILTER_FORWARD_WANTED(outlink, inlink)
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 mfxStatus get_mfx_version(const AVFilterContext *ctx, mfxVersion *mfx_version)
int(* filter_frame)(AVFilterLink *outlink, AVFrame *frame)
const char * name
Pad name.
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...
#define FFSWAP(type, a, b)
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.
A reference to a data buffer.
static const char *const var_names[]
mfxExtVPPMirroring mirroring_conf
#define FILTER_OUTPUTS(array)
static av_cold int uninit(AVCodecContext *avctx)
static const AVFilterPad vpp_outputs[]