summaryrefslogtreecommitdiff
path: root/src/buffer
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2024-01-27 20:39:25 -0500
committerAndrew Opalach <andrew@akon.city> 2024-01-27 20:39:25 -0500
commitb100eb175e0cfa59a15c4125f26ab5474c2347ec (patch)
treef1ee4f8bed5d3490ba5d70a6fc194f3206df8df4 /src/buffer
parentfb1cbf546300d9f8efdf21c6ac66f7c2f1dfd4f3 (diff)
downloadcamu-b100eb175e0cfa59a15c4125f26ab5474c2347ec.tar.gz
camu-b100eb175e0cfa59a15c4125f26ab5474c2347ec.tar.bz2
camu-b100eb175e0cfa59a15c4125f26ab5474c2347ec.zip
wip
- Mostly work in the client Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/buffer')
-rw-r--r--src/buffer/audio.c2
-rw-r--r--src/buffer/clock.c4
-rw-r--r--src/buffer/frame_queue.h2
-rw-r--r--src/buffer/meson.build6
-rw-r--r--src/buffer/peak_buffer.c2
-rw-r--r--src/buffer/video.c3
6 files changed, 12 insertions, 7 deletions
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 <al/log.h>
#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.