Support UVC cameras somewhat

This commit is contained in:
Martijn Braam
2023-07-09 21:31:51 +02:00
parent b13d15d5de
commit e4a39c4747
8 changed files with 218 additions and 71 deletions

View File

@@ -129,16 +129,20 @@ libmegapixels_open(libmegapixels_camera *camera)
return -1;
}
camera->media_fd = open(camera->media_path, O_RDWR);
if (camera->media_fd < 0) {
log_error("Could not open %s: %s\n", camera->media_path, strerror(errno));
return -1;
if (camera->media_path) {
camera->media_fd = open(camera->media_path, O_RDWR);
if (camera->media_fd < 0) {
log_error("Could not open %s: %s\n", camera->media_path, strerror(errno));
return -1;
}
}
camera->sensor_fd = open(camera->sensor_path, O_RDWR);
if (camera->sensor_fd < 0) {
log_error("Could not open %s: %s\n", camera->sensor_path, strerror(errno));
return -1;
if (camera->sensor_path) {
camera->sensor_fd = open(camera->sensor_path, O_RDWR);
if (camera->sensor_fd < 0) {
log_error("Could not open %s: %s\n", camera->sensor_path, strerror(errno));
return -1;
}
}
camera->video_fd = open(camera->video_path, O_RDWR);
@@ -147,9 +151,16 @@ libmegapixels_open(libmegapixels_camera *camera)
return -1;
}
int ret = load_entity_ids(camera);
if (ret < 0) {
return ret;
// If this is an UVC camera the sensor _is_ the video device
if (camera->sensor_fd == 0) {
camera->sensor_fd = camera->video_fd;
}
if (camera->media_fd > 0) {
int ret = load_entity_ids(camera);
if (ret < 0) {
return ret;
}
}
return 0;
@@ -158,6 +169,11 @@ libmegapixels_open(libmegapixels_camera *camera)
void
libmegapixels_close(libmegapixels_camera *camera)
{
int uvc = 0;
if (camera->sensor_fd != 0 && camera->sensor_fd == camera->video_fd) {
uvc = 1;
}
if (camera->media_fd != 0) {
close(camera->media_fd);
camera->media_fd = 0;
@@ -165,6 +181,9 @@ libmegapixels_close(libmegapixels_camera *camera)
if (camera->sensor_fd != 0) {
close(camera->sensor_fd);
camera->sensor_fd = 0;
if (uvc) {
camera->video_fd = 0;
}
}
if (camera->video_fd != 0) {
close(camera->video_fd);