mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-31 22:25:38 -04:00
sco-sink: clear port buffers when stopping
Dequeue all buffered data when stopping, so that it won't be output later when starting next time.
This commit is contained in:
parent
33be40ac2e
commit
4f63db4936
1 changed files with 22 additions and 0 deletions
|
|
@ -533,6 +533,25 @@ static int do_start(struct impl *this)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Drop any buffered data remaining in the port */
|
||||
static void drop_port_output(struct impl *this)
|
||||
{
|
||||
struct port *port = &this->port;
|
||||
|
||||
port->write_buffer_size = 0;
|
||||
port->current_buffer = NULL;
|
||||
|
||||
while (!spa_list_is_empty(&port->ready)) {
|
||||
struct buffer *b;
|
||||
b = spa_list_first(&port->ready, struct buffer, link);
|
||||
|
||||
spa_list_remove(&b->link);
|
||||
b->outstanding = true;
|
||||
port->io->buffer_id = b->id;
|
||||
spa_node_call_reuse_buffer(&this->callbacks, 0, b->id);
|
||||
}
|
||||
}
|
||||
|
||||
static int do_remove_source(struct spa_loop *loop,
|
||||
bool async,
|
||||
uint32_t seq,
|
||||
|
|
@ -547,6 +566,9 @@ static int do_remove_source(struct spa_loop *loop,
|
|||
if (this->source.loop)
|
||||
spa_loop_remove_source(this->data_loop, &this->source);
|
||||
|
||||
/* Drop buffered data in the ready queue. Ideally there shouldn't be any. */
|
||||
drop_port_output(this);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue