1
0
Fork 0
forked from len0rd/rockbox

pdbox: Code cleanup, optimizations.

* Reverted minimal working memory to 4 MB
* Reverted size of a single audio buffer
* Optimized sound output loop


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26454 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Wincent Balin 2010-06-01 20:37:16 +00:00
parent 279969618d
commit f52c9aae3a
2 changed files with 40 additions and 35 deletions

View file

@ -131,45 +131,46 @@ int rockbox_send_dacs(void)
if(outbuf_fill >= OUTBUFSIZE-1)
return SENDDACS_NO;
/* Write the block of sound. */
write_block:
for(out = outbuf[outbuf_head].data +
outbuf[outbuf_head].fill * PD_OUT_CHANNELS;
outbuf[outbuf_head].fill < (AUDIOBUFSIZE / PD_OUT_CHANNELS) &&
samples_out < DEFDACBLKSIZE;
left++, right++, samples_out++, outbuf[outbuf_head].fill++)
do
{
/* Copy samples from both channels. */
sample = SCALE16(*left);
if(sample > 32767)
sample = 32767;
else if(sample < -32767)
sample = -32767;
*out++ = sample;
sample = SCALE16(*right);
if(sample > 32767)
sample = 32767;
else if(sample < -32767)
sample = -32767;
*out++ = sample;
}
/* Write the block of sound. */
for(out = outbuf[outbuf_head].data +
outbuf[outbuf_head].fill * PD_OUT_CHANNELS;
outbuf[outbuf_head].fill < (AUDIOBUFSIZE / PD_OUT_CHANNELS) &&
samples_out < DEFDACBLKSIZE;
left++, right++, samples_out++, outbuf[outbuf_head].fill++)
{
/* Copy samples from both channels. */
sample = SCALE16(*left);
if(sample > 32767)
sample = 32767;
else if(sample < -32767)
sample = -32767;
*out++ = sample;
sample = SCALE16(*right);
if(sample > 32767)
sample = 32767;
else if(sample < -32767)
sample = -32767;
*out++ = sample;
}
/* If part of output buffer filled... */
if(outbuf[outbuf_head].fill >= (AUDIOBUFSIZE / PD_OUT_CHANNELS))
{
/* Advance one part of output buffer. */
if(outbuf_head == OUTBUFSIZE-1)
outbuf_head = 0;
else
outbuf_head++;
/* If part of output buffer filled... */
if(outbuf[outbuf_head].fill >= (AUDIOBUFSIZE / PD_OUT_CHANNELS))
{
/* Advance one part of output buffer. */
if(outbuf_head == OUTBUFSIZE-1)
outbuf_head = 0;
else
outbuf_head++;
/* Increase fill counter. */
outbuf_fill++;
}
/* Increase fill counter. */
outbuf_fill++;
}
/* If needed, fill the next frame. */
if(samples_out < DEFDACBLKSIZE)
goto write_block;
}
while(samples_out < DEFDACBLKSIZE);
/* Clear Pure Data output buffer. */
memset(sys_soundout,

View file

@ -32,7 +32,7 @@
#include "PDa/src/m_pd.h"
/* Minimal memory size. */
#define MIN_MEM_SIZE (2 * 1024 * 1024)
#define MIN_MEM_SIZE (4 * 1024 * 1024)
/* Memory prototypes. */
@ -49,7 +49,11 @@
#define PD_OUT_CHANNELS 2
/* Audio buffer part. Contains data for one HZ period. */
#ifdef SIMULATOR
#define AUDIOBUFSIZE (PD_SAMPLES_PER_HZ * PD_OUT_CHANNELS * 16)
#else
#define AUDIOBUFSIZE (PD_SAMPLES_PER_HZ * PD_OUT_CHANNELS)
#endif
struct audio_buffer
{
int16_t data[AUDIOBUFSIZE];