1 #ifndef ESP32CAM_ASYNCWEB_HPP
2 #define ESP32CAM_ASYNCWEB_HPP
4 #if __has_include(<ESPAsyncWebServer.h>)
6 #include <ESPAsyncWebServer.h>
13 explicit CaptureTask(uint32_t queueLength, uint32_t priority = 1);
17 explicit operator bool()
const {
18 return m_queue !=
nullptr && m_task !=
nullptr;
21 void request(
bool continuous =
false);
23 std::unique_ptr<Frame> retrieve();
26 static void run(
void* ctx);
29 void* m_queue =
nullptr;
30 void* m_task =
nullptr;
31 bool m_continuous =
false;
52 class StillResponse :
public AsyncAbstractResponse {
54 explicit StillResponse();
56 ~StillResponse()
override;
58 bool _sourceValid()
const override {
62 size_t _fillBuffer(uint8_t* buf,
size_t buflen)
override;
65 detail::CaptureTask m_task;
66 std::unique_ptr<Frame> m_frame;
72 handleStill(AsyncWebServerRequest* request) {
73 request->send(
new StillResponse());
92 class MjpegResponse :
public AsyncAbstractResponse {
94 explicit MjpegResponse(
const MjpegConfig& cfg = MjpegConfig());
96 ~MjpegResponse()
override;
98 bool _sourceValid()
const override {
102 size_t _fillBuffer(uint8_t* buf,
size_t buflen)
override;
105 size_t sendPart(uint8_t* buf,
size_t buflen);
108 detail::CaptureTask m_task;
109 using Ctrl = detail::MjpegController;
111 detail::MjpegHeader m_hdr;
119 SendItem m_sendNext = SINone;
120 const uint8_t* m_sendBuf =
nullptr;
121 size_t m_sendRemain = 0;
122 unsigned long m_createTime = millis();
123 unsigned long m_sendSince = 0;
128 handleMjpeg(AsyncWebServerRequest* request) {
129 request->send(
new MjpegResponse());