diff options
| author | Ryan Jackson <rdjackso@rockbox.org> | 2005-08-05 23:51:48 +0000 |
|---|---|---|
| committer | Ryan Jackson <rdjackso@rockbox.org> | 2005-08-05 23:51:48 +0000 |
| commit | 0812164adae4b8f8d40b1d1da8567cf92ab30b64 (patch) | |
| tree | 81d26c6add4c36d11cef5d7dbab025b7692f6c65 | |
| parent | e9c35b17d047bfd971003de1964711b4a2565c65 (diff) | |
| download | rockbox-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.c | 33 |
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; |