mirror of
https://github.com/openmv/openmv.git
synced 2025-09-26 23:09:13 +08:00
imlib/framebuffer: Support dynamic frame buffers.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
This commit is contained in:
parent
acc5edb0fc
commit
2913d78182
@ -42,26 +42,28 @@ extern char _jpeg_memory_end;
|
||||
jpegbuffer_t *jpegbuffer = (jpegbuffer_t *) &_jpeg_memory_start;
|
||||
|
||||
void framebuffer_init0() {
|
||||
// Save fb_enabled flag state
|
||||
// Save enable flag.
|
||||
int fb_enabled = jpegbuffer->enabled;
|
||||
uint32_t fb_size = (char *) &_fb_memory_end - (char *) framebuffer->data;
|
||||
|
||||
// Clear framebuffers
|
||||
memset(framebuffer, 0, sizeof(*framebuffer));
|
||||
// Initialize frame buffer.
|
||||
framebuffer_init_fb(framebuffer, fb_size, false);
|
||||
|
||||
// Initialize jpeg buffer.
|
||||
memset(jpegbuffer, 0, sizeof(*jpegbuffer));
|
||||
|
||||
mutex_init0(&jpegbuffer->lock);
|
||||
|
||||
// Enable streaming.
|
||||
framebuffer->streaming_enabled = true; // controlled by the OpenMV Cam.
|
||||
|
||||
// Set default quality
|
||||
jpegbuffer->enabled = fb_enabled;
|
||||
jpegbuffer->quality = ((OMV_JPEG_QUALITY_HIGH - OMV_JPEG_QUALITY_LOW) / 2) + OMV_JPEG_QUALITY_LOW;
|
||||
}
|
||||
|
||||
// Set fb_enabled
|
||||
jpegbuffer->enabled = fb_enabled; // controlled by the IDE.
|
||||
void framebuffer_init_fb(framebuffer_t *fb, size_t size, bool dynamic) {
|
||||
// Clear framebuffers
|
||||
memset(fb, 0, sizeof(*fb));
|
||||
|
||||
// Setup buffering.
|
||||
framebuffer_set_buffers(framebuffer, 1);
|
||||
fb->raw_size = size;
|
||||
fb->streaming_enabled = true;
|
||||
fb->dynamic = dynamic;
|
||||
framebuffer_set_buffers(fb, 1);
|
||||
}
|
||||
|
||||
void framebuffer_init_image(framebuffer_t *fb, image_t *img) {
|
||||
@ -283,8 +285,14 @@ int framebuffer_encoded_size(framebuffer_t *fb, image_t *img) {
|
||||
|
||||
// Returns the current frame buffer size, factoring in the space taken by fb_alloc.
|
||||
static uint32_t framebuffer_max_buffer_size(framebuffer_t *fb) {
|
||||
uint32_t fb_total_size = FB_ALIGN_SIZE_ROUND_DOWN((char *) &_fb_memory_end - (char *) fb->data);
|
||||
uint32_t fb_total_size = FB_ALIGN_SIZE_ROUND_DOWN(fb->raw_size);
|
||||
uint32_t fb_avail_size = FB_ALIGN_SIZE_ROUND_DOWN(fb_alloc_stack_pointer() - (char *) fb->data);
|
||||
|
||||
// No fb_alloc on dynamic FBs.
|
||||
if (fb->dynamic) {
|
||||
fb_avail_size = fb_total_size;
|
||||
}
|
||||
|
||||
return IM_MIN(fb_total_size, fb_avail_size);
|
||||
}
|
||||
|
||||
|
@ -43,6 +43,7 @@ typedef struct framebuffer {
|
||||
int32_t u, v;
|
||||
PIXFORMAT_STRUCT;
|
||||
int32_t streaming_enabled;
|
||||
uint32_t raw_size;
|
||||
uint32_t buff_size;
|
||||
uint32_t n_buffers;
|
||||
uint32_t frame_size;
|
||||
@ -50,6 +51,7 @@ typedef struct framebuffer {
|
||||
volatile int32_t tail;
|
||||
bool check_head;
|
||||
int32_t sampled_head;
|
||||
bool dynamic;
|
||||
OMV_ATTR_ALIGNED(uint8_t data[], FRAMEBUFFER_ALIGNMENT);
|
||||
} framebuffer_t;
|
||||
|
||||
@ -108,6 +110,9 @@ uint32_t framebuffer_get_buffer_size(framebuffer_t *fb);
|
||||
// Return the state of a buffer.
|
||||
vbuffer_t *framebuffer_get_buffer(framebuffer_t *fb, int32_t index);
|
||||
|
||||
// Initializes a frame buffer instance.
|
||||
void framebuffer_init_fb(framebuffer_t *fb, size_t size, bool dynamic);
|
||||
|
||||
// Initializes an image from the frame buffer.
|
||||
void framebuffer_init_image(framebuffer_t *fb, image_t *img);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user