summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2005-06-07 06:34:54 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2005-06-07 06:34:54 +0000
commit82c2927d1e8e900bee29c73f066e341cf4ec0ea5 (patch)
tree3ae85cd77fe62d08163c28f95e677c4a54bf1288 /firmware
parent0f10e898f0040e30f0a23719e67223744c47f90d (diff)
downloadrockbox-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.h1
-rw-r--r--firmware/pcm_playback.c19
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);
41void pcm_play_set_watermark(int numbytes, void (*callback)(int bytes_left)); 41void pcm_play_set_watermark(int numbytes, void (*callback)(int bytes_left));
42 42
43void pcm_set_boost_mode(bool state); 43void pcm_set_boost_mode(bool state);
44bool pcm_is_lowdata(void);
44unsigned int audiobuffer_get_latency(void); 45unsigned int audiobuffer_get_latency(void);
45bool audiobuffer_insert(char *buf, size_t length); 46bool 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
218void pcm_play_stop(void) 217void pcm_play_stop(void)
@@ -256,7 +255,6 @@ void DMA0(void) __attribute__ ((interrupt_handler, section(".icode")));
256void DMA0(void) 255void 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
365bool 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
369bool audiobuffer_insert(char *buf, size_t length) 376bool audiobuffer_insert(char *buf, size_t length)
370{ 377{
371 size_t copy_n = 0; 378 size_t copy_n = 0;