Search
SailfishOS Open Build Service
>
Projects
>
home:kimmoli
:
testing
>
pulseaudio
> _service:tar_git:1014-bluez-device-Check-for-transport-suspend-on-profile-.patch
Log In
Username
Password
Cancel
Overview
Repositories
Revisions
Requests
Users
Advanced
Attributes
Meta
File _service:tar_git:1014-bluez-device-Check-for-transport-suspend-on-profile-.patch of Package pulseaudio
From 6c0eb114ee95e892b87d013d33d8aef0ac6ddb20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juho=20H=C3=A4m=C3=A4l=C3=A4inen?= <juho.hamalainen@tieto.com> Date: Mon, 30 Mar 2015 12:27:41 +0300 Subject: [PATCH 1014/1015] bluez-device: Check for transport suspend on profile change. --- src/modules/bluetooth/module-bluez4-device.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/modules/bluetooth/module-bluez4-device.c b/src/modules/bluetooth/module-bluez4-device.c index 32392bf..67f985b 100644 --- a/src/modules/bluetooth/module-bluez4-device.c +++ b/src/modules/bluetooth/module-bluez4-device.c @@ -423,27 +423,36 @@ static int check_proplist(struct userdata *u) { * Also, if the sink&source are suspended when sco-sink suspend.transport value changes to true, * bring sco transport up. When suspend.transport value changes to false while sink&source are suspended, * tear down the transport. */ -static pa_hook_result_t update_allow_release_cb(pa_core *c, pa_sink *s, struct userdata *u) { +static void update_allow_release(struct userdata *u) { pa_assert(u); - pa_assert(s); - if (!u->hsp.sco_sink || u->hsp.sco_sink != s) - return PA_HOOK_OK; + if (!u->hsp.sco_sink) + return; if (check_proplist(u) < 0) - return PA_HOOK_OK; + return; if (!USE_SCO_OVER_PCM(u)) { pa_log_debug("SCO sink not available."); - return PA_HOOK_OK; + return; } if (!PA_SINK_IS_OPENED(pa_sink_get_state(u->hsp.sco_sink)) && !PA_SOURCE_IS_OPENED(pa_source_get_state(u->hsp.sco_source))) { /* Clear all suspend bits, effectively resuming SCO sink for a while. */ - pa_sink_suspend(s, FALSE, PA_SUSPEND_ALL); + pa_sink_suspend(u->hsp.sco_sink, FALSE, PA_SUSPEND_ALL); } +} + +static pa_hook_result_t update_allow_release_cb(pa_core *c, pa_sink *s, struct userdata *u) { + pa_assert(u); + pa_assert(s); + + if (!u->hsp.sco_sink || u->hsp.sco_sink != s) + return PA_HOOK_OK; + + update_allow_release(u); return PA_HOOK_OK; } @@ -2131,6 +2140,8 @@ static int card_set_profile(pa_card *c, pa_card_profile *new_profile) { if (start_thread(u) < 0) goto off; + update_allow_release(u); + return 0; off: -- 1.9.1