diff --git a/girs/GstVulkan-1.0.gir b/girs/GstVulkan-1.0.gir index fb287437cf..0dc871f87f 100644 --- a/girs/GstVulkan-1.0.gir +++ b/girs/GstVulkan-1.0.gir @@ -4150,6 +4150,23 @@ If a specific version is requested, the @patch level is ignored.</doc> </instance-parameter> </parameters> </method> + <method name="create_device_with_index" c:identifier="gst_vulkan_instance_create_device_with_index" version="1.26" throws="1"> + <source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkinstance.h"/> + <return-value transfer-ownership="full"> + <doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkinstance.c">a new #GstVulkanDevice</doc> + <type name="VulkanDevice" c:type="GstVulkanDevice*"/> + </return-value> + <parameters> + <instance-parameter name="instance" transfer-ownership="none"> + <doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkinstance.c">a #GstVulkanInstance</doc> + <type name="VulkanInstance" c:type="GstVulkanInstance*"/> + </instance-parameter> + <parameter name="device_index" transfer-ownership="none"> + <doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkinstance.c">the device index to create the new #GstVulkanDevice from</doc> + <type name="guint" c:type="guint"/> + </parameter> + </parameters> + </method> <method name="disable_extension" c:identifier="gst_vulkan_instance_disable_extension" version="1.18"> <doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkinstance.c">Disable an Vulkan extension by @name. Disabling an extension will only have an effect before the call to gst_vulkan_instance_open().</doc> @@ -4404,13 +4421,19 @@ version with this function.</doc> <type name="gpointer" c:type="gpointer"/> </array> </field> - <glib:signal name="create-device" when="last" version="1.18"> + <glib:signal name="create-device" when="last" version="1.26"> <doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkinstance.c">Overrides the #GstVulkanDevice creation mechanism. It can be called from any thread.</doc> <return-value transfer-ownership="full"> <doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkinstance.c">the newly created #GstVulkanDevice.</doc> <type name="VulkanDevice"/> </return-value> + <parameters> + <parameter name="device_index" transfer-ownership="none"> + <doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkinstance.c">the index of the device</doc> + <type name="guint" c:type="guint"/> + </parameter> + </parameters> </glib:signal> </class> <record name="VulkanInstanceClass" c:type="GstVulkanInstanceClass" glib:is-gtype-struct-for="VulkanInstance" version="1.18"> diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkinstance.c b/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkinstance.c index 0629f8e960..4845bdda63 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkinstance.c +++ b/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkinstance.c @@ -253,18 +253,20 @@ gst_vulkan_instance_class_init (GstVulkanInstanceClass * klass) /** * GstVulkanInstance::create-device: - * @object: the #GstVulkanDisplay + * @device: the #GstVulkanDevice + * @device_index: the index of the device * * Overrides the #GstVulkanDevice creation mechanism. * It can be called from any thread. * * Returns: (transfer full): the newly created #GstVulkanDevice. * - * Since: 1.18 + * Since: 1.26 */ gst_vulkan_instance_signals[SIGNAL_CREATE_DEVICE] = g_signal_new ("create-device", G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, GST_TYPE_VULKAN_DEVICE, 0); + G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, GST_TYPE_VULKAN_DEVICE, 1, + G_TYPE_UINT); } static void @@ -1102,6 +1104,39 @@ gst_vulkan_instance_get_proc_address (GstVulkanInstance * instance, return ret; } +/** + * gst_vulkan_instance_create_device_with_index: + * @instance: a #GstVulkanInstance + * @device_index: the device index to create the new #GstVulkanDevice from + * @error: (out) (optional): a #GError + * + * Returns: (transfer full): a new #GstVulkanDevice + * + * Since: 1.26 + */ +GstVulkanDevice * +gst_vulkan_instance_create_device_with_index (GstVulkanInstance * instance, + guint device_index, GError ** error) +{ + GstVulkanDevice *device; + + g_return_val_if_fail (GST_IS_VULKAN_INSTANCE (instance), NULL); + + g_signal_emit (instance, gst_vulkan_instance_signals[SIGNAL_CREATE_DEVICE], 0, + device_index, &device); + + if (!device) { + device = gst_vulkan_device_new_with_index (instance, device_index); + } + + if (!gst_vulkan_device_open (device, error)) { + gst_object_unref (device); + device = NULL; + } + + return device; +} + /** * gst_vulkan_instance_create_device: * @instance: a #GstVulkanInstance @@ -1115,23 +1150,7 @@ GstVulkanDevice * gst_vulkan_instance_create_device (GstVulkanInstance * instance, GError ** error) { - GstVulkanDevice *device; - - g_return_val_if_fail (GST_IS_VULKAN_INSTANCE (instance), NULL); - - g_signal_emit (instance, gst_vulkan_instance_signals[SIGNAL_CREATE_DEVICE], 0, - &device); - - if (!device) { - device = gst_vulkan_device_new_with_index (instance, 0); - } - - if (!gst_vulkan_device_open (device, error)) { - gst_object_unref (device); - device = NULL; - } - - return device; + return gst_vulkan_instance_create_device_with_index (instance, 0, error); } /** diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkinstance.h b/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkinstance.h index 4c3a8f3868..99cd8f2ef9 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkinstance.h +++ b/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkinstance.h @@ -94,6 +94,10 @@ gpointer gst_vulkan_instance_get_proc_address (GstVulkanInstan GST_VULKAN_API GstVulkanDevice * gst_vulkan_instance_create_device (GstVulkanInstance * instance, GError ** error); +GST_VULKAN_API +GstVulkanDevice * gst_vulkan_instance_create_device_with_index(GstVulkanInstance * instance, + guint device_index, + GError ** error); GST_VULKAN_API void gst_context_set_vulkan_instance (GstContext * context,