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

Luiz Augusto von Dentz luiz.dentz at gmail.com
Tue Jul 10 10:10:13 UTC 2018


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.

> ---
>  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"))
> +            return PA_HOOK_OK;
> +    }
> +
>      if (e->profile[0]) {
>          pa_card_profile *profile;
>
> @@ -607,6 +617,7 @@ int pa__init(pa_module*m) {
>      pa_modargs *ma = NULL;
>      struct userdata *u;
>      char *fname;
> +    bool restore_bluetooth_profile;
>
>      pa_assert(m);
>
> @@ -615,9 +626,16 @@ int pa__init(pa_module*m) {
>          goto fail;
>      }
>
> +    restore_bluetooth_profile = false;
> +    if (pa_modargs_get_value_boolean(ma, "restore_bluetooth_profile", &restore_bluetooth_profile) < 0) {
> +        pa_log("Invalid boolean value for restore_bluetooth_profile parameter");
> +        goto fail;
> +    }
> +
>      m->userdata = u = pa_xnew0(struct userdata, 1);
>      u->core = m->core;
>      u->module = m;
> +    u->restore_bluetooth_profile = restore_bluetooth_profile;
>
>      pa_module_hook_connect(m, &m->core->hooks[PA_CORE_HOOK_CARD_NEW], PA_HOOK_EARLY, (pa_hook_cb_t) card_new_hook_callback, u);
>      pa_module_hook_connect(m, &m->core->hooks[PA_CORE_HOOK_CARD_CHOOSE_INITIAL_PROFILE], PA_HOOK_NORMAL,
> --
> 2.18.0
>



-- 
Luiz Augusto von Dentz


More information about the pulseaudio-discuss mailing list