summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorVíctor Manuel Jáquez Leal <vjaquez@igalia.com>2021-02-01 23:19:27 +0100
committerVíctor Manuel Jáquez Leal <vjaquez@igalia.com>2021-02-05 21:25:20 +0100
commit43cb1b5dcfe7fff12ad43bca209e8b6edcc8637c (patch)
treeac123fc5d37fe312e05429bda38b025c0f829b0c /sys
parent532b20cf058afe6a8d59e7427cb389f6d9410740 (diff)
downloadgstreamer-plugins-bad-43cb1b5dcfe7fff12ad43bca209e8b6edcc8637c.tar.gz
va: basedec: refactor context query
Context query is handled either by source and sink queries. This patch factors-out its handling in a common utility function. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1999>
Diffstat (limited to 'sys')
-rw-r--r--sys/va/gstvabasedec.c41
1 files changed, 16 insertions, 25 deletions
diff --git a/sys/va/gstvabasedec.c b/sys/va/gstvabasedec.c
index bc9a870a1..1bf2ca827 100644
--- a/sys/va/gstvabasedec.c
+++ b/sys/va/gstvabasedec.c
@@ -118,6 +118,19 @@ gst_va_base_dec_getcaps (GstVideoDecoder * decoder, GstCaps * filter)
}
static gboolean
+_query_context (GstVaBaseDec * self, GstQuery * query)
+{
+ GstVaDisplay *display = NULL;
+ gboolean ret;
+
+ gst_object_replace ((GstObject **) & display, (GstObject *) self->display);
+ ret = gst_va_handle_context_query (GST_ELEMENT_CAST (self), query, display);
+ gst_clear_object (&display);
+
+ return ret;
+}
+
+static gboolean
gst_va_base_dec_src_query (GstVideoDecoder * decoder, GstQuery * query)
{
GstVaBaseDec *base = GST_VA_BASE_DEC (decoder);
@@ -125,15 +138,7 @@ gst_va_base_dec_src_query (GstVideoDecoder * decoder, GstQuery * query)
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_CONTEXT:{
- GstVaDisplay *display = NULL;
-
- gst_object_replace ((GstObject **) & display,
- (GstObject *) base->display);
-
- ret = gst_va_handle_context_query (GST_ELEMENT_CAST (decoder), query,
- display);
-
- gst_clear_object (&display);
+ ret = _query_context (base, query);
break;
}
case GST_QUERY_CAPS:{
@@ -180,22 +185,8 @@ gst_va_base_dec_src_query (GstVideoDecoder * decoder, GstQuery * query)
static gboolean
gst_va_base_dec_sink_query (GstVideoDecoder * decoder, GstQuery * query)
{
- GstVaBaseDec *base = GST_VA_BASE_DEC (decoder);
- gboolean ret = FALSE;
-
- if (GST_QUERY_TYPE (query) == GST_QUERY_CONTEXT) {
- GstVaDisplay *display = NULL;
-
- gst_object_replace ((GstObject **) & display, (GstObject *) base->display);
-
- ret = gst_va_handle_context_query (GST_ELEMENT_CAST (decoder), query,
- display);
-
- gst_clear_object (&display);
-
- return ret;
- }
-
+ if (GST_QUERY_TYPE (query) == GST_QUERY_CONTEXT)
+ return _query_context (GST_VA_BASE_DEC (decoder), query);
return GST_VIDEO_DECODER_CLASS (parent_class)->sink_query (decoder, query);
}