summaryrefslogtreecommitdiff
path: root/src/render
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-01-17 12:12:01 -0500
committerAndrew Opalach <andrew@akon.city> 2025-01-17 12:12:01 -0500
commit37684729283f62fd7f1e74bc2b318dc9ad2cb695 (patch)
tree2f5be73bf64ac6573e35e8f499515659472a14c9 /src/render
parentd1f1eb9b3713a450c0736caad17febae0721af4d (diff)
downloadcamu-37684729283f62fd7f1e74bc2b318dc9ad2cb695.tar.gz
camu-37684729283f62fd7f1e74bc2b318dc9ad2cb695.tar.bz2
camu-37684729283f62fd7f1e74bc2b318dc9ad2cb695.zip
Account for dependency changes, platform testing
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/render')
-rw-r--r--src/render/queue_libplacebo.c2
-rw-r--r--src/render/renderer.h2
-rw-r--r--src/render/renderer_libplacebo.c24
-rw-r--r--src/render/renderer_libplacebo.h1
4 files changed, 20 insertions, 9 deletions
diff --git a/src/render/queue_libplacebo.c b/src/render/queue_libplacebo.c
index 861dd5e..22df3dc 100644
--- a/src/render/queue_libplacebo.c
+++ b/src/render/queue_libplacebo.c
@@ -219,7 +219,7 @@ static bool map_av_frame(pl_gpu gpu, pl_tex *tex, const struct pl_source_frame *
ASS_Image *ass_frame = ass_render_frame(lq->ass_renderer, lq->ass_track, now, &change);
if (ass_frame) {
struct camu_overlay_lp *overlay = NULL;
- if (lq->overlays.size > 0) {
+ if (lq->overlays.count > 0) {
overlay = al_array_last(lq->overlays);
}
if (!overlay || change > 0) {
diff --git a/src/render/renderer.h b/src/render/renderer.h
index a9780e5..c78e1c1 100644
--- a/src/render/renderer.h
+++ b/src/render/renderer.h
@@ -39,7 +39,7 @@ struct camu_renderer {
void *priv);
struct camu_frame_queue *(*create_queue)(struct camu_renderer *);
u32 (*get_latency)(struct camu_renderer *);
- void (*resize)(struct camu_renderer *, s32 *, s32 *);
+ void (*resize)(struct camu_renderer *, s32 *, s32 *, bool);
void (*render)(struct camu_renderer *, struct camu_screen *, bool);
#ifdef CAMU_HAVE_FFMPEG
s32 (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, s32 flags);
diff --git a/src/render/renderer_libplacebo.c b/src/render/renderer_libplacebo.c
index 3de0fdc..2539e1f 100644
--- a/src/render/renderer_libplacebo.c
+++ b/src/render/renderer_libplacebo.c
@@ -13,7 +13,7 @@
static f32 clear_color[4] = { 0.0f, 0.0f, 0.0f, 1.f };
-static void renderer_lp_resize(struct camu_renderer *renderer, s32 *width, s32 *height)
+static void renderer_lp_resize(struct camu_renderer *renderer, s32 *width, s32 *height, bool double_swap)
{
struct camu_renderer_lp *lr = (struct camu_renderer_lp *)renderer;
if (lr->swapchain) {
@@ -22,14 +22,18 @@ static void renderer_lp_resize(struct camu_renderer *renderer, s32 *width, s32 *
lr->have_frame = false;
}
pl_swapchain_resize(lr->swapchain, width, height);
+ lr->double_swap = double_swap;
}
}
static void log_callback(void *userdata, enum pl_log_level level, const char *message)
{
(void)userdata;
- (void)level;
- al_log_info("render_libplacebo", message);
+ if (level < PL_LOG_INFO) {
+ al_log_info("render_libplacebo", message);
+ } else {
+ al_log_debug("render_libplacebo", message);
+ }
}
static bool renderer_lp_create_renderer(struct camu_renderer *renderer, s32 *width, s32 *height,
@@ -140,9 +144,10 @@ static bool renderer_lp_create_renderer(struct camu_renderer *renderer, s32 *wid
lr->renderer = pl_renderer_create(lr->logger, lr->gpu);
- lr->have_frame = false;
-
pl_swapchain_resize(lr->swapchain, width, height);
+ lr->double_swap = false;
+
+ lr->have_frame = false;
al_memset(&lr->params, 0, sizeof(struct pl_render_params));
//lr->params = pl_render_fast_params;
@@ -215,6 +220,11 @@ static void renderer_lp_render(struct camu_renderer *renderer, struct camu_scree
}
#endif
+ if (lr->double_swap) {
+ pl_swapchain_swap_buffers(lr->swapchain);
+ lr->double_swap = false;
+ }
+
if (!lr->have_frame) {
struct pl_swapchain_frame frame;
pl_swapchain_start_frame(lr->swapchain, &frame);
@@ -229,7 +239,7 @@ static void renderer_lp_render(struct camu_renderer *renderer, struct camu_scree
bool do_gpu_finish = false;
struct camu_screen_video *video;
- while (scr->videos.size > 0) {
+ while (scr->videos.count > 0) {
bool any_eof = false;
al_array_foreach_ptr(scr->videos, i, video) {
bool weighted;
@@ -269,7 +279,7 @@ static void renderer_lp_render(struct camu_renderer *renderer, struct camu_scree
}
}
- if (al_array_is_empty(scr->videos) && !force) {
+ if (!scr->videos.count && !force) {
return;
}
diff --git a/src/render/renderer_libplacebo.h b/src/render/renderer_libplacebo.h
index 38407bb..a4bd40e 100644
--- a/src/render/renderer_libplacebo.h
+++ b/src/render/renderer_libplacebo.h
@@ -26,6 +26,7 @@ struct camu_renderer_lp {
pl_gpu gpu;
pl_log logger;
pl_swapchain swapchain;
+ bool double_swap;
struct pl_frame target;
bool have_frame;
pl_renderer renderer;