From 22eba2bed84d977bb1478992be3e12691324241e Mon Sep 17 00:00:00 2001 From: Andri Yngvason Date: Sun, 29 Mar 2020 13:16:05 +0000 Subject: [PATCH] Make sure framebuffers are properly aligned --- src/fb.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/fb.c b/src/fb.c index 894162e..189020d 100644 --- a/src/fb.c +++ b/src/fb.c @@ -3,7 +3,10 @@ #include #include +#include +#define UDIV_UP(a, b) (((a) + (b) - 1) / (b)) +#define ALIGN_UP(n, a) (UDIV_UP(n, a) * a) #define EXPORT __attribute__((visibility("default"))) EXPORT @@ -20,11 +23,14 @@ struct nvnc_fb* nvnc_fb_new(uint16_t width, uint16_t height, fb->fourcc_format = fourcc_format; fb->size = width * height * 4; /* Assume 4 byte format for now */ + size_t alignment = MAX(4, sizeof(void*)); + size_t aligned_size = ALIGN_UP(fb->size, alignment); + /* fb could be allocated in single allocation, but I want to reserve * the possiblity to create an fb with a pixel buffer passed from the * user. */ - fb->addr = malloc(fb->size); + fb->addr = aligned_alloc(alignment, aligned_size); if (!fb->addr) { free(fb); fb = NULL;