forked from len0rd/rockbox
pcmbuf: eliminate add_chunk as a separate function
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23582 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
6008c29e5e
commit
73c4791da0
1 changed files with 30 additions and 28 deletions
|
@ -184,10 +184,27 @@ static bool show_desc(char *caller)
|
||||||
|
|
||||||
/* Commit PCM data */
|
/* Commit PCM data */
|
||||||
|
|
||||||
/* This is really just part of commit_chunk, but is easier to keep
|
/**
|
||||||
* in a separate function for the moment */
|
* Commit samples waiting to the pcm buffer.
|
||||||
static inline void pcmbuf_add_chunk(void)
|
*/
|
||||||
|
static void commit_chunk(void)
|
||||||
{
|
{
|
||||||
|
if (!pcmbuffer_fillpos)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Never use the last buffer descriptor */
|
||||||
|
while (write_chunk == write_end_chunk) {
|
||||||
|
/* If this happens, something is being stupid */
|
||||||
|
if (!pcm_is_playing()) {
|
||||||
|
logf("commit_chunk error");
|
||||||
|
pcmbuf_play_start();
|
||||||
|
}
|
||||||
|
/* Let approximately one chunk of data playback */
|
||||||
|
sleep(HZ*PCMBUF_TARGET_CHUNK/(NATIVE_FREQUENCY*4));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* commit the chunk */
|
||||||
|
|
||||||
register size_t size = pcmbuffer_fillpos;
|
register size_t size = pcmbuffer_fillpos;
|
||||||
/* Grab the next description to write, and change the write pointer */
|
/* Grab the next description to write, and change the write pointer */
|
||||||
register struct chunkdesc *pcmbuf_current = write_chunk;
|
register struct chunkdesc *pcmbuf_current = write_chunk;
|
||||||
|
@ -198,9 +215,13 @@ static inline void pcmbuf_add_chunk(void)
|
||||||
pcmbuf_current->end_of_track = end_of_track;
|
pcmbuf_current->end_of_track = end_of_track;
|
||||||
pcmbuf_current->link = NULL;
|
pcmbuf_current->link = NULL;
|
||||||
end_of_track = false; /* This is single use only */
|
end_of_track = false; /* This is single use only */
|
||||||
if (read_chunk != NULL) {
|
|
||||||
|
if (read_chunk != NULL)
|
||||||
|
{
|
||||||
if (flush_pcmbuf)
|
if (flush_pcmbuf)
|
||||||
{
|
{
|
||||||
|
/* flush! discard all data after the currently playing chunk,
|
||||||
|
and make the current chunk play next */
|
||||||
write_end_chunk->link = read_chunk->link;
|
write_end_chunk->link = read_chunk->link;
|
||||||
read_chunk->link = pcmbuf_current;
|
read_chunk->link = pcmbuf_current;
|
||||||
while (write_end_chunk->link)
|
while (write_end_chunk->link)
|
||||||
|
@ -213,10 +234,13 @@ static inline void pcmbuf_add_chunk(void)
|
||||||
/* If there is already a read buffer setup, add to it */
|
/* If there is already a read buffer setup, add to it */
|
||||||
else
|
else
|
||||||
read_end_chunk->link = pcmbuf_current;
|
read_end_chunk->link = pcmbuf_current;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/* Otherwise create the buffer */
|
/* Otherwise create the buffer */
|
||||||
read_chunk = pcmbuf_current;
|
read_chunk = pcmbuf_current;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is now the last buffer to read */
|
/* This is now the last buffer to read */
|
||||||
read_end_chunk = pcmbuf_current;
|
read_end_chunk = pcmbuf_current;
|
||||||
|
|
||||||
|
@ -228,29 +252,7 @@ static inline void pcmbuf_add_chunk(void)
|
||||||
pcmbuffer_pos -= pcmbuf_size;
|
pcmbuffer_pos -= pcmbuf_size;
|
||||||
|
|
||||||
pcmbuffer_fillpos = 0;
|
pcmbuffer_fillpos = 0;
|
||||||
DISPLAY_DESC("add_chunk");
|
DISPLAY_DESC("commit_chunk");
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Commit samples waiting to the pcm buffer.
|
|
||||||
*/
|
|
||||||
static bool commit_chunk(void)
|
|
||||||
{
|
|
||||||
if (pcmbuffer_fillpos) {
|
|
||||||
/* Never use the last buffer descriptor */
|
|
||||||
while (write_chunk == write_end_chunk) {
|
|
||||||
/* If this happens, something is being stupid */
|
|
||||||
if (!pcm_is_playing()) {
|
|
||||||
logf("commit_chunk error");
|
|
||||||
pcmbuf_play_start();
|
|
||||||
}
|
|
||||||
/* Let approximately one chunk of data playback */
|
|
||||||
sleep(HZ*PCMBUF_TARGET_CHUNK/(NATIVE_FREQUENCY*4));
|
|
||||||
}
|
|
||||||
pcmbuf_add_chunk();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_PRIORITY_SCHEDULING
|
#ifdef HAVE_PRIORITY_SCHEDULING
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue