mirror of
https://github.com/rzeldent/esp32cam-rtsp.git
synced 2025-11-14 04:04:02 +00:00
- Updated HTML
- Lookup in separate files
This commit is contained in:
112
html/index.html
112
html/index.html
@@ -122,15 +122,24 @@
|
|||||||
{{/NetworkState.OnLine}}
|
{{/NetworkState.OnLine}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="card bg-light mb-3">
|
||||||
|
<h5 class="card-header">Peripheral</h5>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Board type:</div>
|
||||||
|
<div class="col-8">{{BoardType}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">LED intensity:</div>
|
||||||
|
<div class="col-8">{{LedIntensity}} [0-100]</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<div class="card bg-light mb-3">
|
<div class="card bg-light mb-3">
|
||||||
<h5 class="card-header">Settings</h5>
|
<h5 class="card-header">Camera</h5>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="row">
|
|
||||||
<div class="col-4">Camera type:</div>
|
|
||||||
<div class="col-8">{{CameraType}}</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-4">Frame rate:</div>
|
<div class="col-4">Frame rate:</div>
|
||||||
<div class="col-8">{{FrameDuration}} ms ({{FrameFrequency}} f/s)</div>
|
<div class="col-8">{{FrameDuration}} ms ({{FrameFrequency}} f/s)</div>
|
||||||
@@ -149,11 +158,95 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-4">JPEG quality:</div>
|
<div class="col-4">JPEG quality:</div>
|
||||||
<div class="col-8">{{JpegQuality}} (1-100)</div>
|
<div class="col-8">{{JpegQuality}} [1-100]</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-4">Flash LED intensity:</div>
|
<div class="col-4">Brightness:</div>
|
||||||
<div class="col-8">{{FlashLedIntensity}} (0-100)</div>
|
<div class="col-8">{{Brightness}} [-2,2]</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Contrast:</div>
|
||||||
|
<div class="col-8">{{Contrast}} [-2,2]</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Saturation:</div>
|
||||||
|
<div class="col-8">{{Saturation}} [-2,2]</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Special effect:</div>
|
||||||
|
<div class="col-8">{{SpecialEffect}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">White balance:</div>
|
||||||
|
<div class="col-8">{{WhiteBal}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">AWB gain:</div>
|
||||||
|
<div class="col-8">{{AwbGain}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">WB mode:</div>
|
||||||
|
<div class="col-8">{{WbMode}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Exposure control:</div>
|
||||||
|
<div class="col-8">{{ExposureCtrl}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">AEC2:</div>
|
||||||
|
<div class="col-8">{{Aec2}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">AE level:</div>
|
||||||
|
<div class="col-8">{{AeLevel}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">AEC value:</div>
|
||||||
|
<div class="col-8">{{AecValue}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Gain control:</div>
|
||||||
|
<div class="col-8">{{GainCtrl}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">AGC gain:</div>
|
||||||
|
<div class="col-8">{{AgcGain}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Gain ceiling:</div>
|
||||||
|
<div class="col-8">{{GainCeiling}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">BPC</div>
|
||||||
|
<div class="col-8">{{Bpc}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">WPC</div>
|
||||||
|
<div class="col-8">{{Wpc}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Raw gma</div>
|
||||||
|
<div class="col-8">{{RawGma}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">LENC</div>
|
||||||
|
<div class="col-8">{{Lenc}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Horizontal mirror</div>
|
||||||
|
<div class="col-8">{{HMirror}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Vertical flip</div>
|
||||||
|
<div class="col-8">{{VFlip}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">DCW:</div>
|
||||||
|
<div class="col-8">{{Dcw}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Color bar:</div>
|
||||||
|
<div class="col-8">{{ColorBar}}</div>
|
||||||
</div>
|
</div>
|
||||||
{{#CameraInitialized}}
|
{{#CameraInitialized}}
|
||||||
<div class="mt-4 alert alert-success" role="alert">
|
<div class="mt-4 alert alert-success" role="alert">
|
||||||
@@ -181,8 +274,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<span>
|
<span>
|
||||||
The camera RTSP stream can be found at:
|
The camera RTSP stream can be found at:
|
||||||
<a
|
<a href="rtsp://{{IpV4}}:{{RtspPort}}/mjpeg/1">rtsp://{{IpV4}}:{{RtspPort}}/mjpeg/1</a>
|
||||||
href="rtsp://{{IpV4}}:{{RtspPort}}/mjpeg/1">rtsp://{{IpV4}}:{{RtspPort}}/mjpeg/1</a>
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -152,78 +152,3 @@ const camera_config_t lookup_camera_config(const char *name)
|
|||||||
return camera_config_t{};
|
return camera_config_t{};
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef char camera_effect_name_t[11];
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
const camera_effect_name_t name;
|
|
||||||
const int value;
|
|
||||||
} camera_effect_entry_t;
|
|
||||||
|
|
||||||
constexpr const camera_effect_entry_t camera_effects[] = {
|
|
||||||
{"Normal", 0},
|
|
||||||
{"Negative", 1},
|
|
||||||
{"Grayscale", 2},
|
|
||||||
{"Red tint", 3},
|
|
||||||
{"Green tint", 4},
|
|
||||||
{"Blue tint", 5},
|
|
||||||
{"Sepia", 6}};
|
|
||||||
|
|
||||||
const int lookup_camera_effect(const char *name)
|
|
||||||
{
|
|
||||||
// Lookup table for the frame name to framesize_t
|
|
||||||
for (const auto &entry : camera_effects)
|
|
||||||
if (strncmp(entry.name, name, sizeof(camera_effect_entry_t)) == 0)
|
|
||||||
return entry.value;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef char camera_white_balance_mode_name_t[7];
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
const camera_white_balance_mode_name_t name;
|
|
||||||
const int value;
|
|
||||||
} camera_white_balance_mode_entry_t;
|
|
||||||
|
|
||||||
constexpr const camera_white_balance_mode_entry_t camera_white_balance_modes[] = {
|
|
||||||
{"Auto", 0},
|
|
||||||
{"Sunny", 1},
|
|
||||||
{"Cloudy", 2},
|
|
||||||
{"Office", 3},
|
|
||||||
{"Home", 4}};
|
|
||||||
|
|
||||||
const int lookup_camera_white_balance_mode(const char *name)
|
|
||||||
{
|
|
||||||
// Lookup table for the frame name to framesize_t
|
|
||||||
for (const auto &entry : camera_white_balance_modes)
|
|
||||||
if (strncmp(entry.name, name, sizeof(camera_white_balance_mode_entry_t)) == 0)
|
|
||||||
return entry.value;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef char camera_gain_ceiling_name_t[5];
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
const camera_gain_ceiling_name_t name;
|
|
||||||
const gainceiling_t value;
|
|
||||||
} camera_gain_ceiling_entry_t;
|
|
||||||
|
|
||||||
constexpr const camera_gain_ceiling_entry_t camera_gain_ceilings[] = {
|
|
||||||
{"2X", GAINCEILING_2X},
|
|
||||||
{"4X", GAINCEILING_4X},
|
|
||||||
{"8X", GAINCEILING_8X},
|
|
||||||
{"16X", GAINCEILING_16X},
|
|
||||||
{"32X", GAINCEILING_32X},
|
|
||||||
{"64X", GAINCEILING_64X},
|
|
||||||
{"128X", GAINCEILING_128X}};
|
|
||||||
|
|
||||||
const gainceiling_t lookup_camera_gain_ceiling_mode(const char *name)
|
|
||||||
{
|
|
||||||
// Lookup table for the frame name to framesize_t
|
|
||||||
for (const auto &entry : camera_gain_ceilings)
|
|
||||||
if (strncmp(entry.name, name, sizeof(camera_gain_ceiling_entry_t)) == 0)
|
|
||||||
return entry.value;
|
|
||||||
|
|
||||||
return GAINCEILING_2X;
|
|
||||||
}
|
|
||||||
29
include/lookup_camera_effect.h
Normal file
29
include/lookup_camera_effect.h
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
typedef char camera_effect_name_t[11];
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const camera_effect_name_t name;
|
||||||
|
const int value;
|
||||||
|
} camera_effect_entry_t;
|
||||||
|
|
||||||
|
constexpr const camera_effect_entry_t camera_effects[] = {
|
||||||
|
{"Normal", 0},
|
||||||
|
{"Negative", 1},
|
||||||
|
{"Grayscale", 2},
|
||||||
|
{"Red tint", 3},
|
||||||
|
{"Green tint", 4},
|
||||||
|
{"Blue tint", 5},
|
||||||
|
{"Sepia", 6}};
|
||||||
|
|
||||||
|
const int lookup_camera_effect(const char *name)
|
||||||
|
{
|
||||||
|
// Lookup table for the frame name to framesize_t
|
||||||
|
for (const auto &entry : camera_effects)
|
||||||
|
if (strncmp(entry.name, name, sizeof(camera_effect_entry_t)) == 0)
|
||||||
|
return entry.value;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
30
include/lookup_camera_gainceiling.h
Normal file
30
include/lookup_camera_gainceiling.h
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <esp_camera.h>
|
||||||
|
|
||||||
|
typedef char camera_gainceiling_name_t[5];
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const camera_gainceiling_name_t name;
|
||||||
|
const gainceiling_t value;
|
||||||
|
} camera_gainceiling_entry_t;
|
||||||
|
|
||||||
|
constexpr const camera_gainceiling_entry_t camera_gain_ceilings[] = {
|
||||||
|
{"2X", GAINCEILING_2X},
|
||||||
|
{"4X", GAINCEILING_4X},
|
||||||
|
{"8X", GAINCEILING_8X},
|
||||||
|
{"16X", GAINCEILING_16X},
|
||||||
|
{"32X", GAINCEILING_32X},
|
||||||
|
{"64X", GAINCEILING_64X},
|
||||||
|
{"128X", GAINCEILING_128X}};
|
||||||
|
|
||||||
|
const gainceiling_t lookup_camera_gainceiling(const char *name)
|
||||||
|
{
|
||||||
|
// Lookup table for the frame name to framesize_t
|
||||||
|
for (const auto &entry : camera_gain_ceilings)
|
||||||
|
if (strncmp(entry.name, name, sizeof(camera_gainceiling_entry_t)) == 0)
|
||||||
|
return entry.value;
|
||||||
|
|
||||||
|
return GAINCEILING_2X;
|
||||||
|
}
|
||||||
27
include/lookup_camera_wb_mode.h
Normal file
27
include/lookup_camera_wb_mode.h
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
typedef char camera_wb_mode_name_t[7];
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const camera_wb_mode_name_t name;
|
||||||
|
const int value;
|
||||||
|
} camera_wb_mode_entry_t;
|
||||||
|
|
||||||
|
constexpr const camera_wb_mode_entry_t camera_wb_modes[] = {
|
||||||
|
{"Auto", 0},
|
||||||
|
{"Sunny", 1},
|
||||||
|
{"Cloudy", 2},
|
||||||
|
{"Office", 3},
|
||||||
|
{"Home", 4}};
|
||||||
|
|
||||||
|
const int lookup_camera_wb_mode(const char *name)
|
||||||
|
{
|
||||||
|
// Lookup table for the frame name to framesize_t
|
||||||
|
for (const auto &entry : camera_wb_modes)
|
||||||
|
if (strncmp(entry.name, name, sizeof(camera_wb_mode_entry_t)) == 0)
|
||||||
|
return entry.value;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#define WIFI_SSID "ESP32CAM-RTSP"
|
#define WIFI_SSID "ESP32CAM-RTSP"
|
||||||
#define WIFI_PASSWORD nullptr
|
#define WIFI_PASSWORD nullptr
|
||||||
#define CONFIG_VERSION "1._4"
|
#define CONFIG_VERSION "1.4"
|
||||||
|
|
||||||
#define OTA_PASSWORD "ESP32CAM-RTSP"
|
#define OTA_PASSWORD "ESP32CAM-RTSP"
|
||||||
|
|
||||||
|
|||||||
113
src/main.cpp
113
src/main.cpp
@@ -6,8 +6,11 @@
|
|||||||
#include <OV2640.h>
|
#include <OV2640.h>
|
||||||
#include <ESPmDNS.h>
|
#include <ESPmDNS.h>
|
||||||
#include <rtsp_server.h>
|
#include <rtsp_server.h>
|
||||||
#include <frame_size.h>
|
#include <lookup_camera_config.h>
|
||||||
#include <camera_config.h>
|
#include <lookup_camera_effect.h>
|
||||||
|
#include <lookup_camera_frame_size.h>
|
||||||
|
#include <lookup_camera_gainceiling.h>
|
||||||
|
#include <lookup_camera_wb_mode.h>
|
||||||
#include <format_duration.h>
|
#include <format_duration.h>
|
||||||
#include <format_number.h>
|
#include <format_number.h>
|
||||||
#include <moustache.h>
|
#include <moustache.h>
|
||||||
@@ -27,22 +30,22 @@ auto param_brightness = iotwebconf::Builder<iotwebconf::IntTParameter<int>>("b")
|
|||||||
auto param_contrast = iotwebconf::Builder<iotwebconf::IntTParameter<int>>("c").label("Contrast").defaultValue(DEFAULT_CONTRAST).min(-2).max(2).build();
|
auto param_contrast = iotwebconf::Builder<iotwebconf::IntTParameter<int>>("c").label("Contrast").defaultValue(DEFAULT_CONTRAST).min(-2).max(2).build();
|
||||||
auto param_saturation = iotwebconf::Builder<iotwebconf::IntTParameter<int>>("s").label("Saturation").defaultValue(DEFAULT_SATURATION).min(-2).max(2).build();
|
auto param_saturation = iotwebconf::Builder<iotwebconf::IntTParameter<int>>("s").label("Saturation").defaultValue(DEFAULT_SATURATION).min(-2).max(2).build();
|
||||||
auto param_special_effect = iotwebconf::Builder<iotwebconf::SelectTParameter<sizeof(camera_effects[0])>>("e").label("Effect").optionValues((const char *)&camera_effects).optionNames((const char *)&camera_effects).optionCount(sizeof(camera_effects) / sizeof(camera_effects[0])).nameLength(sizeof(camera_effects[0])).defaultValue(DEFAULT_EFFECT).build();
|
auto param_special_effect = iotwebconf::Builder<iotwebconf::SelectTParameter<sizeof(camera_effects[0])>>("e").label("Effect").optionValues((const char *)&camera_effects).optionNames((const char *)&camera_effects).optionCount(sizeof(camera_effects) / sizeof(camera_effects[0])).nameLength(sizeof(camera_effects[0])).defaultValue(DEFAULT_EFFECT).build();
|
||||||
auto param_white_balance = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("wb").label("White balance").defaultValue(DEFAULT_WHITE_BALANCE).build();
|
auto param_whitebal = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("wb").label("White balance").defaultValue(DEFAULT_WHITE_BALANCE).build();
|
||||||
auto param_automatic_white_balance_gain = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("awbg").label("Automatic white balance gain").defaultValue(DEFAULT_WHITE_BALANCE_GAIN).build();
|
auto param_awb_gain = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("awbg").label("Automatic white balance gain").defaultValue(DEFAULT_WHITE_BALANCE_GAIN).build();
|
||||||
auto param_white_balance_mode = iotwebconf::Builder<iotwebconf::SelectTParameter<sizeof(camera_white_balance_modes[0])>>("wbm").label("White balance mode").optionValues((const char *)&camera_white_balance_modes).optionNames((const char *)&camera_white_balance_modes).optionCount(sizeof(camera_white_balance_modes) / sizeof(camera_white_balance_modes[0])).nameLength(sizeof(camera_white_balance_modes[0])).defaultValue(DEFAULT_WHITE_BALANCE_MODE).build();
|
auto param_wb_mode = iotwebconf::Builder<iotwebconf::SelectTParameter<sizeof(camera_wb_modes[0])>>("wbm").label("White balance mode").optionValues((const char *)&camera_wb_modes).optionNames((const char *)&camera_wb_modes).optionCount(sizeof(camera_wb_modes) / sizeof(camera_wb_modes[0])).nameLength(sizeof(camera_wb_modes[0])).defaultValue(DEFAULT_WHITE_BALANCE_MODE).build();
|
||||||
auto param_exposure_control = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("ec").label("Exposure control").defaultValue(DEFAULT_EXPOSURE_CONTROL).build();
|
auto param_exposure_ctrl = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("ec").label("Exposure control").defaultValue(DEFAULT_EXPOSURE_CONTROL).build();
|
||||||
auto param_aec2 = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("aec2").label("AEC2").defaultValue(DEFAULT_AEC2).build();
|
auto param_aec2 = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("aec2").label("AEC2").defaultValue(DEFAULT_AEC2).build();
|
||||||
auto param_ae_level = iotwebconf::Builder<iotwebconf::IntTParameter<int>>("ael").label("AE level").defaultValue(DEFAULT_AE_LEVEL).min(-2).max(2).build();
|
auto param_ae_level = iotwebconf::Builder<iotwebconf::IntTParameter<int>>("ael").label("AE level").defaultValue(DEFAULT_AE_LEVEL).min(-2).max(2).build();
|
||||||
auto param_aec_value = iotwebconf::Builder<iotwebconf::IntTParameter<int>>("aecv").label("AEC value").defaultValue(DEFAULT_AEC_VALUE).min(9).max(1200).build();
|
auto param_aec_value = iotwebconf::Builder<iotwebconf::IntTParameter<int>>("aecv").label("AEC value").defaultValue(DEFAULT_AEC_VALUE).min(9).max(1200).build();
|
||||||
auto param_gain_control = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("gc").label("Gain control").defaultValue(DEFAULT_GAIN_CONTROL).build();
|
auto param_gain_ctrl = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("gc").label("Gain control").defaultValue(DEFAULT_GAIN_CONTROL).build();
|
||||||
auto param_agc_gain = iotwebconf::Builder<iotwebconf::IntTParameter<int>>("agcg").label("AGC gain").defaultValue(DEFAULT_AGC_GAIN).min(0).max(30).build();
|
auto param_agc_gain = iotwebconf::Builder<iotwebconf::IntTParameter<int>>("agcg").label("AGC gain").defaultValue(DEFAULT_AGC_GAIN).min(0).max(30).build();
|
||||||
auto param_gain_ceiling = iotwebconf::Builder<iotwebconf::SelectTParameter<sizeof(camera_gain_ceilings[0])>>("gcl").label("Gain ceilings").optionValues((const char *)&camera_gain_ceilings).optionNames((const char *)&camera_gain_ceilings).optionCount(sizeof(camera_gain_ceilings) / sizeof(camera_gain_ceilings[0])).nameLength(sizeof(camera_gain_ceilings[0])).defaultValue(DEFAULT_GAIN_CEILING).build();
|
auto param_gain_ceiling = iotwebconf::Builder<iotwebconf::SelectTParameter<sizeof(camera_gain_ceilings[0])>>("gcl").label("Gain ceilings").optionValues((const char *)&camera_gain_ceilings).optionNames((const char *)&camera_gain_ceilings).optionCount(sizeof(camera_gain_ceilings) / sizeof(camera_gain_ceilings[0])).nameLength(sizeof(camera_gain_ceilings[0])).defaultValue(DEFAULT_GAIN_CEILING).build();
|
||||||
auto param_bpc = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("bpc").label("BPC").defaultValue(DEFAULT_BPC).build();
|
auto param_bpc = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("bpc").label("BPC").defaultValue(DEFAULT_BPC).build();
|
||||||
auto param_wpc = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("wpc").label("WPC").defaultValue(DEFAULT_WPC).build();
|
auto param_wpc = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("wpc").label("WPC").defaultValue(DEFAULT_WPC).build();
|
||||||
auto param_raw_gamma = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("rg").label("Raw gamma").defaultValue(DEFAULT_RAW_GAMMA).build();
|
auto param_raw_gma = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("rg").label("Raw gamma").defaultValue(DEFAULT_RAW_GAMMA).build();
|
||||||
auto param_lenc = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("lenc").label("LENC").defaultValue(DEFAULT_LENC).build();
|
auto param_lenc = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("lenc").label("LENC").defaultValue(DEFAULT_LENC).build();
|
||||||
auto param_horizontal_mirror = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("hm").label("Horizontal mirror").defaultValue(DEFAULT_HORIZONTAL_MIRROR).build();
|
auto param_hmirror = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("hm").label("Horizontal mirror").defaultValue(DEFAULT_HORIZONTAL_MIRROR).build();
|
||||||
auto param_vertical_flip = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("vm").label("Vertical mirror").defaultValue(DEFAULT_VERTICAL_MIRROR).build();
|
auto param_vflip = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("vm").label("Vertical mirror").defaultValue(DEFAULT_VERTICAL_MIRROR).build();
|
||||||
auto param_dcw = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("dcw").label("DCW").defaultValue(DEFAULT_DCW).build();
|
auto param_dcw = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("dcw").label("DCW").defaultValue(DEFAULT_DCW).build();
|
||||||
auto param_colorbar = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("cb").label("Colorbar").defaultValue(DEFAULT_COLORBAR).build();
|
auto param_colorbar = iotwebconf::Builder<iotwebconf::CheckboxTParameter>("cb").label("Colorbar").defaultValue(DEFAULT_COLORBAR).build();
|
||||||
|
|
||||||
@@ -119,7 +122,7 @@ void handle_root()
|
|||||||
{"NetworkState.ApMode", String(iotWebConf.getState() == iotwebconf::NetworkState::ApMode)},
|
{"NetworkState.ApMode", String(iotWebConf.getState() == iotwebconf::NetworkState::ApMode)},
|
||||||
{"NetworkState.OnLine", String(iotWebConf.getState() == iotwebconf::NetworkState::OnLine)},
|
{"NetworkState.OnLine", String(iotWebConf.getState() == iotwebconf::NetworkState::OnLine)},
|
||||||
// Camera
|
// Camera
|
||||||
{"CameraType", String(param_board.value())},
|
{"BoardType", String(param_board.value())},
|
||||||
{"FrameSize", String(param_frame_size.value())},
|
{"FrameSize", String(param_frame_size.value())},
|
||||||
{"FrameDuration", String(param_frame_duration.value())},
|
{"FrameDuration", String(param_frame_duration.value())},
|
||||||
{"FrameFrequency", String(1000.0 / param_frame_duration.value(), 1)},
|
{"FrameFrequency", String(1000.0 / param_frame_duration.value(), 1)},
|
||||||
@@ -132,27 +135,27 @@ void handle_root()
|
|||||||
{"Brightness", String(param_brightness.value())},
|
{"Brightness", String(param_brightness.value())},
|
||||||
{"Contrast", String(param_contrast.value())},
|
{"Contrast", String(param_contrast.value())},
|
||||||
{"Saturation", String(param_saturation.value())},
|
{"Saturation", String(param_saturation.value())},
|
||||||
{"Effect", String(param_special_effect.value())},
|
{"SpecialEffect", String(param_special_effect.value())},
|
||||||
{"WhiteBalance", String(param_white_balance.value())},
|
{"WhiteBal", String(param_whitebal.value())},
|
||||||
{"AutomaticWhiteBalancebGain", String(param_automatic_white_balance_gain.value())},
|
{"AwbGain", String(param_awb_gain.value())},
|
||||||
{"WhiteBalanceMode", String(param_white_balance_mode.value())},
|
{"WbMode", String(param_wb_mode.value())},
|
||||||
{"ExposureControl", String(param_exposure_control.value())},
|
{"ExposureCtrl", String(param_exposure_ctrl.value())},
|
||||||
{"AEC2", String(param_aec2.value())},
|
{"Aec2", String(param_aec2.value())},
|
||||||
{"AELevel", String(param_ae_level.value())},
|
{"AeLevel", String(param_ae_level.value())},
|
||||||
{"AECValue", String(param_aec_value.value())},
|
{"AecValue", String(param_aec_value.value())},
|
||||||
{"GainControl", String(param_gain_control.value())},
|
{"GainCtrl", String(param_gain_ctrl.value())},
|
||||||
{"AGCGain", String(param_agc_gain.value())},
|
{"AgcGain", String(param_agc_gain.value())},
|
||||||
{"GainCeiling", String(param_gain_ceiling.value())},
|
{"GainCeiling", String(param_gain_ceiling.value())},
|
||||||
{"BPC", String(param_bpc.value())},
|
{"Bpc", String(param_bpc.value())},
|
||||||
{"WPC", String(param_wpc.value())},
|
{"Wpc", String(param_wpc.value())},
|
||||||
{"RawGamma", String(param_raw_gamma.value())},
|
{"RawGma", String(param_raw_gma.value())},
|
||||||
{"LENC", String(param_lenc.value())},
|
{"Lenc", String(param_lenc.value())},
|
||||||
{"HorizontalMirror", String(param_horizontal_mirror.value())},
|
{"HMirror", String(param_hmirror.value())},
|
||||||
{"VericalFlip", String(param_vertical_flip.value())},
|
{"VFlip", String(param_vflip.value())},
|
||||||
{"WCW", String(param_dcw.value())},
|
{"Dcw", String(param_dcw.value())},
|
||||||
{"ColorBar", String(param_colorbar.value())},
|
{"ColorBar", String(param_colorbar.value())},
|
||||||
// LED
|
// LED
|
||||||
{"FlashLedIntensity", String(param_led_intensity.value())},
|
{"LedIntensity", String(param_led_intensity.value())},
|
||||||
// RTSP
|
// RTSP
|
||||||
{"RtspPort", String(RTSP_PORT)}};
|
{"RtspPort", String(RTSP_PORT)}};
|
||||||
|
|
||||||
@@ -237,14 +240,6 @@ void handle_flash()
|
|||||||
web_server.send(200);
|
web_server.send(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_config_saved()
|
|
||||||
{
|
|
||||||
log_v("on_config_saved");
|
|
||||||
// Set flash led intensity
|
|
||||||
analogWrite(LED_FLASH, param_led_intensity.value());
|
|
||||||
config_changed = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
esp_err_t initialize_camera()
|
esp_err_t initialize_camera()
|
||||||
{
|
{
|
||||||
log_v("initialize_camera");
|
log_v("initialize_camera");
|
||||||
@@ -272,22 +267,22 @@ void update_camera_settings()
|
|||||||
camera->set_contrast(camera, param_contrast.value());
|
camera->set_contrast(camera, param_contrast.value());
|
||||||
camera->set_saturation(camera, param_saturation.value());
|
camera->set_saturation(camera, param_saturation.value());
|
||||||
camera->set_special_effect(camera, lookup_camera_effect(param_special_effect.value()));
|
camera->set_special_effect(camera, lookup_camera_effect(param_special_effect.value()));
|
||||||
camera->set_whitebal(camera, param_white_balance.value());
|
camera->set_whitebal(camera, param_whitebal.value());
|
||||||
camera->set_awb_gain(camera, param_automatic_white_balance_gain.value());
|
camera->set_awb_gain(camera, param_awb_gain.value());
|
||||||
camera->set_wb_mode(camera, lookup_camera_white_balance_mode(param_white_balance_mode.value()));
|
camera->set_wb_mode(camera, lookup_camera_wb_mode(param_wb_mode.value()));
|
||||||
camera->set_exposure_ctrl(camera, param_exposure_control.value());
|
camera->set_exposure_ctrl(camera, param_exposure_ctrl.value());
|
||||||
camera->set_aec2(camera, param_aec2.value());
|
camera->set_aec2(camera, param_aec2.value());
|
||||||
camera->set_ae_level(camera, param_ae_level.value());
|
camera->set_ae_level(camera, param_ae_level.value());
|
||||||
camera->set_aec_value(camera, param_aec_value.value());
|
camera->set_aec_value(camera, param_aec_value.value());
|
||||||
camera->set_gain_ctrl(camera, param_gain_control.value());
|
camera->set_gain_ctrl(camera, param_gain_ctrl.value());
|
||||||
camera->set_agc_gain(camera, param_agc_gain.value());
|
camera->set_agc_gain(camera, param_agc_gain.value());
|
||||||
camera->set_gainceiling(camera, lookup_camera_gain_ceiling_mode(param_gain_ceiling.value()));
|
camera->set_gainceiling(camera, lookup_camera_gainceiling(param_gain_ceiling.value()));
|
||||||
camera->set_bpc(camera, param_bpc.value());
|
camera->set_bpc(camera, param_bpc.value());
|
||||||
camera->set_wpc(camera, param_wpc.value());
|
camera->set_wpc(camera, param_wpc.value());
|
||||||
camera->set_raw_gma(camera, param_raw_gamma.value());
|
camera->set_raw_gma(camera, param_raw_gma.value());
|
||||||
camera->set_lenc(camera, param_lenc.value());
|
camera->set_lenc(camera, param_lenc.value());
|
||||||
camera->set_hmirror(camera, param_horizontal_mirror.value());
|
camera->set_hmirror(camera, param_hmirror.value());
|
||||||
camera->set_vflip(camera, param_vertical_flip.value());
|
camera->set_vflip(camera, param_vflip.value());
|
||||||
camera->set_dcw(camera, param_dcw.value());
|
camera->set_dcw(camera, param_dcw.value());
|
||||||
camera->set_colorbar(camera, param_colorbar.value());
|
camera->set_colorbar(camera, param_colorbar.value());
|
||||||
}
|
}
|
||||||
@@ -325,6 +320,16 @@ void on_connected()
|
|||||||
start_rtsp_server();
|
start_rtsp_server();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void on_config_saved()
|
||||||
|
{
|
||||||
|
log_v("on_config_saved");
|
||||||
|
// Set flash led intensity
|
||||||
|
analogWrite(LED_FLASH, param_led_intensity.value());
|
||||||
|
// Update camera setting
|
||||||
|
update_camera_settings();
|
||||||
|
config_changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
// Disable brownout
|
// Disable brownout
|
||||||
@@ -358,22 +363,22 @@ void setup()
|
|||||||
param_group_camera.addItem(¶m_contrast);
|
param_group_camera.addItem(¶m_contrast);
|
||||||
param_group_camera.addItem(¶m_saturation);
|
param_group_camera.addItem(¶m_saturation);
|
||||||
param_group_camera.addItem(¶m_special_effect);
|
param_group_camera.addItem(¶m_special_effect);
|
||||||
param_group_camera.addItem(¶m_white_balance);
|
param_group_camera.addItem(¶m_whitebal);
|
||||||
param_group_camera.addItem(¶m_automatic_white_balance_gain);
|
param_group_camera.addItem(¶m_awb_gain);
|
||||||
param_group_camera.addItem(¶m_white_balance_mode);
|
param_group_camera.addItem(¶m_wb_mode);
|
||||||
param_group_camera.addItem(¶m_exposure_control);
|
param_group_camera.addItem(¶m_exposure_ctrl);
|
||||||
param_group_camera.addItem(¶m_aec2);
|
param_group_camera.addItem(¶m_aec2);
|
||||||
param_group_camera.addItem(¶m_ae_level);
|
param_group_camera.addItem(¶m_ae_level);
|
||||||
param_group_camera.addItem(¶m_aec_value);
|
param_group_camera.addItem(¶m_aec_value);
|
||||||
param_group_camera.addItem(¶m_gain_control);
|
param_group_camera.addItem(¶m_gain_ctrl);
|
||||||
param_group_camera.addItem(¶m_agc_gain);
|
param_group_camera.addItem(¶m_agc_gain);
|
||||||
param_group_camera.addItem(¶m_gain_ceiling);
|
param_group_camera.addItem(¶m_gain_ceiling);
|
||||||
param_group_camera.addItem(¶m_bpc);
|
param_group_camera.addItem(¶m_bpc);
|
||||||
param_group_camera.addItem(¶m_wpc);
|
param_group_camera.addItem(¶m_wpc);
|
||||||
param_group_camera.addItem(¶m_raw_gamma);
|
param_group_camera.addItem(¶m_raw_gma);
|
||||||
param_group_camera.addItem(¶m_lenc);
|
param_group_camera.addItem(¶m_lenc);
|
||||||
param_group_camera.addItem(¶m_horizontal_mirror);
|
param_group_camera.addItem(¶m_hmirror);
|
||||||
param_group_camera.addItem(¶m_vertical_flip);
|
param_group_camera.addItem(¶m_vflip);
|
||||||
param_group_camera.addItem(¶m_dcw);
|
param_group_camera.addItem(¶m_dcw);
|
||||||
param_group_camera.addItem(¶m_colorbar);
|
param_group_camera.addItem(¶m_colorbar);
|
||||||
iotWebConf.addParameterGroup(¶m_group_camera);
|
iotWebConf.addParameterGroup(¶m_group_camera);
|
||||||
|
|||||||
Reference in New Issue
Block a user