diff options
| author | Michael Sparmann <theseven@rockbox.org> | 2011-01-07 13:55:33 +0000 |
|---|---|---|
| committer | Michael Sparmann <theseven@rockbox.org> | 2011-01-07 13:55:33 +0000 |
| commit | c7b8d071814e3f05b9f239245e3b5d7fa9ff74dd (patch) | |
| tree | a686ca0f1b829f30053d25711398829421f1cc86 | |
| parent | 03da54bde24b39232bb7010db04333c05fe4fd92 (diff) | |
| download | rockbox-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.c | 7 |
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;
|