From: Fabien Chevalier <fabchevalier@free.fr>
To: Brad Midgley <bmidgley@xmission.com>,
Johan Hedberg <johan.hedberg@nokia.com>,
luiz.dentz@gmail.com, Marcel Holtmann <marcel@holtmann.org>
Cc: BlueZ development <bluez-devel@lists.sourceforge.net>
Subject: [PATCH] Alsa plugin fix
Date: Sun, 07 Oct 2007 20:54:53 +0200 [thread overview]
Message-ID: <47092B7D.5000404@free.fr> (raw)
[-- Attachment #1: Type: text/plain, Size: 805 bytes --]
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
[-- Attachment #2: plugin-xun-fix.diff --]
[-- Type: text/plain, Size: 1391 bytes --]
Index: pcm_bluetooth.c
===================================================================
--- pcm_bluetooth.c (révision 74)
+++ pcm_bluetooth.c (copie de travail)
@@ -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 = {
next reply other threads:[~2007-10-07 18:54 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-07 18:54 Fabien Chevalier [this message]
2007-10-08 0:22 ` [Bluez-devel] [PATCH] Alsa plugin fix Brad Midgley
2007-10-08 8:01 ` Fabien Chevalier
2007-10-08 13:40 ` Luiz Augusto von Dentz
2007-10-08 14:09 ` Fabien Chevalier
2007-10-08 16:53 ` Marcel Holtmann
2007-10-08 19:14 ` [Bluez-devel] Socket concurrency / first tests Olivier Le Pogam
2007-10-09 8:04 ` [Bluez-devel] [PATCH] Alsa plugin fix Fabien Chevalier
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=47092B7D.5000404@free.fr \
--to=fabchevalier@free.fr \
--cc=bluez-devel@lists.sourceforge.net \
--cc=bmidgley@xmission.com \
--cc=johan.hedberg@nokia.com \
--cc=luiz.dentz@gmail.com \
--cc=marcel@holtmann.org \
/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