diff options
Diffstat (limited to 'src/render')
| -rw-r--r-- | src/render/meson.build | 15 | ||||
| -rw-r--r-- | src/render/queue_momo.c | 20 | ||||
| -rw-r--r-- | src/render/renderer.h | 10 | ||||
| -rw-r--r-- | src/render/renderer_libplacebo.c | 72 | ||||
| -rw-r--r-- | src/render/renderer_momo.c | 17 |
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; |