1
0
Fork 0
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:
Brandon Low 2006-04-06 21:06:37 +00:00
parent a5d2a28089
commit 2736363d71

View file

@ -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) {