should be ok,
can try it next week, if you didnt.

On Wed, Sep 6, 2017 at 12:59 AM, Mark Thompson <s...@jkqxz.net> wrote:

> The deinterlacer does not change, because it does not allocate any new
> frames (for output it uses the same pool as the input).
> ---
>  libavfilter/vf_scale_qsv.c | 26 +++++++++++---------------
>  1 file changed, 11 insertions(+), 15 deletions(-)
>
> diff --git a/libavfilter/vf_scale_qsv.c b/libavfilter/vf_scale_qsv.c
> index 8ef77835d..c568e9625 100644
> --- a/libavfilter/vf_scale_qsv.c
> +++ b/libavfilter/vf_scale_qsv.c
> @@ -71,7 +71,6 @@ enum var_name {
>  typedef struct QSVScaleContext {
>      const AVClass *class;
>
> -    AVBufferRef *out_frames_ref;
>      /* a clone of the main session, used internally for scaling */
>      mfxSession   session;
>
> @@ -134,7 +133,6 @@ static void qsvscale_uninit(AVFilterContext *ctx)
>          MFXClose(s->session);
>          s->session = NULL;
>      }
> -    av_buffer_unref(&s->out_frames_ref);
>
>      av_freep(&s->mem_ids_in);
>      av_freep(&s->mem_ids_out);
> @@ -163,6 +161,7 @@ static int init_out_pool(AVFilterContext *ctx,
>                           int out_width, int out_height)
>  {
>      QSVScaleContext *s = ctx->priv;
> +    AVFilterLink *outlink = ctx->outputs[0];
>
>      AVHWFramesContext *in_frames_ctx;
>      AVHWFramesContext *out_frames_ctx;
> @@ -183,21 +182,25 @@ static int init_out_pool(AVFilterContext *ctx,
>      in_format     = in_frames_ctx->sw_format;
>      out_format    = (s->format == AV_PIX_FMT_NONE) ? in_format :
> s->format;
>
> -    s->out_frames_ref = av_hwframe_ctx_alloc(in_frames_ctx->device_ref);
> -    if (!s->out_frames_ref)
> +    outlink->hw_frames_ctx = av_hwframe_ctx_alloc(in_
> frames_ctx->device_ref);
> +    if (!outlink->hw_frames_ctx)
>          return AVERROR(ENOMEM);
> -    out_frames_ctx   = (AVHWFramesContext*)s->out_frames_ref->data;
> +    out_frames_ctx   = (AVHWFramesContext*)outlink->hw_frames_ctx->data;
>      out_frames_hwctx = out_frames_ctx->hwctx;
>
>      out_frames_ctx->format            = AV_PIX_FMT_QSV;
>      out_frames_ctx->width             = FFALIGN(out_width,  32);
>      out_frames_ctx->height            = FFALIGN(out_height, 32);
>      out_frames_ctx->sw_format         = out_format;
> -    out_frames_ctx->initial_pool_size = 32;
> +    out_frames_ctx->initial_pool_size = 4;
>
>      out_frames_hwctx->frame_type = in_frames_hwctx->frame_type;
>
> -    ret = av_hwframe_ctx_init(s->out_frames_ref);
> +    ret = ff_filter_init_hw_frames(ctx, outlink, 32);
> +    if (ret < 0)
> +        return ret;
> +
> +    ret = av_hwframe_ctx_init(outlink->hw_frames_ctx);
>      if (ret < 0)
>          return ret;
>
> @@ -264,7 +267,7 @@ static int init_out_session(AVFilterContext *ctx)
>
>      QSVScaleContext                   *s = ctx->priv;
>      AVHWFramesContext     *in_frames_ctx = (AVHWFramesContext*)ctx->
> inputs[0]->hw_frames_ctx->data;
> -    AVHWFramesContext    *out_frames_ctx = (AVHWFramesContext*)s->out_
> frames_ref->data;
> +    AVHWFramesContext    *out_frames_ctx = (AVHWFramesContext*)ctx->
> outputs[0]->hw_frames_ctx->data;
>      AVQSVFramesContext  *in_frames_hwctx = in_frames_ctx->hwctx;
>      AVQSVFramesContext *out_frames_hwctx = out_frames_ctx->hwctx;
>      AVQSVDeviceContext     *device_hwctx = in_frames_ctx->device_ctx->
> hwctx;
> @@ -405,8 +408,6 @@ static int init_out_session(AVFilterContext *ctx)
>  static int init_scale_session(AVFilterContext *ctx, int in_width, int
> in_height,
>                                int out_width, int out_height)
>  {
> -    QSVScaleContext *s = ctx->priv;
> -
>      int ret;
>
>      qsvscale_uninit(ctx);
> @@ -419,11 +420,6 @@ static int init_scale_session(AVFilterContext *ctx,
> int in_width, int in_height,
>      if (ret < 0)
>          return ret;
>
> -    av_buffer_unref(&ctx->outputs[0]->hw_frames_ctx);
> -    ctx->outputs[0]->hw_frames_ctx = av_buffer_ref(s->out_frames_ref);
> -    if (!ctx->outputs[0]->hw_frames_ctx)
> -        return AVERROR(ENOMEM);
> -
>      return 0;
>  }
>
> --
> 2.11.0
>
> _______________________________________________
> 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

Reply via email to