1
0
Fork 0
forked from len0rd/rockbox

Fix iPod Classic playback slowness

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28989 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Michael Sparmann 2011-01-07 13:55:33 +00:00
parent 03da54bde2
commit c7b8d07181

View file

@ -41,6 +41,7 @@ static const int zerosample = 0;
static unsigned char dblbuf[WATERMARK * 4] IBSS_ATTR; static unsigned char dblbuf[WATERMARK * 4] IBSS_ATTR;
struct dma_lli lli[(CHUNKSIZE - WATERMARK + LLIMAX - 1) / LLIMAX + 1] struct dma_lli lli[(CHUNKSIZE - WATERMARK + LLIMAX - 1) / LLIMAX + 1]
__attribute__((aligned(16))); __attribute__((aligned(16)));
struct dma_lli* lastlli;
static const unsigned char* dataptr; static const unsigned char* dataptr;
static size_t remaining; static size_t remaining;
@ -75,7 +76,6 @@ void INT_DMAC0C0(void)
} }
uint32_t lastsize = MIN(WATERMARK * 4, remaining); uint32_t lastsize = MIN(WATERMARK * 4, remaining);
remaining -= lastsize; remaining -= lastsize;
struct dma_lli* lastlli;
if (remaining) lastlli = &lli[ARRAYLEN(lli) - 1]; if (remaining) lastlli = &lli[ARRAYLEN(lli) - 1];
else lastlli = lli; else lastlli = lli;
uint32_t chunksize = MIN(CHUNKSIZE * 4 - lastsize, remaining); 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) size_t pcm_get_bytes_waiting(void)
{ {
int bytes = remaining + (DMAC0C0LLI.control & 0xfff) * 2; int bytes = remaining;
const struct dma_lli* lli = DMAC0C0LLI.nextlli; const struct dma_lli* lli = &DMAC0C0LLI;
while (lli) while (lli)
{ {
bytes += (lli->control & 0xfff) * 2; bytes += (lli->control & 0xfff) * 2;
if (lli == lastlli) break;
lli = lli->nextlli; lli = lli->nextlli;
} }
return bytes; return bytes;