]> code.delx.au - pulseaudio/commitdiff
include local record memblockq in latency calculations
authorLennart Poettering <lennart@poettering.net>
Wed, 12 Apr 2006 23:57:25 +0000 (23:57 +0000)
committerLennart Poettering <lennart@poettering.net>
Wed, 12 Apr 2006 23:57:25 +0000 (23:57 +0000)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@694 fefdeb5f-60dc-0310-8127-8f9354f1896f

src/polyp/context.c
src/polyp/stream.c

index 7c0ed190cf47b66f4a20478fbc1b7e64d298969d..047b739f7886c275104c05d6a17354f209104ac3 100644 (file)
@@ -294,12 +294,14 @@ static void pstream_memblock_callback(pa_pstream *p, uint32_t channel, int64_t o
     assert(c->ref >= 1);
 
     pa_context_ref(c);
-    
+
     if ((s = pa_dynarray_get(c->record_streams, channel))) {
 
+        assert(seek == PA_SEEK_RELATIVE && offset == 0);
+
         pa_memblockq_seek(s->record_memblockq, offset, seek);
         pa_memblockq_push_align(s->record_memblockq, chunk);
-
+        
         if (s->read_callback) {
             size_t l;
 
index fc8cc5cc5fb8a32cd347f1ed4a0a6399e5fcabc5..ce2470f6fde8e31a08278018747e7d844907a702 100644 (file)
@@ -662,6 +662,10 @@ int pa_stream_drop(pa_stream *s) {
     PA_CHECK_VALIDITY(s->context, s->peek_memchunk.memblock, PA_ERR_BADSTATE);
     
     pa_memblockq_drop(s->record_memblockq, &s->peek_memchunk, s->peek_memchunk.length);
+
+    /* Fix the simulated local read index */
+    if (s->timing_info_valid && !s->timing_info.read_index_corrupt)
+        s->timing_info.read_index += s->peek_memchunk.length;
     
     pa_memblock_unref(s->peek_memchunk.memblock);
     s->peek_memchunk.length = 0;
@@ -814,6 +818,13 @@ static void stream_get_timing_info_callback(pa_pdispatch *pd, uint32_t command,
             }
         }
 
+        if (o->stream->direction == PA_STREAM_RECORD) {
+            /* Read index correction */
+
+            if (!i->read_index_corrupt)
+                i->read_index -= pa_memblockq_get_length(o->stream->record_memblockq);
+        }
+        
         o->stream->ipol_timestamp = now;
         o->stream->ipol_usec_valid = 0;
     }