:right-sidebar: True DeviceMonitor =================================================================== .. currentmodule:: gi.repository.Gst .. versionadded:: 1.4 .. class:: DeviceMonitor(**properties: ~typing.Any) :no-contents-entry: Superclasses: :class:`~gi.repository.Gst.Object`, :class:`~gi.repository.GObject.InitiallyUnowned`, :class:`~gi.repository.GObject.Object` Applications should create a :obj:`~gi.repository.Gst.DeviceMonitor` when they want to probe, list and monitor devices of a specific type. The :obj:`~gi.repository.Gst.DeviceMonitor` will create the appropriate :obj:`~gi.repository.Gst.DeviceProvider` objects and manage them. It will then post messages on its :obj:`~gi.repository.Gst.Bus` for devices that have been added and removed. The device monitor will monitor all devices matching the filters that the application has set. The basic use pattern of a device monitor is as follows: .. code-block:: :dedent: static gboolean my_bus_func (GstBus * bus, GstMessage * message, gpointer user_data) { GstDevice *device; gchar *name; switch (GST_MESSAGE_TYPE (message)) { case GST_MESSAGE_DEVICE_ADDED: gst_message_parse_device_added (message, &device); name = gst_device_get_display_name (device); g_print("Device added: %s\n", name); g_free (name); gst_object_unref (device); break; case GST_MESSAGE_DEVICE_REMOVED: gst_message_parse_device_removed (message, &device); name = gst_device_get_display_name (device); g_print("Device removed: %s\n", name); g_free (name); gst_object_unref (device); break; default: break; } return G_SOURCE_CONTINUE; } GstDeviceMonitor * setup_raw_video_source_device_monitor (void) { GstDeviceMonitor *monitor; GstBus *bus; GstCaps *caps; monitor = gst_device_monitor_new (); bus = gst_device_monitor_get_bus (monitor); gst_bus_add_watch (bus, my_bus_func, NULL); gst_object_unref (bus); caps = gst_caps_new_empty_simple ("video/x-raw"); gst_device_monitor_add_filter (monitor, "Video/Source", caps); gst_caps_unref (caps); gst_device_monitor_start (monitor); return monitor; } Constructors ------------ .. rst-class:: interim-class .. class:: DeviceMonitor :no-index: .. classmethod:: new() -> ~gi.repository.Gst.DeviceMonitor Create a new :obj:`~gi.repository.Gst.DeviceMonitor` .. versionadded:: 1.4 Methods ------- .. rst-class:: interim-class .. class:: DeviceMonitor :no-index: .. method:: add_filter(classes: str | None = None, caps: ~gi.repository.Gst.Caps | None = None) -> int Adds a filter for which :obj:`~gi.repository.Gst.Device` will be monitored, any device that matches all these classes and the :obj:`~gi.repository.Gst.Caps` will be returned. If this function is called multiple times to add more filters, each will be matched independently. That is, adding more filters will not further restrict what devices are matched. The :obj:`~gi.repository.Gst.Caps` supported by the device as returned by :func:`~gi.repository.Gst.Device.get_caps` are not intersected with caps filters added using this function. Filters must be added before the :obj:`~gi.repository.Gst.DeviceMonitor` is started. .. versionadded:: 1.4 :param classes: device classes to use as filter or :const:`None` for any class :param caps: the :obj:`~gi.repository.Gst.Caps` to filter or :const:`None` for ANY .. method:: get_bus() -> ~gi.repository.Gst.Bus Gets the :obj:`~gi.repository.Gst.Bus` of this :obj:`~gi.repository.Gst.DeviceMonitor` .. versionadded:: 1.4 .. method:: get_devices() -> list[~gi.repository.Gst.Device] | None Gets a list of devices from all of the relevant monitors. This may actually probe the hardware if the monitor is not currently started. .. versionadded:: 1.4 .. method:: get_providers() -> list[str] Get a list of the currently selected device provider factories. This .. versionadded:: 1.6 .. method:: get_show_all_devices() -> bool Get if ``monitor`` is currently showing all devices, even those from hidden providers. .. versionadded:: 1.6 .. method:: remove_filter(filter_id: int) -> bool Removes a filter from the :obj:`~gi.repository.Gst.DeviceMonitor` using the id that was returned by :func:`~gi.repository.Gst.DeviceMonitor.add_filter`. .. versionadded:: 1.4 :param filter_id: the id of the filter .. method:: set_show_all_devices(show_all: bool) -> None Set if all devices should be visible, even those devices from hidden providers. Setting ``show_all`` to true might show some devices multiple times. .. versionadded:: 1.6 :param show_all: show all devices .. method:: start() -> bool Starts monitoring the devices, one this has succeeded, the :const:`~gi.repository.Gst.MessageType.DEVICE_ADDED` and :const:`~gi.repository.Gst.MessageType.DEVICE_REMOVED` messages will be emitted on the bus when the list of devices changes. .. versionadded:: 1.4 .. method:: stop() -> None Stops monitoring the devices. .. versionadded:: 1.4 Properties ---------- .. rst-class:: interim-class .. class:: DeviceMonitor :no-index: .. attribute:: props.show_all :type: bool The type of the None singleton. Fields ------ .. rst-class:: interim-class .. class:: DeviceMonitor :no-index: .. attribute:: parent The parent :obj:`~gi.repository.Gst.Object` structure .. attribute:: priv