Re: Determinate EDR speed

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Pali,

On Fri, Oct 11, 2019 at 11:07 PM Pali Rohár <pali.rohar@xxxxxxxxx> wrote:
>
> On Friday 11 October 2019 19:05:56 Gix, Brian wrote:
> > On Fri, 2019-10-11 at 19:00 +0000, Gix, Brian wrote:
> > > Hi Pali,
> > >
> > > On Fri, 2019-10-11 at 20:35 +0200, Pali Rohár wrote:
> > > > Currently bluez API, method Acquire() already inform called application
> > > > what is socket MTU for input and output. So from this information it is
> > > > possible to detect if device supports EDR 3 or not.
> > > >
> > > > But it is too late to have this information. I need to send SBC
> > > > parameters to bluez first when doing A2DP negotiation, this is early
> > > > steps before Acquire() is called.
> > >
> > > This seems to be the kind of information which is fixed, for the life of the pairing.
> > >
> > > What if you assumed the lower speed the first time you connected, determined the
> > > speed during the first streaming, and then either immediately renegotiate (caching the identifying
> > > information
> > > of the SNK), or just cache the information for future connections.
> > >
> > > Or the reverse, and assume fast, but immediately adjust down if you aren't getting what you hoped for.
> > >
> > > In any case, this would be a "Device Setup" glitch which you could note as a routine part of pairing in the
> > > documentation.
> >
> > Or, Stream "Silence" the first time you connect, in order to determine throughput.  It would add 1-2 seconds to
> > your connection time perhaps, but would be less noticable to the user.
>
> This increase connection time, increase complexity of implementation
> (lot of things can fail) and just complicate lot of things there. Plus
> adds that glitch which is not user friendly.
>
> Also bluetooth devices, like headsets, probably do not expects that
> somebody is going to do such thing and we can hit other implementation
> problems...
>
> And moreover it is just big hack and workaround for that problem. Not a
> reasonable solution.
>
> In btmon I can see it, so kernel already knows that information. Why it
> cannot tell it to userspace and bluetooth daemon to client application?
>
> Client application (e.g. pulseaudio) should really know if is going to
> talk with bluetooth device with EDR 2 or EDR 3.
>
> > >
> > > > Therefore I'm asking for some way how to get information if device
> > > > supports EDR 2 or EDR 3. This is basically requirement for proper
> > > > implementation of SBC in high quality mode. So if there are not such API
> > > > yet, could it be exported from kernel to userspace and bluetoothd
> > > > daemon?
> > > >
> > > > See these two articles for more details about SBC and its high quality:
> > > >
> > > > https://habr.com/en/post/456182/
> > > > http://soundexpert.org/articles/-/blogs/audio-quality-of-sbc-xq-bluetooth-audio-codec
> > > >
> > > > > > Is there any bluez API for it?
> > > > > >

There quite a few assumption here that are not really how it is
implemented in BlueZ:

1. The L2CAP MTU is not based on the ACL link (should be relatively
easy to change)
2. L2CAP MTU is not required to be symmetric.
3. Since the ACL link is shared for all channels we shouldn't really
assume all throughput will be available
4. PA flow control is not just filling up packets and sending them
when they are full to maximize speed, instead it send packets when
necessary to maintain a constant speed so the MTU may not be fully
used, in fact trying to maximize the MTU may result in higher latency
since packets would be sent less frequently.

With this in mind I think the only thing we should look into is to
adjust the default L2CAP MTU to match the underline ACL Link, so it
maximizes throughput, the remote side may choose a different MTU which
will have to follow though.

-- 
Luiz Augusto von Dentz




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux