1
0
Fork 0
forked from len0rd/rockbox

iriver: Better fix for the previous problem, stop playback if next

song is not immediately available, don't flush buffer when changing to
next directory,


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8393 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Miika Pekkarinen 2006-01-19 20:35:06 +00:00
parent b016185c99
commit 178a85f31c
2 changed files with 26 additions and 9 deletions

View file

@ -1527,7 +1527,12 @@ static int skip_next_track(void)
{
logf("Loading from disk...");
ci.reload_codec = true;
//queue_post(&audio_queue, AUDIO_PLAY, 0);
/* Stop playback if manual track change. */
if (new_track != 0 && !pcmbuf_is_crossfade_enabled())
pcmbuf_play_stop();
/* Don't flush buffer */
queue_post(&audio_queue, AUDIO_PLAY, (bool *)false);
return SKIP_OK_DISK;
}
@ -1559,7 +1564,12 @@ static int skip_previous_track(void)
/*+ (off_t)tracks[track_ridx].codecsize*/ > filebuflen) {
logf("Loading from disk...");
ci.reload_codec = true;
queue_post(&audio_queue, AUDIO_PLAY, 0);
/* Stop playback. */
/* FIXME: Only stop playback if disk is not spinning! */
if (!pcmbuf_is_crossfade_enabled())
pcmbuf_play_stop();
queue_post(&audio_queue, AUDIO_PLAY, (bool *)true);
return SKIP_OK_DISK;
}
@ -1597,8 +1607,8 @@ static void audio_change_track(void)
ci.reload_codec = false;
/* Needed for fast skipping. */
if (cur_ti->codecsize > 0)
queue_post(&codec_queue, CODEC_LOAD, 0);
//if (cur_ti->codecsize > 0)
// queue_post(&codec_queue, CODEC_LOAD, 0);
}
bool codec_request_next_track_callback(void)
@ -1644,7 +1654,7 @@ bool codec_request_next_track_callback(void)
if (cur_ti->codecsize == 0)
{
logf("Loading from disk [2]...");
queue_post(&audio_queue, AUDIO_PLAY, 0);
queue_post(&audio_queue, AUDIO_PLAY, (bool *)(new_track != 0));
}
else
ci.reload_codec = true;
@ -1682,7 +1692,7 @@ static void initiate_track_change(int peek_index)
{
/* Detect if disk is spinning or already loading. */
if (filling || ci.reload_codec || !audio_codec_loaded) {
queue_post(&audio_queue, AUDIO_PLAY, 0);
queue_post(&audio_queue, AUDIO_PLAY, (bool *)true);
} else {
new_track = peek_index;
ci.reload_codec = true;
@ -1698,7 +1708,7 @@ static void initiate_dir_change(int direction)
if(!playlist_next_dir(direction))
return;
queue_post(&audio_queue, AUDIO_PLAY, 0);
queue_post(&audio_queue, AUDIO_PLAY, (bool *)true);
codec_track_changed();
}
@ -1725,7 +1735,7 @@ void audio_thread(void)
if (ev.id == SYS_TIMEOUT && play_pending)
{
ev.id = AUDIO_PLAY;
ev.data = 0;
ev.data = (bool *)1;
}
switch (ev.id) {
@ -1760,7 +1770,11 @@ void audio_thread(void)
ci.stop_codec = true;
ci.reload_codec = false;
ci.seek_time = 0;
pcmbuf_crossfade_init();
/* Only flush audio if it has been requested. */
if ((bool)ev.data)
pcmbuf_crossfade_init();
while (audio_codec_loaded)
yield();
audio_play_start((int)ev.data);

View file

@ -2256,7 +2256,10 @@ int playlist_next(int steps)
ft_build_playlist(tree_get_context(), 0);
if (global_settings.playlist_shuffle)
playlist_shuffle(current_tick, -1);
#if CONFIG_CODEC != SWCODEC
playlist_start(0, 0);
#endif
playlist->index = 0;
index = 0;
}
}