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]->out_formats);
 
  512                           &
ctx->outputs[0]->in_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[]