Quoting Mark Thompson (2016-11-29 10:52:20)
> On 29/11/16 09:07, Anton Khirnov wrote:
> > Quoting Mark Thompson (2016-11-25 00:27:11)
> >> ---
> >> Tested somewhat on Skylake GT2 and Polaris 11; on both it comes up with
> >> something which looks pretty plausible.
> >>
> >> I'm not exactly a connoisseur of interlaced video, though, so it might be
> >> helpful if someone with that particular affectation and a healthy
> >> selection of evil sample cases could have a go with it.
> >>
> >> ./avconv -y -vaapi_device /dev/dri/renderD128 -hwaccel vaapi
> >> -hwaccel_output_format vaapi -i in.mp4 -an -vf
> >> 'deinterlace_vaapi=motion_adaptive' -c:v h264_vaapi -qp 12 out.mp4
> >>
> >>
> >> configure | 1 +
> >> libavfilter/Makefile | 1 +
> >> libavfilter/allfilters.c | 1 +
> >> libavfilter/version.h | 2 +-
> >> libavfilter/vf_deinterlace_vaapi.c | 602
> >> +++++++++++++++++++++++++++++++++++++
> >> 5 files changed, 606 insertions(+), 1 deletion(-)
> >> create mode 100644 libavfilter/vf_deinterlace_vaapi.c
> >>
> >> ...
> >> + vas = vaQueryVideoProcPipelineCaps(ctx->hwctx->display,
> >> + ctx->va_context,
> >> + &ctx->filter_buffer, 1,
> >> + &ctx->pipeline_caps);
> >> + if (vas != VA_STATUS_SUCCESS) {
> >> + av_log(avctx, AV_LOG_ERROR, "Failed to query pipeline "
> >> + "caps: %d (%s).\n", vas, vaErrorStr(vas));
> >> + return AVERROR(EIO);
> >> + }
> >> +
> >> + ctx->queue_depth = ctx->pipeline_caps.num_backward_references +
> >> + ctx->pipeline_caps.num_forward_references + 1;
> >
> > I don't see anything that guarantees this is less than MAX_REFERENCES,
> > and it looks like stuff will break if that's not true.
>
> Yes; I'll check it and return an error in that case. (I doubt it will ever
> be hit - the highest total I've seen here is 2 + 1 + 1 = 4.)
>
> >> ...
> >> + if (ctx->hwctx->driver_quirks &
> >> + AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS) {
> >> + vas = vaDestroyBuffer(ctx->hwctx->display, params_id);
> >> + if (vas != VA_STATUS_SUCCESS) {
> >> + av_log(avctx, AV_LOG_ERROR, "Failed to free parameter buffer:
> >> "
> >> + "%d (%s).\n", vas, vaErrorStr(vas));
> >> + // And ignore.
> >> + }
> >> + }
> >> +
> >> + av_frame_copy_props(output_frame, input_frame);
> >
> > This needs an error check.
>
> Yes; will add.
>
> >> ...
> >> +#define OFFSET(x) offsetof(DeintVAAPIContext, x)
> >> +#define FLAGS (AV_OPT_FLAG_VIDEO_PARAM)
> >> +static const AVOption deint_vaapi_options[] = {
> >> + { "mode", "Deinterlacing mode",
> >> + OFFSET(mode), AV_OPT_TYPE_INT, { .i64 = VAProcDeinterlacingBob },
> >
> > We might want to use one of the fancier algorithms by default. Also,
> > docs would be nice.
>
> i965 gives you bob, motion-adaptive and motion-compensated.
>
> mesa gives you bob, weave and motion-adaptive.
>
> The default could therefore be motion-adaptive? Or a separate value
> "default" which picks the highest numbered algorithm? (I don't really mind
> what this is at all.)
Either one is fine with me. I guess picking the higher numbered might be
a little safer since it will also work in implementations that don't
support motion-adaptive, if they happen to exist.
--
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel