diff options
| author | 2025-06-02 11:56:54 -0400 | |
|---|---|---|
| committer | 2025-06-02 11:56:54 -0400 | |
| commit | 0b13cf2a3bbd105fe4326e8e005536da43684df6 (patch) | |
| tree | 3dab7f55179194d9efd280a3c3f869327e485b34 /src/buffer | |
| parent | 2fa7ea95c891981684a55b41977172d040c2cc55 (diff) | |
| download | camu-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/buffer')
| -rw-r--r-- | src/buffer/video.c | 19 | ||||
| -rw-r--r-- | src/buffer/video.h | 4 |
2 files changed, 9 insertions, 14 deletions
diff --git a/src/buffer/video.c b/src/buffer/video.c index c29f1b7..3eee026 100644 --- a/src/buffer/video.c +++ b/src/buffer/video.c @@ -9,9 +9,7 @@ #include "../codec/ffmpeg/common.h" #endif -#ifdef CAMU_VIDEO_BUFFER_FORCE_SCALER #include "../codec/ffmpeg/scaler.h" -#endif #define BUFFER_MARK_LOW ((1.0 / 24.0) * 2) #define BUFFER_MARK_BUFFERED ((1.0 / 24.0) * 4) // Must be >1. @@ -71,16 +69,20 @@ bool camu_video_buffer_configure(struct camu_video_buffer *buf, struct camu_code struct camu_video_format *in = &buf->fmt.in; struct camu_video_format *req = &buf->fmt.req; camu_video_format_copy(in, fmt); -#ifndef CAMU_VIDEO_BUFFER_FORCE_SCALER camu_video_format_copy(req, in); -#else if (fmt->width > 0 && fmt->height > 0 && - (fmt->format != CAMU_PIXEL_FORMAT_RGBA && fmt->format != CAMU_PIXEL_FORMAT_RGB)) { +#ifdef CAMU_VIDEO_BUFFER_REQUIRE_RGB + (fmt->format != CAMU_PIXEL_FORMAT_RGBA && fmt->format != CAMU_PIXEL_FORMAT_RGB) +#else + (fmt->format == CAMU_PIXEL_FORMAT_PAL8) +#endif + ) { buf->fmt.scaler_needed = true; req->width = fmt->width; req->height = fmt->height; - req->format = CAMU_PIXEL_FORMAT_RGBA; #ifdef CAMU_HAVE_FFMPEG + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt->format); + req->format = (desc->flags & AV_PIX_FMT_FLAG_ALPHA) ? CAMU_PIXEL_FORMAT_RGBA : CAMU_PIXEL_FORMAT_RGB; buf->scaler = camu_ff_scaler_create(); if (!buf->scaler->init(buf->scaler, &buf->fmt)) { // Scaler will be freed in video_buffer_free(). @@ -95,7 +97,6 @@ bool camu_video_buffer_configure(struct camu_video_buffer *buf, struct camu_code buf->fmt.scaler_needed = false; camu_video_format_copy(req, in); } -#endif return true; } @@ -144,7 +145,6 @@ static bool push_av_frame_internal(struct camu_video_buffer *buf, AVFrame *frame return false; } if (base_pts == -1.0) al_atomic_store(f64)(&buf->pts, pts, AL_ATOMIC_RELEASE); -#ifdef CAMU_VIDEO_BUFFER_FORCE_SCALER if (buf->fmt.scaler_needed) { if (!buf->scaler->scale(buf->scaler, (const u8 **)frame->data, frame->linesize)) { return false; @@ -152,7 +152,6 @@ static bool push_av_frame_internal(struct camu_video_buffer *buf, AVFrame *frame av_frame_free(&frame); frame = av_frame_clone(buf->scaler->get_frame(buf->scaler)->av.frame); } -#endif buf->queue->push_av_frame(buf->queue, frame, pts); return true; } @@ -266,8 +265,6 @@ bool camu_video_buffer_read(struct camu_video_buffer *buf, void *out, bool *weig void camu_video_buffer_free(struct camu_video_buffer *buf) { -#ifdef CAMU_VIDEO_BUFFER_FORCE_SCALER if (buf->fmt.scaler_needed) buf->scaler->free(&buf->scaler); -#endif if (buf->queue) buf->queue->free(&buf->queue); } diff --git a/src/buffer/video.h b/src/buffer/video.h index 834aaa4..d844d80 100644 --- a/src/buffer/video.h +++ b/src/buffer/video.h @@ -1,6 +1,6 @@ #pragma once -//#define CAMU_VIDEO_BUFFER_FORCE_SCALER +//#define CAMU_VIDEO_BUFFER_REQUIRE_RGB #include <al/types.h> @@ -23,9 +23,7 @@ struct camu_video_buffer { f64 avg_frame_duration; struct camu_scaler_format fmt; -#ifdef CAMU_VIDEO_BUFFER_FORCE_SCALER struct camu_scaler *scaler; -#endif struct camu_frame_queue *queue; bool buffered; |