summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2011-03-06 02:03:37 +0000
committerMichael Sevakis <jethead71@rockbox.org>2011-03-06 02:03:37 +0000
commit7d2ab2df5faff2dd91b5887ee80927a36c108798 (patch)
tree863f52ce3c43d71ed0b4e2a638098f38027b7bca
parentd5e1faa2d2f2a2ea26ddb2a8631f4ae57ebe3456 (diff)
Remove malloc_buf references from playback.c since it's no longer used for anything and align the codec slack space buffer that is now use as the malloc buffer.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29533 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/codec_thread.c11
-rw-r--r--apps/playback.c23
2 files changed, 16 insertions, 18 deletions
diff --git a/apps/codec_thread.c b/apps/codec_thread.c
index 6f15ba1fb3..9b17d7cf42 100644
--- a/apps/codec_thread.c
+++ b/apps/codec_thread.c
@@ -193,10 +193,15 @@ void codec_thread_do_callback(void (*fn)(void), unsigned int *id)
static void* codec_get_buffer(size_t *size)
{
- if (codec_size >= CODEC_SIZE)
+ ssize_t s = CODEC_SIZE - codec_size;
+ void *buf = &codecbuf[codec_size];
+ ALIGN_BUFFER(buf, s, CACHEALIGN_SIZE);
+
+ if (s <= 0)
return NULL;
- *size = CODEC_SIZE - codec_size;
- return &codecbuf[codec_size];
+
+ *size = s;
+ return buf;
}
static void codec_pcmbuf_insert_callback(
diff --git a/apps/playback.c b/apps/playback.c
index 5ee5166cd9..b72ed8a3b8 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -116,7 +116,6 @@ static volatile bool paused SHAREDBSS_ATTR = false; /* Is audio paused? (A/C-) *
/* Ring buffer where compressed audio and codecs are loaded */
static unsigned char *filebuf = NULL; /* Start of buffer (A/C-) */
-static unsigned char *malloc_buf = NULL; /* Start of malloc buffer (A/C-) */
static size_t filebuflen = 0; /* Size of buffer (A/C-) */
/* FIXME: make buf_ridx (C/A-) */
@@ -2014,26 +2013,21 @@ static void audio_reset_buffer(void)
as it will likely be affected and need sliding over */
/* Initially set up file buffer as all space available */
- malloc_buf = audiobuf + talk_get_bufsize();
+ filebuf = audiobuf + talk_get_bufsize();
+ filebuflen = audiobufend - filebuf;
- /* Align the malloc buf to line size.
- * Especially important to cf targets that do line reads/writes.
- * Also for targets which need aligned DMA storage buffers */
- malloc_buf = (unsigned char *)(((uintptr_t)malloc_buf + (CACHEALIGN_SIZE - 1)) & ~(CACHEALIGN_SIZE - 1));
- filebuf = malloc_buf; /* filebuf line align implied */
- filebuflen = (audiobufend - filebuf) & ~(CACHEALIGN_SIZE - 1);
+ ALIGN_BUFFER(filebuf, filebuflen, sizeof (intptr_t));
/* Subtract whatever the pcm buffer says it used plus the guard buffer */
- const size_t pcmbuf_size = pcmbuf_init(filebuf + filebuflen) +GUARD_BUFSIZE;
+ size_t pcmbuf_size = pcmbuf_init(filebuf + filebuflen) + GUARD_BUFSIZE;
+
+ /* Make sure filebuflen is a pointer sized multiple after adjustment */
+ pcmbuf_size = ALIGN_UP(pcmbuf_size, sizeof (intptr_t));
+
if(pcmbuf_size > filebuflen)
panicf("%s(): EOM (%zu > %zu)", __func__, pcmbuf_size, filebuflen);
filebuflen -= pcmbuf_size;
-
- /* Make sure filebuflen is a longword multiple after adjustment - filebuf
- will already be line aligned */
- filebuflen &= ~3;
-
buffering_reset(filebuf, filebuflen);
/* Clear any references to the file buffer */
@@ -2046,7 +2040,6 @@ static void audio_reset_buffer(void)
{
size_t pcmbufsize;
const unsigned char *pcmbuf = pcmbuf_get_meminfo(&pcmbufsize);
- logf("mabuf: %08X", (unsigned)malloc_buf);
logf("fbuf: %08X", (unsigned)filebuf);
logf("fbufe: %08X", (unsigned)(filebuf + filebuflen));
logf("gbuf: %08X", (unsigned)(filebuf + filebuflen));