summaryrefslogtreecommitdiff
path: root/src/render
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-06-02 11:56:54 -0400
committerAndrew Opalach <andrew@akon.city> 2025-06-02 11:56:54 -0400
commit0b13cf2a3bbd105fe4326e8e005536da43684df6 (patch)
tree3dab7f55179194d9efd280a3c3f869327e485b34 /src/render
parent2fa7ea95c891981684a55b41977172d040c2cc55 (diff)
downloadcamu-0b13cf2a3bbd105fe4326e8e005536da43684df6.tar.gz
camu-0b13cf2a3bbd105fe4326e8e005536da43684df6.tar.bz2
camu-0b13cf2a3bbd105fe4326e8e005536da43684df6.zip
Improve renderer api, misc cleanup
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/render')
-rw-r--r--src/render/meson.build15
-rw-r--r--src/render/queue_momo.c20
-rw-r--r--src/render/renderer.h10
-rw-r--r--src/render/renderer_libplacebo.c72
-rw-r--r--src/render/renderer_momo.c17
5 files changed, 86 insertions, 48 deletions
diff --git a/src/render/meson.build b/src/render/meson.build
index 7e3e394..557c459 100644
--- a/src/render/meson.build
+++ b/src/render/meson.build
@@ -133,6 +133,7 @@ if get_option('subtitles').enabled()
default_options: [
'doc=disabled',
'nls=disabled',
+ 'tests=disabled',
'tools=disabled',
'cache-build=disabled'
])
@@ -145,6 +146,7 @@ if get_option('subtitles').enabled()
version: '>=9.17.3',
default_options: [
'warning_level=0',
+ 'tests=disabled',
'harfbuzz=disabled',
'png=disabled'
])
@@ -162,14 +164,17 @@ if get_option('subtitles').enabled()
harfbuz = dependency('harfbuzz',
version: '>=2.0.0',
default_options: [
- 'freetype=disabled',
- 'introspection=disabled',
- 'docs=disabled',
- 'utilities=disabled',
'glib=disabled',
'gobject=disabled',
'cairo=disabled',
- 'chafa=disabled'
+ 'chafa=disabled',
+ 'freetype=disabled',
+ # This does not override yield, and yielding breaks the build if tests=enabled.
+ # https://github.com/mesonbuild/meson/issues/5214
+ 'tests=disabled',
+ 'introspection=disabled',
+ 'docs=disabled',
+ 'utilities=disabled'
])
libass = dependency('libass', default_options: libass_opts)
endif
diff --git a/src/render/queue_momo.c b/src/render/queue_momo.c
index 8e8d7e3..bc7caf8 100644
--- a/src/render/queue_momo.c
+++ b/src/render/queue_momo.c
@@ -1,5 +1,16 @@
#include "queue_momo.h"
+static bool queue_momo_configure_subtitles(struct camu_frame_queue *queue, u32 width, u32 height,
+ struct camu_codec_stream *stream)
+{
+ struct camu_frame_queue_momo *mq = (struct camu_frame_queue_momo *)queue;
+ (void)mq;
+ (void)width;
+ (void)height;
+ (void)stream;
+ return false;
+}
+
static void queue_momo_push(struct camu_frame_queue *queue, struct camu_codec_frame *frame, f64 pts)
{
struct camu_frame_queue_momo *mq = (struct camu_frame_queue_momo *)queue;
@@ -18,6 +29,13 @@ static void queue_momo_push_av_frame(struct camu_frame_queue *queue, AVFrame *fr
}
#endif
+static void queue_momo_push_subtitle(struct camu_frame_queue *queue, struct camu_codec_packet *packet)
+{
+ struct camu_frame_queue_momo *mq = (struct camu_frame_queue_momo *)queue;
+ (void)mq;
+ (void)packet;
+}
+
static void queue_momo_flush(struct camu_frame_queue *queue)
{
(void)queue;
@@ -55,10 +73,12 @@ static void queue_momo_free(struct camu_frame_queue **queue)
struct camu_frame_queue *camu_frame_queue_momo_create(void)
{
struct camu_frame_queue_momo *mq = al_alloc_object(struct camu_frame_queue_momo);
+ mq->q.configure_subtitles = queue_momo_configure_subtitles;
mq->q.push = queue_momo_push;
#ifdef CAMU_HAVE_FFMPEG
mq->q.push_av_frame = queue_momo_push_av_frame;
#endif
+ mq->q.push_subtitle = queue_momo_push_subtitle;
mq->q.flush = queue_momo_flush;
mq->q.count = queue_momo_count;
mq->q.read = queue_momo_read;
diff --git a/src/render/renderer.h b/src/render/renderer.h
index d2590b1..8e80696 100644
--- a/src/render/renderer.h
+++ b/src/render/renderer.h
@@ -15,6 +15,12 @@
#include "../codec/codec.h"
enum {
+ CAMU_RENDERER_FULLSCREEN = 0,
+ CAMU_RENDERER_SCALING,
+ CAMU_RENDERER_BACKGROUND
+};
+
+enum {
CAMU_SCALING_DEFAULT = 0,
CAMU_SCALING_NEAREST
};
@@ -51,9 +57,7 @@ struct camu_renderer {
void (*add_font)(struct camu_renderer *, struct camu_codec_stream *);
u32 (*get_latency)(struct camu_renderer *);
void (*resize)(struct camu_renderer *, u32 *, u32 *);
- void (*set_fullscreen)(struct camu_renderer *, bool);
- void (*set_scaling)(struct camu_renderer *, u8);
- void (*set_background)(struct camu_renderer *, u8);
+ void (*set)(struct camu_renderer *, u8, u8);
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 bfe8c47..5ef2a34 100644
--- a/src/render/renderer_libplacebo.c
+++ b/src/render/renderer_libplacebo.c
@@ -42,44 +42,42 @@ static void renderer_lp_resize(struct camu_renderer *renderer, u32 *width, u32 *
}
}
-#ifdef STELA_API_DX11
-static void renderer_lp_set_fullscreen(struct camu_renderer *renderer, bool fullscreen)
+static void renderer_lp_set(struct camu_renderer *renderer, u8 option, u8 value)
{
struct camu_renderer_lp *lr = (struct camu_renderer_lp *)renderer;
- IDXGISwapChain *d3d_swapchain = pl_d3d11_swapchain_unwrap(lr->swapchain);
- IDXGISwapChain1_SetFullscreenState(d3d_swapchain, fullscreen, NULL);
- IDXGISwapChain1_Release(d3d_swapchain);
-}
+ switch (option) {
+ case CAMU_RENDERER_FULLSCREEN:
+#ifdef STELA_API_DX11
+ IDXGISwapChain *d3d_swapchain = pl_d3d11_swapchain_unwrap(lr->swapchain);
+ IDXGISwapChain1_SetFullscreenState(d3d_swapchain, value, NULL);
+ IDXGISwapChain1_Release(d3d_swapchain);
#endif
-
-static void renderer_lp_set_scaling(struct camu_renderer *renderer, u8 mode)
-{
- struct camu_renderer_lp *lr = (struct camu_renderer_lp *)renderer;
- switch (mode) {
- case CAMU_SCALING_DEFAULT:
- lr->params.upscaler = pl_render_default_params.upscaler;
- lr->params.downscaler = pl_render_default_params.downscaler;
- lr->params.skip_anti_aliasing = pl_render_default_params.skip_anti_aliasing;
break;
- case CAMU_SCALING_NEAREST:
- lr->params.upscaler = &pl_filter_nearest;
- lr->params.downscaler = &pl_filter_nearest;
- lr->params.skip_anti_aliasing = true;
- break;
- }
-}
-
-static void renderer_lp_set_background(struct camu_renderer *renderer, u8 mode)
-{
- struct camu_renderer_lp *lr = (struct camu_renderer_lp *)renderer;
- switch (mode) {
- case CAMU_BACKGROUND_DEFAULT:
- clear_color[3] = 1.f;
- lr->params.background = PL_CLEAR_TILES;
+ case CAMU_RENDERER_SCALING:
+ switch (value) {
+ case CAMU_SCALING_DEFAULT:
+ lr->params.upscaler = pl_render_default_params.upscaler;
+ lr->params.downscaler = pl_render_default_params.downscaler;
+ lr->params.skip_anti_aliasing = pl_render_default_params.skip_anti_aliasing;
+ break;
+ case CAMU_SCALING_NEAREST:
+ lr->params.upscaler = &pl_filter_nearest;
+ lr->params.downscaler = &pl_filter_nearest;
+ lr->params.skip_anti_aliasing = true;
+ break;
+ }
break;
- case CAMU_BACKGROUND_TRANSPARENT:
- clear_color[3] = 0.f;
- lr->params.background = PL_CLEAR_SKIP;
+ case CAMU_RENDERER_BACKGROUND:
+ switch (value) {
+ case CAMU_BACKGROUND_DEFAULT:
+ clear_color[3] = 1.f;
+ lr->params.background = PL_CLEAR_TILES;
+ break;
+ case CAMU_BACKGROUND_TRANSPARENT:
+ clear_color[3] = 0.f;
+ lr->params.background = PL_CLEAR_SKIP;
+ break;
+ }
break;
}
}
@@ -479,13 +477,7 @@ struct camu_renderer *camu_renderer_lp_create(void)
lr->r.add_font = renderer_lp_add_font;
lr->r.get_latency = renderer_lp_get_latency;
lr->r.resize = renderer_lp_resize;
-#ifdef STELA_API_DX11
- lr->r.set_fullscreen = renderer_lp_set_fullscreen;
-#else
- lr->r.set_fullscreen = NULL;
-#endif
- lr->r.set_scaling = renderer_lp_set_scaling;
- lr->r.set_background = renderer_lp_set_background;
+ lr->r.set = renderer_lp_set;
lr->r.render = renderer_lp_render;
lr->r.free = renderer_lp_free;
return (struct camu_renderer *)lr;
diff --git a/src/render/renderer_momo.c b/src/render/renderer_momo.c
index 9f217bf..3cc8bc1 100644
--- a/src/render/renderer_momo.c
+++ b/src/render/renderer_momo.c
@@ -12,6 +12,14 @@ static void renderer_momo_resize(struct camu_renderer *renderer, u32 *width, u32
(void)height;
}
+static void renderer_momo_set(struct camu_renderer *renderer, u8 option, u8 value)
+{
+ struct camu_renderer_momo *mr = (struct camu_renderer_momo *)renderer;
+ (void)mr;
+ (void)option;
+ (void)value;
+}
+
static bool renderer_momo_create_renderer(struct camu_renderer *renderer, u32 *width, u32 *height,
#if defined STELA_API_OPENGL
#ifdef STELA_USE_EGL
@@ -63,6 +71,13 @@ static struct camu_frame_queue *renderer_momo_create_queue(struct camu_renderer
return q;
}
+static void renderer_momo_add_font(struct camu_renderer *renderer, struct camu_codec_stream *attachment)
+{
+ struct camu_renderer_momo *mr = (struct camu_renderer_momo *)renderer;
+ (void)mr;
+ (void)attachment;
+}
+
static u32 renderer_momo_get_latency(struct camu_renderer *renderer)
{
(void)renderer;
@@ -89,8 +104,10 @@ struct camu_renderer *camu_renderer_momo_create(void)
struct camu_renderer_momo *mr = al_alloc_object(struct camu_renderer_momo);
mr->r.create_renderer = renderer_momo_create_renderer;
mr->r.create_queue = renderer_momo_create_queue;
+ mr->r.add_font = renderer_momo_add_font;
mr->r.get_latency = renderer_momo_get_latency;
mr->r.resize = renderer_momo_resize;
+ mr->r.set = renderer_momo_set;
mr->r.render = renderer_momo_render;
mr->r.free = renderer_momo_free;
return (struct camu_renderer *)mr;