mirror of https://github.com/arendst/Tasmota.git
Integrate Nightmode and Reduced FPS into WcFeature
This commit is contained in:
parent
c8e6e45104
commit
22aeda5a14
|
@ -322,8 +322,7 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu
|
||||||
uint32_t bpc : 1;
|
uint32_t bpc : 1;
|
||||||
uint32_t spare15 : 1;
|
uint32_t spare15 : 1;
|
||||||
uint32_t spare16 : 1;
|
uint32_t spare16 : 1;
|
||||||
uint32_t streamspeed : 1;
|
uint32_t feature : 2;
|
||||||
uint32_t nightmode : 1;
|
|
||||||
uint32_t contrast : 3;
|
uint32_t contrast : 3;
|
||||||
uint32_t brightness : 3;
|
uint32_t brightness : 3;
|
||||||
uint32_t saturation : 3;
|
uint32_t saturation : 3;
|
||||||
|
|
|
@ -59,8 +59,27 @@
|
||||||
* WcSaturation = Set picture Saturation -2 ... +2
|
* WcSaturation = Set picture Saturation -2 ... +2
|
||||||
* WcBrightness = Set picture Brightness -2 ... +2
|
* WcBrightness = Set picture Brightness -2 ... +2
|
||||||
* WcContrast = Set picture Contrast -2 ... +2
|
* WcContrast = Set picture Contrast -2 ... +2
|
||||||
* WcInit = Init Camera Interface
|
* WcSpecialEffekt = Set Special Picture Effect: 0 = off, 1 = , 2 = , 3 = , 4 = , 5 = , 6 =
|
||||||
* WcRtsp = Control RTSP Server, 0=disable, 1=enable (forces restart) (if defined ENABLE_RTSPSERVER)
|
* WcAWB = Auto White Balance, 0 = no, 1 = yes
|
||||||
|
* WcWBMode = White Balance Mode, 0 = auto, 1 =
|
||||||
|
* WcAWBGain = Auto White Balance Gain, 0 = no, 1 = yes
|
||||||
|
* WcAEC = Auto exposure control (Sensor), 0 = no, 1 = yes
|
||||||
|
* WcAECDSP = Auto exposure control (DSP), 0 = no, 1 = yes
|
||||||
|
* WcAECValue = Auto exposure control value, 0 ... 1024
|
||||||
|
* WcAECLevel = Auto exposure control level, -2 ... +2
|
||||||
|
* WcAGC = Auto gain control, 0 = no, 1 = yes
|
||||||
|
* WcAGCGain = Auto gain control gain, 0 .. 30
|
||||||
|
* WcGainCeiling = Gain ceiling, 0 .. 6 (0 = x2, 1 = x4, 2 = x8, 3 = x16, 4 = x32, 5 = x64, 6 = x128)
|
||||||
|
* WcGammaCorrect = Auto Gamma Correct, 0 = no, 1 = yes
|
||||||
|
* WcLensCorrect = Auto Lens Correct, 0 = no, 1 = yes
|
||||||
|
* WcWPC = White Pixel Correct, 0 = no, 1 = yes
|
||||||
|
* WcDCW = Downscale, 0 = no, 1 = yes
|
||||||
|
* WcBPC = Black Pixel Correct, 0 = no, 1 = yes
|
||||||
|
* WcColorbar = Show Colorbar, 0 = no, 1 = yes
|
||||||
|
* WcFeature = Set extended Feature, 0 = off, 1 = reduce FPS, 2 = Nightmode
|
||||||
|
* WcStats = Show Statistics
|
||||||
|
* WcInit = Init Camera Interface
|
||||||
|
* WcRtsp = Control RTSP Server, 0=disable, 1=enable (forces restart) (if defined ENABLE_RTSPSERVER)
|
||||||
*
|
*
|
||||||
* Only boards with PSRAM should be used. To enable PSRAM board should be se set to esp32cam in common32 of platform_override.ini
|
* Only boards with PSRAM should be used. To enable PSRAM board should be se set to esp32cam in common32 of platform_override.ini
|
||||||
* board = esp32cam
|
* board = esp32cam
|
||||||
|
@ -207,36 +226,37 @@ bool WcPinUsed(void) {
|
||||||
return pin_used;
|
return pin_used;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WcStreamSpeed(int32_t value) {
|
void WcFeature(int32_t value) {
|
||||||
sensor_t *wc_s = esp_camera_sensor_get();
|
sensor_t * wc_s = esp_camera_sensor_get();
|
||||||
if (!wc_s) { return; }
|
if (!wc_s) { return; }
|
||||||
|
|
||||||
if (value) {
|
if (value != 1) {
|
||||||
// CLKRC: Set Clock Divider to fullspeed
|
// CLKRC: Set Clock Divider to 0 = fullspeed
|
||||||
wc_s->set_reg(wc_s, 0x111, 0x3f, 0x00);
|
wc_s->set_reg(wc_s, 0x111, 0x3f, 0x00);
|
||||||
} else {
|
vTaskDelay(200 / portTICK_PERIOD_MS);
|
||||||
// CLKRC: Set Clock Divider to 2
|
}
|
||||||
wc_s->set_reg(wc_s, 0x111, 0x3f, 0x02);
|
if (value != 2) {
|
||||||
|
// Stop Nightmode
|
||||||
|
wc_s->set_reg(wc_s, 0x103, 0xff, 0x0a); // COM1: Reset dummy frames
|
||||||
|
wc_s->set_reg(wc_s, 0x10f, 0xff, 0x43); // Reserved Reg
|
||||||
|
wc_s->set_reg(wc_s, 0x10f, 0xff, 0x4b); // Reserved Reg
|
||||||
|
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
||||||
|
wc_s->set_reg(wc_s, 0x10f, 0xff, 0x43); // Reserved Reg
|
||||||
}
|
}
|
||||||
|
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("CAM: Streamspeed: %d"), value);
|
switch(value) {
|
||||||
}
|
case 1:
|
||||||
|
// Reduce FPS
|
||||||
void WcNightMode(int32_t value) {
|
// CLKRC: Set Clock Divider to 2
|
||||||
sensor_t *wc_s = esp_camera_sensor_get();
|
wc_s->set_reg(wc_s, 0x111, 0x3f, 0x02);
|
||||||
if (!wc_s) { return; }
|
break;
|
||||||
|
case 2:
|
||||||
if (value) {
|
// Start Nightmode
|
||||||
wc_s->set_reg(wc_s, 0x10f, 0xff, 0x4b); // Reserved Reg
|
wc_s->set_reg(wc_s, 0x10f, 0xff, 0x4b); // Reserved Reg
|
||||||
wc_s->set_reg(wc_s, 0x103, 0xff, 0xcf); // COM1: Allow 7 dummy frames
|
wc_s->set_reg(wc_s, 0x103, 0xff, 0xcf); // COM1: Allow 7 dummy frames
|
||||||
} else {
|
break;
|
||||||
wc_s->set_reg(wc_s, 0x103, 0xff, 0x0a); // COM1: Reset dummy frames
|
|
||||||
wc_s->set_reg(wc_s, 0x10f, 0xff, 0x43); // Reserved Reg
|
|
||||||
wc_s->set_reg(wc_s, 0x10f, 0xff, 0x4b); // Reserved Reg
|
|
||||||
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
|
||||||
wc_s->set_reg(wc_s, 0x10f, 0xff, 0x43); // Reserved Reg
|
|
||||||
}
|
}
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("CAM: Nightmode: %d"), value);
|
AddLog(LOG_LEVEL_DEBUG, PSTR("CAM: Feature: %d"), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WcApplySettings() {
|
void WcApplySettings() {
|
||||||
|
@ -270,9 +290,8 @@ void WcApplySettings() {
|
||||||
wc_s->set_wpc(wc_s, Settings->webcam_config.wpc);
|
wc_s->set_wpc(wc_s, Settings->webcam_config.wpc);
|
||||||
wc_s->set_dcw(wc_s, Settings->webcam_config.dcw);
|
wc_s->set_dcw(wc_s, Settings->webcam_config.dcw);
|
||||||
wc_s->set_bpc(wc_s, Settings->webcam_config.bpc);
|
wc_s->set_bpc(wc_s, Settings->webcam_config.bpc);
|
||||||
|
|
||||||
WcStreamSpeed(Settings->webcam_config.streamspeed);
|
WcFeature(Settings->webcam_config.feature);
|
||||||
WcNightMode(Settings->webcam_config.nightmode);
|
|
||||||
|
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("CAM: Settings updated"));
|
AddLog(LOG_LEVEL_DEBUG, PSTR("CAM: Settings updated"));
|
||||||
}
|
}
|
||||||
|
@ -294,23 +313,22 @@ void WcSetDefaults(uint32_t upgrade) {
|
||||||
Settings->webcam_config2.wb_mode = 0; // white balance mode
|
Settings->webcam_config2.wb_mode = 0; // white balance mode
|
||||||
Settings->webcam_config.awb_gain = 1; // white blance gain
|
Settings->webcam_config.awb_gain = 1; // white blance gain
|
||||||
|
|
||||||
Settings->webcam_config.aec = 1;
|
Settings->webcam_config.aec = 1; // autoexposure (sensor)
|
||||||
Settings->webcam_config.aec2 = 1;
|
Settings->webcam_config.aec2 = 1; // autoexposure (dsp)
|
||||||
Settings->webcam_config2.ae_level = 2; // = 0
|
Settings->webcam_config2.ae_level = 2; // autoexposure level (-2 - +2, default 0)
|
||||||
Settings->webcam_config2.aec_value = 204;
|
Settings->webcam_config2.aec_value = 204; // manual exposure value
|
||||||
|
|
||||||
Settings->webcam_config.agc = 1;
|
Settings->webcam_config.agc = 1; // auto gain control
|
||||||
Settings->webcam_config2.agc_gain = 5;
|
Settings->webcam_config2.agc_gain = 5; // manual gain control
|
||||||
Settings->webcam_config2.gainceiling = 0;
|
Settings->webcam_config2.gainceiling = 0; // auto gain ceiling
|
||||||
|
|
||||||
Settings->webcam_config.raw_gma = 1;
|
Settings->webcam_config.raw_gma = 1; // gamma correct
|
||||||
Settings->webcam_config.lenc = 1; // lens correction
|
Settings->webcam_config.lenc = 1; // lens correction
|
||||||
Settings->webcam_config.wpc = 1; // white pixel correct
|
Settings->webcam_config.wpc = 1; // white pixel correct
|
||||||
Settings->webcam_config.dcw = 1; // downsize en
|
Settings->webcam_config.dcw = 1; // downsize en
|
||||||
Settings->webcam_config.bpc = 0; // black pixel correct?
|
Settings->webcam_config.bpc = 0; // black pixel correct?
|
||||||
|
|
||||||
Settings->webcam_config.streamspeed = 1;
|
Settings->webcam_config.feature = 0;
|
||||||
Settings->webcam_config.nightmode = 0;
|
|
||||||
|
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("CAM: Defaults set"));
|
AddLog(LOG_LEVEL_DEBUG, PSTR("CAM: Defaults set"));
|
||||||
|
|
||||||
|
@ -555,10 +573,7 @@ int32_t WcSetOptions(uint32_t sel, int32_t value) {
|
||||||
res = s->status.colorbar;
|
res = s->status.colorbar;
|
||||||
break;
|
break;
|
||||||
case 23:
|
case 23:
|
||||||
if (value >= 0) { WcStreamSpeed(value); }
|
if (value >= 0) { WcFeature(value); }
|
||||||
break;
|
|
||||||
case 24:
|
|
||||||
if (value >= 0) { WcNightMode(value); }
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1209,14 +1224,13 @@ void WcInit(void) {
|
||||||
|
|
||||||
#define D_CMND_WC_COLORBAR "Colorbar"
|
#define D_CMND_WC_COLORBAR "Colorbar"
|
||||||
|
|
||||||
#define D_CMND_WC_STREAMSPEED "StreamSpeed"
|
#define D_CMND_WC_FEATURE "Feature"
|
||||||
#define D_CMND_WC_NIGHTMODE "Nightmode"
|
|
||||||
|
|
||||||
#define D_CMND_WC_SETDEFAULTS "SetDefaults"
|
#define D_CMND_WC_SETDEFAULTS "SetDefaults"
|
||||||
#define D_CMND_WC_APPLYSETTINGS "ApplySettings"
|
|
||||||
#define D_CMND_WC_STATS "Stats"
|
#define D_CMND_WC_STATS "Stats"
|
||||||
|
|
||||||
#define D_CMND_WC_INIT "Init"
|
#define D_CMND_WC_INIT "Init"
|
||||||
|
#define D_CMND_WC_APPLYSETTINGS "ApplySettings"
|
||||||
#define D_CMND_RTSP "Rtsp"
|
#define D_CMND_RTSP "Rtsp"
|
||||||
|
|
||||||
const char kWCCommands[] PROGMEM = D_PRFX_WEBCAM "|" // Prefix
|
const char kWCCommands[] PROGMEM = D_PRFX_WEBCAM "|" // Prefix
|
||||||
|
@ -1225,9 +1239,9 @@ const char kWCCommands[] PROGMEM = D_PRFX_WEBCAM "|" // Prefix
|
||||||
D_CMND_WC_AWB "|" D_CMND_WC_WB_MODE "|" D_CMND_WC_AWB_GAIN "|" D_CMND_WC_AEC "|"
|
D_CMND_WC_AWB "|" D_CMND_WC_WB_MODE "|" D_CMND_WC_AWB_GAIN "|" D_CMND_WC_AEC "|"
|
||||||
D_CMND_WC_AEC_VALUE "|" D_CMND_WC_AE_LEVEL "|" D_CMND_WC_AEC2 "|" D_CMND_WC_AGC "|"
|
D_CMND_WC_AEC_VALUE "|" D_CMND_WC_AE_LEVEL "|" D_CMND_WC_AEC2 "|" D_CMND_WC_AGC "|"
|
||||||
D_CMND_WC_AGC_GAIN "|" D_CMND_WC_GAINCEILING "|" D_CMND_WC_RAW_GMA "|" D_CMND_WC_LENC "|"
|
D_CMND_WC_AGC_GAIN "|" D_CMND_WC_GAINCEILING "|" D_CMND_WC_RAW_GMA "|" D_CMND_WC_LENC "|"
|
||||||
D_CMND_WC_WPC "|" D_CMND_WC_DCW "|" D_CMND_WC_BPC "|" D_CMND_WC_COLORBAR "|"
|
D_CMND_WC_WPC "|" D_CMND_WC_DCW "|" D_CMND_WC_BPC "|" D_CMND_WC_COLORBAR "|" D_CMND_WC_FEATURE "|"
|
||||||
D_CMND_WC_STREAMSPEED "|" D_CMND_WC_NIGHTMODE "|"
|
D_CMND_WC_SETDEFAULTS "|" D_CMND_WC_STATS "|" D_CMND_WC_INIT
|
||||||
D_CMND_WC_SETDEFAULTS "|" D_CMND_WC_APPLYSETTINGS "|" D_CMND_WC_STATS "|" D_CMND_WC_INIT
|
"|" D_CMND_WC_APPLYSETTINGS
|
||||||
#ifdef ENABLE_RTSPSERVER
|
#ifdef ENABLE_RTSPSERVER
|
||||||
"|" D_CMND_RTSP
|
"|" D_CMND_RTSP
|
||||||
#endif // ENABLE_RTSPSERVER
|
#endif // ENABLE_RTSPSERVER
|
||||||
|
@ -1239,8 +1253,9 @@ void (* const WCCommand[])(void) PROGMEM = {
|
||||||
&CmndWebcamAWB, &CmndWebcamWBMode, &CmndWebcamAWBGain, &CmndWebcamAEC, &CmndWebcamAECValue,
|
&CmndWebcamAWB, &CmndWebcamWBMode, &CmndWebcamAWBGain, &CmndWebcamAEC, &CmndWebcamAECValue,
|
||||||
&CmndWebcamAELevel, &CmndWebcamAEC2, &CmndWebcamAGC, &CmndWebcamAGCGain, &CmndWebcamGainCeiling,
|
&CmndWebcamAELevel, &CmndWebcamAEC2, &CmndWebcamAGC, &CmndWebcamAGCGain, &CmndWebcamGainCeiling,
|
||||||
&CmndWebcamGammaCorrect, &CmndWebcamLensCorrect, &CmndWebcamWPC, &CmndWebcamDCW, &CmndWebcamBPC,
|
&CmndWebcamGammaCorrect, &CmndWebcamLensCorrect, &CmndWebcamWPC, &CmndWebcamDCW, &CmndWebcamBPC,
|
||||||
&CmndWebcamColorbar, &CmndWebcamStreamspeed, &CmndWebcamNightmode,
|
&CmndWebcamColorbar, &CmndWebcamFeature, &CmndWebcamSetDefaults,
|
||||||
&CmndWebcamSetDefaults, &CmndWebcamApplySettings, &CmndWebcamStats, &CmndWebcamInit
|
&CmndWebcamStats, &CmndWebcamInit
|
||||||
|
, &CmndWebcamApplySettings
|
||||||
#ifdef ENABLE_RTSPSERVER
|
#ifdef ENABLE_RTSPSERVER
|
||||||
, &CmndWebRtsp
|
, &CmndWebRtsp
|
||||||
#endif // ENABLE_RTSPSERVER
|
#endif // ENABLE_RTSPSERVER
|
||||||
|
@ -1255,7 +1270,7 @@ void CmndWebcam(void) {
|
||||||
D_CMND_WC_AE_LEVEL "\":%d,\"" D_CMND_WC_AEC2 "\":%d,\"" D_CMND_WC_AGC "\":%d,\""
|
D_CMND_WC_AE_LEVEL "\":%d,\"" D_CMND_WC_AEC2 "\":%d,\"" D_CMND_WC_AGC "\":%d,\""
|
||||||
D_CMND_WC_AGC_GAIN "\":%d,\"" D_CMND_WC_GAINCEILING "\":%d,\"" D_CMND_WC_RAW_GMA "\":%d,\""
|
D_CMND_WC_AGC_GAIN "\":%d,\"" D_CMND_WC_GAINCEILING "\":%d,\"" D_CMND_WC_RAW_GMA "\":%d,\""
|
||||||
D_CMND_WC_LENC "\":%d,\"" D_CMND_WC_WPC "\":%d,\"" D_CMND_WC_DCW "\":%d,\"" D_CMND_WC_BPC "\":%d,\""
|
D_CMND_WC_LENC "\":%d,\"" D_CMND_WC_WPC "\":%d,\"" D_CMND_WC_DCW "\":%d,\"" D_CMND_WC_BPC "\":%d,\""
|
||||||
D_CMND_WC_COLORBAR "\":%d,\"" D_CMND_WC_STREAMSPEED "\":%d,\"" D_CMND_WC_NIGHTMODE "\":%d"
|
D_CMND_WC_COLORBAR "\":%d,\"" D_CMND_WC_FEATURE "\":%d"
|
||||||
#ifdef ENABLE_RTSPSERVER
|
#ifdef ENABLE_RTSPSERVER
|
||||||
",\"" D_CMND_RTSP "\":%d"
|
",\"" D_CMND_RTSP "\":%d"
|
||||||
#endif // ENABLE_RTSPSERVER
|
#endif // ENABLE_RTSPSERVER
|
||||||
|
@ -1268,7 +1283,7 @@ void CmndWebcam(void) {
|
||||||
Settings->webcam_config2.ae_level -2, Settings->webcam_config.aec2, Settings->webcam_config.agc,
|
Settings->webcam_config2.ae_level -2, Settings->webcam_config.aec2, Settings->webcam_config.agc,
|
||||||
Settings->webcam_config2.agc_gain, Settings->webcam_config2.gainceiling, Settings->webcam_config.raw_gma,
|
Settings->webcam_config2.agc_gain, Settings->webcam_config2.gainceiling, Settings->webcam_config.raw_gma,
|
||||||
Settings->webcam_config.lenc, Settings->webcam_config.wpc, Settings->webcam_config.dcw, Settings->webcam_config.bpc,
|
Settings->webcam_config.lenc, Settings->webcam_config.wpc, Settings->webcam_config.dcw, Settings->webcam_config.bpc,
|
||||||
Settings->webcam_config.colorbar, Settings->webcam_config.streamspeed, Settings->webcam_config.nightmode
|
Settings->webcam_config.colorbar, Settings->webcam_config.feature
|
||||||
#ifdef ENABLE_RTSPSERVER
|
#ifdef ENABLE_RTSPSERVER
|
||||||
, Settings->webcam_config.rtsp
|
, Settings->webcam_config.rtsp
|
||||||
#endif // ENABLE_RTSPSERVER
|
#endif // ENABLE_RTSPSERVER
|
||||||
|
@ -1467,20 +1482,12 @@ void CmndWebcamColorbar(void) {
|
||||||
ResponseCmndStateText(Settings->webcam_config.colorbar);
|
ResponseCmndStateText(Settings->webcam_config.colorbar);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CmndWebcamStreamspeed(void) {
|
void CmndWebcamFeature(void) {
|
||||||
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 1)) {
|
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 2)) {
|
||||||
Settings->webcam_config.streamspeed = XdrvMailbox.payload;
|
Settings->webcam_config.feature = XdrvMailbox.payload;
|
||||||
WcSetOptions(23, Settings->webcam_config.streamspeed);
|
WcSetOptions(23, Settings->webcam_config.feature);
|
||||||
}
|
}
|
||||||
ResponseCmndStateText(Settings->webcam_config.streamspeed);
|
ResponseCmndNumber(Settings->webcam_config.feature);
|
||||||
}
|
|
||||||
|
|
||||||
void CmndWebcamNightmode(void) {
|
|
||||||
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 1)) {
|
|
||||||
Settings->webcam_config.nightmode = XdrvMailbox.payload;
|
|
||||||
WcSetOptions(24, Settings->webcam_config.nightmode);
|
|
||||||
}
|
|
||||||
ResponseCmndStateText(Settings->webcam_config.nightmode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CmndWebcamInit(void) {
|
void CmndWebcamInit(void) {
|
||||||
|
|
Loading…
Reference in New Issue