video_mem.c 925 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #include "video_mem.h"
  2. #include <sys/sys_heap.h>
  3. #include <kernel.h>
  4. #include <init.h>
  5. #define VIDEO_MEMORY_SIZE (20*1024)
  6. __in_section_unique(VIDEO_PSRAM_REGION)static char __aligned(4) video_mem_pool_buffer[VIDEO_MEMORY_SIZE];
  7. __in_section_unique(VIDEO_PSRAM_REGION) static struct sys_heap video_mem_heap;
  8. static OS_MUTEX_DEFINE(video_mem_mutex);
  9. void *video_mem_malloc(int size)
  10. {
  11. void *ptr;
  12. os_mutex_lock(&video_mem_mutex, OS_FOREVER);
  13. ptr = sys_heap_alloc(&video_mem_heap, size);
  14. os_mutex_unlock(&video_mem_mutex);
  15. return ptr;
  16. }
  17. void video_mem_free(void *ptr)
  18. {
  19. os_mutex_lock(&video_mem_mutex, OS_FOREVER);
  20. sys_heap_free(&video_mem_heap, ptr);
  21. os_mutex_unlock(&video_mem_mutex);
  22. }
  23. static int video_mem_init(const struct device *unused)
  24. {
  25. sys_heap_init(&video_mem_heap, video_mem_pool_buffer, VIDEO_MEMORY_SIZE);
  26. return 0;
  27. }
  28. SYS_INIT(video_mem_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);