Throw error in v4l2 when time out

This commit is contained in:
kalman 2018-09-01 20:47:35 +08:00
parent d4343b574a
commit d80d506360

View File

@ -41,6 +41,9 @@ namespace uvc {
LOG(severity) << str << " error " << errno << ", " << strerror(errno); \ LOG(severity) << str << " error " << errno << ", " << strerror(errno); \
} while (0) } while (0)
#define NO_DATA_MAX_COUNT 200
int no_data_count = 0;
/* /*
class device_error : public std::exception { class device_error : public std::exception {
public: public:
@ -194,6 +197,7 @@ struct device {
~device() { ~device() {
VLOG(2) << __func__; VLOG(2) << __func__;
stop_streaming(); stop_streaming();
no_data_count = 0;
if (fd != -1 && close(fd) < 0) { if (fd != -1 && close(fd) < 0) {
LOG_ERROR(WARNING, "close"); LOG_ERROR(WARNING, "close");
} }
@ -386,6 +390,14 @@ struct device {
throw_error("VIDIOC_QBUF"); throw_error("VIDIOC_QBUF");
}); });
} }
no_data_count = 0;
} else {
no_data_count++;
}
if (no_data_count > NO_DATA_MAX_COUNT) {
throw_error("v4l2 get stream time out!");
} }
} }