[pulseaudio-discuss] [PATCH] rtp-send: Add "allow_suspend_on_idle" module argument
Tanu Kaskinen
tanu.kaskinen at linux.intel.com
Sun Feb 23 08:53:15 PST 2014
On Sat, 2014-02-22 at 18:22 +0600, Alexander E. Patrakov wrote:
> 22.02.2014 16:21, Tanu Kaskinen wrote:
> > Some people want module-rtp-send to send silence when the sink that is
> > monitored goes idle, and some people want module-rtp-send to pause the
> > RTP stream to avoid unnecessary bandwidth consumption.
> > ---
> > src/modules/rtp/module-rtp-send.c | 17 ++++++++++++++++-
> > 1 file changed, 16 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/modules/rtp/module-rtp-send.c b/src/modules/rtp/module-rtp-send.c
> > index 581e6be..0d82c51 100644
> > --- a/src/modules/rtp/module-rtp-send.c
> > +++ b/src/modules/rtp/module-rtp-send.c
> > @@ -68,7 +68,8 @@ PA_MODULE_USAGE(
> > "port=<port number> "
> > "mtu=<maximum transfer unit> "
> > "loop=<loopback to local host?> "
> > - "ttl=<ttl value>"
> > + "ttl=<ttl value> "
> > + "allow_suspend_on_idle=<boolean>"
> > );
> >
> > #define DEFAULT_PORT 46000
> > @@ -92,6 +93,7 @@ static const char* const valid_modargs[] = {
> > "mtu" ,
> > "loop",
> > "ttl",
> > + "allow_suspend_on_idle",
> > NULL
> > };
> >
> > @@ -188,6 +190,7 @@ int pa__init(pa_module*m) {
> > socklen_t k;
> > char hn[128], *n;
> > bool loop = false;
> > + bool allow_suspend_on_idle;
> > pa_source_output_new_data data;
> >
> > pa_assert(m);
> > @@ -207,6 +210,15 @@ int pa__init(pa_module*m) {
> > goto fail;
> > }
> >
> > + /* By default, allow monitor sources to suspend on idle to avoid consuming
> > + * bandwidth just for sending silence. */
> > + allow_suspend_on_idle = !!s->monitor_of;
> > +
> > + if (pa_modargs_get_value_boolean(ma, "allow_suspend_on_idle", &allow_suspend_on_idle)) {
> > + pa_log("Failed to parse \"allow_suspend_on_idle\" parameter.");
> > + goto fail;
> > + }
> > +
> > ss = s->sample_spec;
> > pa_rtp_sample_spec_fixup(&ss);
> > cm = s->channel_map;
> > @@ -378,6 +390,9 @@ int pa__init(pa_module*m) {
> > pa_source_output_new_data_set_sample_spec(&data, &ss);
> > pa_source_output_new_data_set_channel_map(&data, &cm);
> >
> > + if (allow_suspend_on_idle)
> > + data.flags = PA_SOURCE_OUTPUT_DONT_INHIBIT_AUTO_SUSPEND;
> > +
> > pa_source_output_new(&o, m->core, &data);
> > pa_source_output_new_data_done(&data);
> >
> >
>
> I have looked at the patch, but have not tested it. For me, it looks
> good, except one minor thing.
>
> The default policy whether to allow suspending on idle depends on the
> module argument (which is OK), and, if it is not given, on the initial
> source. The module creates a source output for its operation, but that
> source output, by default, can be moved. It did not matter before,
> because the policy was the same anyway. Now it matters, so please think
> about it. Maybe PA_SOURCE_OUTPUT_DONT_MOVE is needed, too? I am not
> sure, so please use your own judgement.
Good point, thanks. I don't think DONT_MOVE is a good idea, because it
limits what the user can do with the stream, but we can update the
DONT_INHIBIT_AUTO_SUSPEND flag when moving the stream. I'll write
another version where the "allow_suspending_on_idle" argument accepts
three values: "always", "never" or "only_with_monitor_sources".
--
Tanu
More information about the pulseaudio-discuss
mailing list