Re: [libav-devel] [PATCH 2/2] lavf/qsvvpp: bypass vpp if not needed.

2018-04-03 Thread Li, Zhong
> From: libav-devel [mailto:libav-devel-boun...@libav.org] On Behalf Of
> Maxym Dmytrychenko
> Sent: Monday, April 2, 2018 7:41 PM
> To: libav development 
> Subject: Re: [libav-devel] [PATCH 2/2] lavf/qsvvpp: bypass vpp if not needed.
> 
> going to the right direction, can we see more details about " specific case." 
> ?

The "specific case" means "if vpp not needed case". 
For example, add the option "vpp_qsv=w=1280:h=720" for an input with native 
resolution 1280x720.

I am happy to update it if everything else is ok. 

> 
> On Thu, Mar 29, 2018 at 4:01 PM, Zhong Li  wrote:
> 
> > It is benefit to performance for specific case.

___
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Re: [libav-devel] [PATCH 2/2] lavf/qsvvpp: bypass vpp if not needed.

2018-04-02 Thread Maxym Dmytrychenko
going to the right direction, can we see more details about " specific
case." ?

On Thu, Mar 29, 2018 at 4:01 PM, Zhong Li  wrote:

> It is benefit to performance for specific case.
>
> Signed-off-by: Zhong Li 
> ---
>  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
> libav-devel@libav.org
> https://lists.libav.org/mailman/listinfo/libav-devel
___
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

[libav-devel] [PATCH 2/2] lavf/qsvvpp: bypass vpp if not needed.

2018-03-29 Thread Zhong Li
It is benefit to performance for specific case.

Signed-off-by: Zhong Li 
---
 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
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel