c-programming programming snippet
#include <linux/videodev2.h> #include <libv4l2.h> #include <glib.h> #include <fcntl.h> #include <sys/ioctl.h> enumerate = udev_enumerate_new(udev); udev_enumerate_add_match_subsystem(enumerate, "video4linux"); udev_enumerate_scan_devices(enumerate); devices = udev_enumerate_get_list_entry(enumerate); /* For each item enumerated, print out its information. udev_list_entry_foreach is a macro which expands to a loop. The loop will be executed for each member in devices, setting dev_list_entry to a list entry which contains the device's path in /sys. */ udev_list_entry_foreach(dev_list_entry, devices) { const char *path; /* Get the filename of the /sys entry for the device and create a udev_device object (dev) representing it */ path = udev_list_entry_get_name(dev_list_entry); dev = udev_device_new_from_syspath(udev, path); std::cout << "DEV: " << dev << std::endl; std::cout << "PATH: " << *path << std::endl; /* usb_device_get_devnode() returns the path to the device node itself in /dev. */ const gchar *v4l2_device = udev_device_get_devnode(dev); /* open the device and query the capabilities */ if ((fd = v4l2_open(v4l2_device, O_RDWR | O_NONBLOCK, 0)) < 0) { g_printerr("ERROR opening V4L2 interface for %s\n", v4l2_device); v4l2_close(fd); continue; /*next dir entry*/ } if (xioctl(fd, VIDIOC_QUERYCAP, &v4l2_cap) < 0) { perror("VIDIOC_QUERYCAP error"); g_printerr(" couldn't query device %s\n", v4l2_device); v4l2_close(fd); continue; /*next dir entry*/ } v4l2_close(fd); }