summaryrefslogtreecommitdiff
path: root/apps/playback.c
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2005-08-21 18:12:31 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2005-08-21 18:12:31 +0000
commit8a7d104a359aec7776712cb366d1d92e0f0328a8 (patch)
tree0e90f0cf6300cfa4cc14b258f379920626b50d1c /apps/playback.c
parent6e291fdcdffbccc4663fd90462a4f9fce107aed1 (diff)
downloadrockbox-8a7d104a359aec7776712cb366d1d92e0f0328a8.tar.gz
rockbox-8a7d104a359aec7776712cb366d1d92e0f0328a8.zip
Now codecs will do the buffer flushing after seeking as they find it
necessary. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7369 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/playback.c')
-rw-r--r--apps/playback.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/apps/playback.c b/apps/playback.c
index e601233636..b80c33f3c4 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -539,7 +539,6 @@ static bool rebuffer_and_seek(int newpos)
539 ci.curpos = newpos; 539 ci.curpos = newpos;
540 cur_ti->available = 0; 540 cur_ti->available = 0;
541 lseek(current_fd, newpos, SEEK_SET); 541 lseek(current_fd, newpos, SEEK_SET);
542 pcmbuf_flush_audio();
543 542
544 mutex_unlock(&mutex_bufferfill); 543 mutex_unlock(&mutex_bufferfill);
545 544
@@ -602,6 +601,11 @@ off_t codec_mp3_get_filepos_callback(int newtime)
602 return newpos; 601 return newpos;
603} 602}
604 603
604void codec_seek_complete_callback(void)
605{
606 pcmbuf_flush_audio();
607}
608
605bool codec_seek_buffer_callback(off_t newpos) 609bool codec_seek_buffer_callback(off_t newpos)
606{ 610{
607 int difference; 611 int difference;
@@ -620,8 +624,6 @@ bool codec_seek_buffer_callback(off_t newpos)
620 if (difference >= 0) { 624 if (difference >= 0) {
621 logf("seek: +%d", difference); 625 logf("seek: +%d", difference);
622 codec_advance_buffer_callback(difference); 626 codec_advance_buffer_callback(difference);
623 if (!pcmbuf_is_crossfade_active())
624 pcmbuf_play_stop();
625 return true; 627 return true;
626 } 628 }
627 629
@@ -642,8 +644,6 @@ bool codec_seek_buffer_callback(off_t newpos)
642 if (buf_ridx < 0) 644 if (buf_ridx < 0)
643 buf_ridx = filebuflen + buf_ridx; 645 buf_ridx = filebuflen + buf_ridx;
644 ci.curpos -= difference; 646 ci.curpos -= difference;
645 if (!pcmbuf_is_crossfade_active())
646 pcmbuf_play_stop();
647 647
648 return true; 648 return true;
649} 649}
@@ -1939,8 +1939,8 @@ void audio_ff_rewind(int newpos)
1939{ 1939{
1940 logf("rewind: %d", newpos); 1940 logf("rewind: %d", newpos);
1941 if (playing) { 1941 if (playing) {
1942 ci.seek_time = newpos+1;
1943 pcmbuf_play_stop(); 1942 pcmbuf_play_stop();
1943 ci.seek_time = newpos+1;
1944 paused = false; 1944 paused = false;
1945 } 1945 }
1946} 1946}
@@ -2215,6 +2215,7 @@ void audio_init(void)
2215 ci.request_next_track = codec_request_next_track_callback; 2215 ci.request_next_track = codec_request_next_track_callback;
2216 ci.mp3_get_filepos = codec_mp3_get_filepos_callback; 2216 ci.mp3_get_filepos = codec_mp3_get_filepos_callback;
2217 ci.seek_buffer = codec_seek_buffer_callback; 2217 ci.seek_buffer = codec_seek_buffer_callback;
2218 ci.seek_complete = codec_seek_complete_callback;
2218 ci.set_elapsed = codec_set_elapsed_callback; 2219 ci.set_elapsed = codec_set_elapsed_callback;
2219 ci.set_offset = codec_set_offset_callback; 2220 ci.set_offset = codec_set_offset_callback;
2220 ci.configure = codec_configure_callback; 2221 ci.configure = codec_configure_callback;