1#ifndef ESP32CAM_ASYNCWEB_HPP
2#define ESP32CAM_ASYNCWEB_HPP
4#if __has_include(<ESPAsyncWebServer.h>)
6#include <ESPAsyncWebServer.h>
26 explicit CaptureTask(uint32_t queueLength, uint32_t priority = 1,
bool continuous =
false);
30 explicit operator bool()
const {
31 return m_queue !=
nullptr && m_task !=
nullptr;
36 std::unique_ptr<Frame> retrieve();
39 static void run0(
void* ctx);
44 void* m_queue =
nullptr;
45 void* m_task =
nullptr;
67class StillResponse :
public AsyncAbstractResponse {
69 explicit StillResponse();
71 ~StillResponse()
override;
73 bool _sourceValid()
const override {
77 size_t _fillBuffer(uint8_t* buf,
size_t buflen)
override;
80 detail::CaptureTask m_task;
81 std::unique_ptr<Frame> m_frame;
87handleStill(AsyncWebServerRequest* request) {
88 request->send(
new StillResponse());
107class MjpegResponse :
public AsyncAbstractResponse {
109 explicit MjpegResponse(
const MjpegConfig& cfg = MjpegConfig());
111 ~MjpegResponse()
override;
113 bool _sourceValid()
const override {
117 size_t _fillBuffer(uint8_t* buf,
size_t buflen)
override;
120 size_t sendPart(uint8_t* buf,
size_t buflen);
123 detail::CaptureTask m_task;
124 using Ctrl = detail::MjpegController;
126 detail::MjpegHeader m_hdr;
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;
142handleMjpeg(AsyncWebServerRequest* request) {
143 request->send(
new MjpegResponse());