@@ -15,29 +15,25 @@ namespace esp32cam {
15
15
namespace asyncweb {
16
16
17
17
/* * @brief HTTP response of one still image. */
18
- class StillResponse : public AsyncAbstractResponse
19
- {
18
+ class StillResponse : public AsyncAbstractResponse {
20
19
public:
21
20
/* *
22
21
* @brief Constructor.
23
22
* @param frame a frame of still image.
24
23
*/
25
24
explicit StillResponse (std::unique_ptr<Frame> frame)
26
- : m_frame(std::move(frame))
27
- {
25
+ : m_frame(std::move(frame)) {
28
26
_code = 200 ;
29
27
_contentType = determineMineType (*m_frame);
30
28
_contentLength = m_frame->size ();
31
29
_sendContentLength = true ;
32
30
}
33
31
34
- bool _sourceValid () const override
35
- {
32
+ bool _sourceValid () const override {
36
33
return true ;
37
34
}
38
35
39
- size_t _fillBuffer (uint8_t * buf, size_t buflen) override
40
- {
36
+ size_t _fillBuffer (uint8_t * buf, size_t buflen) override {
41
37
if (m_index >= m_frame->size ()) {
42
38
return 0 ;
43
39
}
@@ -55,8 +51,7 @@ class StillResponse : public AsyncAbstractResponse
55
51
*
56
52
* This function must run as a FreeRTOS task. It self-deletes upon completion.
57
53
*/
58
- static void captureTask (void * ctx)
59
- {
54
+ static void captureTask (void * ctx) {
60
55
auto request = reinterpret_cast <AsyncWebServerRequest*>(ctx);
61
56
62
57
auto frame = Camera.capture ();
@@ -70,8 +65,7 @@ class StillResponse : public AsyncAbstractResponse
70
65
}
71
66
72
67
private:
73
- static const char * determineMineType (const Frame& frame)
74
- {
68
+ static const char * determineMineType (const Frame& frame) {
75
69
if (frame.isJpeg ()) {
76
70
return " image/jpeg" ;
77
71
}
@@ -99,8 +93,7 @@ class StillResponse : public AsyncAbstractResponse
99
93
* to do these, and then call this function.
100
94
*/
101
95
inline void
102
- handleStill (AsyncWebServerRequest* request)
103
- {
96
+ handleStill (AsyncWebServerRequest* request) {
104
97
TaskHandle_t task;
105
98
auto res = xTaskCreatePinnedToCore (StillResponse::captureTask, " esp32cam-still" , 2048 , request, 1 ,
106
99
&task, xPortGetCoreID ());
@@ -119,12 +112,10 @@ handleStill(AsyncWebServerRequest* request)
119
112
* If task creation fails, respond with HTTP 500 error.
120
113
* If image capture fails, the stream is stopped.
121
114
*/
122
- class MjpegResponse : public AsyncAbstractResponse
123
- {
115
+ class MjpegResponse : public AsyncAbstractResponse {
124
116
public:
125
117
explicit MjpegResponse (const MjpegConfig& cfg = MjpegConfig())
126
- : m_ctrl(cfg)
127
- {
118
+ : m_ctrl(cfg) {
128
119
m_queue = xQueueCreate (4 , sizeof (Frame*));
129
120
if (xTaskCreatePinnedToCore (captureTask, " esp32cam-mjpeg" , 2048 , this , 1 , &m_task,
130
121
xPortGetCoreID ()) != pdPASS) {
@@ -142,8 +133,7 @@ class MjpegResponse : public AsyncAbstractResponse
142
133
_sendContentLength = false ;
143
134
}
144
135
145
- ~MjpegResponse () override
146
- {
136
+ ~MjpegResponse () override {
147
137
if (m_task != nullptr ) {
148
138
vTaskDelete (m_task);
149
139
m_task = nullptr ;
@@ -159,13 +149,11 @@ class MjpegResponse : public AsyncAbstractResponse
159
149
}
160
150
}
161
151
162
- bool _sourceValid () const override
163
- {
152
+ bool _sourceValid () const override {
164
153
return true ;
165
154
}
166
155
167
- size_t _fillBuffer (uint8_t * buf, size_t buflen) override
168
- {
156
+ size_t _fillBuffer (uint8_t * buf, size_t buflen) override {
169
157
auto act = m_ctrl.decideAction ();
170
158
switch (act) {
171
159
case Ctrl::CAPTURE: {
@@ -201,8 +189,7 @@ class MjpegResponse : public AsyncAbstractResponse
201
189
}
202
190
203
191
private:
204
- static void captureTask (void * ctx)
205
- {
192
+ static void captureTask (void * ctx) {
206
193
auto self = reinterpret_cast <MjpegResponse*>(ctx);
207
194
while (true ) {
208
195
uint32_t value = 0 ;
@@ -218,8 +205,7 @@ class MjpegResponse : public AsyncAbstractResponse
218
205
}
219
206
}
220
207
221
- size_t sendPart (uint8_t * buf, size_t buflen)
222
- {
208
+ size_t sendPart (uint8_t * buf, size_t buflen) {
223
209
if (m_sendRemain == 0 ) {
224
210
switch (m_sendNext) {
225
211
case SIPartHeader:
@@ -259,8 +245,7 @@ class MjpegResponse : public AsyncAbstractResponse
259
245
Ctrl m_ctrl;
260
246
detail::MjpegHeader m_hdr;
261
247
262
- enum SendItem
263
- {
248
+ enum SendItem {
264
249
SINone,
265
250
SIPartHeader,
266
251
SIFrame,
@@ -277,8 +262,7 @@ class MjpegResponse : public AsyncAbstractResponse
277
262
* To specify MjpegConfig, construct MjpegResponse directly.
278
263
*/
279
264
inline void
280
- handleMjpeg (AsyncWebServerRequest* request)
281
- {
265
+ handleMjpeg (AsyncWebServerRequest* request) {
282
266
request->send (new MjpegResponse ());
283
267
}
284
268
0 commit comments