abort webcam if no pin config

avoids crashing if no valid config is provided
This commit is contained in:
Jason2866 2022-10-13 11:54:27 +02:00 committed by GitHub
parent 4471868580
commit 7e12fbbb6d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 16 deletions

View File

@ -345,10 +345,9 @@ uint32_t WcSetup(int32_t fsiz) {
config.pin_sscb_scl = Pin(GPIO_WEBCAM_SIOC); // SIOC_GPIO_NUM; config.pin_sscb_scl = Pin(GPIO_WEBCAM_SIOC); // SIOC_GPIO_NUM;
config.pin_pwdn = Pin(GPIO_WEBCAM_PWDN); // PWDN_GPIO_NUM; config.pin_pwdn = Pin(GPIO_WEBCAM_PWDN); // PWDN_GPIO_NUM;
config.pin_reset = Pin(GPIO_WEBCAM_RESET); // RESET_GPIO_NUM; config.pin_reset = Pin(GPIO_WEBCAM_RESET); // RESET_GPIO_NUM;
AddLog(LOG_LEVEL_DEBUG, PSTR("CAM: Template pin config"));
AddLog(LOG_LEVEL_DEBUG, PSTR("CAM: User template")); } else if (Y2_GPIO_NUM != -1) {
} else { // Modell is set in camera_pins.h
// defaults to AI THINKER
config.pin_d0 = Y2_GPIO_NUM; config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM; config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM; config.pin_d2 = Y4_GPIO_NUM;
@ -365,12 +364,16 @@ uint32_t WcSetup(int32_t fsiz) {
config.pin_sscb_scl = SIOC_GPIO_NUM; config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM; config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM; config.pin_reset = RESET_GPIO_NUM;
AddLog(LOG_LEVEL_DEBUG, PSTR("CAM: Default template")); AddLog(LOG_LEVEL_DEBUG, PSTR("CAM: Compile flag pin config"));
} else {
// no valid config found -> abort
AddLog(LOG_LEVEL_DEBUG, PSTR("CAM: No pin config"));
return 0;
} }
int32_t ledc_channel = analogAttach(config.pin_xclk); int32_t ledc_channel = analogAttach(config.pin_xclk);
if (ledc_channel < 0) { if (ledc_channel < 0) {
AddLog(LOG_LEVEL_ERROR, "CAM: cannot allocated ledc cahnnel, remove a PWM GPIO"); AddLog(LOG_LEVEL_ERROR, "CAM: cannot allocated ledc channel, remove a PWM GPIO");
} }
config.ledc_channel = (ledc_channel_t) ledc_channel; config.ledc_channel = (ledc_channel_t) ledc_channel;
AddLog(LOG_LEVEL_DEBUG_MORE, "CAM: XCLK on GPIO %i using ledc channel %i", config.pin_xclk, config.ledc_channel); AddLog(LOG_LEVEL_DEBUG_MORE, "CAM: XCLK on GPIO %i using ledc channel %i", config.pin_xclk, config.ledc_channel);
@ -378,7 +381,6 @@ uint32_t WcSetup(int32_t fsiz) {
config.xclk_freq_hz = 20000000; config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG; config.pixel_format = PIXFORMAT_JPEG;
//esp_log_level_set("*", ESP_LOG_INFO); //esp_log_level_set("*", ESP_LOG_INFO);
// if PSRAM IC present, init with UXGA resolution and higher JPEG quality // if PSRAM IC present, init with UXGA resolution and higher JPEG quality
@ -398,15 +400,7 @@ uint32_t WcSetup(int32_t fsiz) {
AddLog(LOG_LEVEL_DEBUG, PSTR("CAM: PSRAM not found")); AddLog(LOG_LEVEL_DEBUG, PSTR("CAM: PSRAM not found"));
} }
// AddLog(LOG_LEVEL_INFO, PSTR("CAM: heap check 1: %d"),ESP_getFreeHeap());
// stupid workaround camera diver eats up static ram should prefer PSRAM
// so we steal static ram to force driver to alloc PSRAM
// uint32_t maxfram = ESP.getMaxAllocHeap();
// void *x=malloc(maxfram-4096);
void *x = 0;
esp_err_t err = esp_camera_init(&config); esp_err_t err = esp_camera_init(&config);
if (x) { free(x); }
if (err != ESP_OK) { if (err != ESP_OK) {
AddLog(LOG_LEVEL_INFO, PSTR("CAM: Init failed with error 0x%x"), err); AddLog(LOG_LEVEL_INFO, PSTR("CAM: Init failed with error 0x%x"), err);