summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2005-07-02 17:03:19 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2005-07-02 17:03:19 +0000
commit9c70b1b562ce9e5047f814f8613f5cda4f436d14 (patch)
treeb939f1d9703ac45cb6b87623c84f742dc3853f8f /apps
parentd54811fe22c274ed31d897864ac0a33349f460e0 (diff)
downloadrockbox-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.c50
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
1124static 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
1124void audio_change_track(void) 1141void 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 }