From 847726c0d7658de3302bf0983b19653ace07273b Mon Sep 17 00:00:00 2001 From: Devaev Maxim Date: Mon, 7 Dec 2020 13:26:27 +0300 Subject: [PATCH] refactoring --- src/ustreamer/device.c | 16 +++++++++++++++- src/ustreamer/device.h | 1 + src/ustreamer/stream.c | 18 +----------------- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/ustreamer/device.c b/src/ustreamer/device.c index 2501c42..d3e1a2f 100644 --- a/src/ustreamer/device.c +++ b/src/ustreamer/device.c @@ -199,6 +199,7 @@ int device_open(struct device_t *dev) { } void device_close(struct device_t *dev) { + dev->run->persistent_timeout_reported = false; dev->run->n_workers = 0; if (dev->run->pictures) { @@ -292,8 +293,21 @@ int device_select(struct device_t *dev, bool *has_read, bool *has_write, bool *h *has_write = false; *has_error = false; } - LOG_DEBUG("Device select() --> %d", retval); + + if (retval > 0) { + dev->run->persistent_timeout_reported = false; + } else if (retval == 0) { + if (dev->persistent) { + if (!dev->run->persistent_timeout_reported) { + LOG_ERROR("Persistent device timeout (unplugged)"); + dev->run->persistent_timeout_reported = true; + } + } else { + // Если устройство не персистентное, то таймаут является ошибкой + retval = -1; + } + } return retval; } diff --git a/src/ustreamer/device.h b/src/ustreamer/device.h index 9831984..3238884 100644 --- a/src/ustreamer/device.h +++ b/src/ustreamer/device.h @@ -71,6 +71,7 @@ struct device_runtime_t { struct hw_buffer_t *hw_buffers; struct picture_t **pictures; bool capturing; + bool persistent_timeout_reported; }; enum control_mode_t { diff --git a/src/ustreamer/stream.c b/src/ustreamer/stream.c index 0013462..5710aed 100644 --- a/src/ustreamer/stream.c +++ b/src/ustreamer/stream.c @@ -139,7 +139,6 @@ void stream_loop(struct stream_t *stream) { unsigned captured_fps = 0; unsigned captured_fps_accum = 0; long long captured_fps_second = 0; - bool persistent_timeout_reported = false; LOG_INFO("Capturing ..."); @@ -183,26 +182,11 @@ void stream_loop(struct stream_t *stream) { LOG_PERROR("Mainloop select() error"); break; } - - } else if (selected == 0) { + } else if (selected == 0) { // Persistent timeout # ifdef WITH_GPIO gpio_set_stream_online(false); # endif - - if (stream->dev->persistent) { - if (!persistent_timeout_reported) { - LOG_ERROR("Mainloop select() timeout, polling ...") - persistent_timeout_reported = true; - } - continue; - } else { - LOG_ERROR("Mainloop select() timeout"); - break; - } - } else { - persistent_timeout_reported = false; - if (has_read) { LOG_DEBUG("Frame is ready");