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:
parent
279969618d
commit
f52c9aae3a
2 changed files with 40 additions and 35 deletions
|
|
@ -131,45 +131,46 @@ int rockbox_send_dacs(void)
|
||||||
if(outbuf_fill >= OUTBUFSIZE-1)
|
if(outbuf_fill >= OUTBUFSIZE-1)
|
||||||
return SENDDACS_NO;
|
return SENDDACS_NO;
|
||||||
|
|
||||||
/* Write the block of sound. */
|
do
|
||||||
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++)
|
|
||||||
{
|
{
|
||||||
/* Copy samples from both channels. */
|
/* Write the block of sound. */
|
||||||
sample = SCALE16(*left);
|
for(out = outbuf[outbuf_head].data +
|
||||||
if(sample > 32767)
|
outbuf[outbuf_head].fill * PD_OUT_CHANNELS;
|
||||||
sample = 32767;
|
outbuf[outbuf_head].fill < (AUDIOBUFSIZE / PD_OUT_CHANNELS) &&
|
||||||
else if(sample < -32767)
|
samples_out < DEFDACBLKSIZE;
|
||||||
sample = -32767;
|
left++, right++, samples_out++, outbuf[outbuf_head].fill++)
|
||||||
*out++ = sample;
|
{
|
||||||
sample = SCALE16(*right);
|
/* Copy samples from both channels. */
|
||||||
if(sample > 32767)
|
sample = SCALE16(*left);
|
||||||
sample = 32767;
|
if(sample > 32767)
|
||||||
else if(sample < -32767)
|
sample = 32767;
|
||||||
sample = -32767;
|
else if(sample < -32767)
|
||||||
*out++ = sample;
|
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 part of output buffer filled... */
|
||||||
if(outbuf[outbuf_head].fill >= (AUDIOBUFSIZE / PD_OUT_CHANNELS))
|
if(outbuf[outbuf_head].fill >= (AUDIOBUFSIZE / PD_OUT_CHANNELS))
|
||||||
{
|
{
|
||||||
/* Advance one part of output buffer. */
|
/* Advance one part of output buffer. */
|
||||||
if(outbuf_head == OUTBUFSIZE-1)
|
if(outbuf_head == OUTBUFSIZE-1)
|
||||||
outbuf_head = 0;
|
outbuf_head = 0;
|
||||||
else
|
else
|
||||||
outbuf_head++;
|
outbuf_head++;
|
||||||
|
|
||||||
/* Increase fill counter. */
|
/* Increase fill counter. */
|
||||||
outbuf_fill++;
|
outbuf_fill++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If needed, fill the next frame. */
|
/* If needed, fill the next frame. */
|
||||||
if(samples_out < DEFDACBLKSIZE)
|
}
|
||||||
goto write_block;
|
while(samples_out < DEFDACBLKSIZE);
|
||||||
|
|
||||||
/* Clear Pure Data output buffer. */
|
/* Clear Pure Data output buffer. */
|
||||||
memset(sys_soundout,
|
memset(sys_soundout,
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@
|
||||||
#include "PDa/src/m_pd.h"
|
#include "PDa/src/m_pd.h"
|
||||||
|
|
||||||
/* Minimal memory size. */
|
/* Minimal memory size. */
|
||||||
#define MIN_MEM_SIZE (2 * 1024 * 1024)
|
#define MIN_MEM_SIZE (4 * 1024 * 1024)
|
||||||
|
|
||||||
/* Memory prototypes. */
|
/* Memory prototypes. */
|
||||||
|
|
||||||
|
|
@ -49,7 +49,11 @@
|
||||||
#define PD_OUT_CHANNELS 2
|
#define PD_OUT_CHANNELS 2
|
||||||
|
|
||||||
/* Audio buffer part. Contains data for one HZ period. */
|
/* 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)
|
#define AUDIOBUFSIZE (PD_SAMPLES_PER_HZ * PD_OUT_CHANNELS)
|
||||||
|
#endif
|
||||||
struct audio_buffer
|
struct audio_buffer
|
||||||
{
|
{
|
||||||
int16_t data[AUDIOBUFSIZE];
|
int16_t data[AUDIOBUFSIZE];
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue