summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Jackson <rdjackso@rockbox.org>2005-08-05 23:51:48 +0000
committerRyan Jackson <rdjackso@rockbox.org>2005-08-05 23:51:48 +0000
commit0812164adae4b8f8d40b1d1da8567cf92ab30b64 (patch)
tree81d26c6add4c36d11cef5d7dbab025b7692f6c65
parente9c35b17d047bfd971003de1964711b4a2565c65 (diff)
downloadrockbox-0812164adae4b8f8d40b1d1da8567cf92ab30b64.zip
rockbox-0812164adae4b8f8d40b1d1da8567cf92ab30b64.tar.gz
rockbox-0812164adae4b8f8d40b1d1da8567cf92ab30b64.tar.bz2
rockbox-0812164adae4b8f8d40b1d1da8567cf92ab30b64.tar.xz
Fixed track changing in REPEAT_ONE mode and playlists with only one track. Removed previous workaround for this bug.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7284 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/playback.c33
1 files changed, 8 insertions, 25 deletions
diff --git a/apps/playback.c b/apps/playback.c
index fc59b42..c6c77fd 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -1265,19 +1265,21 @@ bool codec_request_next_track_callback(void)
/* Advance to next track. */
if (ci.reload_codec && new_track > 0) {
- if (!playlist_check(new_track))
+ if (!playlist_check(new_track)) {
+ ci.reload_codec = false;
return false;
+ }
last_peek_offset--;
playlist_next(new_track);
if (++track_ridx == MAX_TRACK)
track_ridx = 0;
-
+
/* Wait for new track data (codectype 0 is invalid). When a correct
codectype is set, we can assume that the filesize is correct. */
while (tracks[track_ridx].id3.codectype == 0 && filling
&& !ci.stop_codec)
yield();
-
+
if (tracks[track_ridx].filesize == 0) {
logf("Loading from disk...");
new_track = 0;
@@ -1288,8 +1290,10 @@ bool codec_request_next_track_callback(void)
/* Advance to previous track. */
else if (ci.reload_codec && new_track < 0) {
- if (!playlist_check(new_track))
+ if (!playlist_check(new_track)) {
+ ci.reload_codec = false;
return false;
+ }
last_peek_offset++;
playlist_next(new_track);
if (--track_ridx < 0)
@@ -1373,26 +1377,9 @@ void audio_invalidate_tracks(void)
static void initiate_track_change(int peek_index)
{
- int repeat_mode = global_settings.repeat_mode;
-
if (!playlist_check(peek_index))
return ;
- /* Handle the special case of repeat mode and only
- * one track, or REPEAT_ONE mode */
- if ((repeat_mode == REPEAT_ONE) ||
- ((repeat_mode != REPEAT_OFF) && (playlist_amount() == 1))) {
- if (!paused)
- pcm_play_pause(false);
-
- audio_ff_rewind(0);
-
- if (!paused)
- pcm_play_pause(true);
-
- return;
- }
-
/* Detect if disk is spinning.. */
if (filling) {
playlist_next(peek_index);
@@ -1421,10 +1408,6 @@ void audio_thread(void)
queue_wait_w_tmo(&audio_queue, &ev, 0);
switch (ev.id) {
case AUDIO_PLAY:
- /* Refuse to start playback if we are already playing
- the requested track. */
- if (last_index == playlist_get_display_index() && playing)
- break ;
logf("starting...");
playing = true;
paused = false;