summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2005-09-10 21:02:42 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2005-09-10 21:02:42 +0000
commitacdcdb027861fb302e570249b024714722937628 (patch)
tree144ecaa8be97c18f162b271def6fdc239bc2e5e3 /apps
parentec9b202a921996945ebd42a7edba1326754d7737 (diff)
downloadrockbox-acdcdb027861fb302e570249b024714722937628.tar.gz
rockbox-acdcdb027861fb302e570249b024714722937628.zip
iRiver: Correctly keeping playback paused when skipping tracks.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7506 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/playback.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/apps/playback.c b/apps/playback.c
index 1677e3138b..f05cb9ef8a 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -280,6 +280,15 @@ bool codec_pcmbuf_insert_split_callback(void *ch1, void *ch2,
280 src[0] = ch1; 280 src[0] = ch1;
281 src[1] = ch2; 281 src[1] = ch2;
282 282
283 while (paused)
284 {
285 if (pcm_is_playing())
286 pcm_play_pause(false);
287 sleep(1);
288 if (ci.stop_codec || ci.reload_codec || ci.seek_time)
289 return true;
290 }
291
283 if (dsp_stereo_mode() == STEREO_NONINTERLEAVED) 292 if (dsp_stereo_mode() == STEREO_NONINTERLEAVED)
284 { 293 {
285 length *= 2; /* Length is per channel */ 294 length *= 2; /* Length is per channel */
@@ -738,7 +747,7 @@ void codec_track_changed(void)
738void yield_codecs(void) 747void yield_codecs(void)
739{ 748{
740 yield(); 749 yield();
741 if (!pcm_is_playing()) 750 if (!pcm_is_playing() && !paused)
742 sleep(5); 751 sleep(5);
743 while ((pcmbuf_is_crossfade_active() || pcmbuf_is_lowdata()) 752 while ((pcmbuf_is_crossfade_active() || pcmbuf_is_lowdata())
744 && !ci.stop_codec && playing && queue_empty(&audio_queue) 753 && !ci.stop_codec && playing && queue_empty(&audio_queue)
@@ -1416,7 +1425,6 @@ void audio_update_trackinfo(void)
1416 1425
1417static void audio_stop_playback(void) 1426static void audio_stop_playback(void)
1418{ 1427{
1419 paused = false;
1420 playing = false; 1428 playing = false;
1421 filling = false; 1429 filling = false;
1422 ci.stop_codec = true; 1430 ci.stop_codec = true;
@@ -1427,7 +1435,7 @@ static void audio_stop_playback(void)
1427 pcmbuf_play_stop(); 1435 pcmbuf_play_stop();
1428 while (audio_codec_loaded) 1436 while (audio_codec_loaded)
1429 yield(); 1437 yield();
1430 pcm_play_pause(true); 1438
1431 track_count = 0; 1439 track_count = 0;
1432 /* Mark all entries null. */ 1440 /* Mark all entries null. */
1433 audio_clear_track_entries(false); 1441 audio_clear_track_entries(false);
@@ -1643,8 +1651,6 @@ void audio_thread(void)
1643 1651
1644 logf("starting..."); 1652 logf("starting...");
1645 playing = true; 1653 playing = true;
1646 paused = false;
1647 pcm_play_pause(true);
1648 ci.stop_codec = true; 1654 ci.stop_codec = true;
1649 ci.reload_codec = false; 1655 ci.reload_codec = false;
1650 ci.seek_time = 0; 1656 ci.seek_time = 0;
@@ -1663,7 +1669,9 @@ void audio_thread(void)
1663 1669
1664 case AUDIO_PAUSE: 1670 case AUDIO_PAUSE:
1665 logf("audio_pause"); 1671 logf("audio_pause");
1666 pcm_play_pause(false); 1672 /* We will pause the pcm playback in audiobuffer insert function
1673 to prevent a loop inside the pcm buffer. */
1674 // pcm_play_pause(false);
1667 paused = true; 1675 paused = true;
1668 break ; 1676 break ;
1669 1677
@@ -1921,6 +1929,8 @@ void audio_play(int offset)
1921{ 1929{
1922 logf("audio_play"); 1930 logf("audio_play");
1923 last_index = -1; 1931 last_index = -1;
1932 paused = false;
1933 pcm_play_pause(true);
1924 queue_post(&audio_queue, AUDIO_PLAY, (void *)offset); 1934 queue_post(&audio_queue, AUDIO_PLAY, (void *)offset);
1925} 1935}
1926 1936
@@ -1963,7 +1973,6 @@ void audio_ff_rewind(int newpos)
1963 if (playing) { 1973 if (playing) {
1964 pcmbuf_play_stop(); 1974 pcmbuf_play_stop();
1965 ci.seek_time = newpos+1; 1975 ci.seek_time = newpos+1;
1966 paused = false;
1967 } 1976 }
1968} 1977}
1969 1978