1
0
Fork 0
forked from len0rd/rockbox

Make sure we stop the playback the right way.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6987 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Miika Pekkarinen 2005-07-02 17:03:19 +00:00
parent d54811fe22
commit 9c70b1b562

View file

@ -1121,6 +1121,23 @@ void audio_update_trackinfo(void)
audiobuffer_add_event(codec_track_changed); audiobuffer_add_event(codec_track_changed);
} }
static void audio_stop_playback(void)
{
paused = false;
playing = false;
ci.stop_codec = true;
if (current_fd >= 0) {
close(current_fd);
current_fd = -1;
}
pcm_play_stop();
pcm_play_pause(true);
track_count = 0;
filling = true;
audio_clear_track_entries();
filling = false;
}
void audio_change_track(void) void audio_change_track(void)
{ {
logf("change track"); logf("change track");
@ -1128,9 +1145,7 @@ void audio_change_track(void)
logf("No more tracks"); logf("No more tracks");
while (pcm_is_playing()) while (pcm_is_playing())
yield(); yield();
track_count = 0; audio_stop_playback();
audio_clear_track_entries();
playing = false;
return ; return ;
} }
@ -1257,18 +1272,7 @@ void audio_thread(void)
break ; break ;
case AUDIO_STOP: case AUDIO_STOP:
paused = false; audio_stop_playback();
filling = false;
playing = false;
ci.stop_codec = true;
if (current_fd >= 0) {
close(current_fd);
current_fd = -1;
}
pcm_play_stop();
pcm_play_pause(true);
track_count = 0;
audio_clear_track_entries();
break ; break ;
case AUDIO_PAUSE: case AUDIO_PAUSE:
@ -1296,14 +1300,8 @@ void audio_thread(void)
#ifndef SIMULATOR #ifndef SIMULATOR
case SYS_USB_CONNECTED: case SYS_USB_CONNECTED:
track_count = 0;
audio_clear_track_entries();
playing = false;
filling = false;
ci.stop_codec = true;
logf("USB Connection"); logf("USB Connection");
pcm_play_stop(); audio_stop_playback();
pcm_play_pause(true);
usb_acknowledge(SYS_USB_CONNECTED_ACK); usb_acknowledge(SYS_USB_CONNECTED_ACK);
usb_wait_for_disconnect(&audio_queue); usb_wait_for_disconnect(&audio_queue);
break ; break ;
@ -1334,9 +1332,7 @@ void codec_thread(void)
codecsize = cur_ti->codecsize; codecsize = cur_ti->codecsize;
if (codecsize == 0) { if (codecsize == 0) {
logf("Codec slot is empty!"); logf("Codec slot is empty!");
track_count = 0; audio_stop_playback();
audio_clear_track_entries();
playing = false;
break ; break ;
} }
@ -1363,9 +1359,7 @@ void codec_thread(void)
if (status != CODEC_OK) { if (status != CODEC_OK) {
logf("Codec failure"); logf("Codec failure");
splash(HZ*2, true, "Codec failure"); splash(HZ*2, true, "Codec failure");
track_count = 0; audio_stop_playback();
audio_clear_track_entries();
playing = false;
} else { } else {
logf("Codec finished"); logf("Codec finished");
} }