summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2005-12-01 19:38:08 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2005-12-01 19:38:08 +0000
commit59e0ccb278c11d43502b455662f4f40726cb8650 (patch)
tree13e3f97fb6935c709350cb3156b37ac577c21e93
parent6a4bfb5dcf03d78718436045b8629454b6f2d282 (diff)
downloadrockbox-59e0ccb278c11d43502b455662f4f40726cb8650.tar.gz
rockbox-59e0ccb278c11d43502b455662f4f40726cb8650.zip
Fixed a playback problem when seeking "too early".
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8117 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/playback.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/apps/playback.c b/apps/playback.c
index 5ac70d17f7..893a824742 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -583,7 +583,7 @@ static bool rebuffer_and_seek(int newpos)
583 mutex_unlock(&mutex_bufferfill); 583 mutex_unlock(&mutex_bufferfill);
584 584
585 while (cur_ti->available == 0 && cur_ti->filerem > 0) { 585 while (cur_ti->available == 0 && cur_ti->filerem > 0) {
586 yield(); 586 sleep(1);
587 if (ci.stop_codec || ci.reload_codec || !queue_empty(&audio_queue)) 587 if (ci.stop_codec || ci.reload_codec || !queue_empty(&audio_queue))
588 return false; 588 return false;
589 } 589 }
@@ -604,6 +604,9 @@ void codec_advance_buffer_callback(long amount)
604 604
605 if (amount > cur_ti->available + cur_ti->filerem) 605 if (amount > cur_ti->available + cur_ti->filerem)
606 amount = cur_ti->available + cur_ti->filerem; 606 amount = cur_ti->available + cur_ti->filerem;
607
608 while (amount > cur_ti->available && filling)
609 sleep(1);
607 610
608 if (amount > cur_ti->available) { 611 if (amount > cur_ti->available) {
609 if (!rebuffer_and_seek(ci.curpos + amount)) 612 if (!rebuffer_and_seek(ci.curpos + amount))
@@ -1779,6 +1782,12 @@ void audio_thread(void)
1779 initiate_track_change(-1); 1782 initiate_track_change(-1);
1780 break; 1783 break;
1781 1784
1785 case AUDIO_FF_REWIND:
1786 if (!playing)
1787 break ;
1788 pcmbuf_play_stop();
1789 ci.seek_time = (int)ev.data+1;
1790 break ;
1782 1791
1783 case AUDIO_DIR_NEXT: 1792 case AUDIO_DIR_NEXT:
1784 logf("audio_dir_next"); 1793 logf("audio_dir_next");
@@ -2113,10 +2122,7 @@ void audio_prev_dir(void)
2113void audio_ff_rewind(int newpos) 2122void audio_ff_rewind(int newpos)
2114{ 2123{
2115 logf("rewind: %d", newpos); 2124 logf("rewind: %d", newpos);
2116 if (playing) { 2125 queue_post(&audio_queue, AUDIO_FF_REWIND, (int *)newpos);
2117 pcmbuf_play_stop();
2118 ci.seek_time = newpos+1;
2119 }
2120} 2126}
2121 2127
2122void audio_flush_and_reload_tracks(void) 2128void audio_flush_and_reload_tracks(void)