diff options
Diffstat (limited to 'apps/playback.c')
-rw-r--r-- | apps/playback.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/apps/playback.c b/apps/playback.c index 7b9b664e9c..1b1ba23ce8 100644 --- a/apps/playback.c +++ b/apps/playback.c | |||
@@ -1961,7 +1961,7 @@ static void codec_thread(void) | |||
1961 | #ifdef PLAYBACK_VOICE | 1961 | #ifdef PLAYBACK_VOICE |
1962 | mutex_unlock(&mutex_codecthread); | 1962 | mutex_unlock(&mutex_codecthread); |
1963 | #endif | 1963 | #endif |
1964 | break ; | 1964 | break; |
1965 | 1965 | ||
1966 | case Q_CODEC_LOAD: | 1966 | case Q_CODEC_LOAD: |
1967 | LOGFQUEUE("codec < Q_CODEC_LOAD"); | 1967 | LOGFQUEUE("codec < Q_CODEC_LOAD"); |
@@ -1974,7 +1974,7 @@ static void codec_thread(void) | |||
1974 | ci.stop_codec = true; | 1974 | ci.stop_codec = true; |
1975 | LOGFQUEUE("codec > codec Q_AUDIO_PLAY"); | 1975 | LOGFQUEUE("codec > codec Q_AUDIO_PLAY"); |
1976 | queue_post(&codec_queue, Q_AUDIO_PLAY, 0); | 1976 | queue_post(&codec_queue, Q_AUDIO_PLAY, 0); |
1977 | break ; | 1977 | break; |
1978 | } | 1978 | } |
1979 | 1979 | ||
1980 | audio_codec_loaded = true; | 1980 | audio_codec_loaded = true; |
@@ -1994,7 +1994,7 @@ static void codec_thread(void) | |||
1994 | #ifdef PLAYBACK_VOICE | 1994 | #ifdef PLAYBACK_VOICE |
1995 | mutex_unlock(&mutex_codecthread); | 1995 | mutex_unlock(&mutex_codecthread); |
1996 | #endif | 1996 | #endif |
1997 | break ; | 1997 | break; |
1998 | 1998 | ||
1999 | #ifdef AUDIO_HAVE_RECORDING | 1999 | #ifdef AUDIO_HAVE_RECORDING |
2000 | case Q_ENCODER_LOAD_DISK: | 2000 | case Q_ENCODER_LOAD_DISK: |
@@ -3344,11 +3344,12 @@ static void audio_play_start(size_t offset) | |||
3344 | /* Invalidates all but currently playing track. */ | 3344 | /* Invalidates all but currently playing track. */ |
3345 | static void audio_invalidate_tracks(void) | 3345 | static void audio_invalidate_tracks(void) |
3346 | { | 3346 | { |
3347 | if (audio_have_tracks()) { | 3347 | if (audio_have_tracks()) |
3348 | { | ||
3348 | last_peek_offset = 0; | 3349 | last_peek_offset = 0; |
3349 | |||
3350 | playlist_end = false; | 3350 | playlist_end = false; |
3351 | track_widx = track_ridx; | 3351 | track_widx = track_ridx; |
3352 | |||
3352 | /* Mark all other entries null (also buffered wrong metadata). */ | 3353 | /* Mark all other entries null (also buffered wrong metadata). */ |
3353 | audio_clear_track_entries(true); | 3354 | audio_clear_track_entries(true); |
3354 | 3355 | ||
@@ -3366,7 +3367,10 @@ static void audio_new_playlist(void) | |||
3366 | { | 3367 | { |
3367 | /* Prepare to start a new fill from the beginning of the playlist */ | 3368 | /* Prepare to start a new fill from the beginning of the playlist */ |
3368 | last_peek_offset = -1; | 3369 | last_peek_offset = -1; |
3369 | if (audio_have_tracks()) { | 3370 | if (audio_have_tracks()) |
3371 | { | ||
3372 | if (paused) | ||
3373 | skipped_during_pause = true; | ||
3370 | playlist_end = false; | 3374 | playlist_end = false; |
3371 | track_widx = track_ridx; | 3375 | track_widx = track_ridx; |
3372 | audio_clear_track_entries(true); | 3376 | audio_clear_track_entries(true); |
@@ -3619,7 +3623,7 @@ static void audio_thread(void) | |||
3619 | audio_stop_playback(); | 3623 | audio_stop_playback(); |
3620 | audio_play_start((size_t)ev.data); | 3624 | audio_play_start((size_t)ev.data); |
3621 | } | 3625 | } |
3622 | break ; | 3626 | break; |
3623 | 3627 | ||
3624 | case Q_AUDIO_STOP: | 3628 | case Q_AUDIO_STOP: |
3625 | LOGFQUEUE("audio < Q_AUDIO_STOP"); | 3629 | LOGFQUEUE("audio < Q_AUDIO_STOP"); |
@@ -3627,7 +3631,7 @@ static void audio_thread(void) | |||
3627 | audio_stop_playback(); | 3631 | audio_stop_playback(); |
3628 | if (ev.data != 0) | 3632 | if (ev.data != 0) |
3629 | queue_clear(&audio_queue); | 3633 | queue_clear(&audio_queue); |
3630 | break ; | 3634 | break; |
3631 | 3635 | ||
3632 | case Q_AUDIO_PAUSE: | 3636 | case Q_AUDIO_PAUSE: |
3633 | LOGFQUEUE("audio < Q_AUDIO_PAUSE"); | 3637 | LOGFQUEUE("audio < Q_AUDIO_PAUSE"); |
@@ -3638,7 +3642,7 @@ static void audio_thread(void) | |||
3638 | break; | 3642 | break; |
3639 | pcmbuf_pause((bool)ev.data); | 3643 | pcmbuf_pause((bool)ev.data); |
3640 | paused = (bool)ev.data; | 3644 | paused = (bool)ev.data; |
3641 | break ; | 3645 | break; |
3642 | 3646 | ||
3643 | case Q_AUDIO_SKIP: | 3647 | case Q_AUDIO_SKIP: |
3644 | LOGFQUEUE("audio < Q_AUDIO_SKIP"); | 3648 | LOGFQUEUE("audio < Q_AUDIO_SKIP"); |
@@ -3655,9 +3659,9 @@ static void audio_thread(void) | |||
3655 | case Q_AUDIO_FF_REWIND: | 3659 | case Q_AUDIO_FF_REWIND: |
3656 | LOGFQUEUE("audio < Q_AUDIO_FF_REWIND"); | 3660 | LOGFQUEUE("audio < Q_AUDIO_FF_REWIND"); |
3657 | if (!playing) | 3661 | if (!playing) |
3658 | break ; | 3662 | break; |
3659 | ci.seek_time = (long)ev.data+1; | 3663 | ci.seek_time = (long)ev.data+1; |
3660 | break ; | 3664 | break; |
3661 | 3665 | ||
3662 | case Q_AUDIO_REBUFFER_SEEK: | 3666 | case Q_AUDIO_REBUFFER_SEEK: |
3663 | LOGFQUEUE("audio < Q_AUDIO_REBUFFER_SEEK"); | 3667 | LOGFQUEUE("audio < Q_AUDIO_REBUFFER_SEEK"); |
@@ -3678,7 +3682,7 @@ static void audio_thread(void) | |||
3678 | case Q_AUDIO_FLUSH: | 3682 | case Q_AUDIO_FLUSH: |
3679 | LOGFQUEUE("audio < Q_AUDIO_FLUSH"); | 3683 | LOGFQUEUE("audio < Q_AUDIO_FLUSH"); |
3680 | audio_invalidate_tracks(); | 3684 | audio_invalidate_tracks(); |
3681 | break ; | 3685 | break; |
3682 | 3686 | ||
3683 | case Q_AUDIO_TRACK_CHANGED: | 3687 | case Q_AUDIO_TRACK_CHANGED: |
3684 | LOGFQUEUE("audio < Q_AUDIO_TRACK_CHANGED"); | 3688 | LOGFQUEUE("audio < Q_AUDIO_TRACK_CHANGED"); |
@@ -3686,7 +3690,7 @@ static void audio_thread(void) | |||
3686 | track_changed_callback(&CUR_TI->id3); | 3690 | track_changed_callback(&CUR_TI->id3); |
3687 | track_changed = true; | 3691 | track_changed = true; |
3688 | playlist_update_resume_info(audio_current_track()); | 3692 | playlist_update_resume_info(audio_current_track()); |
3689 | break ; | 3693 | break; |
3690 | 3694 | ||
3691 | #ifndef SIMULATOR | 3695 | #ifndef SIMULATOR |
3692 | case SYS_USB_CONNECTED: | 3696 | case SYS_USB_CONNECTED: |
@@ -3695,7 +3699,7 @@ static void audio_thread(void) | |||
3695 | audio_stop_playback(); | 3699 | audio_stop_playback(); |
3696 | usb_acknowledge(SYS_USB_CONNECTED_ACK); | 3700 | usb_acknowledge(SYS_USB_CONNECTED_ACK); |
3697 | usb_wait_for_disconnect(&audio_queue); | 3701 | usb_wait_for_disconnect(&audio_queue); |
3698 | break ; | 3702 | break; |
3699 | #endif | 3703 | #endif |
3700 | 3704 | ||
3701 | case SYS_TIMEOUT: | 3705 | case SYS_TIMEOUT: |