diff options
author | Víctor Manuel Jáquez Leal <vjaquez@igalia.com> | 2021-08-24 13:33:29 +0200 |
---|---|---|
committer | Víctor Manuel Jáquez Leal <vjaquez@igalia.com> | 2021-09-10 17:48:22 +0200 |
commit | 419ef31d1e0633e94a32fb7c7e2f5a9a7082bd6c (patch) | |
tree | 308dabc6e0717168af44682115c37eeb2cce0b5c | |
parent | 101dcb55d9adfde0c327d3f0021c34500a11ab3d (diff) | |
download | gstreamer-plugins-bad-419ef31d1e0633e94a32fb7c7e2f5a9a7082bd6c.tar.gz |
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: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2495>
-rw-r--r-- | sys/va/gstvafilter.c | 42 | ||||
-rw-r--r-- | sys/va/gstvafilter.h | 4 |
2 files changed, 46 insertions, 0 deletions
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 @@ -1375,6 +1375,48 @@ _query_pipeline_caps (GstVaFilter * self, GArray * filters, } 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, |