forked from len0rd/rockbox
Remove duplicated code and improve button responsiveness during buffer fill
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9541 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
a5d2a28089
commit
2736363d71
1 changed files with 24 additions and 44 deletions
|
@ -93,16 +93,13 @@ enum {
|
||||||
Q_AUDIO_PLAY = 1,
|
Q_AUDIO_PLAY = 1,
|
||||||
Q_AUDIO_STOP,
|
Q_AUDIO_STOP,
|
||||||
Q_AUDIO_PAUSE,
|
Q_AUDIO_PAUSE,
|
||||||
Q_AUDIO_RESUME,
|
Q_AUDIO_SKIP,
|
||||||
Q_AUDIO_NEXT,
|
|
||||||
Q_AUDIO_PREV,
|
|
||||||
Q_AUDIO_FF_REWIND,
|
Q_AUDIO_FF_REWIND,
|
||||||
Q_AUDIO_FLUSH_RELOAD,
|
Q_AUDIO_FLUSH_RELOAD,
|
||||||
Q_AUDIO_CODEC_DONE,
|
Q_AUDIO_CODEC_DONE,
|
||||||
Q_AUDIO_FLUSH,
|
Q_AUDIO_FLUSH,
|
||||||
Q_AUDIO_TRACK_CHANGED,
|
Q_AUDIO_TRACK_CHANGED,
|
||||||
Q_AUDIO_DIR_NEXT,
|
Q_AUDIO_DIR_SKIP,
|
||||||
Q_AUDIO_DIR_PREV,
|
|
||||||
Q_AUDIO_POSTINIT,
|
Q_AUDIO_POSTINIT,
|
||||||
Q_AUDIO_FILL_BUFFER,
|
Q_AUDIO_FILL_BUFFER,
|
||||||
|
|
||||||
|
@ -815,19 +812,25 @@ static void pcmbuf_track_changed_callback(void)
|
||||||
static bool yield_codecs(void)
|
static bool yield_codecs(void)
|
||||||
{
|
{
|
||||||
yield();
|
yield();
|
||||||
|
if (!queue_empty(&audio_queue))
|
||||||
|
return true;
|
||||||
|
|
||||||
/* This indicates that we are in the initial buffer fill mode, or the
|
/* This indicates that we are in the initial buffer fill mode, or the
|
||||||
* playback recently skipped */
|
* playback recently skipped */
|
||||||
if (!pcm_is_playing() && !pcm_is_paused())
|
if (!pcm_is_playing() && !pcm_is_paused())
|
||||||
|
{
|
||||||
sleep(5);
|
sleep(5);
|
||||||
|
if (!queue_empty(&audio_queue))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
while ((pcmbuf_is_crossfade_active() || pcmbuf_is_lowdata())
|
while ((pcmbuf_is_crossfade_active() || pcmbuf_is_lowdata())
|
||||||
&& !ci.stop_codec && playing && !filebuf_is_lowdata())
|
&& !ci.stop_codec && playing && !filebuf_is_lowdata())
|
||||||
{
|
{
|
||||||
sleep(1);
|
sleep(1);
|
||||||
if (!queue_empty(&audio_queue)) {
|
if (!queue_empty(&audio_queue))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1894,28 +1897,15 @@ void audio_thread(void)
|
||||||
|
|
||||||
case Q_AUDIO_PAUSE:
|
case Q_AUDIO_PAUSE:
|
||||||
logf("audio_pause");
|
logf("audio_pause");
|
||||||
pcmbuf_pause(true);
|
pcmbuf_pause((bool)ev.data);
|
||||||
paused = true;
|
paused = (bool)ev.data;
|
||||||
break ;
|
break ;
|
||||||
|
|
||||||
case Q_AUDIO_RESUME:
|
case Q_AUDIO_SKIP:
|
||||||
logf("audio_resume");
|
logf("audio_skip");
|
||||||
pcmbuf_pause(false);
|
|
||||||
paused = false;
|
|
||||||
break ;
|
|
||||||
|
|
||||||
case Q_AUDIO_NEXT:
|
|
||||||
logf("audio_next");
|
|
||||||
last_tick = current_tick;
|
last_tick = current_tick;
|
||||||
playlist_end = false;
|
playlist_end = false;
|
||||||
initiate_track_change(1);
|
initiate_track_change((int)ev.data);
|
||||||
break ;
|
|
||||||
|
|
||||||
case Q_AUDIO_PREV:
|
|
||||||
logf("audio_prev");
|
|
||||||
last_tick = current_tick;
|
|
||||||
playlist_end = false;
|
|
||||||
initiate_track_change(-1);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Q_AUDIO_FF_REWIND:
|
case Q_AUDIO_FF_REWIND:
|
||||||
|
@ -1924,22 +1914,12 @@ void audio_thread(void)
|
||||||
ci.seek_time = (long)ev.data+1;
|
ci.seek_time = (long)ev.data+1;
|
||||||
break ;
|
break ;
|
||||||
|
|
||||||
case Q_AUDIO_DIR_NEXT:
|
case Q_AUDIO_DIR_SKIP:
|
||||||
logf("audio_dir_next");
|
logf("audio_dir_skip");
|
||||||
playlist_end = false;
|
playlist_end = false;
|
||||||
/* pcmbuf_beep may or may not be safe on audio thread */
|
|
||||||
if (global_settings.beep)
|
if (global_settings.beep)
|
||||||
pcmbuf_beep(5000, 100, 2500*global_settings.beep);
|
pcmbuf_beep(5000, 100, 2500*global_settings.beep);
|
||||||
initiate_dir_change(1);
|
initiate_dir_change((int)ev.data);
|
||||||
break;
|
|
||||||
|
|
||||||
case Q_AUDIO_DIR_PREV:
|
|
||||||
logf("audio_dir_prev");
|
|
||||||
playlist_end = false;
|
|
||||||
/* pcmbuf_beep may or may not be safe on audio thread */
|
|
||||||
if (global_settings.beep)
|
|
||||||
pcmbuf_beep(5000, 100, 2500*global_settings.beep);
|
|
||||||
initiate_dir_change(-1);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Q_AUDIO_FLUSH:
|
case Q_AUDIO_FLUSH:
|
||||||
|
@ -2232,12 +2212,12 @@ bool mp3_pause_done(void)
|
||||||
|
|
||||||
void audio_pause(void)
|
void audio_pause(void)
|
||||||
{
|
{
|
||||||
queue_post(&audio_queue, Q_AUDIO_PAUSE, 0);
|
queue_post(&audio_queue, Q_AUDIO_PAUSE, (void *)true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void audio_resume(void)
|
void audio_resume(void)
|
||||||
{
|
{
|
||||||
queue_post(&audio_queue, Q_AUDIO_RESUME, 0);
|
queue_post(&audio_queue, Q_AUDIO_PAUSE, (void *)false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void audio_next(void)
|
void audio_next(void)
|
||||||
|
@ -2255,7 +2235,7 @@ void audio_next(void)
|
||||||
if (mutex_bufferfill.locked)
|
if (mutex_bufferfill.locked)
|
||||||
cur_ti->taginfo_ready = false;
|
cur_ti->taginfo_ready = false;
|
||||||
|
|
||||||
queue_post(&audio_queue, Q_AUDIO_NEXT, 0);
|
queue_post(&audio_queue, Q_AUDIO_SKIP, (void *)1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void audio_prev(void)
|
void audio_prev(void)
|
||||||
|
@ -2273,17 +2253,17 @@ void audio_prev(void)
|
||||||
if (mutex_bufferfill.locked)
|
if (mutex_bufferfill.locked)
|
||||||
cur_ti->taginfo_ready = false;
|
cur_ti->taginfo_ready = false;
|
||||||
|
|
||||||
queue_post(&audio_queue, Q_AUDIO_PREV, 0);
|
queue_post(&audio_queue, Q_AUDIO_SKIP, (void *)-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void audio_next_dir(void)
|
void audio_next_dir(void)
|
||||||
{
|
{
|
||||||
queue_post(&audio_queue, Q_AUDIO_DIR_NEXT, 0);
|
queue_post(&audio_queue, Q_AUDIO_DIR_SKIP, (void *)1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void audio_prev_dir(void)
|
void audio_prev_dir(void)
|
||||||
{
|
{
|
||||||
queue_post(&audio_queue, Q_AUDIO_DIR_PREV, 0);
|
queue_post(&audio_queue, Q_AUDIO_DIR_SKIP, (void *)-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void audio_pre_ff_rewind(void) {
|
void audio_pre_ff_rewind(void) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue