mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-12 13:30:15 -05:00
spa: improve draining
Make a new DRAINED status. Place the DRAINED status on an input IO when a stream is out of buffers and draining. All nodes that don't have HAVE_DATA on the input io need to copy it to the output io and return the status. This makes sure the DRAINED is forwarded and nodes return DRAINED from _process() DRAINED on the resampler flushes out the last queued samples and then forwards the DRAINED in the next iteration. Emit a new drained signal from the context when a node returns DRAINED. Use this to trigger the drained signal in the stream.
This commit is contained in:
parent
029f431418
commit
b18dacde9a
10 changed files with 46 additions and 42 deletions
|
|
@ -77,6 +77,9 @@ enum spa_io_type {
|
|||
* If status is SPA_STATUS_STOPPED, some error occured on the
|
||||
* port.
|
||||
*
|
||||
* If status is SPA_STATUS_DRAINED, data from the io area was
|
||||
* used to drain.
|
||||
*
|
||||
* Status can also be a negative errno value to indicate errors.
|
||||
* such as:
|
||||
* -EINVAL: buffer_id is invalid
|
||||
|
|
@ -87,6 +90,7 @@ struct spa_io_buffers {
|
|||
#define SPA_STATUS_NEED_DATA (1<<0)
|
||||
#define SPA_STATUS_HAVE_DATA (1<<1)
|
||||
#define SPA_STATUS_STOPPED (1<<2)
|
||||
#define SPA_STATUS_DRAINED (1<<3)
|
||||
int32_t status; /**< the status code */
|
||||
uint32_t buffer_id; /**< a buffer id */
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue