Alsa plugin fix
PATCH 1/1 Alsa plugin fix
All,
I've spent most of my afternoon fixing the support for my favorite media player, the descendant of XMMS : audacious. :-)
Audacious was almost working except for a *very* annoying bug (in our side :-( ). It would
eventually stop playing at the end of each song, which meant i would have to manually select the next song and hit play again... not very funny :-(
Now it looks it works perfectly (didn't have time to check that in details, but that should be fixed as soon i tomorrow, after i would have spent the most part of the day listening to music with Audacious ;-) )
The patch is fairly simple, it implements the delay() call to make sure we change the pcm state to the XRUN state whenever the hw_ptr moves on top of appl_ptr.
Anybody to review it and commit to CVS ?
Cheers,
Fabien
pcm_bluetooth.c +21 -0
@@ -764,6 +764,25 @@return ret; } +static int bluetooth_playback_delay (snd_pcm_ioplug_t *io, +snd_pcm_sframes_t *delayp) +{ +DBG ("" ); + +/* This updates io->hw_ptr value using pointer() function */ +snd_pcm_hwsync (io->pcm); + + *delayp = io->appl_ptr - io->hw_ptr; +if ((io->state ==SND_PCM_STATE_RUNNING ) && (*delayp <0 )) { + io->callback->stop (io); + io->state =SND_PCM_STATE_XRUN ; + *delayp =0 ; + } +/* This should never fail, ALSA API is really not +prepared to handle a non zero return value */ +return 0 ; +} +static snd_pcm_ioplug_callback_t bluetooth_hsp_playback = { .start = bluetooth_playback_start, .stop = bluetooth_playback_stop,
@@ -774,6 +793,7 @@ .transfer = bluetooth_hsp_write, .poll_descriptors = bluetooth_playback_poll_descriptors, .poll_revents = bluetooth_playback_poll_revents, + .delay = bluetooth_playback_delay, };static snd_pcm_ioplug_callback_t bluetooth_hsp_capture = {
@@ -798,6 +818,7 @@ .transfer = bluetooth_a2dp_write, .poll_descriptors = bluetooth_playback_poll_descriptors, .poll_revents = bluetooth_playback_poll_revents, + .delay = bluetooth_playback_delay, };static snd_pcm_ioplug_callback_t bluetooth_a2dp_capture = {
Fabien,
I noticed the same problem with xmms, but it works great now. I committed your fix.
thanks
Brad
Quoted 11 lines · Fabien Chevalier
All,
I've spent most of my afternoon fixing the support for my favorite media player, the descendant of XMMS : audacious. :-)
Audacious was almost working except for a *very* annoying bug (in our side :-( ). It would
eventually stop playing at the end of each song, which meant i would have to manually select the next song and hit play again... not very funny :-(
Quoted 3 lines
Now it looks it works perfectly (didn't have time to check that in details, but that should be fixed as soon i tomorrow, after i would have spent the most part of the day listening to music with Audacious ;-)=
)
Quoted 5 lines
The patch is fairly simple, it implements the
delay()call to make sure we change the pcm state to the XRUN state whenever thehw_ptrmoves on top ofappl_ptr.
Quoted 8 lines
Anybody to review it and commit to CVS ?
Cheers,
Fabien
Index:
pcm_bluetooth.c=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Quoted 46 lines
pcm_bluetooth.c (copie de travail) renamed from pcm_bluetooth.c (r=E9vision 74) +21
-1@@ -764,6 +764,25 @@ return ret; } +static int bluetooth_playback_delay(snd_pcm_ioplug_t *io, + snd_pcm_sframes_t *delayp) +{ + DBG(""); + + /* This updates io->hw_ptr value using pointer() function */ + snd_pcm_hwsync(io->pcm); + + *delayp =3D io->appl_ptr - io->hw_ptr; + if ((io->state =3D=3D SND_PCM_STATE_RUNNING) && (*delayp < 0)) { + io->callback->stop(io); + io->state =3D SND_PCM_STATE_XRUN; + *delayp =3D 0; + } + /* This should never fail, ALSA API is really not + prepared to handle a non zero return value */ + return 0; +} + static snd_pcm_ioplug_callback_t bluetooth_hsp_playback =3D { .start =3D bluetooth_playback_start, .stop =3D bluetooth_playback_stop,@@ -774,6 +793,7 @@ .transfer =3D bluetooth_hsp_write, .poll_descriptors =3D bluetooth_playback_poll_descriptors, .poll_revents =3D bluetooth_playback_poll_revents, + .delay =3D bluetooth_playback_delay, }; static snd_pcm_ioplug_callback_t bluetooth_hsp_capture =3D {@@ -798,6 +818,7 @@ .transfer =3D bluetooth_a2dp_write, .poll_descriptors =3D bluetooth_playback_poll_descriptors, .poll_revents =3D bluetooth_playback_poll_revents, + .delay =3D bluetooth_playback_delay, }; static snd_pcm_ioplug_callback_t bluetooth_a2dp_capture =3D { -------------------------------------------------------------------------
Quoted 10 lines
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
-------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Quoted 4 lines
Fabien,
I noticed the same problem with xmms, but it works great now. I committed your fix.
Thanks !
Btw, maybe we should put Audacious on the HOWTO/Audiodevices pages and recommand its usage instead of XMMS/BMP, which both seem to have been abandonned ?
Fabien
-------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Luiz Augusto von Dentz
maintainerHi,
Quoted 10 lines · Fabien Chevalier
Quoted 4 lines
Fabien,
I noticed the same problem with xmms, but it works great now. I committed your fix.
Thanks !
Btw, maybe we should put Audacious on the HOWTO/Audiodevices pages and recommand its usage instead of XMMS/BMP, which both seem to have been abandonned ?
It doen't hurt to leave xmms in there since it is just a few lines to explain how to
enable its support, we just need to mark it as not recommended and include Audacious as a recommended player along with gstreamer based ones.
btw, great work!
-- =
Luiz Augusto von Dentz
Engenheiro de Computa=E7=E3o
-------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Quoted 9 lines
Quoted 4 lines
Btw, maybe we should put Audacious on the HOWTO/Audiodevices pages and recommand its usage instead of XMMS/BMP, which both seem to have been abandonned ?
It doen't hurt to leave xmms in there since it is just a few lines to explain how to
enable its support, we just need to mark it as not recommended and include Audacious as a recommended player along with gstreamer based ones.
Hello Luiz,
I 100% agree with you. :-)
Cheers,
Fabien
-------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Marcel Holtmann
maintainerHi Fabien,
Quoted 1 line
I 100% agree with you. :-)
you know that you can edit the wiki by yourself ;)
Regards
Marcel
-------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
[Bluez-devel] Socket concurrency / first tests
Hello,
I have been working on socket concurrency tests in the last days, i.e. opening RFCOMM sockets to a maximum number of remote devices (mobile phones in this case). I have used a usual "connect" with blocking sockets - socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM). Each connection is performed to a different mobile phone, I have a row of phones on my desk :)
I'm using a 2.6.22.12 kernel with BlueZ 3.20 libs/utils, and from 1 to 4 bluetooth dongles (Bt 2.0 EDR USB 2.0, an USB 2.0 hub connected to an USB 2.0 port). "passkey-agent --default 0000 &" running.
1) With one bluetooth dongle only : I can successfully open up to 7 concurrent connections to 7 mobile phones, then a sleep(60), then close the socket. I simply create one process for each connect() to each device and launch them all as fast as possible. It's working fine except :
- when one mobile host is down (I have intentionally switched one off) then all next "connect" are delayed, and usually lead to a "connection timeout" or "operation now in progress" when leaving the "connect".
- when a pairing is required it is about the same, all the rest seems delayed.
2) With more dongles, trying to perform (still at the same time) a connect() to one phone on hci0, another on hci1 etc ... up to hci3 (i.e. only 4 connects to 4 devices), I always get connections errors, and the first connection try seems to get a lot of time.
I will certainly come back tomorrow with some hcidumps, but basically I have the feeling that some operations are blocking, and I also wonder about the blocking connect() timeout, which sometimes makes connect() exit with a E_INPROGRESS or a connection timeout -in my opinion- a bit too quickly.
If someone could help me in my investigations it would be really great !!
Best regards,
Oli
-------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Hi Marcel,
Quoted 6 lines
Hi Fabien,
Quoted 1 line
I 100% agree with you. :-)
you know that you can edit the wiki by yourself ;)
Sure, just wanted to make sure you guys would agree before to make the changes :-)
Cheers,
Fabien
-------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel