diff options
author | Miika Pekkarinen <miipekk@ihme.org> | 2005-06-10 10:58:45 +0000 |
---|---|---|
committer | Miika Pekkarinen <miipekk@ihme.org> | 2005-06-10 10:58:45 +0000 |
commit | 2ed0b195be62161df9fbeaa58abfe762f86959e6 (patch) | |
tree | dcbb1f6c03fcc8c9e4de320450dd7de087a53a31 /firmware | |
parent | b945fe84aa80d47a7d160751de5a05953f1fcc83 (diff) | |
download | rockbox-2ed0b195be62161df9fbeaa58abfe762f86959e6.tar.gz rockbox-2ed0b195be62161df9fbeaa58abfe762f86959e6.zip |
Better handling for cpu_boost(). Small buffering fix.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6647 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/export/pcm_playback.h | 1 | ||||
-rw-r--r-- | firmware/pcm_playback.c | 28 |
2 files changed, 18 insertions, 11 deletions
diff --git a/firmware/export/pcm_playback.h b/firmware/export/pcm_playback.h index 0f2de83224..32288d7d91 100644 --- a/firmware/export/pcm_playback.h +++ b/firmware/export/pcm_playback.h | |||
@@ -45,6 +45,7 @@ bool pcm_is_lowdata(void); | |||
45 | void pcm_crossfade_start(void); | 45 | void pcm_crossfade_start(void); |
46 | unsigned int audiobuffer_get_latency(void); | 46 | unsigned int audiobuffer_get_latency(void); |
47 | bool audiobuffer_insert(char *buf, size_t length); | 47 | bool audiobuffer_insert(char *buf, size_t length); |
48 | bool pcm_is_crossfade_enabled(void); | ||
48 | void pcm_crossfade_enable(bool on_off); | 49 | void pcm_crossfade_enable(bool on_off); |
49 | 50 | ||
50 | #endif | 51 | #endif |
diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c index 34310cf916..049978e381 100644 --- a/firmware/pcm_playback.c +++ b/firmware/pcm_playback.c | |||
@@ -99,15 +99,6 @@ static void dma_start(const void *addr, long size) | |||
99 | DCR0 = DMA_INT | DMA_EEXT | DMA_CS | DMA_SINC | DMA_START; | 99 | DCR0 = DMA_INT | DMA_EEXT | DMA_CS | DMA_SINC | DMA_START; |
100 | } | 100 | } |
101 | 101 | ||
102 | /* Stops the DMA transfer and interrupt */ | ||
103 | static void dma_stop(void) | ||
104 | { | ||
105 | pcm_playing = false; | ||
106 | |||
107 | /* Reset the FIFO */ | ||
108 | IIS2CONFIG = 0x800; | ||
109 | } | ||
110 | |||
111 | void pcm_boost(bool state) | 102 | void pcm_boost(bool state) |
112 | { | 103 | { |
113 | static bool boost_state = false; | 104 | static bool boost_state = false; |
@@ -121,6 +112,16 @@ void pcm_boost(bool state) | |||
121 | } | 112 | } |
122 | } | 113 | } |
123 | 114 | ||
115 | /* Stops the DMA transfer and interrupt */ | ||
116 | static void dma_stop(void) | ||
117 | { | ||
118 | pcm_playing = false; | ||
119 | |||
120 | /* Reset the FIFO */ | ||
121 | IIS2CONFIG = 0x800; | ||
122 | pcm_boost(false); | ||
123 | } | ||
124 | |||
124 | /* set volume of the main channel */ | 125 | /* set volume of the main channel */ |
125 | void pcm_set_volume(int volume) | 126 | void pcm_set_volume(int volume) |
126 | { | 127 | { |
@@ -385,6 +386,7 @@ bool pcm_is_lowdata(void) | |||
385 | 386 | ||
386 | void pcm_crossfade_start(void) | 387 | void pcm_crossfade_start(void) |
387 | { | 388 | { |
389 | //logf("cf:%d", audiobuffer_free / CHUNK_SIZE); | ||
388 | if (audiobuffer_free > CHUNK_SIZE * 4 || !crossfade_enabled) { | 390 | if (audiobuffer_free > CHUNK_SIZE * 4 || !crossfade_enabled) { |
389 | return ; | 391 | return ; |
390 | } | 392 | } |
@@ -493,6 +495,7 @@ void pcm_play_init(void) | |||
493 | pcmbuf_read_index = 0; | 495 | pcmbuf_read_index = 0; |
494 | pcmbuf_write_index = 0; | 496 | pcmbuf_write_index = 0; |
495 | pcmbuf_unplayed_bytes = 0; | 497 | pcmbuf_unplayed_bytes = 0; |
498 | crossfade_enabled = false; | ||
496 | pcm_play_set_watermark(PCM_WATERMARK, pcm_watermark_callback); | 499 | pcm_play_set_watermark(PCM_WATERMARK, pcm_watermark_callback); |
497 | 500 | ||
498 | /* Play a small chunk of zeroes to initialize the playback system. */ | 501 | /* Play a small chunk of zeroes to initialize the playback system. */ |
@@ -501,9 +504,7 @@ void pcm_play_init(void) | |||
501 | memset(&audiobuffer[0], 0, audiobuffer_pos); | 504 | memset(&audiobuffer[0], 0, audiobuffer_pos); |
502 | pcm_play_add_chunk(&audiobuffer[0], audiobuffer_pos, NULL); | 505 | pcm_play_add_chunk(&audiobuffer[0], audiobuffer_pos, NULL); |
503 | pcm_play_start(); | 506 | pcm_play_start(); |
504 | cpu_boost(false); | ||
505 | 507 | ||
506 | crossfade_enabled = false; | ||
507 | } | 508 | } |
508 | 509 | ||
509 | void pcm_crossfade_enable(bool on_off) | 510 | void pcm_crossfade_enable(bool on_off) |
@@ -511,6 +512,11 @@ void pcm_crossfade_enable(bool on_off) | |||
511 | crossfade_enabled = on_off; | 512 | crossfade_enabled = on_off; |
512 | } | 513 | } |
513 | 514 | ||
515 | bool pcm_is_crossfade_enabled(void) | ||
516 | { | ||
517 | return crossfade_enabled; | ||
518 | } | ||
519 | |||
514 | void pcm_play_start(void) | 520 | void pcm_play_start(void) |
515 | { | 521 | { |
516 | struct pcmbufdesc *desc = &pcmbuffers[pcmbuf_read_index]; | 522 | struct pcmbufdesc *desc = &pcmbuffers[pcmbuf_read_index]; |