[pulseaudio-discuss] [PATCH] card-restore: Don't restore profile on Bluetooth cards by default

Tanu Kaskinen tanuk at iki.fi
Sun Jul 15 06:57:26 UTC 2018


On Tue, 2018-07-10 at 13:10 +0300, Luiz Augusto von Dentz wrote:
> Hi Joao,
> 
> On Tue, Jul 10, 2018 at 5:23 AM, João Paulo Rechi Vita
> <jprvita at gmail.com> wrote:
> > We can provide a better overall user experience with Bluetooth
> > cards by
> > always choosing the higher audio quality profile (A2DP) by default
> > and
> > updating the profile selection dynamically according to which
> > streams
> > are active at a certain moment. The default initial selection has
> > been
> > addressed by "85daab272 bluetooth: set better priorities for
> > profiles"
> > and the dynamic profile selection is covered by module-bluetooth-
> > policy.
> > 
> > In addition, module-card-restore's database entries for Bluetooth
> > devices
> > are retained after a device is removed from the system, leading to
> > the
> > previously selected profile being restored after a new pairing with
> > the
> > same device, with no way for the user to erase this memory and
> > reset the
> > default profile except manually fiddling with module-card-restore's
> > database.
> > 
> > This commit adds a module argument to have module-card-restore
> > ignore
> > Bluetooth profiles and this behavior is set as default.
> 
> I would have it done differently, just detect if
> module-bluetooth-policy is loaded instead of having a argument since
> on platforms not using module-bluetooth-policy it might be useful to
> restore.

João, are you willing to implement that instead? I'm fine with either
approach, but Luiz's idea seems a bit better. Note that if you're going
to implement it, there's the added complication of needing to monitor
when modules are loaded and unloaded, it's not enough to check it only
during initialization.

One comment about the code below:

> > ---
> >  src/modules/module-card-restore.c | 20 +++++++++++++++++++-
> >  1 file changed, 19 insertions(+), 1 deletion(-)
> > 
> > diff --git a/src/modules/module-card-restore.c
> > b/src/modules/module-card-restore.c
> > index 014e75435..10e6f4292 100644
> > --- a/src/modules/module-card-restore.c
> > +++ b/src/modules/module-card-restore.c
> > @@ -48,11 +48,14 @@ PA_MODULE_AUTHOR("Lennart Poettering");
> >  PA_MODULE_DESCRIPTION("Automatically restore profile of cards");
> >  PA_MODULE_VERSION(PACKAGE_VERSION);
> >  PA_MODULE_LOAD_ONCE(true);
> > +PA_MODULE_USAGE(
> > +    "restore_bluetooth_profile=<boolean>"
> > +);
> > 
> >  #define SAVE_INTERVAL (10 * PA_USEC_PER_SEC)
> > 
> >  static const char* const valid_modargs[] = {
> > -    NULL
> > +    "restore_bluetooth_profile=<boolean>"
> >  };
> > 
> >  struct userdata {
> > @@ -60,6 +63,7 @@ struct userdata {
> >      pa_module *module;
> >      pa_time_event *save_time_event;
> >      pa_database *database;
> > +    bool restore_bluetooth_profile;
> >  };
> > 
> >  #define ENTRY_VERSION 4
> > @@ -554,6 +558,12 @@ static pa_hook_result_t
> > card_choose_initial_profile_callback(pa_core *core, pa_c
> >      if (!(e = entry_read(u, card->name)))
> >          return PA_HOOK_OK;
> > 
> > +    if (!u->restore_bluetooth_profile) {
> > +        const char *s = pa_proplist_gets(card->proplist,
> > PA_PROP_DEVICE_BUS);
> > +        if (!s || pa_streq(s, "bluetooth"))

The condition should be

    s && pa_streq(s, "bluetooth")

or

    pa_safe_streq(s, "bluetooth")

because we should skip the restoring only for bluetooth cards, not for
cards with an unknown bus.

-- 
Tanu

https://www.patreon.com/tanuk
https://liberapay.com/tanuk


More information about the pulseaudio-discuss mailing list