mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-31 22:25:38 -04:00
spa: v4l2: get the device number of the v4l2 device
This value can be used in filtering the camera devices in consultation with libcamera
This commit is contained in:
parent
79518d13ae
commit
6cd29aed05
2 changed files with 10 additions and 3 deletions
|
|
@ -29,6 +29,7 @@ static const char default_device[] = "/dev/video0";
|
|||
|
||||
struct props {
|
||||
char device[64];
|
||||
char devnum[32];
|
||||
char product_id[6];
|
||||
char vendor_id[6];
|
||||
int device_fd;
|
||||
|
|
@ -55,11 +56,11 @@ struct impl {
|
|||
static int emit_info(struct impl *this, bool full)
|
||||
{
|
||||
int res;
|
||||
struct spa_dict_item items[12];
|
||||
struct spa_dict_item items[13];
|
||||
uint32_t n_items = 0;
|
||||
struct spa_device_info info;
|
||||
struct spa_param_info params[2];
|
||||
char path[128], version[16], capabilities[16], device_caps[16];
|
||||
char path[128], version[16], capabilities[16], device_caps[16];
|
||||
|
||||
if ((res = spa_v4l2_open(&this->dev, this->props.device)) < 0)
|
||||
return res;
|
||||
|
|
@ -78,6 +79,7 @@ static int emit_info(struct impl *this, bool full)
|
|||
if (this->props.vendor_id[0])
|
||||
ADD_ITEM(SPA_KEY_DEVICE_VENDOR_ID, this->props.vendor_id);
|
||||
ADD_ITEM(SPA_KEY_API_V4L2_PATH, (char *)this->props.device);
|
||||
ADD_ITEM(SPA_KEY_DEVICE_DEVIDS, (char *)this->props.devnum);
|
||||
ADD_ITEM(SPA_KEY_API_V4L2_CAP_DRIVER, (char *)this->dev.cap.driver);
|
||||
ADD_ITEM(SPA_KEY_API_V4L2_CAP_CARD, (char *)this->dev.cap.card);
|
||||
ADD_ITEM(SPA_KEY_API_V4L2_CAP_BUS_INFO, (char *)this->dev.cap.bus_info);
|
||||
|
|
@ -233,6 +235,8 @@ impl_init(const struct spa_handle_factory *factory,
|
|||
|
||||
if (info && (str = spa_dict_lookup(info, SPA_KEY_API_V4L2_PATH)))
|
||||
strncpy(this->props.device, str, 63);
|
||||
if (info && (str = spa_dict_lookup(info, SPA_KEY_DEVICE_DEVIDS)))
|
||||
strncpy(this->props.devnum, str, 31);
|
||||
if (info && (str = spa_dict_lookup(info, SPA_KEY_DEVICE_PRODUCT_ID)))
|
||||
strncpy(this->props.product_id, str, 5);
|
||||
if (info && (str = spa_dict_lookup(info, SPA_KEY_DEVICE_VENDOR_ID)))
|
||||
|
|
|
|||
|
|
@ -220,8 +220,9 @@ static int emit_object_info(struct impl *this, struct device *device)
|
|||
uint32_t id = device->id;
|
||||
struct udev_device *dev = device->dev;
|
||||
const char *str;
|
||||
struct spa_dict_item items[20];
|
||||
struct spa_dict_item items[21];
|
||||
uint32_t n_items = 0;
|
||||
char devnum[32];
|
||||
|
||||
info = SPA_DEVICE_OBJECT_INFO_INIT();
|
||||
|
||||
|
|
@ -236,6 +237,8 @@ static int emit_object_info(struct impl *this, struct device *device)
|
|||
items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_MEDIA_CLASS, "Video/Device");
|
||||
|
||||
items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_API_V4L2_PATH, udev_device_get_devnode(dev));
|
||||
snprintf(devnum, sizeof(devnum), "%" PRId64, (int64_t)udev_device_get_devnum(dev));
|
||||
items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_DEVICE_DEVIDS, devnum);
|
||||
|
||||
if ((str = udev_device_get_property_value(dev, "USEC_INITIALIZED")) && *str)
|
||||
items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_DEVICE_PLUGGED_USEC, str);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue