diff options
Diffstat (limited to 'apps/playback.c')
-rw-r--r-- | apps/playback.c | 71 |
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 | ||
1336 | static 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 | |||
1336 | void audio_thread(void) | 1357 | void 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 | ||
1533 | void audio_pause(void) | 1567 | void 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 | ||
1541 | void audio_resume(void) | 1572 | void 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 | |||
1549 | static 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 | ||
1570 | void audio_next(void) | 1577 | void 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 | ||
1576 | void audio_prev(void) | 1582 | void 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 | ||
1582 | void audio_ff_rewind(int newpos) | 1587 | void audio_ff_rewind(int newpos) |