diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2007-10-06 22:27:27 +0000 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2007-10-06 22:27:27 +0000 |
commit | 6077e5b7c85c0d6f5963e4aadb215faf2c4d10d2 (patch) | |
tree | a6bc91ee4168e83617e942eeaea46e5523e82420 /apps/pcmbuf.c | |
parent | f6de0d4083a4fcb6da57f271e1f8ccaf715e571d (diff) | |
download | rockbox-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.c | 17 |
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 | ||
157 | process_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) |