mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
v4l2: Remove GstPropertyProbe leftovers
This commit is contained in:
parent
6cf0f19c14
commit
fdceedb77c
1 changed files with 0 additions and 223 deletions
|
@ -66,229 +66,6 @@ enum
|
|||
|
||||
static GSList *gst_v4l2_object_get_format_list (GstV4l2Object * v4l2object);
|
||||
|
||||
#if 0
|
||||
G_LOCK_DEFINE_STATIC (probe_lock);
|
||||
|
||||
const GList *
|
||||
gst_v4l2_probe_get_properties (GstPropertyProbe * probe)
|
||||
{
|
||||
GObjectClass *klass = G_OBJECT_GET_CLASS (probe);
|
||||
static GList *list = NULL;
|
||||
|
||||
G_LOCK (probe_lock);
|
||||
|
||||
if (!list) {
|
||||
list = g_list_append (NULL, g_object_class_find_property (klass, "device"));
|
||||
}
|
||||
|
||||
G_UNLOCK (probe_lock);
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
static gboolean init = FALSE;
|
||||
static GList *devices = NULL;
|
||||
|
||||
#ifdef HAVE_GUDEV
|
||||
static gboolean
|
||||
gst_v4l2_class_probe_devices_with_udev (GstElementClass * klass, gboolean check,
|
||||
GList ** klass_devices)
|
||||
{
|
||||
GUdevClient *client = NULL;
|
||||
GList *item;
|
||||
|
||||
if (!check) {
|
||||
while (devices) {
|
||||
gchar *device = devices->data;
|
||||
devices = g_list_remove (devices, device);
|
||||
g_free (device);
|
||||
}
|
||||
|
||||
GST_INFO ("Enumerating video4linux devices from udev");
|
||||
client = g_udev_client_new (NULL);
|
||||
if (!client) {
|
||||
GST_WARNING ("Failed to initialize gudev client");
|
||||
goto finish;
|
||||
}
|
||||
|
||||
item = g_udev_client_query_by_subsystem (client, "video4linux");
|
||||
while (item) {
|
||||
GUdevDevice *device = item->data;
|
||||
gchar *devnode = g_strdup (g_udev_device_get_device_file (device));
|
||||
gint api = g_udev_device_get_property_as_int (device, "ID_V4L_VERSION");
|
||||
GST_INFO ("Found new device: %s, API: %d", devnode, api);
|
||||
/* Append v4l2 devices only. If api is 0 probably v4l_id has
|
||||
been stripped out of the current udev installation, append
|
||||
anyway */
|
||||
if (api == 0) {
|
||||
GST_WARNING
|
||||
("Couldn't retrieve ID_V4L_VERSION, silly udev installation?");
|
||||
}
|
||||
if ((api == 2 || api == 0)) {
|
||||
devices = g_list_append (devices, devnode);
|
||||
} else {
|
||||
g_free (devnode);
|
||||
}
|
||||
g_object_unref (device);
|
||||
item = item->next;
|
||||
}
|
||||
g_list_free (item);
|
||||
init = TRUE;
|
||||
}
|
||||
|
||||
finish:
|
||||
if (client) {
|
||||
g_object_unref (client);
|
||||
}
|
||||
|
||||
*klass_devices = devices;
|
||||
|
||||
return init;
|
||||
}
|
||||
#endif /* HAVE_GUDEV */
|
||||
|
||||
static gboolean
|
||||
gst_v4l2_class_probe_devices (GstElementClass * klass, gboolean check,
|
||||
GList ** klass_devices)
|
||||
{
|
||||
if (!check) {
|
||||
const gchar *dev_base[] = { "/dev/video", "/dev/v4l2/video", NULL };
|
||||
gint base, n, fd;
|
||||
|
||||
while (devices) {
|
||||
gchar *device = devices->data;
|
||||
devices = g_list_remove (devices, device);
|
||||
g_free (device);
|
||||
}
|
||||
|
||||
/*
|
||||
* detect /dev entries
|
||||
*/
|
||||
for (n = 0; n < 64; n++) {
|
||||
for (base = 0; dev_base[base] != NULL; base++) {
|
||||
struct stat s;
|
||||
gchar *device = g_strdup_printf ("%s%d",
|
||||
dev_base[base],
|
||||
n);
|
||||
|
||||
/*
|
||||
* does the /dev/ entry exist at all?
|
||||
*/
|
||||
if (stat (device, &s) == 0) {
|
||||
/*
|
||||
* yes: is a device attached?
|
||||
*/
|
||||
if (S_ISCHR (s.st_mode)) {
|
||||
|
||||
if ((fd = open (device, O_RDWR | O_NONBLOCK)) > 0 || errno == EBUSY) {
|
||||
if (fd > 0)
|
||||
close (fd);
|
||||
|
||||
devices = g_list_append (devices, device);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
g_free (device);
|
||||
}
|
||||
}
|
||||
init = TRUE;
|
||||
}
|
||||
|
||||
*klass_devices = devices;
|
||||
|
||||
return init;
|
||||
}
|
||||
|
||||
void
|
||||
gst_v4l2_probe_probe_property (GstPropertyProbe * probe,
|
||||
guint prop_id, const GParamSpec * pspec, GList ** klass_devices)
|
||||
{
|
||||
GstElementClass *klass = GST_ELEMENT_GET_CLASS (probe);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_DEVICE:
|
||||
#ifdef HAVE_GUDEV
|
||||
if (!gst_v4l2_class_probe_devices_with_udev (klass, FALSE, klass_devices))
|
||||
gst_v4l2_class_probe_devices (klass, FALSE, klass_devices);
|
||||
#else /* !HAVE_GUDEV */
|
||||
gst_v4l2_class_probe_devices (klass, FALSE, klass_devices);
|
||||
#endif /* HAVE_GUDEV */
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (probe, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
gst_v4l2_probe_needs_probe (GstPropertyProbe * probe,
|
||||
guint prop_id, const GParamSpec * pspec, GList ** klass_devices)
|
||||
{
|
||||
GstElementClass *klass = GST_ELEMENT_GET_CLASS (probe);
|
||||
gboolean ret = FALSE;
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_DEVICE:
|
||||
#ifdef HAVE_GUDEV
|
||||
ret =
|
||||
!gst_v4l2_class_probe_devices_with_udev (klass, FALSE, klass_devices);
|
||||
#else /* !HAVE_GUDEV */
|
||||
ret = !gst_v4l2_class_probe_devices (klass, TRUE, klass_devices);
|
||||
#endif /* HAVE_GUDEV */
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (probe, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static GValueArray *
|
||||
gst_v4l2_class_list_devices (GstElementClass * klass, GList ** klass_devices)
|
||||
{
|
||||
GValueArray *array;
|
||||
GValue value = { 0 };
|
||||
GList *item;
|
||||
|
||||
if (!*klass_devices)
|
||||
return NULL;
|
||||
|
||||
array = g_value_array_new (g_list_length (*klass_devices));
|
||||
item = *klass_devices;
|
||||
g_value_init (&value, G_TYPE_STRING);
|
||||
while (item) {
|
||||
gchar *device = item->data;
|
||||
|
||||
g_value_set_string (&value, device);
|
||||
g_value_array_append (array, &value);
|
||||
|
||||
item = item->next;
|
||||
}
|
||||
g_value_unset (&value);
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
GValueArray *
|
||||
gst_v4l2_probe_get_values (GstPropertyProbe * probe,
|
||||
guint prop_id, const GParamSpec * pspec, GList ** klass_devices)
|
||||
{
|
||||
GstElementClass *klass = GST_ELEMENT_GET_CLASS (probe);
|
||||
GValueArray *array = NULL;
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_DEVICE:
|
||||
array = gst_v4l2_class_list_devices (klass, klass_devices);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (probe, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
#endif
|
||||
|
||||
#define GST_TYPE_V4L2_DEVICE_FLAGS (gst_v4l2_device_get_type ())
|
||||
static GType
|
||||
|
|
Loading…
Reference in a new issue