|
|
|
@ -27,6 +27,7 @@ |
|
|
|
|
#include "libavutil/eval.h" |
|
|
|
|
#include "libavutil/avassert.h" |
|
|
|
|
#include "libavutil/pixdesc.h" |
|
|
|
|
#include "libavutil/mathematics.h" |
|
|
|
|
|
|
|
|
|
#include "formats.h" |
|
|
|
|
#include "internal.h" |
|
|
|
@ -249,6 +250,7 @@ static int config_output(AVFilterLink *outlink) |
|
|
|
|
QSVVPPParam param = { NULL }; |
|
|
|
|
QSVVPPCrop crop = { 0 }; |
|
|
|
|
mfxExtBuffer *ext_buf[ENH_FILTERS_COUNT]; |
|
|
|
|
AVFilterLink *inlink = ctx->inputs[0]; |
|
|
|
|
|
|
|
|
|
outlink->w = vpp->out_width; |
|
|
|
|
outlink->h = vpp->out_height; |
|
|
|
@ -320,14 +322,34 @@ static int config_output(AVFilterLink *outlink) |
|
|
|
|
param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->procamp_conf; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return ff_qsvvpp_create(ctx, &vpp->qsv, ¶m); |
|
|
|
|
if (vpp->use_frc || vpp->use_crop || vpp->deinterlace || vpp->denoise || |
|
|
|
|
vpp->detail || vpp->procamp || inlink->w != outlink->w || inlink->h != outlink->h) |
|
|
|
|
return ff_qsvvpp_create(ctx, &vpp->qsv, ¶m); |
|
|
|
|
else { |
|
|
|
|
av_log(ctx, AV_LOG_VERBOSE, "qsv vpp pass through mode.\n"); |
|
|
|
|
if (inlink->hw_frames_ctx) |
|
|
|
|
outlink->hw_frames_ctx = av_buffer_ref(inlink->hw_frames_ctx); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int filter_frame(AVFilterLink *inlink, AVFrame *picref) |
|
|
|
|
{ |
|
|
|
|
VPPContext *vpp = inlink->dst->priv; |
|
|
|
|
int ret = 0; |
|
|
|
|
AVFilterContext *ctx = inlink->dst; |
|
|
|
|
VPPContext *vpp = inlink->dst->priv; |
|
|
|
|
AVFilterLink *outlink = ctx->outputs[0]; |
|
|
|
|
|
|
|
|
|
if (vpp->qsv) |
|
|
|
|
ret = ff_qsvvpp_filter_frame(vpp->qsv, inlink, picref); |
|
|
|
|
else { |
|
|
|
|
if (picref->pts != AV_NOPTS_VALUE) |
|
|
|
|
picref->pts = av_rescale_q(picref->pts, inlink->time_base, outlink->time_base); |
|
|
|
|
ret = ff_filter_frame(outlink, picref); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return ff_qsvvpp_filter_frame(vpp->qsv, inlink, picref); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int query_formats(AVFilterContext *ctx) |
|
|
|
|