going to the right direction, can we see more details about " specific case." ?
On Thu, Mar 29, 2018 at 4:01 PM, Zhong Li <[email protected]> wrote: > It is benefit to performance for specific case. > > Signed-off-by: Zhong Li <[email protected]> > --- > libavfilter/vf_vpp_qsv.c | 28 +++++++++++++++++++++++++--- > 1 file changed, 25 insertions(+), 3 deletions(-) > > diff --git a/libavfilter/vf_vpp_qsv.c b/libavfilter/vf_vpp_qsv.c > index 610e821..568dee5 100644 > --- a/libavfilter/vf_vpp_qsv.c > +++ b/libavfilter/vf_vpp_qsv.c > @@ -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) > -- > 1.8.3.1 > > _______________________________________________ > libav-devel mailing list > [email protected] > https://lists.libav.org/mailman/listinfo/libav-devel _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
