[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