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
This commit is contained in:
Lennart Poettering 2008-04-23 18:10:34 +00:00
parent 5e6aacdbe2
commit 3c8e83fb3e
2 changed files with 4 additions and 50 deletions

View file

@ -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;

View file

@ -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);