summaryrefslogtreecommitdiff
path: root/firmware/pcm_playback.c
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2005-06-14 07:54:09 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2005-06-14 07:54:09 +0000
commit6ab53ba458164921361cf6579069b4ebb691f6a7 (patch)
tree3aeb47de1152af904f18bcd24a7ef43de7f53c41 /firmware/pcm_playback.c
parent37f59a0f6f824d1b92a0d7893982660cb0cf1f6f (diff)
downloadrockbox-6ab53ba458164921361cf6579069b4ebb691f6a7.tar.gz
rockbox-6ab53ba458164921361cf6579069b4ebb691f6a7.zip
Even more quiet audio initialization.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6705 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/pcm_playback.c')
-rw-r--r--firmware/pcm_playback.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c
index 582f04cd72..3548caded5 100644
--- a/firmware/pcm_playback.c
+++ b/firmware/pcm_playback.c
@@ -116,10 +116,11 @@ void pcm_boost(bool state)
116static void dma_stop(void) 116static void dma_stop(void)
117{ 117{
118 pcm_playing = false; 118 pcm_playing = false;
119 uda1380_enable_output(false);
120 pcm_boost(false);
119 121
120 /* Reset the FIFO */ 122 /* Reset the FIFO */
121 IIS2CONFIG = 0x800; 123 IIS2CONFIG = 0x800;
122 pcm_boost(false);
123} 124}
124 125
125/* set volume of the main channel */ 126/* set volume of the main channel */
@@ -222,17 +223,23 @@ void pcm_play_data(const unsigned char* start, int size,
222 dma_start(start, size); 223 dma_start(start, size);
223 224
224 get_more(&next_start, &next_size); 225 get_more(&next_start, &next_size);
226
227 /* Sleep a while, then power on audio output */
228 sleep(HZ/16);
229 uda1380_enable_output(true);
225} 230}
226 231
227void pcm_play_stop(void) 232void pcm_play_stop(void)
228{ 233{
229 dma_stop(); 234 if (pcm_playing)
235 dma_stop();
236 pcmbuf_unplayed_bytes = 0;
237 last_chunksize = 0;
230 audiobuffer_pos = 0; 238 audiobuffer_pos = 0;
231 audiobuffer_fillpos = 0; 239 audiobuffer_fillpos = 0;
232 audiobuffer_free = PCMBUF_SIZE; 240 audiobuffer_free = PCMBUF_SIZE;
233 pcmbuf_read_index = 0; 241 pcmbuf_read_index = 0;
234 pcmbuf_write_index = 0; 242 pcmbuf_write_index = 0;
235 pcmbuf_unplayed_bytes = 0;
236 next_start = NULL; 243 next_start = NULL;
237 next_size = 0; 244 next_size = 0;
238 pcm_set_boost_mode(false); 245 pcm_set_boost_mode(false);
@@ -431,7 +438,7 @@ bool audiobuffer_insert(char *buf, size_t length)
431 if (!pcm_is_playing() && !pcm_paused) { 438 if (!pcm_is_playing() && !pcm_paused) {
432 pcm_boost(true); 439 pcm_boost(true);
433 crossfade_active = false; 440 crossfade_active = false;
434 if (audiobuffer_free < PCMBUF_SIZE - CHUNK_SIZE*2) 441 if (audiobuffer_free < PCMBUF_SIZE - CHUNK_SIZE*4)
435 pcm_play_start(); 442 pcm_play_start();
436 } 443 }
437 444
@@ -497,14 +504,6 @@ void pcm_play_init(void)
497 pcmbuf_unplayed_bytes = 0; 504 pcmbuf_unplayed_bytes = 0;
498 crossfade_enabled = false; 505 crossfade_enabled = false;
499 pcm_play_set_watermark(PCM_WATERMARK, pcm_watermark_callback); 506 pcm_play_set_watermark(PCM_WATERMARK, pcm_watermark_callback);
500
501 /* Play a small chunk of zeroes to initialize the playback system. */
502 audiobuffer_pos = 32000;
503 audiobuffer_free -= audiobuffer_pos;
504 memset(&audiobuffer[0], 0, audiobuffer_pos);
505 pcm_play_add_chunk(&audiobuffer[0], audiobuffer_pos, NULL);
506 pcm_play_start();
507
508} 507}
509 508
510void pcm_crossfade_enable(bool on_off) 509void pcm_crossfade_enable(bool on_off)