summaryrefslogtreecommitdiff
path: root/src/render
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-05-11 15:10:54 -0400
committerAndrew Opalach <andrew@akon.city> 2025-05-11 15:10:54 -0400
commitcb342b234defc1205de5d8b10ddf79deae0a551a (patch)
tree135a8f17ef297dcfa71cfa24de0170797add999e /src/render
parentbbdc4ed66aa171f89f675aa1c82316477d5fd47e (diff)
downloadcamu-cb342b234defc1205de5d8b10ddf79deae0a551a.tar.gz
camu-cb342b234defc1205de5d8b10ddf79deae0a551a.tar.bz2
camu-cb342b234defc1205de5d8b10ddf79deae0a551a.zip
Add keybind to disable scaling filter
- Fix no FFmpeg build. - Cleanup commented code from cmc ui. Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/render')
-rw-r--r--src/render/queue_libplacebo.c8
-rw-r--r--src/render/queue_libplacebo.h2
-rw-r--r--src/render/renderer.h6
-rw-r--r--src/render/renderer_libplacebo.c27
4 files changed, 37 insertions, 6 deletions
diff --git a/src/render/queue_libplacebo.c b/src/render/queue_libplacebo.c
index 8e17eb7..7fe9258 100644
--- a/src/render/queue_libplacebo.c
+++ b/src/render/queue_libplacebo.c
@@ -340,15 +340,15 @@ static void queue_lp_push_av_frame(struct camu_frame_queue *queue, AVFrame *fram
static void queue_lp_push_subtitle(struct camu_frame_queue *queue, struct camu_codec_packet *packet)
{
struct camu_frame_queue_lp *lq = (struct camu_frame_queue_lp *)queue;
- AVPacket *pkt = packet->av.pkt;
#ifdef CAMU_HAVE_SUBTITLES
+ AVPacket *pkt = packet->av.pkt;
nn_mutex_lock(&lq->subtitle_lock);
al_assert(lq->ass_track && lq->ass_renderer);
ass_process_chunk(lq->ass_track, (const char *)pkt->data, pkt->size, pkt->pts, pkt->duration);
nn_mutex_unlock(&lq->subtitle_lock);
#else
(void)lq;
- (void)pkt;
+ (void)packet;
#endif
}
@@ -400,9 +400,11 @@ static void queue_lp_free(struct camu_frame_queue **queue)
nn_mutex_destroy(&lq->subtitle_lock);
}
#endif
+#ifdef CAMU_HAVE_FFMPEG
if (lq->copy_frame_fallback) {
av_frame_free(&lq->swframe);
}
+#endif
pl_queue_destroy(&lq->queue);
al_free(lq);
*queue = NULL;
@@ -419,8 +421,8 @@ struct camu_frame_queue *camu_frame_queue_lp_create(void)
lq->q.push = queue_lp_push;
#ifdef CAMU_HAVE_FFMPEG
lq->q.push_av_frame = queue_lp_push_av_frame;
- lq->q.push_subtitle = queue_lp_push_subtitle;
#endif
+ lq->q.push_subtitle = queue_lp_push_subtitle;
lq->q.flush = queue_lp_flush;
lq->q.count = queue_lp_count;
lq->q.read = queue_lp_read;
diff --git a/src/render/queue_libplacebo.h b/src/render/queue_libplacebo.h
index eeb562f..2766447 100644
--- a/src/render/queue_libplacebo.h
+++ b/src/render/queue_libplacebo.h
@@ -21,7 +21,9 @@ struct camu_frame_queue_lp {
pl_queue queue;
struct pl_queue_params params;
bool copy_frame_fallback;
+#ifdef CAMU_HAVE_FFMPEG
AVFrame *swframe;
+#endif
array(struct camu_overlay_lp *) overlays;
#ifdef CAMU_HAVE_SUBTITLES
ASS_Library *ass;
diff --git a/src/render/renderer.h b/src/render/renderer.h
index b4863a0..1e6ffc0 100644
--- a/src/render/renderer.h
+++ b/src/render/renderer.h
@@ -19,6 +19,11 @@
#include "../codec/codec.h"
+enum {
+ CAMU_SCALING_DEFAULT = 0,
+ CAMU_SCALING_NEAREST
+};
+
struct camu_frame_queue;
struct camu_screen;
struct camu_renderer {
@@ -48,6 +53,7 @@ struct camu_renderer {
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 (*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 8f816b4..a2105d6 100644
--- a/src/render/renderer_libplacebo.c
+++ b/src/render/renderer_libplacebo.c
@@ -52,6 +52,23 @@ static void renderer_lp_set_fullscreen(struct camu_renderer *renderer, bool full
}
#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 log_callback(void *userdata, enum pl_log_level level, const char *message)
{
(void)userdata;
@@ -88,6 +105,12 @@ static bool renderer_lp_create_renderer(struct camu_renderer *renderer, u32 *wid
clear_color[1] = ((global_color_palette.colors[0] >> 8) & 0xff) / 255.f;
clear_color[2] = ((global_color_palette.colors[0]) & 0xff) / 255.f;
+ /*
+ clear_color[0] = 255.f;
+ clear_color[1] = 255.f;
+ clear_color[2] = 255.f;
+ */
+
lr->logger = pl_log_create(PL_API_VER, pl_log_params(
.log_cb = log_callback,
.log_priv = NULL,
@@ -201,10 +224,7 @@ static bool renderer_lp_create_renderer(struct camu_renderer *renderer, u32 *wid
lr->have_frame = false;
al_memset(&lr->params, 0, sizeof(struct pl_render_params));
- //lr->params = pl_render_fast_params;
- //lr->params.upscaler = &pl_filter_nearest;
lr->params = pl_render_default_params;
- //lr->params = pl_render_high_quality_params;
lr->params.deband_params = NULL;
//lr->params.frame_mixer = NULL;
@@ -418,6 +438,7 @@ struct camu_renderer *camu_renderer_lp_create(void)
#else
lr->r.set_fullscreen = NULL;
#endif
+ lr->r.set_scaling = renderer_lp_set_scaling;
lr->r.render = renderer_lp_render;
lr->r.free = renderer_lp_free;
return (struct camu_renderer *)lr;