From 5936a22e95ec17341ce090420df9636cf990ddc1 Mon Sep 17 00:00:00 2001 From: Vikram Dattu Date: Tue, 31 May 2022 14:04:24 +0530 Subject: [PATCH] Fix SPIRAM checks and allow conversion APIs to be built for all platforms (#397) Signed-off-by: Vikram --- CMakeLists.txt | 37 ++++++++++++++++++++++-------------- conversions/esp_jpg_decode.c | 4 ++++ conversions/jpge.cpp | 5 +++++ conversions/to_bmp.c | 18 +++++------------- conversions/to_jpg.cpp | 20 +++++-------------- 5 files changed, 42 insertions(+), 42 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e0ff2dc..7265820 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,24 @@ +# set conversion sources +set(COMPONENT_SRCS + conversions/yuv.c + conversions/to_jpg.cpp + conversions/to_bmp.c + conversions/jpge.cpp + conversions/esp_jpg_decode.c + ) + +set(COMPONENT_PRIV_INCLUDEDIRS + conversions/private_include + ) + +set(COMPONENT_ADD_INCLUDEDIRS + driver/include + conversions/include + ) + +# set driver sources only for supported platforms if(IDF_TARGET STREQUAL "esp32" OR IDF_TARGET STREQUAL "esp32s2" OR IDF_TARGET STREQUAL "esp32s3") - set(COMPONENT_SRCS + list(APPEND COMPONENT_SRCS driver/esp_camera.c driver/cam_hal.c driver/sccb.c @@ -16,22 +35,11 @@ if(IDF_TARGET STREQUAL "esp32" OR IDF_TARGET STREQUAL "esp32s2" OR IDF_TARGET ST sensors/bf3005.c sensors/bf20a6.c sensors/sc030iot.c - conversions/yuv.c - conversions/to_jpg.cpp - conversions/to_bmp.c - conversions/jpge.cpp - conversions/esp_jpg_decode.c ) - set(COMPONENT_ADD_INCLUDEDIRS - driver/include - conversions/include - ) - - set(COMPONENT_PRIV_INCLUDEDIRS + list(APPEND COMPONENT_PRIV_INCLUDEDIRS driver/private_include sensors/private_include - conversions/private_include target/private_include ) @@ -70,5 +78,6 @@ if(IDF_TARGET STREQUAL "esp32" OR IDF_TARGET STREQUAL "esp32s2" OR IDF_TARGET ST message(WARNING "ESP-IDF version detected: '${idf_version}'.") endif() - register_component() endif() + +register_component() diff --git a/conversions/esp_jpg_decode.c b/conversions/esp_jpg_decode.c index a9615e3..95c8360 100644 --- a/conversions/esp_jpg_decode.c +++ b/conversions/esp_jpg_decode.c @@ -21,6 +21,10 @@ #include "tjpgd.h" #elif CONFIG_IDF_TARGET_ESP32S3 #include "esp32s3/rom/tjpgd.h" +#elif CONFIG_IDF_TARGET_ESP32C3 +#include "esp32c3/rom/tjpgd.h" +#elif CONFIG_IDF_TARGET_ESP32H2 +#include "esp32h2/rom/tjpgd.h" #else #error Target CONFIG_IDF_TARGET is not supported #endif diff --git a/conversions/jpge.cpp b/conversions/jpge.cpp index a8ab93e..dd6790e 100644 --- a/conversions/jpge.cpp +++ b/conversions/jpge.cpp @@ -29,7 +29,12 @@ namespace jpge { if(b){ return b; } + // check if SPIRAM is enabled and allocate on SPIRAM if allocatable +#if (CONFIG_SPIRAM_SUPPORT && (CONFIG_SPIRAM_USE_CAPS_ALLOC || CONFIG_SPIRAM_USE_MALLOC)) return heap_caps_malloc(nSize, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT); +#else + return NULL; +#endif } static inline void jpge_free(void *p) { free(p); } diff --git a/conversions/to_bmp.c b/conversions/to_bmp.c index 5a54bdb..508ede6 100644 --- a/conversions/to_bmp.c +++ b/conversions/to_bmp.c @@ -21,19 +21,6 @@ #include "esp_jpg_decode.h" #include "esp_system.h" -#if ESP_IDF_VERSION_MAJOR >= 4 // IDF 4+ -#if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4 -#include "esp32/spiram.h" -#elif CONFIG_IDF_TARGET_ESP32S2 -#include "esp32s2/spiram.h" -#elif CONFIG_IDF_TARGET_ESP32S3 -#include "esp32s3/spiram.h" -#else -#error Target CONFIG_IDF_TARGET is not supported -#endif -#else // ESP32 Before IDF 4.0 -#include "esp_spiram.h" -#endif #if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG) #include "esp32-hal-log.h" @@ -72,7 +59,12 @@ typedef struct { static void *_malloc(size_t size) { + // check if SPIRAM is enabled and allocate on SPIRAM if allocatable +#if (CONFIG_SPIRAM_SUPPORT && (CONFIG_SPIRAM_USE_CAPS_ALLOC || CONFIG_SPIRAM_USE_MALLOC)) return heap_caps_malloc(size, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT); +#endif + // try allocating in internal memory + return malloc(size); } //output buffer and image width diff --git a/conversions/to_jpg.cpp b/conversions/to_jpg.cpp index 9b8905a..24cc298 100644 --- a/conversions/to_jpg.cpp +++ b/conversions/to_jpg.cpp @@ -21,21 +21,6 @@ #include "jpge.h" #include "yuv.h" -#include "esp_system.h" -#if ESP_IDF_VERSION_MAJOR >= 4 // IDF 4+ -#if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4 -#include "esp32/spiram.h" -#elif CONFIG_IDF_TARGET_ESP32S2 -#include "esp32s2/spiram.h" -#elif CONFIG_IDF_TARGET_ESP32S3 -#include "esp32s3/spiram.h" -#else -#error Target CONFIG_IDF_TARGET is not supported -#endif -#else // ESP32 Before IDF 4.0 -#include "esp_spiram.h" -#endif - #if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG) #include "esp32-hal-log.h" #define TAG "" @@ -50,7 +35,12 @@ static void *_malloc(size_t size) if(res) { return res; } + + // check if SPIRAM is enabled and is allocatable +#if (CONFIG_SPIRAM_SUPPORT && (CONFIG_SPIRAM_USE_CAPS_ALLOC || CONFIG_SPIRAM_USE_MALLOC)) return heap_caps_malloc(size, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT); +#endif + return NULL; } static IRAM_ATTR void convert_line_format(uint8_t * src, pixformat_t format, uint8_t * dst, size_t width, size_t in_channels, size_t line)