diff options
author | Miika Pekkarinen <miipekk@ihme.org> | 2005-07-02 17:03:19 +0000 |
---|---|---|
committer | Miika Pekkarinen <miipekk@ihme.org> | 2005-07-02 17:03:19 +0000 |
commit | 9c70b1b562ce9e5047f814f8613f5cda4f436d14 (patch) | |
tree | b939f1d9703ac45cb6b87623c84f742dc3853f8f /apps | |
parent | d54811fe22c274ed31d897864ac0a33349f460e0 (diff) | |
download | rockbox-9c70b1b562ce9e5047f814f8613f5cda4f436d14.tar.gz rockbox-9c70b1b562ce9e5047f814f8613f5cda4f436d14.zip |
Make sure we stop the playback the right way.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6987 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r-- | apps/playback.c | 50 |
1 files changed, 22 insertions, 28 deletions
diff --git a/apps/playback.c b/apps/playback.c index 3a5eeb328f..291f45eea3 100644 --- a/apps/playback.c +++ b/apps/playback.c | |||
@@ -1121,6 +1121,23 @@ void audio_update_trackinfo(void) | |||
1121 | audiobuffer_add_event(codec_track_changed); | 1121 | audiobuffer_add_event(codec_track_changed); |
1122 | } | 1122 | } |
1123 | 1123 | ||
1124 | static void audio_stop_playback(void) | ||
1125 | { | ||
1126 | paused = false; | ||
1127 | playing = false; | ||
1128 | ci.stop_codec = true; | ||
1129 | if (current_fd >= 0) { | ||
1130 | close(current_fd); | ||
1131 | current_fd = -1; | ||
1132 | } | ||
1133 | pcm_play_stop(); | ||
1134 | pcm_play_pause(true); | ||
1135 | track_count = 0; | ||
1136 | filling = true; | ||
1137 | audio_clear_track_entries(); | ||
1138 | filling = false; | ||
1139 | } | ||
1140 | |||
1124 | void audio_change_track(void) | 1141 | void audio_change_track(void) |
1125 | { | 1142 | { |
1126 | logf("change track"); | 1143 | logf("change track"); |
@@ -1128,9 +1145,7 @@ void audio_change_track(void) | |||
1128 | logf("No more tracks"); | 1145 | logf("No more tracks"); |
1129 | while (pcm_is_playing()) | 1146 | while (pcm_is_playing()) |
1130 | yield(); | 1147 | yield(); |
1131 | track_count = 0; | 1148 | audio_stop_playback(); |
1132 | audio_clear_track_entries(); | ||
1133 | playing = false; | ||
1134 | return ; | 1149 | return ; |
1135 | } | 1150 | } |
1136 | 1151 | ||
@@ -1257,18 +1272,7 @@ void audio_thread(void) | |||
1257 | break ; | 1272 | break ; |
1258 | 1273 | ||
1259 | case AUDIO_STOP: | 1274 | case AUDIO_STOP: |
1260 | paused = false; | 1275 | audio_stop_playback(); |
1261 | filling = false; | ||
1262 | playing = false; | ||
1263 | ci.stop_codec = true; | ||
1264 | if (current_fd >= 0) { | ||
1265 | close(current_fd); | ||
1266 | current_fd = -1; | ||
1267 | } | ||
1268 | pcm_play_stop(); | ||
1269 | pcm_play_pause(true); | ||
1270 | track_count = 0; | ||
1271 | audio_clear_track_entries(); | ||
1272 | break ; | 1276 | break ; |
1273 | 1277 | ||
1274 | case AUDIO_PAUSE: | 1278 | case AUDIO_PAUSE: |
@@ -1296,14 +1300,8 @@ void audio_thread(void) | |||
1296 | 1300 | ||
1297 | #ifndef SIMULATOR | 1301 | #ifndef SIMULATOR |
1298 | case SYS_USB_CONNECTED: | 1302 | case SYS_USB_CONNECTED: |
1299 | track_count = 0; | ||
1300 | audio_clear_track_entries(); | ||
1301 | playing = false; | ||
1302 | filling = false; | ||
1303 | ci.stop_codec = true; | ||
1304 | logf("USB Connection"); | 1303 | logf("USB Connection"); |
1305 | pcm_play_stop(); | 1304 | audio_stop_playback(); |
1306 | pcm_play_pause(true); | ||
1307 | usb_acknowledge(SYS_USB_CONNECTED_ACK); | 1305 | usb_acknowledge(SYS_USB_CONNECTED_ACK); |
1308 | usb_wait_for_disconnect(&audio_queue); | 1306 | usb_wait_for_disconnect(&audio_queue); |
1309 | break ; | 1307 | break ; |
@@ -1334,9 +1332,7 @@ void codec_thread(void) | |||
1334 | codecsize = cur_ti->codecsize; | 1332 | codecsize = cur_ti->codecsize; |
1335 | if (codecsize == 0) { | 1333 | if (codecsize == 0) { |
1336 | logf("Codec slot is empty!"); | 1334 | logf("Codec slot is empty!"); |
1337 | track_count = 0; | 1335 | audio_stop_playback(); |
1338 | audio_clear_track_entries(); | ||
1339 | playing = false; | ||
1340 | break ; | 1336 | break ; |
1341 | } | 1337 | } |
1342 | 1338 | ||
@@ -1363,9 +1359,7 @@ void codec_thread(void) | |||
1363 | if (status != CODEC_OK) { | 1359 | if (status != CODEC_OK) { |
1364 | logf("Codec failure"); | 1360 | logf("Codec failure"); |
1365 | splash(HZ*2, true, "Codec failure"); | 1361 | splash(HZ*2, true, "Codec failure"); |
1366 | track_count = 0; | 1362 | audio_stop_playback(); |
1367 | audio_clear_track_entries(); | ||
1368 | playing = false; | ||
1369 | } else { | 1363 | } else { |
1370 | logf("Codec finished"); | 1364 | logf("Codec finished"); |
1371 | } | 1365 | } |