summaryrefslogtreecommitdiff
path: root/apps/playback.c
diff options
context:
space:
mode:
authorSteve Bavin <pondlife@pondlife.me>2006-10-25 06:19:27 +0000
committerSteve Bavin <pondlife@pondlife.me>2006-10-25 06:19:27 +0000
commitf512558650175b8834d3a2125d4d3d5a3df78606 (patch)
tree02ff47f4b554e86eb08e5912b32ae6112eec4076 /apps/playback.c
parentb26e396436971b73c8a40f50121c404d643daf51 (diff)
downloadrockbox-f512558650175b8834d3a2125d4d3d5a3df78606.zip
rockbox-f512558650175b8834d3a2125d4d3d5a3df78606.tar.gz
rockbox-f512558650175b8834d3a2125d4d3d5a3df78606.tar.bz2
rockbox-f512558650175b8834d3a2125d4d3d5a3df78606.tar.xz
Only flush PCM buffered voice data when explicitly told to. Patch by Stephane Doyen.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11331 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/playback.c')
-rw-r--r--apps/playback.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/apps/playback.c b/apps/playback.c
index ddb6019..db47b0b 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -328,6 +328,14 @@ void mp3_play_stop(void)
#endif
}
+void mp3_play_abort(void)
+{
+#ifdef PLAYBACK_VOICE
+ LOGFQUEUE("mp3 > voice Q_VOICE_STOP");
+ queue_post(&voice_queue, Q_VOICE_STOP, (void *)1);
+#endif
+}
+
bool mp3_pause_done(void)
{
return pcm_is_paused();
@@ -952,6 +960,10 @@ static void* voice_request_buffer_callback(size_t *realsize, size_t reqsize)
case Q_VOICE_STOP:
LOGFQUEUE("voice < Q_VOICE_STOP");
+ if (ev.data == (void *)1 && !playing && pcm_is_playing())
+ /* Aborting: Slight hack - flush PCM buffer if
+ only being used for voice */
+ pcmbuf_play_stop();
if (voice_is_playing)
{
/* Clear the current buffer */
@@ -980,10 +992,6 @@ static void* voice_request_buffer_callback(size_t *realsize, size_t reqsize)
LOGFQUEUE("voice < Q_VOICE_PLAY");
if (!voice_is_playing)
{
- /* Slight hack - flush PCM buffer if only being used for voice */
- if (!playing && pcm_is_playing())
- pcmbuf_play_stop();
-
/* Set up new voice data */
struct voice_info *voice_data;
voice_is_playing = true;
@@ -3018,7 +3026,7 @@ static void audio_play_start(size_t offset)
/* Invalidates all but currently playing track. */
-void audio_invalidate_tracks(void)
+static void audio_invalidate_tracks(void)
{
if (audio_have_tracks()) {
last_peek_offset = 0;