zephyr/drivers/video/video_common.c
Josuah Demangeon 0ac91da3a4 drivers: video: introduce CONFIG_VIDEO_LOG_LEVEL
Zephyr drivers have typically one log level defined per class. The video
drivers were making exception. This adds the missing log level for video
drivers.

Since all headers had to be modified, this also:

- Update the log initialization to the new syntax from 5e34681

- Sort the #include list to something like #41543

Signed-off-by: Josuah Demangeon <me@josuah.net>
2024-09-05 13:11:35 -05:00

76 lines
1.5 KiB
C

/*
* Copyright (c) 2019, Linaro Limited
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <zephyr/drivers/video.h>
K_HEAP_DEFINE(video_buffer_pool,
CONFIG_VIDEO_BUFFER_POOL_SZ_MAX *
CONFIG_VIDEO_BUFFER_POOL_NUM_MAX);
static struct video_buffer video_buf[CONFIG_VIDEO_BUFFER_POOL_NUM_MAX];
struct mem_block {
void *data;
};
static struct mem_block video_block[CONFIG_VIDEO_BUFFER_POOL_NUM_MAX];
struct video_buffer *video_buffer_aligned_alloc(size_t size, size_t align)
{
struct video_buffer *vbuf = NULL;
struct mem_block *block;
int i;
/* find available video buffer */
for (i = 0; i < ARRAY_SIZE(video_buf); i++) {
if (video_buf[i].buffer == NULL) {
vbuf = &video_buf[i];
block = &video_block[i];
break;
}
}
if (vbuf == NULL) {
return NULL;
}
/* Alloc buffer memory */
block->data = k_heap_aligned_alloc(&video_buffer_pool, align, size, K_FOREVER);
if (block->data == NULL) {
return NULL;
}
vbuf->buffer = block->data;
vbuf->size = size;
vbuf->bytesused = 0;
return vbuf;
}
struct video_buffer *video_buffer_alloc(size_t size)
{
return video_buffer_aligned_alloc(size, sizeof(void *));
}
void video_buffer_release(struct video_buffer *vbuf)
{
struct mem_block *block = NULL;
int i;
/* vbuf to block */
for (i = 0; i < ARRAY_SIZE(video_block); i++) {
if (video_block[i].data == vbuf->buffer) {
block = &video_block[i];
break;
}
}
vbuf->buffer = NULL;
if (block) {
k_heap_free(&video_buffer_pool, block->data);
}
}