fb-pool: Add setter for fb allocator

pull/80/head
Andri Yngvason 2022-10-29 18:40:02 +00:00
parent 411530b5da
commit adef210252
2 changed files with 14 additions and 1 deletions

View File

@ -112,6 +112,8 @@ typedef bool (*nvnc_auth_fn)(const char* username, const char* password,
void* userdata); void* userdata);
typedef void (*nvnc_cut_text_fn)(struct nvnc*, const char* text, uint32_t len); typedef void (*nvnc_cut_text_fn)(struct nvnc*, const char* text, uint32_t len);
typedef void (*nvnc_fb_release_fn)(struct nvnc_fb*, void* context); typedef void (*nvnc_fb_release_fn)(struct nvnc_fb*, void* context);
typedef struct nvnc_fb* (*nvnc_fb_alloc_fn)(uint16_t width, uint16_t height,
uint32_t format, uint16_t stride);
typedef void (*nvnc_cleanup_fn)(void* userdata); typedef void (*nvnc_cleanup_fn)(void* userdata);
typedef void (*nvnc_log_fn)(const struct nvnc_log_data*, const char* message); typedef void (*nvnc_log_fn)(const struct nvnc_log_data*, const char* message);
@ -176,6 +178,8 @@ struct nvnc_fb_pool* nvnc_fb_pool_new(uint16_t width, uint16_t height,
bool nvnc_fb_pool_resize(struct nvnc_fb_pool*, uint16_t width, uint16_t height, bool nvnc_fb_pool_resize(struct nvnc_fb_pool*, uint16_t width, uint16_t height,
uint32_t fourcc_format, uint16_t stride); uint32_t fourcc_format, uint16_t stride);
void nvnc_fb_pool_set_alloc_fn(struct nvnc_fb_pool*, nvnc_fb_alloc_fn);
void nvnc_fb_pool_ref(struct nvnc_fb_pool*); void nvnc_fb_pool_ref(struct nvnc_fb_pool*);
void nvnc_fb_pool_unref(struct nvnc_fb_pool*); void nvnc_fb_pool_unref(struct nvnc_fb_pool*);

View File

@ -40,6 +40,8 @@ struct nvnc_fb_pool {
uint16_t height; uint16_t height;
int32_t stride; int32_t stride;
uint32_t fourcc_format; uint32_t fourcc_format;
nvnc_fb_alloc_fn alloc_fn;
}; };
EXPORT EXPORT
@ -57,6 +59,7 @@ struct nvnc_fb_pool* nvnc_fb_pool_new(uint16_t width, uint16_t height,
self->height = height; self->height = height;
self->stride = stride; self->stride = stride;
self->fourcc_format = fourcc_format; self->fourcc_format = fourcc_format;
self->alloc_fn = nvnc_fb_new;
return self; return self;
} }
@ -119,7 +122,7 @@ static void nvnc_fb_pool__on_fb_release(struct nvnc_fb* fb, void* userdata)
static struct nvnc_fb* nvnc_fb_pool__acquire_new(struct nvnc_fb_pool* self) static struct nvnc_fb* nvnc_fb_pool__acquire_new(struct nvnc_fb_pool* self)
{ {
struct nvnc_fb* fb = nvnc_fb_new(self->width, self->height, struct nvnc_fb* fb = self->alloc_fn(self->width, self->height,
self->fourcc_format, self->stride); self->fourcc_format, self->stride);
if (!fb) if (!fb)
return NULL; return NULL;
@ -168,3 +171,9 @@ void nvnc_fb_pool_release(struct nvnc_fb_pool* self, struct nvnc_fb* fb)
item->fb = fb; item->fb = fb;
TAILQ_INSERT_TAIL(&self->fbs, item, link); TAILQ_INSERT_TAIL(&self->fbs, item, link);
} }
EXPORT
void nvnc_fb_pool_set_alloc_fn(struct nvnc_fb_pool* self, nvnc_fb_alloc_fn fn)
{
self->alloc_fn = fn;
}