From 7871910bc629e0e5f1d60790524fe384add26c1b Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Mon, 8 Feb 2016 14:44:20 +1100 Subject: [PATCH] vulkan: add device to handle_context_query --- ext/vulkan/vksink.c | 2 +- ext/vulkan/vkutils.c | 20 +++++++++++++++++++- ext/vulkan/vkutils.h | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/ext/vulkan/vksink.c b/ext/vulkan/vksink.c index 5ac7dd292f..8afd9c563c 100644 --- a/ext/vulkan/vksink.c +++ b/ext/vulkan/vksink.c @@ -208,7 +208,7 @@ gst_vulkan_sink_query (GstBaseSink * bsink, GstQuery * query) switch (GST_QUERY_TYPE (query)) { case GST_QUERY_CONTEXT:{ res = gst_vulkan_handle_context_query (GST_ELEMENT (vk_sink), query, - &vk_sink->display, &vk_sink->instance); + &vk_sink->display, &vk_sink->instance, &vk_sink->device); if (res) return res; diff --git a/ext/vulkan/vkutils.c b/ext/vulkan/vkutils.c index c2148d9ca8..0a81f904f6 100644 --- a/ext/vulkan/vkutils.c +++ b/ext/vulkan/vkutils.c @@ -292,7 +292,8 @@ gst_vulkan_handle_set_context (GstElement * element, GstContext * context, gboolean gst_vulkan_handle_context_query (GstElement * element, GstQuery * query, - GstVulkanDisplay ** display, GstVulkanInstance ** instance) + GstVulkanDisplay ** display, GstVulkanInstance ** instance, + GstVulkanDevice ** device) { gboolean res = FALSE; const gchar *context_type; @@ -303,6 +304,7 @@ gst_vulkan_handle_context_query (GstElement * element, GstQuery * query, g_return_val_if_fail (GST_QUERY_TYPE (query) != GST_QUERY_CONTEXT, FALSE); g_return_val_if_fail (display != NULL, FALSE); g_return_val_if_fail (instance != NULL, FALSE); + g_return_val_if_fail (device != NULL, FALSE); gst_query_parse_context_type (query, &context_type); @@ -332,6 +334,22 @@ gst_vulkan_handle_context_query (GstElement * element, GstQuery * query, gst_query_set_context (query, context); gst_context_unref (context); + res = *instance != NULL; + } else if (g_strcmp0 (context_type, "gst.vulkan.device") == 0) { + GstStructure *s; + + gst_query_parse_context (query, &old_context); + + if (old_context) + context = gst_context_copy (old_context); + else + context = gst_context_new ("gst.vulkan.device", TRUE); + + s = gst_context_writable_structure (context); + gst_structure_set (s, "device", GST_TYPE_VULKAN_DEVICE, *device, NULL); + gst_query_set_context (query, context); + gst_context_unref (context); + res = *instance != NULL; } diff --git a/ext/vulkan/vkutils.h b/ext/vulkan/vkutils.h index 4b9eaa3344..3d5f13fa96 100644 --- a/ext/vulkan/vkutils.h +++ b/ext/vulkan/vkutils.h @@ -30,7 +30,7 @@ gboolean gst_vulkan_ensure_element_data (gpointer element, gboolean gst_vulkan_handle_set_context (GstElement * element, GstContext * context, GstVulkanDisplay ** display, GstVulkanInstance ** instance); gboolean gst_vulkan_handle_context_query (GstElement * element, GstQuery * query, - GstVulkanDisplay ** display, GstVulkanInstance ** instance); + GstVulkanDisplay ** display, GstVulkanInstance ** instance, GstVulkanDevice ** device); gboolean gst_vulkan_run_query (GstElement * element, GstQuery * query, GstPadDirection direction);