🪄 Formats CameraService

This commit is contained in:
Rune Harlyk
2024-07-09 20:03:28 +02:00
committed by Rune Harlyk
parent 74c2285800
commit bbc7498653
3 changed files with 43 additions and 59 deletions
+12 -21
View File
@@ -1,10 +1,8 @@
#include <CameraService.h>
static const char *_STREAM_CONTENT_TYPE =
"multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
static const char *_STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
static const char *_STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n";
static const char *_STREAM_PART =
"Content-Type: image/jpeg\r\nContent-Length: %u\r\n\r\n";
static const char *_STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\n\r\n";
SemaphoreHandle_t cameraMutex = xSemaphoreCreateMutex();
@@ -27,23 +25,15 @@ sensor_t *safe_sensor_get() {
void safe_sensor_return() { xSemaphoreGive(cameraMutex); }
CameraService::CameraService(PsychicHttpServer *server,
TaskManager *taskManager,
SecurityManager *securityManager)
: _server(server),
_taskManager(taskManager),
_securityManager(securityManager) {}
CameraService::CameraService(PsychicHttpServer *server, TaskManager *taskManager, SecurityManager *securityManager)
: _server(server), _taskManager(taskManager), _securityManager(securityManager) {}
void CameraService::begin() {
InitializeCamera();
_server->on(
STILL_SERVICE_PATH, HTTP_GET,
_securityManager->wrapRequest(
std::bind(&CameraService::cameraStill, this, std::placeholders::_1),
_server->on(STILL_SERVICE_PATH, HTTP_GET,
_securityManager->wrapRequest(std::bind(&CameraService::cameraStill, this, std::placeholders::_1),
AuthenticationPredicates::IS_AUTHENTICATED));
_server->on(STREAM_SERVICE_PATH, HTTP_GET,
_securityManager->wrapRequest(
std::bind(&CameraService::cameraStream, this,
std::placeholders::_1),
_securityManager->wrapRequest(std::bind(&CameraService::cameraStream, this, std::placeholders::_1),
AuthenticationPredicates::IS_AUTHENTICATED));
ESP_LOGV("CameraService", "Registered GET endpoint: %s", STILL_SERVICE_PATH);
@@ -89,8 +79,10 @@ esp_err_t CameraService::InitializeCamera() {
log_i("Initializing camera");
esp_err_t err = esp_camera_init(&camera_config);
if (err == ESP_OK) ESP_LOGI("CameraService", "Camera probe successful");
else ESP_LOGE("CameraService", "Camera probe failed with error 0x%x", err);
if (err == ESP_OK)
ESP_LOGI("CameraService", "Camera probe successful");
else
ESP_LOGE("CameraService", "Camera probe failed with error 0x%x", err);
return err;
}
@@ -102,8 +94,7 @@ esp_err_t CameraService::cameraStill(PsychicRequest *request) {
request->reply(500, "text/plain", "Camera capture failed");
return ESP_FAIL;
}
PsychicStreamResponse response =
PsychicStreamResponse(request, "image/jpeg", "capture.jpg");
PsychicStreamResponse response = PsychicStreamResponse(request, "image/jpeg", "capture.jpg");
response.beginSend();
response.write(fb->buf, fb->len);
esp_camera_fb_return(fb);
+1 -2
View File
@@ -23,8 +23,7 @@ camera_fb_t *safe_camera_fb_get();
sensor_t *safe_sensor_get();
void safe_sensor_return();
class CameraService
{
class CameraService {
public:
CameraService(PsychicHttpServer *server, TaskManager *taskManager, SecurityManager *securityManager);
@@ -81,8 +81,7 @@ class CameraSettings {
root["colorbar"] = settings.colorbar;
}
static StateUpdateResult update(JsonObject &root,
CameraSettings &settings) {
static StateUpdateResult update(JsonObject &root, CameraSettings &settings) {
settings.pixformat = root["pixformat"];
settings.framesize = root["framesize"];
settings.brightness = root["brightness"];
@@ -120,19 +119,14 @@ class CameraSettings {
class CameraSettingsService : public StatefulService<CameraSettings> {
public:
CameraSettingsService(PsychicHttpServer *server, FS *fs,
SecurityManager *securityManager, EventSocket *socket)
CameraSettingsService(PsychicHttpServer *server, FS *fs, SecurityManager *securityManager, EventSocket *socket)
: _server(server),
_securityManager(securityManager),
_httpEndpoint(CameraSettings::read, CameraSettings::update, this,
server, CAMERA_SETTINGS_PATH, securityManager,
AuthenticationPredicates::IS_ADMIN),
_eventEndpoint(CameraSettings::read, CameraSettings::update, this,
socket, EVENT_CAMERA_SETTINGS),
_fsPersistence(CameraSettings::read, CameraSettings::update, this, fs,
CAMERA_SETTINGS_FILE) {
addUpdateHandler([&](const String &originId) { updateCamera(); },
false);
_httpEndpoint(CameraSettings::read, CameraSettings::update, this, server, CAMERA_SETTINGS_PATH,
securityManager, AuthenticationPredicates::IS_ADMIN),
_eventEndpoint(CameraSettings::read, CameraSettings::update, this, socket, EVENT_CAMERA_SETTINGS),
_fsPersistence(CameraSettings::read, CameraSettings::update, this, fs, CAMERA_SETTINGS_FILE) {
addUpdateHandler([&](const String &originId) { updateCamera(); }, false);
}
void begin() {