mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-01 22:58:50 -04:00
stream: implement Flush
Flush out pending samples in the resampler Set the io area status to _OK so that buffers are recycled and new buffers produced.
This commit is contained in:
parent
cd25a1e5e7
commit
79fb95bf90
8 changed files with 36 additions and 6 deletions
|
|
@ -517,6 +517,9 @@ static int impl_node_send_command(void *object, const struct spa_command *comman
|
|||
case SPA_NODE_COMMAND_Suspend:
|
||||
configure_format(this, 0, NULL);
|
||||
SPA_FALLTHROUGH
|
||||
case SPA_NODE_COMMAND_Flush:
|
||||
this->io_buffers.status = SPA_STATUS_OK;
|
||||
SPA_FALLTHROUGH
|
||||
case SPA_NODE_COMMAND_Pause:
|
||||
this->started = false;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -388,6 +388,14 @@ static int negotiate_link_buffers(struct impl *this, struct link *link)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void flush_convert(struct impl *this)
|
||||
{
|
||||
int i;
|
||||
spa_log_debug(this->log, NAME " %p: %d", this, this->n_links);
|
||||
for (i = 0; i < this->n_links; i++)
|
||||
this->links[i].io.status = SPA_STATUS_OK;
|
||||
}
|
||||
|
||||
static void clean_convert(struct impl *this)
|
||||
{
|
||||
int i;
|
||||
|
|
@ -809,6 +817,9 @@ static int impl_node_send_command(void *object, const struct spa_command *comman
|
|||
case SPA_NODE_COMMAND_Suspend:
|
||||
clean_convert(this);
|
||||
SPA_FALLTHROUGH
|
||||
case SPA_NODE_COMMAND_Flush:
|
||||
flush_convert(this);
|
||||
SPA_FALLTHROUGH
|
||||
case SPA_NODE_COMMAND_Pause:
|
||||
this->started = false;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -466,7 +466,7 @@ static int impl_node_send_command(void *object, const struct spa_command *comman
|
|||
this->started = true;
|
||||
break;
|
||||
case SPA_NODE_COMMAND_Suspend:
|
||||
SPA_FALLTHROUGH
|
||||
case SPA_NODE_COMMAND_Flush:
|
||||
case SPA_NODE_COMMAND_Pause:
|
||||
this->started = false;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -248,7 +248,7 @@ static int impl_node_send_command(void *object, const struct spa_command *comman
|
|||
this->started = true;
|
||||
break;
|
||||
case SPA_NODE_COMMAND_Suspend:
|
||||
SPA_FALLTHROUGH
|
||||
case SPA_NODE_COMMAND_Flush:
|
||||
case SPA_NODE_COMMAND_Pause:
|
||||
this->started = false;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -348,7 +348,7 @@ static int impl_node_send_command(void *object, const struct spa_command *comman
|
|||
this->started = true;
|
||||
break;
|
||||
case SPA_NODE_COMMAND_Suspend:
|
||||
SPA_FALLTHROUGH
|
||||
case SPA_NODE_COMMAND_Flush:
|
||||
case SPA_NODE_COMMAND_Pause:
|
||||
this->started = false;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -248,6 +248,17 @@ static void update_rate_match(struct impl *this)
|
|||
}
|
||||
}
|
||||
|
||||
static void reset_node(struct impl *this)
|
||||
{
|
||||
struct port *outport, *inport;
|
||||
outport = GET_OUT_PORT(this, 0);
|
||||
inport = GET_IN_PORT(this, 0);
|
||||
|
||||
resample_reset(&this->resample);
|
||||
outport->offset = 0;
|
||||
inport->offset = 0;
|
||||
}
|
||||
|
||||
static int impl_node_send_command(void *object, const struct spa_command *command)
|
||||
{
|
||||
struct impl *this = object;
|
||||
|
|
@ -262,9 +273,10 @@ static int impl_node_send_command(void *object, const struct spa_command *comman
|
|||
update_rate_match(this);
|
||||
break;
|
||||
case SPA_NODE_COMMAND_Suspend:
|
||||
SPA_FALLTHROUGH
|
||||
case SPA_NODE_COMMAND_Flush:
|
||||
reset_node(this);
|
||||
SPA_FALLTHROUGH;
|
||||
case SPA_NODE_COMMAND_Pause:
|
||||
resample_reset(&this->resample);
|
||||
this->started = false;
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -330,7 +330,7 @@ static int impl_node_send_command(void *object, const struct spa_command *comman
|
|||
this->started = true;
|
||||
break;
|
||||
case SPA_NODE_COMMAND_Suspend:
|
||||
SPA_FALLTHROUGH
|
||||
case SPA_NODE_COMMAND_Flush:
|
||||
case SPA_NODE_COMMAND_Pause:
|
||||
this->started = false;
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue