summaryrefslogtreecommitdiff
path: root/apps/playback.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/playback.c')
-rw-r--r--apps/playback.c71
1 files changed, 38 insertions, 33 deletions
diff --git a/apps/playback.c b/apps/playback.c
index f190f080ac..13c66a43b5 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -1333,6 +1333,27 @@ void audio_invalidate_tracks(void)
1333 read_next_metadata(); 1333 read_next_metadata();
1334} 1334}
1335 1335
1336static void initiate_track_change(int peek_index)
1337{
1338 if (!playlist_check(peek_index))
1339 return ;
1340
1341 new_track = peek_index;
1342 ci.reload_codec = true;
1343
1344 /* Detect if disk is spinning.. */
1345 if (filling) {
1346 ci.stop_codec = true;
1347 playlist_next(peek_index);
1348 queue_post(&audio_queue, AUDIO_PLAY, 0);
1349 }
1350
1351 else if (!pcm_crossfade_init())
1352 pcm_flush_audio();
1353 else
1354 codec_track_changed();
1355}
1356
1336void audio_thread(void) 1357void audio_thread(void)
1337{ 1358{
1338 struct event ev; 1359 struct event ev;
@@ -1364,14 +1385,27 @@ void audio_thread(void)
1364 break ; 1385 break ;
1365 1386
1366 case AUDIO_PAUSE: 1387 case AUDIO_PAUSE:
1388 logf("audio_pause");
1389 pcm_play_pause(false);
1390 paused = true;
1367 break ; 1391 break ;
1368 1392
1369 case AUDIO_RESUME: 1393 case AUDIO_RESUME:
1394 logf("audio_resume");
1395 pcm_play_pause(true);
1396 paused = false;
1370 break ; 1397 break ;
1371 1398
1372 case AUDIO_NEXT: 1399 case AUDIO_NEXT:
1400 logf("audio_next");
1401 initiate_track_change(1);
1373 break ; 1402 break ;
1374 1403
1404 case AUDIO_PREV:
1405 logf("audio_prev");
1406 initiate_track_change(-1);
1407 break;
1408
1375 case AUDIO_FLUSH: 1409 case AUDIO_FLUSH:
1376 audio_invalidate_tracks(); 1410 audio_invalidate_tracks();
1377 break ; 1411 break ;
@@ -1532,51 +1566,22 @@ void audio_stop(void)
1532 1566
1533void audio_pause(void) 1567void audio_pause(void)
1534{ 1568{
1535 logf("audio_pause"); 1569 queue_post(&audio_queue, AUDIO_PAUSE, 0);
1536 pcm_play_pause(false);
1537 paused = true;
1538 //queue_post(&audio_queue, AUDIO_PAUSE, 0);
1539} 1570}
1540 1571
1541void audio_resume(void) 1572void audio_resume(void)
1542{ 1573{
1543 logf("audio_resume"); 1574 queue_post(&audio_queue, AUDIO_RESUME, 0);
1544 pcm_play_pause(true);
1545 paused = false;
1546 //queue_post(&audio_queue, AUDIO_RESUME, 0);
1547}
1548
1549static void initiate_track_change(int peek_index)
1550{
1551 if (!playlist_check(peek_index))
1552 return ;
1553
1554 new_track = peek_index;
1555 ci.reload_codec = true;
1556
1557 /* Detect if disk is spinning.. */
1558 if (filling) {
1559 ci.stop_codec = true;
1560 playlist_next(peek_index);
1561 queue_post(&audio_queue, AUDIO_PLAY, 0);
1562 }
1563
1564 else if (!pcm_crossfade_init())
1565 pcm_flush_audio();
1566 else
1567 codec_track_changed();
1568} 1575}
1569 1576
1570void audio_next(void) 1577void audio_next(void)
1571{ 1578{
1572 logf("audio_next"); 1579 queue_post(&audio_queue, AUDIO_NEXT, 0);
1573 initiate_track_change(1);
1574} 1580}
1575 1581
1576void audio_prev(void) 1582void audio_prev(void)
1577{ 1583{
1578 logf("audio_prev"); 1584 queue_post(&audio_queue, AUDIO_PREV, 0);
1579 initiate_track_change(-1);
1580} 1585}
1581 1586
1582void audio_ff_rewind(int newpos) 1587void audio_ff_rewind(int newpos)