summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Sparmann <theseven@rockbox.org>2011-01-07 13:55:33 +0000
committerMichael Sparmann <theseven@rockbox.org>2011-01-07 13:55:33 +0000
commitc7b8d071814e3f05b9f239245e3b5d7fa9ff74dd (patch)
treea686ca0f1b829f30053d25711398829421f1cc86
parent03da54bde24b39232bb7010db04333c05fe4fd92 (diff)
downloadrockbox-c7b8d071814e3f05b9f239245e3b5d7fa9ff74dd.zip
rockbox-c7b8d071814e3f05b9f239245e3b5d7fa9ff74dd.tar.gz
rockbox-c7b8d071814e3f05b9f239245e3b5d7fa9ff74dd.tar.bz2
rockbox-c7b8d071814e3f05b9f239245e3b5d7fa9ff74dd.tar.xz
Fix iPod Classic playback slowness
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28989 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/s5l8702/pcm-s5l8702.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/firmware/target/arm/s5l8702/pcm-s5l8702.c b/firmware/target/arm/s5l8702/pcm-s5l8702.c
index 7966ead..b0a3a02 100644
--- a/firmware/target/arm/s5l8702/pcm-s5l8702.c
+++ b/firmware/target/arm/s5l8702/pcm-s5l8702.c
@@ -41,6 +41,7 @@ static const int zerosample = 0;
static unsigned char dblbuf[WATERMARK * 4] IBSS_ATTR;
struct dma_lli lli[(CHUNKSIZE - WATERMARK + LLIMAX - 1) / LLIMAX + 1]
__attribute__((aligned(16)));
+struct dma_lli* lastlli;
static const unsigned char* dataptr;
static size_t remaining;
@@ -75,7 +76,6 @@ void INT_DMAC0C0(void)
}
uint32_t lastsize = MIN(WATERMARK * 4, remaining);
remaining -= lastsize;
- struct dma_lli* lastlli;
if (remaining) lastlli = &lli[ARRAYLEN(lli) - 1];
else lastlli = lli;
uint32_t chunksize = MIN(CHUNKSIZE * 4 - lastsize, remaining);
@@ -155,11 +155,12 @@ void pcm_dma_apply_settings(void)
size_t pcm_get_bytes_waiting(void)
{
- int bytes = remaining + (DMAC0C0LLI.control & 0xfff) * 2;
- const struct dma_lli* lli = DMAC0C0LLI.nextlli;
+ int bytes = remaining;
+ const struct dma_lli* lli = &DMAC0C0LLI;
while (lli)
{
bytes += (lli->control & 0xfff) * 2;
+ if (lli == lastlli) break;
lli = lli->nextlli;
}
return bytes;