mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-05 13:29:57 -05:00
sink: Move updating the requested latency after the rewind request when finishing a stream move.
This commit is contained in:
parent
7563e0bbb5
commit
307911c72e
1 changed files with 23 additions and 6 deletions
|
|
@ -2330,6 +2330,18 @@ int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offse
|
|||
* slow start, i.e. need some time to buffer client
|
||||
* samples before beginning streaming. */
|
||||
|
||||
/* FIXME: Actually rewinding should be requested before
|
||||
* updating the sink requested latency, because updating
|
||||
* the requested latency updates also max_rewind of the
|
||||
* sink. Now consider this: a sink has a 10 s buffer and
|
||||
* nobody has requested anything less. Then a new stream
|
||||
* appears while the sink buffer is full. The new stream
|
||||
* requests e.g. 100 ms latency. That request is forwarded
|
||||
* to the sink, so now max_rewind is 100 ms. When a rewind
|
||||
* is requested, the sink will only rewind 100 ms, and the
|
||||
* new stream will have to wait about 10 seconds before it
|
||||
* becomes audible. */
|
||||
|
||||
/* In flat volume mode we need to update the volume as
|
||||
* well */
|
||||
return o->process_msg(o, PA_SINK_MESSAGE_SET_SHARED_VOLUME, NULL, 0, NULL);
|
||||
|
|
@ -2440,12 +2452,6 @@ int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offse
|
|||
if (i->attach)
|
||||
i->attach(i);
|
||||
|
||||
if (i->thread_info.requested_sink_latency != (pa_usec_t) -1)
|
||||
pa_sink_input_set_requested_latency_within_thread(i, i->thread_info.requested_sink_latency);
|
||||
|
||||
pa_sink_input_update_max_rewind(i, s->thread_info.max_rewind);
|
||||
pa_sink_input_update_max_request(i, s->thread_info.max_request);
|
||||
|
||||
if (i->thread_info.state != PA_SINK_INPUT_CORKED) {
|
||||
pa_usec_t usec = 0;
|
||||
size_t nbytes;
|
||||
|
|
@ -2461,6 +2467,17 @@ int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offse
|
|||
pa_sink_request_rewind(s, nbytes);
|
||||
}
|
||||
|
||||
/* Updating the requested sink latency has to be done
|
||||
* after the sink rewind request, not before, because
|
||||
* otherwise the sink may limit the rewind amount
|
||||
* needlessly. */
|
||||
|
||||
if (i->thread_info.requested_sink_latency != (pa_usec_t) -1)
|
||||
pa_sink_input_set_requested_latency_within_thread(i, i->thread_info.requested_sink_latency);
|
||||
|
||||
pa_sink_input_update_max_rewind(i, s->thread_info.max_rewind);
|
||||
pa_sink_input_update_max_request(i, s->thread_info.max_request);
|
||||
|
||||
return o->process_msg(o, PA_SINK_MESSAGE_SET_SHARED_VOLUME, NULL, 0, NULL);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue