From 1e11c055910378c16639d869630bed510f9cbf2d Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Sun, 26 Jun 2022 21:09:50 +0900 Subject: [PATCH] nvcodec: Add cuda-device-id read-only property to CUVID decoders Similar to the other hardware decoder plugins, provides assigned device id via property Part-of: --- .../gst-plugins-bad/sys/nvcodec/gstnvdec.c | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/subprojects/gst-plugins-bad/sys/nvcodec/gstnvdec.c b/subprojects/gst-plugins-bad/sys/nvcodec/gstnvdec.c index 854c6ba7aa..ae473a9a09 100644 --- a/subprojects/gst-plugins-bad/sys/nvcodec/gstnvdec.c +++ b/subprojects/gst-plugins-bad/sys/nvcodec/gstnvdec.c @@ -46,6 +46,7 @@ enum { PROP_0, PROP_MAX_DISPLAY_DELAY, + PROP_CUDA_DEVICE_ID, }; #ifdef HAVE_NVCODEC_GST_GL @@ -197,11 +198,15 @@ gst_nv_dec_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { GstNvDec *nvdec = GST_NVDEC (object); + GstNvDecClass *klass = GST_NVDEC_GET_CLASS (nvdec); switch (prop_id) { case PROP_MAX_DISPLAY_DELAY: g_value_set_int (value, nvdec->max_display_delay); break; + case PROP_CUDA_DEVICE_ID: + g_value_set_uint (value, klass->cuda_device_id); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -247,6 +252,18 @@ gst_nvdec_class_init (GstNvDecClass * klass) "(auto = -1)", -1, G_MAXINT, DEFAULT_MAX_DISPLAY_DELAY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + /** + * GstNvDec:cuda-device-id: + * + * Assigned CUDA device id + * + * Since: 1.22 + */ + g_object_class_install_property (gobject_class, PROP_CUDA_DEVICE_ID, + g_param_spec_uint ("cuda-device-id", "CUDA device id", + "Assigned CUDA device id", 0, G_MAXINT, 0, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); } static void @@ -2050,6 +2067,7 @@ gst_nvdec_subclass_register (GstPlugin * plugin, GType type, gchar *type_name; GstNvDecClassData *cdata; gboolean is_default = TRUE; + gint index = 0; cdata = g_new0 (GstNvDecClassData, 1); cdata->sink_caps = gst_caps_ref (sink_caps); @@ -2066,10 +2084,10 @@ gst_nvdec_subclass_register (GstPlugin * plugin, GType type, type_info.class_data = cdata; type_name = g_strdup_printf ("nv%sdec", codec); - - if (g_type_from_name (type_name) != 0) { + while (g_type_from_name (type_name)) { + index++; g_free (type_name); - type_name = g_strdup_printf ("nv%sdevice%ddec", codec, device_id); + type_name = g_strdup_printf ("nv%sdevice%ddec", codec, index); is_default = FALSE; }