should be ok,
can try it next week, if you didnt.
On Wed, Sep 6, 2017 at 12:59 AM, Mark Thompson <[email protected]> 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
> [email protected]
> https://lists.libav.org/mailman/listinfo/libav-devel
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel