[pulseaudio-discuss] [RFCv2 13/17] bluetooth: Only call *Acquire() if using BlueZ' Media API
Mikel Astiz
mikel.astiz.oss at gmail.com
Thu Apr 18 07:50:43 PDT 2013
Hi João Paulo,
On Thu, Apr 18, 2013 at 4:04 PM, João Paulo Rechi Vita
<jprvita at openbossa.org> wrote:
> On Thu, Apr 18, 2013 at 10:43 AM, Mikel Astiz <mikel.astiz.oss at gmail.com> wrote:
>> Hi João Paulo,
>>
>> On Mon, Apr 15, 2013 at 11:53 PM, <jprvita at gmail.com> wrote:
>>> From: João Paulo Rechi Vita <jprvita at openbossa.org>
>>>
>>> When the transport backend is oFono the stream file descriptor is passed
>>> through the NewConnection() method call. Additionally, set the kernel
>>> default SCO MTU value for block size (since this information is not
>>> available) and the transport codec, which also comes in the
>>> NewConnection() method call.
>>> ---
>>> src/modules/bluetooth/bluetooth-util.c | 20 ++++++++++++++++++++
>>> 1 file changed, 20 insertions(+)
>>>
>>> diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c
>>> index ae98029..d72137b 100644
>>> --- a/src/modules/bluetooth/bluetooth-util.c
>>> +++ b/src/modules/bluetooth/bluetooth-util.c
>>> @@ -1854,6 +1854,26 @@ int pa_bluetooth_transport_acquire(pa_bluetooth_transport *t, bool optional, siz
>>> } else {
>>> pa_assert(t->device->discovery->version == BLUEZ_VERSION_5);
>>>
>>> + if (t->profile == PROFILE_HFGW) {
>>> + struct handsfree_card *hf_card = pa_hashmap_get(t->device->discovery->hf_cards, t->path);
>>> +
>>> + /* The correct block size should take into account the SCO MTU from
>>> + * the Bluetooth adapter and (for adapters in the USB bus) the MxPS
>>> + * value from the Isoc USB endpoint in use by btusb and should be
>>> + * made available to userspace by the Bluetooth kernel subsystem.
>>> + * The empiric value will be used meanwhile. */
>>
>> Why not take the MTU from the socket options?
>
> The MTU informed through the SCO socket option informs the adapter
> MTU, it doesn't take the USB endpoint MxPS into consideration. So if
> we use that value the USB endpoint gets flooded (I imagine) and resets
> the Bluetooth adapter. Vinicius is investigating this issue, but
> hardcoding this value to 48 is the best we can do so far :(
You're right that it doesn't take the MxPS into consideration but
neither does the hardcoded 48.
My experience is that 96 works better than 48, for example, specially
when 2 SCO streams exist.
>
>>
>>> + if (imtu)
>>> + *imtu = 48;
>>> + if (omtu)
>>> + *omtu = 48;
>>> +
>>> + if (hf_card) {
>>> + t->codec = hf_card->codec;
>>> + return hf_card->fd;
>>
>> As already mentioned before, this is not enough. You're handling the
>> optional case only, while PA also relies on triggering an SCO
>> connection actively and blocking until we get the fd.
>>
>
> Yes, I left this use case to be handled later on and I'm working on it
That's fine but we should definitely address this issue before merging
this patchset.
> right now, to see what we can do. How are you doing to trigger this?
> I'm trying with module-sine, setting the bluetooth sink as the
> fallback one, but this doesn't seem to trigger a sink resume.
You can use pacmd and commands like suspend-source/sink.
The reason is that within this role (role HF, PA-card-profile "hfgw"),
the suspend is considered user-driven (PA_SUSPEND_USER), and won't
automatically resume.
Cheers,
Mikel
More information about the pulseaudio-discuss
mailing list