]> code.delx.au - pulseaudio/commitdiff
correct latency calculation
authorLennart Poettering <lennart@poettering.net>
Mon, 13 Sep 2004 13:26:44 +0000 (13:26 +0000)
committerLennart Poettering <lennart@poettering.net>
Mon, 13 Sep 2004 13:26:44 +0000 (13:26 +0000)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@197 fefdeb5f-60dc-0310-8127-8f9354f1896f

doc/todo
polyp/module-alsa-sink.c
polyp/module-oss.c
polyp/sink-input.c

index c09d423aae2047b15322ad254a58e434a40fdecc..61cee8444dc6d86567158d7b1d1580771fd1aac5 100644 (file)
--- a/doc/todo
+++ b/doc/todo
@@ -19,6 +19,7 @@
 - input latency
 - fix tcp/native
 - suid
+- add volume to create_stream command in native protocol
 
 ** later ***
 - xmlrpc/http
index 95bb81f18c806fa4b1d869f397c6422f62582035..55e719c90677f825c742033b0a2d43d5828eb88e 100644 (file)
@@ -144,6 +144,7 @@ static void io_callback(struct pa_mainloop_api*a, struct pa_io_event *e, int fd,
 }
 
 static pa_usec_t sink_get_latency_cb(struct pa_sink *s) {
+    pa_usec_t r = 0;
     struct userdata *u = s->userdata;
     snd_pcm_sframes_t frames;
     assert(s && u && u->sink);
@@ -157,7 +158,12 @@ static pa_usec_t sink_get_latency_cb(struct pa_sink *s) {
     if (frames < 0)
         frames = 0;
     
-    return pa_bytes_to_usec(frames * u->frame_size, &s->sample_spec);
+    r += pa_bytes_to_usec(frames * u->frame_size, &s->sample_spec);
+
+    if (u->memchunk.memblock)
+        r += pa_bytes_to_usec(u->memchunk.length, &s->sample_spec);
+
+    return r;
 }
 
 int pa__init(struct pa_core *c, struct pa_module*m) {
index 51cc42ef7880c4f4a66c5b20fd230e12a00112dc..b4e011d84fb486c387e0f36b59894edf9b222b35 100644 (file)
@@ -162,6 +162,7 @@ static void io_callback(struct pa_iochannel *io, void*userdata) {
 }
 
 static pa_usec_t sink_get_latency_cb(struct pa_sink *s) {
+    pa_usec_t r = 0;
     int arg;
     struct userdata *u = s->userdata;
     assert(s && u && u->sink);
@@ -172,7 +173,12 @@ static pa_usec_t sink_get_latency_cb(struct pa_sink *s) {
         return 0;
     }
 
-    return pa_bytes_to_usec(arg, &s->sample_spec);
+    r += pa_bytes_to_usec(arg, &s->sample_spec);
+
+    if (u->memchunk.memblock)
+        r += pa_bytes_to_usec(u->memchunk.length, &s->sample_spec);
+
+    return r;
 }
 
 int pa__init(struct pa_core *c, struct pa_module*m) {
index b00961824e5cacc09675bb8de50ca0a35fffcb90..7763f26104e8b2c23a5ee05557bd520a28efdea0 100644 (file)
@@ -112,12 +112,16 @@ void pa_sink_input_kill(struct pa_sink_input*i) {
 }
 
 pa_usec_t pa_sink_input_get_latency(struct pa_sink_input *i) {
+    pa_usec_t r = 0;
     assert(i);
     
     if (i->get_latency)
-        return i->get_latency(i);
+        r += i->get_latency(i);
 
-    return 0;
+    if (i->resampled_chunk.memblock)
+        r += pa_bytes_to_usec(i->resampled_chunk.length, &i->sample_spec);
+
+    return r;
 }
 
 int pa_sink_input_peek(struct pa_sink_input *i, struct pa_memchunk *chunk) {