mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
module-ffado: add ffado.rtprio and ffado.realtime
Add two properties to control the realtime ffado thread and its priority. See #3558
This commit is contained in:
parent
986de92521
commit
208a343d9f
1 changed files with 34 additions and 18 deletions
|
|
@ -50,10 +50,14 @@
|
|||
* - `ffado.slave-mode`: slave mode
|
||||
* - `ffado.snoop-mode`: snoop mode
|
||||
* - `ffado.verbose`: ffado verbose level
|
||||
* - `ffado.rtprio`: ffado realtime priority, this is by default the PipeWire server
|
||||
* priority + 5
|
||||
* - `ffado.realtime`: ffado realtime mode. this requires correctly configured rlimits
|
||||
* to acquire FIFO scheduling at the ffado.rtprio priority
|
||||
* - `latency.internal.input`: extra input latency in frames
|
||||
* - `latency.internal.output`: extra output latency in frames
|
||||
* - `source.props`: Extra properties for the source filter.
|
||||
* - `sink.props`: Extra properties for the sink filter.
|
||||
* - `source.props`: Extra properties for the source filter
|
||||
* - `sink.props`: Extra properties for the sink filter
|
||||
*
|
||||
* ## General options
|
||||
*
|
||||
|
|
@ -82,6 +86,8 @@
|
|||
* #ffado.slave-mode = false
|
||||
* #ffado.snoop-mode = false
|
||||
* #ffado.verbose = 0
|
||||
* #ffado.rtprio = 65
|
||||
* #ffado.realtime = true
|
||||
* #latency.internal.input = 0
|
||||
* #latency.internal.output = 0
|
||||
* #audio.position = [ FL FR ]
|
||||
|
|
@ -103,6 +109,7 @@ PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
|||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
#define MAX_PORTS 128
|
||||
#define FFADO_RT_PRIORITY_PACKETIZER_RELATIVE 5
|
||||
|
||||
#define DEFAULT_DEVICES "[ \"hw:0\" ]"
|
||||
#define DEFAULT_PERIOD_SIZE 1024
|
||||
|
|
@ -111,23 +118,25 @@ PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
|||
#define DEFAULT_SLAVE_MODE false
|
||||
#define DEFAULT_SNOOP_MODE false
|
||||
#define DEFAULT_VERBOSE 0
|
||||
#define DEFAULT_RTPRIO (RTPRIO_SERVER + FFADO_RT_PRIORITY_PACKETIZER_RELATIVE)
|
||||
#define DEFAULT_REALTIME true
|
||||
|
||||
#define DEFAULT_POSITION "[ FL FR ]"
|
||||
#define DEFAULT_MIDI_PORTS 1
|
||||
|
||||
#define FFADO_RT_PRIORITY_PACKETIZER_RELATIVE 5
|
||||
|
||||
#define MODULE_USAGE "( remote.name=<remote> ) " \
|
||||
"( driver.mode=<sink|source|duplex> ) " \
|
||||
"( ffado.devices=<devices array size, default \"hw:0\"> ) " \
|
||||
"( ffado.period-size=<period size, default 1024> ) " \
|
||||
"( ffado.period-num=<period num, default 3> ) " \
|
||||
"( ffado.sample-rate=<sampe rate, default 48000> ) " \
|
||||
"( ffado.slave-mode=<slave mode, default false> ) " \
|
||||
"( ffado.snoop-mode=<snoop mode, default false> ) " \
|
||||
"( ffado.verbose=<verbose level, default 0> ) " \
|
||||
"( audio.position=<channel map> ) " \
|
||||
"( source.props=<properties> ) " \
|
||||
#define MODULE_USAGE "( remote.name=<remote> ) " \
|
||||
"( driver.mode=<sink|source|duplex, default duplex> ) " \
|
||||
"( ffado.devices=<devices array, default "DEFAULT_DEVICES"> ) " \
|
||||
"( ffado.period-size=<period size, default 1024> ) " \
|
||||
"( ffado.period-num=<period num, default 3> ) " \
|
||||
"( ffado.sample-rate=<sampe rate, default 48000> ) " \
|
||||
"( ffado.slave-mode=<slave mode, default false> ) " \
|
||||
"( ffado.snoop-mode=<snoop mode, default false> ) " \
|
||||
"( ffado.verbose=<verbose level, default 0> ) " \
|
||||
"( ffado.rtprio=<realtime priority, default "SPA_STRINGIFY(DEFAULT_RTPRIO)"> ) " \
|
||||
"( ffado.realtime=<realtime mode, default true> ) " \
|
||||
"( audio.position=<channel map> ) " \
|
||||
"( source.props=<properties> ) " \
|
||||
"( sink.props=<properties> ) "
|
||||
|
||||
|
||||
|
|
@ -226,6 +235,8 @@ struct impl {
|
|||
bool slave_mode;
|
||||
bool snoop_mode;
|
||||
uint32_t verbose;
|
||||
int32_t rtprio;
|
||||
bool realtime;
|
||||
|
||||
uint32_t input_latency;
|
||||
uint32_t output_latency;
|
||||
|
|
@ -526,8 +537,9 @@ static void stream_state_changed(void *d, enum pw_filter_state old,
|
|||
struct impl *impl = s->impl;
|
||||
switch (state) {
|
||||
case PW_FILTER_STATE_ERROR:
|
||||
case PW_FILTER_STATE_UNCONNECTED:
|
||||
pw_log_error("filter state %d error: %s", state, error);
|
||||
SPA_FALLTHROUGH;
|
||||
case PW_FILTER_STATE_UNCONNECTED:
|
||||
pw_impl_module_schedule_destroy(impl->module);
|
||||
break;
|
||||
case PW_FILTER_STATE_PAUSED:
|
||||
|
|
@ -1040,8 +1052,8 @@ static int open_ffado_device(struct impl *impl)
|
|||
impl->device_options.sample_rate = target_rate;
|
||||
impl->device_options.period_size = target_period;
|
||||
impl->device_options.nb_buffers = impl->n_periods;
|
||||
impl->device_options.realtime = 1;
|
||||
impl->device_options.packetizer_priority = RTPRIO_SERVER + FFADO_RT_PRIORITY_PACKETIZER_RELATIVE;
|
||||
impl->device_options.realtime = impl->realtime;
|
||||
impl->device_options.packetizer_priority = impl->rtprio;
|
||||
impl->device_options.verbose = impl->verbose;
|
||||
impl->device_options.slave_mode = impl->slave_mode;
|
||||
impl->device_options.snoop_mode = impl->snoop_mode;
|
||||
|
|
@ -1406,6 +1418,10 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
|||
"ffado.snoop-mode", DEFAULT_SNOOP_MODE);
|
||||
impl->verbose = pw_properties_get_uint32(props,
|
||||
"ffado.verbose", DEFAULT_VERBOSE);
|
||||
impl->rtprio = pw_properties_get_uint32(props,
|
||||
"ffado.rtprio", DEFAULT_RTPRIO);
|
||||
impl->realtime = pw_properties_get_bool(props,
|
||||
"ffado.realtime", DEFAULT_REALTIME);
|
||||
impl->input_latency = pw_properties_get_uint32(props,
|
||||
"latency.internal.input", 0);
|
||||
impl->output_latency = pw_properties_get_uint32(props,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue