diff options
author | Lennart Poettering <lennart@poettering.net> | 2008-04-23 18:10:34 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2008-04-23 18:10:34 +0000 |
commit | 3c8e83fb3ebd4e1e6496e047cbf4c357550631b4 (patch) | |
tree | d70a7c26d7726eb7bd106c3b9bb16638354fb663 | |
parent | 5e6aacdbe2df444ab9708ce3b007bece32d2cb93 (diff) |
do not fix automatic buffer attrs anymore, the new protocol version doesn't need this anymore and it creates more problems than it solves. Also drop the initial timing info query. Correct programs shouldn't depend on it anyway
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/glitch-free@2300 fefdeb5f-60dc-0310-8127-8f9354f1896f
-rw-r--r-- | src/pulse/internal.h | 1 | ||||
-rw-r--r-- | src/pulse/stream.c | 53 |
2 files changed, 4 insertions, 50 deletions
diff --git a/src/pulse/internal.h b/src/pulse/internal.h index d988e1a7..f15c69c3 100644 --- a/src/pulse/internal.h +++ b/src/pulse/internal.h @@ -116,7 +116,6 @@ struct pa_stream { uint32_t stream_index; pa_stream_direction_t direction; pa_stream_state_t state; - pa_bool_t buffer_attr_not_ready, timing_info_not_ready; uint32_t requested_bytes; diff --git a/src/pulse/stream.c b/src/pulse/stream.c index e67f24c0..ccbabb55 100644 --- a/src/pulse/stream.c +++ b/src/pulse/stream.c @@ -68,8 +68,6 @@ pa_stream *pa_stream_new_with_proplist(pa_context *c, const char *name, const pa s->context = c; s->mainloop = c->mainloop; - s->buffer_attr_not_ready = s->timing_info_not_ready = FALSE; - s->read_callback = NULL; s->read_userdata = NULL; s->write_callback = NULL; @@ -527,9 +525,6 @@ static void create_stream_complete(pa_stream *s) { pa_assert(PA_REFCNT_VALUE(s) >= 1); pa_assert(s->state == PA_STREAM_CREATING); - if (s->buffer_attr_not_ready || s->timing_info_not_ready) - return; - pa_stream_set_state(s, PA_STREAM_READY); if (s->requested_bytes > 0 && s->write_callback) @@ -562,7 +557,7 @@ static void automatic_buffer_attr(pa_stream *s, pa_buffer_attr *attr, const pa_s attr->tlength = pa_bytes_per_second(ss)*2; /* 2s of buffering */ if (!attr->minreq <= 0) - attr->minreq = (9*attr->tlength)/10; /* Ask for more data when there are only 200ms left in the playback buffer */ + attr->minreq = (2*attr->tlength)/10; /* Ask for more data when there are only 200ms left in the playback buffer */ if (!attr->prebuf) attr->prebuf = attr->tlength; /* Start to play only when the playback is fully filled up once */ @@ -644,25 +639,6 @@ void pa_create_stream_callback(pa_pdispatch *pd, uint32_t command, PA_GCC_UNUSED s->device_name = pa_xstrdup(dn); s->suspended = suspended; - if (!s->manual_buffer_attr && pa_bytes_per_second(&ss) != pa_bytes_per_second(&s->sample_spec)) { - pa_buffer_attr attr; - pa_operation *o; - - memset(&attr, 0, sizeof(attr)); - automatic_buffer_attr(s, &attr, &ss); - - /* If we need to update the buffer metrics, we wait for - * the the OK for that call before we go to - * PA_STREAM_READY */ - - s->state = PA_STREAM_READY; - pa_assert_se(o = pa_stream_set_buffer_attr(s, &attr, NULL, NULL)); - pa_operation_unref(o); - s->state = PA_STREAM_CREATING; - - s->buffer_attr_not_ready = TRUE; - } - s->channel_map = cm; s->sample_spec = ss; } @@ -703,19 +679,6 @@ void pa_create_stream_callback(pa_pdispatch *pd, uint32_t command, PA_GCC_UNUSED s->channel_valid = 1; pa_dynarray_put((s->direction == PA_STREAM_RECORD) ? s->context->record_streams : s->context->playback_streams, s->channel, s); - if (s->direction != PA_STREAM_UPLOAD && s->flags & PA_STREAM_AUTO_TIMING_UPDATE) { - - /* If automatic timing updates are active, we wait for the - * first timing update before going to PA_STREAM_READY - * state */ - - s->state = PA_STREAM_READY; - request_auto_timing_update(s, 1); - s->state = PA_STREAM_CREATING; - - s->timing_info_not_ready = TRUE; - } - create_stream_complete(s); finish: @@ -1212,12 +1175,6 @@ static void stream_get_timing_info_callback(pa_pdispatch *pd, uint32_t command, } } - /* First, let's complete the initialization, if necessary. */ - if (o->stream->state == PA_STREAM_CREATING) { - o->stream->timing_info_not_ready = FALSE; - create_stream_complete(o->stream); - } - if (o->stream->latency_update_callback) o->stream->latency_update_callback(o->stream, o->stream->latency_update_userdata); @@ -1777,11 +1734,6 @@ static void stream_set_buffer_attr_callback(pa_pdispatch *pd, uint32_t command, o->stream->manual_buffer_attr = TRUE; } - if (o->stream->state == PA_STREAM_CREATING) { - o->stream->buffer_attr_not_ready = FALSE; - create_stream_complete(o->stream); - } - if (o->callback) { pa_stream_success_cb_t cb = (pa_stream_success_cb_t) o->callback; cb(o->stream, success, o->userdata); @@ -1826,6 +1778,9 @@ pa_operation* pa_stream_set_buffer_attr(pa_stream *s, const pa_buffer_attr *attr else pa_tagstruct_putu32(t, attr->fragsize); + if (s->context->version >= 13) + pa_tagstruct_put_boolean(t, !!(s->flags & PA_STREAM_ADJUST_LATENCY)); + pa_pstream_send_tagstruct(s->context->pstream, t); pa_pdispatch_register_reply(s->context->pdispatch, tag, DEFAULT_TIMEOUT, stream_set_buffer_attr_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref); |