|
11 | 11 | namespace esp32cam { |
12 | 12 | namespace detail { |
13 | 13 |
|
14 | | -CaptureTask::CaptureTask(uint32_t queueLength, uint32_t priority, int core) { |
| 14 | +CaptureTask::CaptureTask(uint32_t queueLength, uint32_t priority) { |
15 | 15 | m_queue = xQueueCreate(queueLength, sizeof(Frame*)); |
16 | 16 | if (m_queue == nullptr) { |
17 | 17 | return; |
@@ -41,10 +41,11 @@ CaptureTask::~CaptureTask() { |
41 | 41 | } |
42 | 42 |
|
43 | 43 | void |
44 | | -CaptureTask::request() { |
45 | | - if (m_task == nullptr) { |
| 44 | +CaptureTask::request(bool continuous) { |
| 45 | + if (m_task == nullptr || m_continuous) { |
46 | 46 | return; |
47 | 47 | } |
| 48 | + m_continuous = continuous; |
48 | 49 | xTaskNotify(reinterpret_cast<TaskHandle_t>(m_task), 1, eSetValueWithOverwrite); |
49 | 50 | } |
50 | 51 |
|
|
62 | 63 | CaptureTask::run(void* ctx) { |
63 | 64 | auto self = reinterpret_cast<CaptureTask*>(ctx); |
64 | 65 | while (true) { |
65 | | - uint32_t value = 0; |
66 | | - xTaskNotifyWait(0, UINT32_MAX, &value, pdMS_TO_TICKS(10000)); |
67 | | - if (value == 0) { |
68 | | - continue; |
| 66 | + if (!self->m_continuous) { |
| 67 | + uint32_t value = 0; |
| 68 | + xTaskNotifyWait(0, UINT32_MAX, &value, pdMS_TO_TICKS(10000)); |
| 69 | + if (value == 0) { |
| 70 | + continue; |
| 71 | + } |
69 | 72 | } |
70 | 73 |
|
71 | 74 | auto frame = Camera.capture().release(); |
@@ -173,7 +176,7 @@ MjpegResponse::_fillBuffer(uint8_t* buf, size_t buflen) { |
173 | 176 | // fallthrough |
174 | 177 | } |
175 | 178 | case Ctrl::CAPTURE: { |
176 | | - m_task.request(); |
| 179 | + m_task.request(m_ctrl.cfg.minInterval < 0); |
177 | 180 | m_ctrl.notifyCapture(); |
178 | 181 | return RESPONSE_TRY_AGAIN; |
179 | 182 | } |
|
0 commit comments