mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-16 07:00:00 -05:00
stream: add ASYNC flag
Add ASYNC flag that sets SPA_NODE_FLAG_ASYNC. This ensure we allocate at least 2 buffers. We need 2 buffers at least because we don't dequeue/queue a buffer in the process function when async and we run out of buffers if we have only 1 buffer.
This commit is contained in:
parent
88bb0bd7cc
commit
1466982c60
4 changed files with 18 additions and 2 deletions
|
|
@ -1632,7 +1632,9 @@ pw_filter_connect(struct pw_filter *filter,
|
||||||
impl->info = SPA_NODE_INFO_INIT();
|
impl->info = SPA_NODE_INFO_INIT();
|
||||||
impl->info.max_input_ports = UINT32_MAX;
|
impl->info.max_input_ports = UINT32_MAX;
|
||||||
impl->info.max_output_ports = UINT32_MAX;
|
impl->info.max_output_ports = UINT32_MAX;
|
||||||
impl->info.flags = impl->process_rt ? SPA_NODE_FLAG_RT : 0;
|
impl->info.flags = SPA_NODE_FLAG_RT;
|
||||||
|
if (!impl->process_rt || SPA_FLAG_IS_SET(flags, PW_FILTER_FLAG_ASYNC))
|
||||||
|
impl->info.flags |= SPA_NODE_FLAG_ASYNC;
|
||||||
impl->info.props = &filter->properties->dict;
|
impl->info.props = &filter->properties->dict;
|
||||||
impl->params[NODE_PropInfo] = SPA_PARAM_INFO(SPA_PARAM_PropInfo, 0);
|
impl->params[NODE_PropInfo] = SPA_PARAM_INFO(SPA_PARAM_PropInfo, 0);
|
||||||
impl->params[NODE_Props] = SPA_PARAM_INFO(SPA_PARAM_Props, SPA_PARAM_INFO_WRITE);
|
impl->params[NODE_Props] = SPA_PARAM_INFO(SPA_PARAM_Props, SPA_PARAM_INFO_WRITE);
|
||||||
|
|
|
||||||
|
|
@ -109,6 +109,13 @@ enum pw_filter_flags {
|
||||||
* needs to be called. This can be used
|
* needs to be called. This can be used
|
||||||
* when the filter depends on processing
|
* when the filter depends on processing
|
||||||
* of other filters. */
|
* of other filters. */
|
||||||
|
PW_FILTER_FLAG_ASYNC = (1 << 5), /**< Buffers will not be dequeued/queued from
|
||||||
|
* the realtime process() function. This is
|
||||||
|
* assumed when RT_PROCESS is unset but can
|
||||||
|
* also be the case when the process() function
|
||||||
|
* does a trigger_process() that will then
|
||||||
|
* dequeue/queue a buffer from another process()
|
||||||
|
* function. since 0.3.73 */
|
||||||
};
|
};
|
||||||
|
|
||||||
enum pw_filter_port_flags {
|
enum pw_filter_port_flags {
|
||||||
|
|
|
||||||
|
|
@ -1957,7 +1957,7 @@ pw_stream_connect(struct pw_stream *stream,
|
||||||
impl->info.flags = SPA_NODE_FLAG_RT;
|
impl->info.flags = SPA_NODE_FLAG_RT;
|
||||||
/* if the callback was not marked RT_PROCESS, we will offload
|
/* if the callback was not marked RT_PROCESS, we will offload
|
||||||
* the process callback in the main thread and we are ASYNC */
|
* the process callback in the main thread and we are ASYNC */
|
||||||
if (!impl->process_rt)
|
if (!impl->process_rt || SPA_FLAG_IS_SET(flags, PW_STREAM_FLAG_ASYNC))
|
||||||
impl->info.flags |= SPA_NODE_FLAG_ASYNC;
|
impl->info.flags |= SPA_NODE_FLAG_ASYNC;
|
||||||
impl->info.props = &stream->properties->dict;
|
impl->info.props = &stream->properties->dict;
|
||||||
impl->params[NODE_PropInfo] = SPA_PARAM_INFO(SPA_PARAM_PropInfo, 0);
|
impl->params[NODE_PropInfo] = SPA_PARAM_INFO(SPA_PARAM_PropInfo, 0);
|
||||||
|
|
|
||||||
|
|
@ -378,6 +378,13 @@ enum pw_stream_flags {
|
||||||
* needs to be called. This can be used
|
* needs to be called. This can be used
|
||||||
* when the output of the stream depends
|
* when the output of the stream depends
|
||||||
* on input from other streams. */
|
* on input from other streams. */
|
||||||
|
PW_STREAM_FLAG_ASYNC = (1 << 10), /**< Buffers will not be dequeued/queued from
|
||||||
|
* the realtime process() function. This is
|
||||||
|
* assumed when RT_PROCESS is unset but can
|
||||||
|
* also be the case when the process() function
|
||||||
|
* does a trigger_process() that will then
|
||||||
|
* dequeue/queue a buffer from another process()
|
||||||
|
* function. since 0.3.73 */
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Create a new unconneced \ref pw_stream
|
/** Create a new unconneced \ref pw_stream
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue