diff options
author | Miika Pekkarinen <miipekk@ihme.org> | 2005-12-01 19:38:08 +0000 |
---|---|---|
committer | Miika Pekkarinen <miipekk@ihme.org> | 2005-12-01 19:38:08 +0000 |
commit | 59e0ccb278c11d43502b455662f4f40726cb8650 (patch) | |
tree | 13e3f97fb6935c709350cb3156b37ac577c21e93 | |
parent | 6a4bfb5dcf03d78718436045b8629454b6f2d282 (diff) | |
download | rockbox-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.c | 16 |
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) | |||
2113 | void audio_ff_rewind(int newpos) | 2122 | void 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 | ||
2122 | void audio_flush_and_reload_tracks(void) | 2128 | void audio_flush_and_reload_tracks(void) |