esp32cam
OV2640 camera on ESP32-CAM
Loading...
Searching...
No Matches
asyncweb.hpp
Go to the documentation of this file.
1#ifndef ESP32CAM_ASYNCWEB_HPP
2#define ESP32CAM_ASYNCWEB_HPP
3
4#if __has_include(<ESPAsyncWebServer.h>)
5#include "camera.hpp"
6#include <ESPAsyncWebServer.h>
7
8namespace esp32cam {
9namespace detail {
10
24class CaptureTask {
25public:
26 explicit CaptureTask(uint32_t queueLength, uint32_t priority = 1, bool continuous = false);
27
28 ~CaptureTask();
29
30 explicit operator bool() const {
31 return m_queue != nullptr && m_task != nullptr;
32 }
33
34 void request();
35
36 std::unique_ptr<Frame> retrieve();
37
38private:
39 static void run0(void* ctx);
40
41 void run();
42
43private:
44 void* m_queue = nullptr;
45 void* m_task = nullptr;
46 bool m_continuous;
47};
48
49} // namespace detail
50
55namespace asyncweb {
56
67class StillResponse : public AsyncAbstractResponse {
68public:
69 explicit StillResponse();
70
71 ~StillResponse() override;
72
73 bool _sourceValid() const override {
74 return true;
75 }
76
77 size_t _fillBuffer(uint8_t* buf, size_t buflen) override;
78
79private:
80 detail::CaptureTask m_task;
81 std::unique_ptr<Frame> m_frame;
82 size_t m_index = 0;
83};
84
86inline void
87handleStill(AsyncWebServerRequest* request) {
88 request->send(new StillResponse());
89}
90
107class MjpegResponse : public AsyncAbstractResponse {
108public:
109 explicit MjpegResponse(const MjpegConfig& cfg = MjpegConfig());
110
111 ~MjpegResponse() override;
112
113 bool _sourceValid() const override {
114 return true;
115 }
116
117 size_t _fillBuffer(uint8_t* buf, size_t buflen) override;
118
119private:
120 size_t sendPart(uint8_t* buf, size_t buflen);
121
122private:
123 detail::CaptureTask m_task;
124 using Ctrl = detail::MjpegController;
125 Ctrl m_ctrl;
126 detail::MjpegHeader m_hdr;
127
128 enum SendItem {
129 SINone,
130 SIBoundary,
131 SIFrame,
132 };
133 SendItem m_sendNext = SINone;
134 const uint8_t* m_sendBuf = nullptr;
135 size_t m_sendRemain = 0;
136 unsigned long m_createTime = millis();
137 unsigned long m_sendSince = 0;
138};
139
141inline void
142handleMjpeg(AsyncWebServerRequest* request) {
143 request->send(new MjpegResponse());
144}
145
146} // namespace asyncweb
147} // namespace esp32cam
148
149#endif // __has_include(<ESPAsyncWebServer.h>)
150#endif // ESP32CAM_ASYNCWEB_HPP
Definition esp32cam.h:14