summaryrefslogtreecommitdiff
path: root/apps/pcmbuf.c
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2007-10-06 22:27:27 +0000
committerMichael Sevakis <jethead71@rockbox.org>2007-10-06 22:27:27 +0000
commit6077e5b7c85c0d6f5963e4aadb215faf2c4d10d2 (patch)
treea6bc91ee4168e83617e942eeaea46e5523e82420 /apps/pcmbuf.c
parentf6de0d4083a4fcb6da57f271e1f8ccaf715e571d (diff)
downloadrockbox-6077e5b7c85c0d6f5963e4aadb215faf2c4d10d2.tar.gz
rockbox-6077e5b7c85c0d6f5963e4aadb215faf2c4d10d2.zip
Unify PCM interface just above the hardware driver level for all targets including the sims. Perform lockout of audio callback when changing states. Weird new playback or recording trouble? Check before and after this revision first though things seem quite sound.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15006 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/pcmbuf.c')
-rw-r--r--apps/pcmbuf.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/apps/pcmbuf.c b/apps/pcmbuf.c
index 7e6954c280..a6b82baf25 100644
--- a/apps/pcmbuf.c
+++ b/apps/pcmbuf.c
@@ -24,7 +24,7 @@
24#include "panic.h" 24#include "panic.h"
25#include <kernel.h> 25#include <kernel.h>
26#include "pcmbuf.h" 26#include "pcmbuf.h"
27#include "pcm_playback.h" 27#include "pcm.h"
28#include "logf.h" 28#include "logf.h"
29#ifndef SIMULATOR 29#ifndef SIMULATOR
30#include "cpu.h" 30#include "cpu.h"
@@ -154,7 +154,6 @@ static void pcmbuf_callback(unsigned char** start, size_t* size)
154 crossfade_chunk = pcmbuf_read; 154 crossfade_chunk = pcmbuf_read;
155 } 155 }
156 156
157process_new_buffer:
158 { 157 {
159 /* Send the new buffer to the pcm */ 158 /* Send the new buffer to the pcm */
160 struct pcmbufdesc *pcmbuf_new = pcmbuf_read; 159 struct pcmbufdesc *pcmbuf_new = pcmbuf_read;
@@ -171,10 +170,6 @@ process_new_buffer:
171 } 170 }
172 else 171 else
173 { 172 {
174 /* There may be more data waiting to flush, try to use it */
175 if (pcmbuf_flush_fillpos())
176 goto process_new_buffer;
177
178 /* No more buffers */ 173 /* No more buffers */
179 last_chunksize = 0; 174 last_chunksize = 0;
180 *realsize = 0; 175 *realsize = 0;
@@ -487,7 +482,12 @@ void pcmbuf_pause(bool pause)
487 if (pause) 482 if (pause)
488 pcm_mute(true); 483 pcm_mute(true);
489#endif 484#endif
490 pcm_play_pause(!pause); 485
486 if (pcm_is_playing())
487 pcm_play_pause(!pause);
488 else if (!pause)
489 pcmbuf_play_start();
490
491#ifdef PCMBUF_MUTING 491#ifdef PCMBUF_MUTING
492 if (!pause) 492 if (!pause)
493 pcm_mute(false); 493 pcm_mute(false);
@@ -823,7 +823,8 @@ static bool prepare_insert(size_t length)
823#endif 823#endif
824 { 824 {
825 logf("pcm starting"); 825 logf("pcm starting");
826 pcmbuf_play_start(); 826 if (!(audio_status() & AUDIO_STATUS_PAUSE))
827 pcmbuf_play_start();
827 } 828 }
828 } 829 }
829 else if (pcmbuf_unplayed_bytes <= pcmbuf_watermark) 830 else if (pcmbuf_unplayed_bytes <= pcmbuf_watermark)