[pulseaudio-discuss] [PATCH] equalizer-sink: update sink description when moving
Tanu Kaskinen
tanuk at iki.fi
Mon Jul 17 17:13:01 UTC 2017
On Sat, 2017-07-15 at 11:28 +0530, Arun Raghavan wrote:
>
> On Thu, 13 Jul 2017, at 12:59 AM, Tanu Kaskinen wrote:
> > If the description is not updated when moving, the old automatically
> > generated description will refer to the old master sink after the move,
> > which is not nice.
> > ---
> > src/modules/module-equalizer-sink.c | 26 ++++++++++++++++++++++----
> > 1 file changed, 22 insertions(+), 4 deletions(-)
> >
> > diff --git a/src/modules/module-equalizer-sink.c
> > b/src/modules/module-equalizer-sink.c
> > index 280ca25fb..489062fc0 100644
> > --- a/src/modules/module-equalizer-sink.c
> > +++ b/src/modules/module-equalizer-sink.c
> > @@ -127,6 +127,8 @@ struct userdata {
> >
> > pa_database *database;
> > char **base_profiles;
> > +
> > + bool automatic_description;
> > };
> >
> > static const char* const valid_modargs[] = {
> > @@ -1080,6 +1082,17 @@ static void sink_input_moving_cb(pa_sink_input *i,
> > pa_sink *dest) {
> > if (dest) {
> > pa_sink_set_asyncmsgq(u->sink, dest->asyncmsgq);
> > pa_sink_update_flags(u->sink,
> > PA_SINK_LATENCY|PA_SINK_DYNAMIC_LATENCY, dest->flags);
> > +
> > + if (u->automatic_description) {
> > + const char *master_description;
> > + char *new_description;
> > +
> > + master_description = pa_proplist_gets(dest->proplist,
> > PA_PROP_DEVICE_DESCRIPTION);
> > + new_description = pa_sprintf_malloc(_("FFT based equalizer
> > on %s"),
> > + master_description ?
> > master_description : dest->name);
> > + pa_sink_set_description(u->sink, new_description);
> > + pa_xfree(new_description);
> > + }
> > } else
> > pa_sink_set_asyncmsgq(u->sink, NULL);
> > }
> > @@ -1089,7 +1102,6 @@ int pa__init(pa_module*m) {
> > pa_sample_spec ss;
> > pa_channel_map map;
> > pa_modargs *ma;
> > - const char *z;
> > pa_sink *master;
> > pa_sink_input_new_data sink_input_data;
> > pa_sink_new_data sink_data;
> > @@ -1185,9 +1197,6 @@ int pa__init(pa_module*m) {
> > pa_sink_new_data_set_sample_spec(&sink_data, &ss);
> > pa_sink_new_data_set_channel_map(&sink_data, &map);
> >
> > - z = pa_proplist_gets(master->proplist, PA_PROP_DEVICE_DESCRIPTION);
> > - pa_proplist_setf(sink_data.proplist, PA_PROP_DEVICE_DESCRIPTION,
> > "FFT based equalizer on %s", z ? z : master->name);
> > -
> > pa_proplist_sets(sink_data.proplist, PA_PROP_DEVICE_MASTER_DEVICE,
> > master->name);
> > pa_proplist_sets(sink_data.proplist, PA_PROP_DEVICE_CLASS,
> > "filter");
> >
> > @@ -1197,6 +1206,15 @@ int pa__init(pa_module*m) {
> > goto fail;
> > }
> >
> > + if (!pa_proplist_contains(sink_data.proplist,
> > PA_PROP_DEVICE_DESCRIPTION)) {
> > + const char *master_description;
> > +
> > + master_description = pa_proplist_gets(master->proplist,
> > PA_PROP_DEVICE_DESCRIPTION);
> > + pa_proplist_setf(sink_data.proplist, PA_PROP_DEVICE_DESCRIPTION,
> > + _("FFT based equalizer on %s"),
> > master_description ? master_description : master->name);
> > + u->automatic_description = true;
> > + }
> > +
>
> Looks fine, modulo a minor style comment that you can implement if you
> feel like -- it's nicer to factor the string construction to a single
> function rather than repeat between the two locations.
>
> We likely need to do this across filters, so maybe we should be
> factoring out other such code (such as autoload handling) and have them
> reusable across modules.
I'll apply this as is, but I'll later look into simplifying the
description updating for all filter devices.
--
Tanu
https://www.patreon.com/tanuk
More information about the pulseaudio-discuss
mailing list