summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/playback.c33
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
1374static void initiate_track_change(int peek_index) 1378static 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;