summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2008-04-23 18:10:34 +0000
committerLennart Poettering <lennart@poettering.net>2008-04-23 18:10:34 +0000
commit3c8e83fb3ebd4e1e6496e047cbf4c357550631b4 (patch)
treed70a7c26d7726eb7bd106c3b9bb16638354fb663
parent5e6aacdbe2df444ab9708ce3b007bece32d2cb93 (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.h1
-rw-r--r--src/pulse/stream.c53
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);