From b100eb175e0cfa59a15c4125f26ab5474c2347ec Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Sat, 27 Jan 2024 20:39:25 -0500 Subject: wip - Mostly work in the client Signed-off-by: Andrew Opalach --- src/buffer/audio.c | 2 +- src/buffer/clock.c | 4 ++-- src/buffer/frame_queue.h | 2 -- src/buffer/meson.build | 6 +++++- src/buffer/peak_buffer.c | 2 ++ src/buffer/video.c | 3 ++- 6 files changed, 12 insertions(+), 7 deletions(-) (limited to 'src/buffer') diff --git a/src/buffer/audio.c b/src/buffer/audio.c index a1a109e..ce7a697 100644 --- a/src/buffer/audio.c +++ b/src/buffer/audio.c @@ -5,7 +5,7 @@ #define BUFFER_USEC (12 * 1000000L) #define BUFFER_WATERMARK_LOW (3 * 1000000L) // Must be a most half of the buffer size. -#define BUFFER_WATERMARK_HIGH (4 * 1000000L) +#define BUFFER_WATERMARK_HIGH (3 * 1000000L) #define DESYNC_PTS 0.022 diff --git a/src/buffer/clock.c b/src/buffer/clock.c index 1e7883c..f8284ec 100644 --- a/src/buffer/clock.c +++ b/src/buffer/clock.c @@ -14,10 +14,10 @@ bool camu_clock_calc_tick(struct camu_clock *clock) { u64 start = al_atomic_u64_load(&clock->start, AL_ATOMIC_RELAXED); if (start == 0L) return false; - u64 ts = clock->delay == 0 ? start : aki_get_timestamp(); + f64 tick = al_atomic_f64_load(&clock->tick, AL_ATOMIC_RELAXED); + u64 ts = (tick == 0.0 && clock->delay == 0) ? start : aki_get_timestamp(); al_assert(start <= ts); u64 diff = ts - start; - f64 tick = al_atomic_f64_load(&clock->tick, AL_ATOMIC_RELAXED); if (tick == 0.0) { if (!(diff >= clock->delay && clock->delay >= (diff - clock->delay))) { // We are past the requested start time. diff --git a/src/buffer/frame_queue.h b/src/buffer/frame_queue.h index 35a84e4..df58497 100644 --- a/src/buffer/frame_queue.h +++ b/src/buffer/frame_queue.h @@ -6,8 +6,6 @@ #include "../codec/codec.h" -#include "common.h" - enum { CAMU_QUEUE_OK = 0, CAMU_QUEUE_MORE, diff --git a/src/buffer/meson.build b/src/buffer/meson.build index dce16de..d037d6b 100644 --- a/src/buffer/meson.build +++ b/src/buffer/meson.build @@ -1,4 +1,8 @@ -buffer_src = ['video.c', 'audio.c', 'clock.c', 'peak_buffer.c'] +no_video = false +buffer_src = ['audio.c', 'clock.c', 'peak_buffer.c'] +if not no_video + buffer_src += ['video.c'] +endif buffer_deps = [common_deps] buffer = declare_dependency(sources: buffer_src, dependencies: buffer_deps) diff --git a/src/buffer/peak_buffer.c b/src/buffer/peak_buffer.c index 22a007d..2856a78 100644 --- a/src/buffer/peak_buffer.c +++ b/src/buffer/peak_buffer.c @@ -1,5 +1,7 @@ #include "peak_buffer.h" +// https://github.com/MusicPlayerDaemon/MPD/blob/c71e586c530e1d066efde7c2ca40c363f74100c7/src/util/PeakBuffer.cxx + void camu_peak_buffer_init(struct camu_peak_buffer *buf) { aki_buffer_init(&buf->buf); diff --git a/src/buffer/video.c b/src/buffer/video.c index 9a04933..15af78e 100644 --- a/src/buffer/video.c +++ b/src/buffer/video.c @@ -1,11 +1,12 @@ #include #include "video.h" +#include "common.h" //#define CAMU_VIDEO_BUFFER_FORCE_SCALER #define BUFFER_WATERMARK_LOW 8 // frames. -#define BUFFER_WATERMARK_BUFFERED 10 +#define BUFFER_WATERMARK_BUFFERED 8 #define BUFFER_WATERMARK_HIGH 14 #define BUFFER_WATERMARK_RESET BUFFER_WATERMARK_HIGH + 10. -- cgit v1.2.3-101-g0448