From 55cde3ff0826dbff8a63a5e3fb2a3829c19976f4 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Wed, 30 Dec 2020 01:28:33 +0200 Subject: [PATCH] Move framebuffer initialization to framebuffer.c * This decouples the framebuffer from the sensor --- src/omv/imlib/framebuffer.c | 22 ++++++++++++++++++++++ src/omv/imlib/framebuffer.h | 2 ++ src/omv/ports/nrf/main.c | 4 ++++ src/omv/ports/stm32/main.c | 1 + src/omv/ports/stm32/sensor.c | 18 ------------------ src/uvc/src/main.c | 1 + 6 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/omv/imlib/framebuffer.c b/src/omv/imlib/framebuffer.c index 8e4cbdb76..800a4c18a 100644 --- a/src/omv/imlib/framebuffer.c +++ b/src/omv/imlib/framebuffer.c @@ -70,6 +70,28 @@ void fb_encode_for_ide(uint8_t *ptr, image_t *img) *ptr++ = 0xFE; } +void framebuffer_init0() +{ + // Save fb_enabled flag state + int fb_enabled = JPEG_FB()->enabled; + + // Clear framebuffers + memset(MAIN_FB(), 0, sizeof(*MAIN_FB())); + memset(JPEG_FB(), 0, sizeof(*JPEG_FB())); + + // Skip the first frame. + MAIN_FB()->bpp = -1; + + // Enable streaming. + MAIN_FB()->streaming_enabled = true; // controlled by the OpenMV Cam. + + // Set default quality + JPEG_FB()->quality = ((JPEG_QUALITY_HIGH - JPEG_QUALITY_LOW) / 2) + JPEG_QUALITY_LOW; + + // Set fb_enabled + JPEG_FB()->enabled = fb_enabled; // controlled by the IDE. +} + void framebuffer_initialize_image(image_t *img) { img->w = framebuffer->w; diff --git a/src/omv/imlib/framebuffer.h b/src/omv/imlib/framebuffer.h index b82d13aa4..3c37e40d1 100644 --- a/src/omv/imlib/framebuffer.h +++ b/src/omv/imlib/framebuffer.h @@ -46,6 +46,8 @@ bool fb_get_streaming_enabled(); int fb_encode_for_ide_new_size(image_t *img); void fb_encode_for_ide(uint8_t *ptr, image_t *img); +void framebuffer_init0(); + // Initializes an image_t struct with the frame buffer. void framebuffer_initialize_image(image_t *img); diff --git a/src/omv/ports/nrf/main.c b/src/omv/ports/nrf/main.c index f50c979d1..31f5d4673 100644 --- a/src/omv/ports/nrf/main.c +++ b/src/omv/ports/nrf/main.c @@ -78,6 +78,8 @@ #endif #include "usbdbg.h" +#include "framebuffer.h" +#include "omv_boardconfig.h" uint32_t HAL_GetHalVersion() { @@ -166,6 +168,8 @@ soft_reset: uart_init0(); #endif + framebuffer_init0(); + #if (MICROPY_PY_BLE_NUS == 0) && (MICROPY_HW_USB_CDC == 0) { mp_obj_t args[2] = { diff --git a/src/omv/ports/stm32/main.c b/src/omv/ports/stm32/main.c index e7a243370..611398fc9 100644 --- a/src/omv/ports/stm32/main.c +++ b/src/omv/ports/stm32/main.c @@ -500,6 +500,7 @@ soft_reset: spi_init0(); uart_init0(); sensor_init0(); + framebuffer_init0(); fb_alloc_init0(); #ifdef IMLIB_ENABLE_IMAGE_IO file_buffer_init0(); diff --git a/src/omv/ports/stm32/sensor.c b/src/omv/ports/stm32/sensor.c index 7a7697f3b..2f973cea3 100644 --- a/src/omv/ports/stm32/sensor.c +++ b/src/omv/ports/stm32/sensor.c @@ -233,24 +233,6 @@ void sensor_init0() { dcmi_abort(); - // Save fb_enabled flag state - int fb_enabled = JPEG_FB()->enabled; - - // Clear framebuffers - memset(MAIN_FB(), 0, sizeof(*MAIN_FB())); - memset(JPEG_FB(), 0, sizeof(*JPEG_FB())); - - // Skip the first frame. - MAIN_FB()->bpp = -1; - - // Enable streaming. - MAIN_FB()->streaming_enabled = true; // controlled by the OpenMV Cam. - - // Set default quality - JPEG_FB()->quality = ((JPEG_QUALITY_HIGH - JPEG_QUALITY_LOW) / 2) + JPEG_QUALITY_LOW; - - // Set fb_enabled - JPEG_FB()->enabled = fb_enabled; // controlled by the IDE. #ifdef PORTENTA // The Portenta board uses the same I2C bus for the sensor and // user scripts. The I2C bus must be reinitialized on soft-reset. diff --git a/src/uvc/src/main.c b/src/uvc/src/main.c index 321e50ba9..7272f4c4c 100644 --- a/src/uvc/src/main.c +++ b/src/uvc/src/main.c @@ -180,6 +180,7 @@ int main() #endif sensor_init0(); + framebuffer_init0(); fb_alloc_init0(); // Initialize the sensor