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.zip
rockbox-82c2927d1e8e900bee29c73f066e341cf4ec0ea5.tar.gz
rockbox-82c2927d1e8e900bee29c73f066e341cf4ec0ea5.tar.bz2
rockbox-82c2927d1e8e900bee29c73f066e341cf4ec0ea5.tar.xz
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 f83443b..3c29018 100644
--- a/firmware/export/pcm_playback.h
+++ b/firmware/export/pcm_playback.h
@@ -41,6 +41,7 @@ int pcm_play_num_used_buffers(void);
void pcm_play_set_watermark(int numbytes, void (*callback)(int bytes_left));
void pcm_set_boost_mode(bool state);
+bool pcm_is_lowdata(void);
unsigned int audiobuffer_get_latency(void);
bool audiobuffer_insert(char *buf, size_t length);
diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c
index 318cfd4..61573e6 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,
callback_for_more = get_more;
dma_start(start, size);
- if (get_more == pcm_play_callback)
- get_more(&next_start, &next_size);
+ get_more(&next_start, &next_size);
}
void pcm_play_stop(void)
@@ -256,7 +255,6 @@ void DMA0(void) __attribute__ ((interrupt_handler, section(".icode")));
void DMA0(void)
{
int res = DSR0;
- bool rockboy = callback_for_more != pcm_play_callback;
DSR0 = 1; /* Clear interrupt */
@@ -267,13 +265,11 @@ void DMA0(void)
}
else
{
- if (callback_for_more && rockboy)
- callback_for_more(&next_start, &next_size);
if(next_size)
{
SAR0 = (unsigned long)next_start; /* Source address */
BCR0 = next_size; /* Bytes to transfer */
- if (callback_for_more && !rockboy)
+ if (callback_for_more)
callback_for_more(&next_start, &next_size);
}
else
@@ -366,6 +362,17 @@ unsigned int audiobuffer_get_latency(void)
return latency;
}
+bool pcm_is_lowdata(void)
+{
+ if (!pcm_is_playing())
+ return false;
+
+ if (PCMBUF_SIZE - audiobuffer_free <= PCM_WATERMARK)
+ return true;
+
+ return false;
+}
+
bool audiobuffer_insert(char *buf, size_t length)
{
size_t copy_n = 0;