diff options
author | Miika Pekkarinen <miipekk@ihme.org> | 2005-06-07 06:34:54 +0000 |
---|---|---|
committer | Miika Pekkarinen <miipekk@ihme.org> | 2005-06-07 06:34:54 +0000 |
commit | 82c2927d1e8e900bee29c73f066e341cf4ec0ea5 (patch) | |
tree | 3ae85cd77fe62d08163c28f95e677c4a54bf1288 /firmware | |
parent | 0f10e898f0040e30f0a23719e67223744c47f90d (diff) | |
download | rockbox-82c2927d1e8e900bee29c73f066e341cf4ec0ea5.tar.gz rockbox-82c2927d1e8e900bee29c73f066e341cf4ec0ea5.zip |
Fixed: Ogg Vorbis crashing, MP3 file seeking, USB mode and a little
faster file buffering.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6591 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 | 19 |
2 files changed, 14 insertions, 6 deletions
diff --git a/firmware/export/pcm_playback.h b/firmware/export/pcm_playback.h index f83443b3e9..3c29018394 100644 --- a/firmware/export/pcm_playback.h +++ b/firmware/export/pcm_playback.h | |||
@@ -41,6 +41,7 @@ int pcm_play_num_used_buffers(void); | |||
41 | void pcm_play_set_watermark(int numbytes, void (*callback)(int bytes_left)); | 41 | void pcm_play_set_watermark(int numbytes, void (*callback)(int bytes_left)); |
42 | 42 | ||
43 | void pcm_set_boost_mode(bool state); | 43 | void pcm_set_boost_mode(bool state); |
44 | bool pcm_is_lowdata(void); | ||
44 | unsigned int audiobuffer_get_latency(void); | 45 | unsigned int audiobuffer_get_latency(void); |
45 | bool audiobuffer_insert(char *buf, size_t length); | 46 | bool audiobuffer_insert(char *buf, size_t length); |
46 | 47 | ||
diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c index 318cfd4aa0..61573e6602 100644 --- a/firmware/pcm_playback.c +++ b/firmware/pcm_playback.c | |||
@@ -211,8 +211,7 @@ void pcm_play_data(const unsigned char* start, int size, | |||
211 | callback_for_more = get_more; | 211 | callback_for_more = get_more; |
212 | dma_start(start, size); | 212 | dma_start(start, size); |
213 | 213 | ||
214 | if (get_more == pcm_play_callback) | 214 | get_more(&next_start, &next_size); |
215 | get_more(&next_start, &next_size); | ||
216 | } | 215 | } |
217 | 216 | ||
218 | void pcm_play_stop(void) | 217 | void pcm_play_stop(void) |
@@ -256,7 +255,6 @@ void DMA0(void) __attribute__ ((interrupt_handler, section(".icode"))); | |||
256 | void DMA0(void) | 255 | void DMA0(void) |
257 | { | 256 | { |
258 | int res = DSR0; | 257 | int res = DSR0; |
259 | bool rockboy = callback_for_more != pcm_play_callback; | ||
260 | 258 | ||
261 | DSR0 = 1; /* Clear interrupt */ | 259 | DSR0 = 1; /* Clear interrupt */ |
262 | 260 | ||
@@ -267,13 +265,11 @@ void DMA0(void) | |||
267 | } | 265 | } |
268 | else | 266 | else |
269 | { | 267 | { |
270 | if (callback_for_more && rockboy) | ||
271 | callback_for_more(&next_start, &next_size); | ||
272 | if(next_size) | 268 | if(next_size) |
273 | { | 269 | { |
274 | SAR0 = (unsigned long)next_start; /* Source address */ | 270 | SAR0 = (unsigned long)next_start; /* Source address */ |
275 | BCR0 = next_size; /* Bytes to transfer */ | 271 | BCR0 = next_size; /* Bytes to transfer */ |
276 | if (callback_for_more && !rockboy) | 272 | if (callback_for_more) |
277 | callback_for_more(&next_start, &next_size); | 273 | callback_for_more(&next_start, &next_size); |
278 | } | 274 | } |
279 | else | 275 | else |
@@ -366,6 +362,17 @@ unsigned int audiobuffer_get_latency(void) | |||
366 | return latency; | 362 | return latency; |
367 | } | 363 | } |
368 | 364 | ||
365 | bool pcm_is_lowdata(void) | ||
366 | { | ||
367 | if (!pcm_is_playing()) | ||
368 | return false; | ||
369 | |||
370 | if (PCMBUF_SIZE - audiobuffer_free <= PCM_WATERMARK) | ||
371 | return true; | ||
372 | |||
373 | return false; | ||
374 | } | ||
375 | |||
369 | bool audiobuffer_insert(char *buf, size_t length) | 376 | bool audiobuffer_insert(char *buf, size_t length) |
370 | { | 377 | { |
371 | size_t copy_n = 0; | 378 | size_t copy_n = 0; |