From: Frederic Dalleau <frederic.dalleau@access-company.com>
To: BlueZ development <bluez-devel@lists.sourceforge.net>
Subject: Re: [Bluez-devel] An explanation of a2dpd weird behaviour on high resolution timers enabled kernels
Date: Mon, 13 Aug 2007 19:49:14 +0200 [thread overview]
Message-ID: <1187027354.6262.59.camel@ubuntu.mpl.access-company.com> (raw)
In-Reply-To: <1187024669.6698.214.camel@violet>
Marcel, Fabien,
> > > We have to send the next SBC frame at the exact time slot.
> > > Otherwise the audio sounds too fast or frames are skipped. If you have
> > > any ideas on how we can improve pcm_bluetooth.c (yes, that handling is
> > > inside the ALSA plugin), I would like to know.
> >
> > The way handset makers have solved the issue is to throttle the data
> > sending, to avoid triggering moonlight specific headset behaviours.
> > What i would suggest is to do the same thing using usleep() calls inside
> > the alsa plugin.
>
> we have to calculate the actual time of an SBC frame and then transmit
> it and then sleep the rest of the time before sending the next frame.
> However to have at least a little bit buffer, we should encode something
> around 3 L2CAP packets ahead. Should be something like 9-12 SBC frames.
One sbc frame is very short (350 sbc frames / s). This will only be
possible if you have high resolution timers ;)
a2dpd used to accumulate as much sbc frames as possible in one L2CAP
packet based on mtu. This of course caused latency, but it allowed to
wait using a low resolution timer.
90% latency in a2dpd was due to the "mixer" implementation.
I'm thinking about having sbc encoding inside the plugin. I'm not
convinced, mostly for these reasons :
Even if enough data is buffered, you are not guaranteed that the
application will send data in time. Worse, if enough data is buffered,
the application can choose not to send more data. The application calls
snd_pcm_get_delay(), then sleeps for the remaining delay, then sends new
data. This is typically true at the end of a stream. The application
write what can be written, then wait until the stream underrun, without
writing anymore.
Using usleep in the alsaplugin has been an issue for some player
specially when video and sound must be decoded. Decoding video takes a
lot of time, and sleeping inside the loop is simply not possible.
> I can't see how the clock offset will help us here. It is only important
> for paging devices. All the other time, the device will re-sync their
> clocks as needed.
AFAIK clock drifting has not been an issue to me before.
Frederic
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Bluez-devel mailing list
Bluez-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bluez-devel
next prev parent reply other threads:[~2007-08-13 17:49 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-11 9:48 [Bluez-devel] An explanation of a2dpd weird behaviour on high resolution timers enabled kernels Fabien Chevalier
2007-08-11 18:01 ` Marcel Holtmann
2007-08-12 10:22 ` Fabien Chevalier
2007-08-13 9:59 ` Frederic Dalleau
2007-08-13 10:05 ` Marcel Holtmann
2007-08-13 15:54 ` Fabien Chevalier
2007-08-13 17:04 ` Marcel Holtmann
2007-08-13 17:49 ` Frederic Dalleau [this message]
2007-08-14 2:39 ` Luiz Augusto von Dentz
2007-08-14 12:51 ` Fabien Chevalier
2007-08-14 14:47 ` Frederic Dalleau
2007-08-14 16:40 ` Marcel Holtmann
2007-08-17 10:42 ` Fabien Chevalier
2007-08-17 11:06 ` Marcel Holtmann
2007-08-18 14:13 ` Fabien Chevalier
2007-08-17 13:41 ` Frederic Dalleau
2007-08-14 12:51 ` Fabien Chevalier
2007-08-14 16:44 ` Marcel Holtmann
2007-08-14 19:31 ` [Bluez-devel] Gnome Protocol Analyzer tjoconno
2007-08-17 11:17 ` [Bluez-devel] An explanation of a2dpd weird behaviour on high resolution timers enabled kernels Fabien Chevalier
2007-08-17 11:32 ` Marcel Holtmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1187027354.6262.59.camel@ubuntu.mpl.access-company.com \
--to=frederic.dalleau@access-company.com \
--cc=bluez-devel@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox