Browse Source

Merge pull request #3096

initramfs (1):
      fix(video): usage of invalid file descriptors on error
pull/3102/head
sudden6 9 years ago
parent
commit
20a61e4cc3
No known key found for this signature in database
GPG Key ID: 279509B499E032B9
  1. 22
      src/platform/camera/v4l2.cpp

22
src/platform/camera/v4l2.cpp

@ -56,28 +56,29 @@ static std::map<uint32_t,QString> createPixFmtToName() @@ -56,28 +56,29 @@ static std::map<uint32_t,QString> createPixFmtToName()
}
const std::map<uint32_t,QString> pixFmtToName = createPixFmtToName();
static int deviceOpen(QString devName)
static int deviceOpen(QString devName, int* error)
{
struct v4l2_capability cap;
int fd;
int err;
fd = open(devName.toStdString().c_str(), O_RDWR, 0);
if (fd < 0)
return errno;
if (fd < 0) {
*error = errno;
return fd;
}
if (ioctl(fd, VIDIOC_QUERYCAP, &cap) < 0) {
err = errno;
*error = errno;
goto fail;
}
if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
err = ENODEV;
*error = ENODEV;
goto fail;
}
if (!(cap.capabilities & V4L2_CAP_STREAMING)) {
err = ENOSYS;
*error = ENOSYS;
goto fail;
}
@ -85,7 +86,7 @@ static int deviceOpen(QString devName) @@ -85,7 +86,7 @@ static int deviceOpen(QString devName)
fail:
close(fd);
return err;
return -1;
}
static QVector<unsigned short> getDeviceModeFramerates(int fd, unsigned w, unsigned h, uint32_t pixelFormat)
@ -120,8 +121,9 @@ QVector<VideoMode> v4l2::getDeviceModes(QString devName) @@ -120,8 +121,9 @@ QVector<VideoMode> v4l2::getDeviceModes(QString devName)
{
QVector<VideoMode> modes;
int fd = deviceOpen(devName);
if (fd < 0)
int error = 0;
int fd = deviceOpen(devName, &error);
if (fd < 0 || error != 0)
return modes;
v4l2_fmtdesc vfd{};
vfd.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

Loading…
Cancel
Save