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>
This commit is contained in:
Víctor Manuel Jáquez Leal 2021-08-24 13:33:29 +02:00
parent 101dcb55d9
commit 419ef31d1e
2 changed files with 46 additions and 0 deletions

View file

@ -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, &params, 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)

View file

@ -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,