Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:liguros
obs-studio
linux-v4l2-device-path.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File linux-v4l2-device-path.patch of Package obs-studio
Common subdirectories: obs-studio-26.1.2/plugins/linux-v4l2/data and obs-studio-26.1.2-fixed/plugins/linux-v4l2/data diff -u obs-studio-26.1.2/plugins/linux-v4l2/v4l2-input.c obs-studio-26.1.2-fixed/plugins/linux-v4l2/v4l2-input.c --- obs-studio-26.1.2/plugins/linux-v4l2/v4l2-input.c 2021-01-09 00:43:39.000000000 +0100 +++ obs-studio-26.1.2-fixed/plugins/linux-v4l2/v4l2-input.c 2021-04-10 16:48:05.995426766 +0200 @@ -53,11 +53,11 @@ #define timeval2ns(tv) \ (((uint64_t)tv.tv_sec * 1000000000) + ((uint64_t)tv.tv_usec * 1000)) -#define V4L2_FOURCC_STR(code) \ - (char[5]) \ - { \ - code & 0xFF, (code >> 8) & 0xFF, (code >> 16) & 0xFF, \ - (code >> 24) & 0xFF, 0 \ +#define V4L2_FOURCC_STR(code) \ + (char[5]) \ + { \ + (code >> 24) & 0xFF, (code >> 16) & 0xFF, (code >> 8) & 0xFF, \ + code & 0xFF, 0 \ } #define blog(level, msg, ...) blog(level, "v4l2-input: " msg, ##__VA_ARGS__) @@ -123,7 +123,7 @@ switch (data->pixfmt) { case V4L2_PIX_FMT_NV12: frame->linesize[0] = data->linesize; - frame->linesize[1] = data->linesize; + frame->linesize[1] = data->linesize / 2; plane_offsets[1] = data->linesize * data->height; break; case V4L2_PIX_FMT_YVU420: @@ -276,10 +276,12 @@ const char *cur_device_name; #ifdef __FreeBSD__ - dirp = opendir("/dev"); + const char *basedir = "/dev/"; #else - dirp = opendir("/sys/class/video4linux"); + const char *basedir = "/dev/v4l/by-path/"; #endif + + dirp = opendir(basedir); if (!dirp) return; @@ -288,7 +290,7 @@ obs_property_list_clear(prop); - dstr_init_copy(&device, "/dev/"); + dstr_init(&device); while ((dp = readdir(dirp)) != NULL) { int fd; @@ -303,8 +305,16 @@ if (dp->d_type == DT_DIR) continue; - dstr_resize(&device, 5); - dstr_cat(&device, dp->d_name); + char *dev_path = dp->d_name; + + char buf[1024]; + ssize_t len; + if ((len = readlink(dp->d_name, buf, sizeof(buf) - 1)) != -1) { + buf[len] = '\0'; + dev_path = &buf[0]; + } + dstr_copy(&device, basedir); + dstr_cat(&device, dev_path); if ((fd = v4l2_open(device.array, O_RDWR | O_NONBLOCK)) == -1) { blog(LOG_INFO, "Unable to open %s", device.array);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor