diff options
-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 fc59b420c0..c6c77fd58e 100644 --- a/apps/playback.c +++ b/apps/playback.c | |||
@@ -1265,19 +1265,21 @@ bool codec_request_next_track_callback(void) | |||
1265 | 1265 | ||
1266 | /* Advance to next track. */ | 1266 | /* Advance to next track. */ |
1267 | if (ci.reload_codec && new_track > 0) { | 1267 | if (ci.reload_codec && new_track > 0) { |
1268 | if (!playlist_check(new_track)) | 1268 | if (!playlist_check(new_track)) { |
1269 | ci.reload_codec = false; | ||
1269 | return false; | 1270 | return false; |
1271 | } | ||
1270 | last_peek_offset--; | 1272 | last_peek_offset--; |
1271 | playlist_next(new_track); | 1273 | playlist_next(new_track); |
1272 | if (++track_ridx == MAX_TRACK) | 1274 | if (++track_ridx == MAX_TRACK) |
1273 | track_ridx = 0; | 1275 | track_ridx = 0; |
1274 | 1276 | ||
1275 | /* Wait for new track data (codectype 0 is invalid). When a correct | 1277 | /* Wait for new track data (codectype 0 is invalid). When a correct |
1276 | codectype is set, we can assume that the filesize is correct. */ | 1278 | codectype is set, we can assume that the filesize is correct. */ |
1277 | while (tracks[track_ridx].id3.codectype == 0 && filling | 1279 | while (tracks[track_ridx].id3.codectype == 0 && filling |
1278 | && !ci.stop_codec) | 1280 | && !ci.stop_codec) |
1279 | yield(); | 1281 | yield(); |
1280 | 1282 | ||
1281 | if (tracks[track_ridx].filesize == 0) { | 1283 | if (tracks[track_ridx].filesize == 0) { |
1282 | logf("Loading from disk..."); | 1284 | logf("Loading from disk..."); |
1283 | new_track = 0; | 1285 | new_track = 0; |
@@ -1288,8 +1290,10 @@ bool codec_request_next_track_callback(void) | |||
1288 | 1290 | ||
1289 | /* Advance to previous track. */ | 1291 | /* Advance to previous track. */ |
1290 | else if (ci.reload_codec && new_track < 0) { | 1292 | else if (ci.reload_codec && new_track < 0) { |
1291 | if (!playlist_check(new_track)) | 1293 | if (!playlist_check(new_track)) { |
1294 | ci.reload_codec = false; | ||
1292 | return false; | 1295 | return false; |
1296 | } | ||
1293 | last_peek_offset++; | 1297 | last_peek_offset++; |
1294 | playlist_next(new_track); | 1298 | playlist_next(new_track); |
1295 | if (--track_ridx < 0) | 1299 | if (--track_ridx < 0) |
@@ -1373,26 +1377,9 @@ void audio_invalidate_tracks(void) | |||
1373 | 1377 | ||
1374 | static void initiate_track_change(int peek_index) | 1378 | static void initiate_track_change(int peek_index) |
1375 | { | 1379 | { |
1376 | int repeat_mode = global_settings.repeat_mode; | ||
1377 | |||
1378 | if (!playlist_check(peek_index)) | 1380 | if (!playlist_check(peek_index)) |
1379 | return ; | 1381 | return ; |
1380 | 1382 | ||
1381 | /* Handle the special case of repeat mode and only | ||
1382 | * one track, or REPEAT_ONE mode */ | ||
1383 | if ((repeat_mode == REPEAT_ONE) || | ||
1384 | ((repeat_mode != REPEAT_OFF) && (playlist_amount() == 1))) { | ||
1385 | if (!paused) | ||
1386 | pcm_play_pause(false); | ||
1387 | |||
1388 | audio_ff_rewind(0); | ||
1389 | |||
1390 | if (!paused) | ||
1391 | pcm_play_pause(true); | ||
1392 | |||
1393 | return; | ||
1394 | } | ||
1395 | |||
1396 | /* Detect if disk is spinning.. */ | 1383 | /* Detect if disk is spinning.. */ |
1397 | if (filling) { | 1384 | if (filling) { |
1398 | playlist_next(peek_index); | 1385 | playlist_next(peek_index); |
@@ -1421,10 +1408,6 @@ void audio_thread(void) | |||
1421 | queue_wait_w_tmo(&audio_queue, &ev, 0); | 1408 | queue_wait_w_tmo(&audio_queue, &ev, 0); |
1422 | switch (ev.id) { | 1409 | switch (ev.id) { |
1423 | case AUDIO_PLAY: | 1410 | case AUDIO_PLAY: |
1424 | /* Refuse to start playback if we are already playing | ||
1425 | the requested track. */ | ||
1426 | if (last_index == playlist_get_display_index() && playing) | ||
1427 | break ; | ||
1428 | logf("starting..."); | 1411 | logf("starting..."); |
1429 | playing = true; | 1412 | playing = true; |
1430 | paused = false; | 1413 | paused = false; |