diff --git a/src/omv/boards/ARDUINO_NANO_RP2040_CONNECT/omv_boardconfig.h b/src/omv/boards/ARDUINO_NANO_RP2040_CONNECT/omv_boardconfig.h index b4948986a..ada4f2c29 100644 --- a/src/omv/boards/ARDUINO_NANO_RP2040_CONNECT/omv_boardconfig.h +++ b/src/omv/boards/ARDUINO_NANO_RP2040_CONNECT/omv_boardconfig.h @@ -30,9 +30,6 @@ extern unsigned char *OMV_UNIQUE_ID_ADDR; // TODO Not actually used right now, frequency is hardcoded. #define OMV_XCLK_FREQUENCY (12500000) -// RAW buffer size -#define OMV_RAW_BUF_SIZE (100*1024) - // Enable hardware JPEG #define OMV_HARDWARE_JPEG (0) diff --git a/src/omv/boards/NANO33/omv_boardconfig.h b/src/omv/boards/NANO33/omv_boardconfig.h index 99b85a35e..03d67c58c 100644 --- a/src/omv/boards/NANO33/omv_boardconfig.h +++ b/src/omv/boards/NANO33/omv_boardconfig.h @@ -26,9 +26,6 @@ // Sensor external clock timer frequency. #define OMV_XCLK_FREQUENCY (12000000) -// RAW buffer size -#define OMV_RAW_BUF_SIZE (131072) - // Enable hardware JPEG #define OMV_HARDWARE_JPEG (0) diff --git a/src/omv/boards/NICLAV/omv_boardconfig.h b/src/omv/boards/NICLAV/omv_boardconfig.h index 0ed09ffb1..8822d8d70 100644 --- a/src/omv/boards/NICLAV/omv_boardconfig.h +++ b/src/omv/boards/NICLAV/omv_boardconfig.h @@ -35,9 +35,6 @@ #define OMV_BOOTLDR_LED_PIN (GPIO_PIN_12) #define OMV_BOOTLDR_LED_PORT (GPIOI) -// RAW buffer size -#define OMV_RAW_BUF_SIZE (409600) - // Enable hardware JPEG #define OMV_HARDWARE_JPEG (1) diff --git a/src/omv/boards/OPENMV2/omv_boardconfig.h b/src/omv/boards/OPENMV2/omv_boardconfig.h index f4fa8b7f1..efe0a61b0 100644 --- a/src/omv/boards/OPENMV2/omv_boardconfig.h +++ b/src/omv/boards/OPENMV2/omv_boardconfig.h @@ -43,9 +43,6 @@ #define OMV_BOOTLDR_LED_PIN (GPIO_PIN_2) #define OMV_BOOTLDR_LED_PORT (GPIOC) -// RAW buffer size -#define OMV_RAW_BUF_SIZE (155648) - // Enable sensor drivers #define OMV_ENABLE_OV2640 (1) #define OMV_ENABLE_OV5640 (0) diff --git a/src/omv/boards/OPENMV3/omv_boardconfig.h b/src/omv/boards/OPENMV3/omv_boardconfig.h index 9bc095613..d31ee3cb5 100644 --- a/src/omv/boards/OPENMV3/omv_boardconfig.h +++ b/src/omv/boards/OPENMV3/omv_boardconfig.h @@ -43,9 +43,6 @@ #define OMV_BOOTLDR_LED_PIN (GPIO_PIN_1) #define OMV_BOOTLDR_LED_PORT (GPIOC) -// RAW buffer size -#define OMV_RAW_BUF_SIZE (307200) - // Enable sensor drivers #define OMV_ENABLE_OV2640 (0) #define OMV_ENABLE_OV5640 (0) diff --git a/src/omv/boards/OPENMV4/omv_boardconfig.h b/src/omv/boards/OPENMV4/omv_boardconfig.h index 157010191..2dff76ef8 100644 --- a/src/omv/boards/OPENMV4/omv_boardconfig.h +++ b/src/omv/boards/OPENMV4/omv_boardconfig.h @@ -52,9 +52,6 @@ #define OMV_BOOTLDR_LED_PIN (GPIO_PIN_1) #define OMV_BOOTLDR_LED_PORT (GPIOC) -// RAW buffer size -#define OMV_RAW_BUF_SIZE (409600) - // Enable hardware JPEG #define OMV_HARDWARE_JPEG (1) diff --git a/src/omv/boards/OPENMV4P/omv_boardconfig.h b/src/omv/boards/OPENMV4P/omv_boardconfig.h index 36d191e2d..e511353bf 100644 --- a/src/omv/boards/OPENMV4P/omv_boardconfig.h +++ b/src/omv/boards/OPENMV4P/omv_boardconfig.h @@ -56,9 +56,6 @@ #define OMV_BOOTLDR_LED_PIN (GPIO_PIN_1) #define OMV_BOOTLDR_LED_PORT (GPIOC) -// RAW buffer size -#define OMV_RAW_BUF_SIZE (20971520) - // Enable hardware JPEG #define OMV_HARDWARE_JPEG (1) diff --git a/src/omv/boards/OPENMVPT/omv_boardconfig.h b/src/omv/boards/OPENMVPT/omv_boardconfig.h index 4c04fbdea..c03c30c64 100644 --- a/src/omv/boards/OPENMVPT/omv_boardconfig.h +++ b/src/omv/boards/OPENMVPT/omv_boardconfig.h @@ -53,9 +53,6 @@ #define OMV_BOOTLDR_LED_PIN (GPIO_PIN_1) #define OMV_BOOTLDR_LED_PORT (GPIOC) -// RAW buffer size -#define OMV_RAW_BUF_SIZE (33554432) - // Enable hardware JPEG #define OMV_HARDWARE_JPEG (1) diff --git a/src/omv/boards/PICO/omv_boardconfig.h b/src/omv/boards/PICO/omv_boardconfig.h index 731ecd596..90b40e837 100644 --- a/src/omv/boards/PICO/omv_boardconfig.h +++ b/src/omv/boards/PICO/omv_boardconfig.h @@ -30,9 +30,6 @@ extern unsigned char *OMV_UNIQUE_ID_ADDR; // TODO Not actually used right now, frequency is hardcoded. #define OMV_XCLK_FREQUENCY (12500000) -// RAW buffer size -#define OMV_RAW_BUF_SIZE (151*1024) - // Enable hardware JPEG #define OMV_HARDWARE_JPEG (0) diff --git a/src/omv/boards/PORTENTA/omv_boardconfig.h b/src/omv/boards/PORTENTA/omv_boardconfig.h index 1487e975c..fafacfd55 100644 --- a/src/omv/boards/PORTENTA/omv_boardconfig.h +++ b/src/omv/boards/PORTENTA/omv_boardconfig.h @@ -50,9 +50,6 @@ #define OMV_BOOTLDR_LED_PIN (GPIO_PIN_6) #define OMV_BOOTLDR_LED_PORT (GPIOK) -// RAW buffer size -#define OMV_RAW_BUF_SIZE (4*1024*1024) - // Enable hardware JPEG #define OMV_HARDWARE_JPEG (1) diff --git a/src/omv/imlib/framebuffer.c b/src/omv/imlib/framebuffer.c index d16841c66..09915419d 100644 --- a/src/omv/imlib/framebuffer.c +++ b/src/omv/imlib/framebuffer.c @@ -18,6 +18,7 @@ #define CONSERVATIVE_JPEG_BUF_SIZE (OMV_JPEG_BUF_SIZE-64) extern char _fb_base; +extern char _fb_end; framebuffer_t *framebuffer = (framebuffer_t *) &_fb_base; extern char _jpeg_buf; @@ -248,7 +249,8 @@ static uint32_t framebuffer_raw_buffer_size() uint32_t size = (uint32_t) (fb_alloc_stack_pointer() - ((char *) framebuffer->data)); // We don't want to give all of the frame buffer RAM to the frame buffer. So, we will limit // the maximum amount of RAM we return. - return IM_MIN(size, OMV_RAW_BUF_SIZE); + uint32_t raw_buf_size = (&_fb_end - &_fb_base); + return IM_MIN(size, raw_buf_size); } uint32_t framebuffer_get_buffer_size() diff --git a/src/omv/ports/nrf/nrf52xxx.ld.S b/src/omv/ports/nrf/nrf52xxx.ld.S index 89178d2ad..fac4e91d5 100644 --- a/src/omv/ports/nrf/nrf52xxx.ld.S +++ b/src/omv/ports/nrf/nrf52xxx.ld.S @@ -104,7 +104,10 @@ SECTIONS { . = ALIGN(4); _fb_base = .; - . = . + OMV_FB_SIZE + OMV_FB_ALLOC_SIZE; + . += OMV_FB_SIZE; + + _fb_end = .; + . += OMV_FB_ALLOC_SIZE; . = ALIGN(4); _fballoc = .; diff --git a/src/omv/ports/rp2/rp2.ld.S b/src/omv/ports/rp2/rp2.ld.S index c4448dc29..f5fac7d57 100644 --- a/src/omv/ports/rp2/rp2.ld.S +++ b/src/omv/ports/rp2/rp2.ld.S @@ -188,7 +188,10 @@ SECTIONS { . = ALIGN(4); _fb_base = .; - . = . + OMV_FB_SIZE + OMV_FB_ALLOC_SIZE; + . += OMV_FB_SIZE; + + _fb_end = .; + . += OMV_FB_ALLOC_SIZE; . = ALIGN(4); _fballoc = .; diff --git a/src/omv/ports/stm32/stm32fxxx.ld.S b/src/omv/ports/stm32/stm32fxxx.ld.S index 7b9f0b1e1..530b687ec 100755 --- a/src/omv/ports/stm32/stm32fxxx.ld.S +++ b/src/omv/ports/stm32/stm32fxxx.ld.S @@ -113,7 +113,10 @@ SECTIONS { . = ALIGN(4); _fb_base = .; - . = . + OMV_FB_SIZE + OMV_FB_ALLOC_SIZE; + . += OMV_FB_SIZE; + + _fb_end = .; + . += OMV_FB_ALLOC_SIZE; . = ALIGN(4); _fballoc = .; diff --git a/src/uvc/stm32fxxx.ld.S b/src/uvc/stm32fxxx.ld.S index 507903ec3..35074c763 100755 --- a/src/uvc/stm32fxxx.ld.S +++ b/src/uvc/stm32fxxx.ld.S @@ -94,7 +94,10 @@ SECTIONS { . = ALIGN(4); _fb_base = .; - . = . + OMV_FB_SIZE + OMV_FB_ALLOC_SIZE; + . += OMV_FB_SIZE; + + _fb_end = .; + . += OMV_FB_ALLOC_SIZE; . = ALIGN(4); _fballoc = .;