diff options
author | Alberto Fanjul <albertofanjul@gmail.com> | 2020-09-10 12:19:43 +0200 |
---|---|---|
committer | Alberto Fanjul <albertofanjul@gmail.com> | 2020-09-29 10:06:49 +0200 |
commit | 9d50a8e08956cb8613815d0bee2d1db02c408f64 (patch) | |
tree | ef37625317eed924b1c6d0bcaddc1c4c0e66fa41 | |
parent | c5cf9af92aeff68152f6c298458b2908b5079c7f (diff) | |
download | cheese-9d50a8e08956cb8613815d0bee2d1db02c408f64.tar.gz |
Allow device parameter to understand api.v4l2.pathwip/albfan/device-from-path
-rw-r--r-- | libcheese/cheese-camera-device.c | 43 | ||||
-rw-r--r-- | libcheese/cheese-camera-device.h | 1 | ||||
-rw-r--r-- | libcheese/cheese-camera.c | 5 | ||||
-rw-r--r-- | src/vapi/cheese-common.vapi | 3 |
4 files changed, 50 insertions, 2 deletions
diff --git a/libcheese/cheese-camera-device.c b/libcheese/cheese-camera-device.c index 6d91bd9e..f11dd828 100644 --- a/libcheese/cheese-camera-device.c +++ b/libcheese/cheese-camera-device.c @@ -87,6 +87,7 @@ enum { PROP_0, PROP_NAME, + PROP_PATH, PROP_DEVICE, PROP_LAST }; @@ -99,6 +100,7 @@ typedef struct gchar *name; GstCaps *caps; GList *formats; /* list members are CheeseVideoFormatFull structs. */ + gchar *path; GError *construct_error; } CheeseCameraDevicePrivate; @@ -602,6 +604,9 @@ cheese_camera_device_get_property (GObject *object, guint prop_id, GValue *value case PROP_DEVICE: g_value_set_object (value, priv->device); break; + case PROP_PATH: + g_value_set_string (value, priv->path); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -626,6 +631,12 @@ cheese_camera_device_set_property (GObject *object, guint prop_id, const GValue priv->device = g_value_dup_object (value); g_free (priv->name); priv->name = gst_device_get_display_name (priv->device); + g_free (priv->path); + priv->path = g_value_dup_string (gst_structure_get_value (gst_device_get_properties (priv->device), "api.v4l2.path")); + break; + case PROP_PATH: + g_free (priv->path); + priv->path = g_value_dup_string (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -641,6 +652,7 @@ cheese_camera_device_finalize (GObject *object) g_object_unref (priv->device); g_free (priv->name); + g_free (priv->path); gst_caps_unref (priv->caps); free_format_list (device); @@ -679,6 +691,18 @@ cheese_camera_device_class_init (CheeseCameraDeviceClass *klass) G_PARAM_STATIC_STRINGS); /** + * CheeseCameraDevice:path: + * + * Path of the video capture device. + */ + properties[PROP_PATH] = g_param_spec_string ("path", + "Device path", + "Path of the video capture device", + NULL, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS); + /** * CheeseCameraDevice:device: * * GStreamer device object of the video capture device. @@ -782,6 +806,25 @@ cheese_camera_device_get_format_list (CheeseCameraDevice *device) } /** + * cheese_camera_device_get_path: + * @device: a #CheeseCameraDevice + * + * Get path for the device, as reported by udev. + * + * Returns: (transfer none): the path of the video capture device + */ +const gchar * +cheese_camera_device_get_path (CheeseCameraDevice *device) +{ + CheeseCameraDevicePrivate *priv; + + g_return_val_if_fail (CHEESE_IS_CAMERA_DEVICE (device), NULL); + + priv = cheese_camera_device_get_instance_private (device); + + return priv->path; +} +/** * cheese_camera_device_get_name: * @device: a #CheeseCameraDevice * diff --git a/libcheese/cheese-camera-device.h b/libcheese/cheese-camera-device.h index 5e6b3ca5..860757d7 100644 --- a/libcheese/cheese-camera-device.h +++ b/libcheese/cheese-camera-device.h @@ -73,6 +73,7 @@ CheeseVideoFormat *cheese_camera_device_get_best_format (CheeseCameraDevice *dev GList * cheese_camera_device_get_format_list (CheeseCameraDevice *device); const gchar *cheese_camera_device_get_name (CheeseCameraDevice *device); +const gchar *cheese_camera_device_get_path (CheeseCameraDevice *device); GstElement * cheese_camera_device_get_src (CheeseCameraDevice *device); GstCaps * cheese_camera_device_supported_format_caps (void); diff --git a/libcheese/cheese-camera.c b/libcheese/cheese-camera.c index c6cb44a2..5d23e725 100644 --- a/libcheese/cheese-camera.c +++ b/libcheese/cheese-camera.c @@ -1594,8 +1594,9 @@ cheese_camera_setup (CheeseCamera *camera, CheeseCameraDevice *device, GError ** { device = g_ptr_array_index (priv->camera_devices, i); - if (g_strcmp0 (cheese_camera_device_get_name (device), - priv->initial_name) == 0) + if (g_strcmp0 (cheese_camera_device_get_name (device), priv->initial_name) == 0 || + g_strcmp0 (cheese_camera_device_get_path (device), priv->initial_name) == 0 + ) { cheese_camera_set_device (camera, device); break; diff --git a/src/vapi/cheese-common.vapi b/src/vapi/cheese-common.vapi index 2ee13f18..6517cdfc 100644 --- a/src/vapi/cheese-common.vapi +++ b/src/vapi/cheese-common.vapi @@ -78,11 +78,14 @@ namespace Cheese public Gst.Caps get_caps_for_format (Cheese.VideoFormat format); public GLib.List<unowned Cheese.VideoFormat> get_format_list (); public unowned string get_name (); + public unowned string get_path (); public Gst.Element get_src (); [NoAccessorMethod] public Gst.Device device {get; construct;} [NoAccessorMethod] public string name {get;} + [NoAccessorMethod] + public string path {get;} } [CCode (cheader_filename = "cheese-camera-device-monitor.h")] |