mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-05 13:30:02 -05:00
pulse-server: don't clamp missing bytes to tlength
When we increase the quantum past the tlength, we need to be able to ask for more bytes than the tlength or else we will never exit this underrun state. Look at the last required bytes and use that if it's larger then tlength.
This commit is contained in:
parent
1b94b66924
commit
16665d74d2
1 changed files with 4 additions and 1 deletions
|
|
@ -1096,6 +1096,7 @@ struct process_data {
|
|||
uint32_t underrun_for;
|
||||
uint32_t playing_for;
|
||||
uint32_t missing;
|
||||
uint32_t maxmissing;
|
||||
unsigned int underrun:1;
|
||||
};
|
||||
|
||||
|
|
@ -1134,7 +1135,7 @@ do_process_done(struct spa_loop *loop,
|
|||
stream_send_started(stream);
|
||||
}
|
||||
stream->missing += pd->missing;
|
||||
stream->missing = SPA_MIN(stream->missing, stream->attr.tlength);
|
||||
stream->missing = SPA_MIN(stream->missing, pd->maxmissing);
|
||||
stream->playing_for += pd->playing_for;
|
||||
if (stream->underrun_for != (uint64_t)-1)
|
||||
stream->underrun_for += pd->underrun_for;
|
||||
|
|
@ -1228,6 +1229,8 @@ static void stream_process(void *data)
|
|||
if (minreq == 0)
|
||||
minreq = stream->attr.minreq;
|
||||
|
||||
pd.maxmissing = SPA_MAX(minreq, stream->attr.tlength);
|
||||
|
||||
if (avail < (int32_t)minreq || stream->corked) {
|
||||
/* underrun, produce a silence buffer */
|
||||
size = SPA_MIN(buf->datas[0].maxsize, minreq);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue