diff options
author | Pierre Ossman <ossman@cendio.se> | 2006-01-10 12:45:11 +0000 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2006-01-10 12:45:11 +0000 |
commit | 1015ea42413eb14b1a027a665df6af12344d097d (patch) | |
tree | 9ead6ea08c5df941a5c3d3308faed7ffc7c5da67 | |
parent | d429222476ce224a86428f8d0527e61a672edf2b (diff) |
Store previous reported time in order to assure a monotonic clock.
This is a resurrection of a feature previously removed. The new version
is without the race condition of the original one.
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/ossman@442 fefdeb5f-60dc-0310-8127-8f9354f1896f
-rw-r--r-- | polyp/polyplib-internal.h | 2 | ||||
-rw-r--r-- | polyp/polyplib-stream.c | 12 |
2 files changed, 14 insertions, 0 deletions
diff --git a/polyp/polyplib-internal.h b/polyp/polyplib-internal.h index 9417430f..8677c813 100644 --- a/polyp/polyplib-internal.h +++ b/polyp/polyplib-internal.h @@ -92,6 +92,8 @@ struct pa_stream { enum pa_stream_direction direction; uint32_t requested_bytes; uint64_t counter; + pa_usec_t previous_time; + pa_usec_t previous_ipol_time; enum pa_stream_state state; struct pa_mcalign *mcalign; diff --git a/polyp/polyplib-stream.c b/polyp/polyplib-stream.c index 7058b546..b6a091b3 100644 --- a/polyp/polyplib-stream.c +++ b/polyp/polyplib-stream.c @@ -65,6 +65,8 @@ struct pa_stream *pa_stream_new(struct pa_context *c, const char *name, const st s->mcalign = pa_mcalign_new(pa_frame_size(ss), c->memblock_stat); s->counter = 0; + s->previous_time = 0; + s->previous_ipol_time = 0; s->corked = 0; s->interpolate = 0; @@ -697,6 +699,11 @@ pa_usec_t pa_stream_get_time(struct pa_stream *s, const struct pa_latency_info * } } + if (usec < s->previous_time) + usec = s->previous_time; + + s->previous_time = usec; + return usec; } @@ -756,6 +763,11 @@ pa_usec_t pa_stream_get_interpolated_time(struct pa_stream *s) { usec = s->ipol_usec + pa_timeval_age(&s->ipol_timestamp); } + if (usec < s->previous_ipol_time) + usec = s->previous_ipol_time; + + s->previous_ipol_time = usec; + return usec; } |