From 419ef31d1e0633e94a32fb7c7e2f5a9a7082bd6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20J=C3=A1quez=20Leal?= Date: Tue, 24 Aug 2021 13:33:29 +0200 Subject: va: filter: Add gst_va_filter_add_deinterlace_buffer() This function decorates gst_va_filter_add_filter_buffer() to get the number of past and future frames to hold, given the method. Part-of: --- sys/va/gstvafilter.c | 42 ++++++++++++++++++++++++++++++++++++++++++ sys/va/gstvafilter.h | 4 ++++ 2 files changed, 46 insertions(+) diff --git a/sys/va/gstvafilter.c b/sys/va/gstvafilter.c index a033e125c..23edb7eb3 100644 --- a/sys/va/gstvafilter.c +++ b/sys/va/gstvafilter.c @@ -1374,6 +1374,48 @@ _query_pipeline_caps (GstVaFilter * self, GArray * filters, return TRUE; } +gboolean +gst_va_filter_add_deinterlace_buffer (GstVaFilter * self, + VAProcDeinterlacingType method, guint32 * forward, guint32 * backward) +{ + GArray *filters = NULL; + VAProcFilterParameterBufferDeinterlacing params = { + .type = VAProcFilterDeinterlacing, + .algorithm = method, + }; + VAProcPipelineCaps pipeline_caps = { 0, }; + gboolean ret; + + g_return_val_if_fail (GST_IS_VA_FILTER (self), FALSE); + + if (!gst_va_filter_is_open (self)) + return FALSE; + + if (!(method != VAProcDeinterlacingNone + && method != VAProcDeinterlacingCount)) + return FALSE; + + if (!gst_va_filter_add_filter_buffer (self, ¶ms, sizeof (params), 1)) + return FALSE; + + GST_OBJECT_LOCK (self); + if (self->filters) + filters = g_array_ref (self->filters); + GST_OBJECT_UNLOCK (self); + ret = _query_pipeline_caps (self, filters, &pipeline_caps); + if (filters) + g_array_unref (filters); + if (!ret) + return FALSE; + + if (forward) + *forward = pipeline_caps.num_forward_references; + if (backward) + *backward = pipeline_caps.num_backward_references; + + return TRUE; +} + gboolean gst_va_filter_add_filter_buffer (GstVaFilter * self, gpointer data, gsize size, guint num) diff --git a/sys/va/gstvafilter.h b/sys/va/gstvafilter.h index d5a698992..8abaeff46 100644 --- a/sys/va/gstvafilter.h +++ b/sys/va/gstvafilter.h @@ -95,6 +95,10 @@ gboolean gst_va_filter_add_filter_buffer (GstVaFilter * self, gpointer data, gsize size, guint num); +gboolean gst_va_filter_add_deinterlace_buffer(GstVaFilter * self, + VAProcDeinterlacingType method, + guint32 * forward, + guint32 * backward); gboolean gst_va_filter_drop_filter_buffers (GstVaFilter * self); gboolean gst_va_filter_process (GstVaFilter * self, GstVaSample * src, -- cgit v1.2.1