diff options
| author | Nicolas Pennequin <nicolas.pennequin@free.fr> | 2008-04-03 17:51:53 +0000 |
|---|---|---|
| committer | Nicolas Pennequin <nicolas.pennequin@free.fr> | 2008-04-03 17:51:53 +0000 |
| commit | 33f522de8b36985401c1a17831b5ef8501039953 (patch) | |
| tree | fe87d8b5e095f73fff04bbca133afe31d8787734 /apps/playback.c | |
| parent | 81efd6c36d7f424b1c8e6e36f799fe1a047d8f38 (diff) | |
| download | rockbox-33f522de8b36985401c1a17831b5ef8501039953.zip rockbox-33f522de8b36985401c1a17831b5ef8501039953.tar.gz rockbox-33f522de8b36985401c1a17831b5ef8501039953.tar.bz2 rockbox-33f522de8b36985401c1a17831b5ef8501039953.tar.xz | |
Migrate the buffering code to the new events system.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16950 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/playback.c')
| -rw-r--r-- | apps/playback.c | 69 |
1 files changed, 36 insertions, 33 deletions
diff --git a/apps/playback.c b/apps/playback.c index 119e37a..1101517 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -41,6 +41,7 @@ #include "codecs.h" #include "audio.h" #include "buffering.h" +#include "events.h" #include "voice_thread.h" #include "mp3_playback.h" #include "usb.h" @@ -1386,6 +1387,34 @@ static void codec_thread(void) } +/* --- Buffering callbacks --- */ + +static void buffering_low_buffer_callback(void *data) +{ + (void)data; + logf("low buffer callback"); + + if (filling == STATE_FULL) { + /* force a refill */ + LOGFQUEUE("buffering > audio Q_AUDIO_FILL_BUFFER"); + queue_post(&audio_queue, Q_AUDIO_FILL_BUFFER, 0); + } +} + +static void buffering_handle_rebuffer_callback(void *data) +{ + (void)data; + LOGFQUEUE("audio >| audio Q_AUDIO_FLUSH"); + queue_post(&audio_queue, Q_AUDIO_FLUSH, 0); +} + +static void buffering_handle_finished_callback(int *data) +{ + logf("handle %d finished buffering", *data); + strip_tags(*data); +} + + /* --- Audio thread --- */ static bool audio_have_tracks(void) @@ -1433,36 +1462,6 @@ static void audio_update_trackinfo(void) ci.taginfo_ready = &CUR_TI->taginfo_ready; } -static void buffering_audio_callback(enum callback_event ev, int value) -{ - (void)value; - logf("buffering_audio_callback"); - - switch (ev) - { - case EVENT_BUFFER_LOW: - if (filling == STATE_FULL) { - /* force a refill */ - LOGFQUEUE("buffering > audio Q_AUDIO_FILL_BUFFER"); - queue_post(&audio_queue, Q_AUDIO_FILL_BUFFER, 0); - } - break; - - case EVENT_HANDLE_REBUFFER: - LOGFQUEUE("audio >| audio Q_AUDIO_FLUSH"); - queue_post(&audio_queue, Q_AUDIO_FLUSH, 0); - break; - - case EVENT_HANDLE_FINISHED: - logf("handle %d finished buffering", value); - strip_tags(value); - break; - - default: - break; - } -} - /* Clear tracks between write and read, non inclusive */ static void audio_clear_track_entries(void) { @@ -2062,6 +2061,8 @@ static void audio_stop_playback(void) /* TODO: Create auto bookmark too? */ prev_track_elapsed = curtrack_id3.elapsed; + + remove_event(EVENT_BUFFER_LOW, buffering_low_buffer_callback); } paused = false; @@ -2076,8 +2077,6 @@ static void audio_stop_playback(void) /* Close all tracks */ audio_release_tracks(); - unregister_buffering_callback(buffering_audio_callback); - memset(&curtrack_id3, 0, sizeof(struct mp3entry)); } @@ -2121,7 +2120,8 @@ static void audio_play_start(size_t offset) #endif audio_fill_file_buffer(true, offset); - register_buffering_callback(buffering_audio_callback); + + add_event(EVENT_BUFFER_LOW, false, buffering_low_buffer_callback); LOGFQUEUE("audio > audio Q_AUDIO_TRACK_CHANGED"); queue_post(&audio_queue, Q_AUDIO_TRACK_CHANGED, 0); @@ -2512,6 +2512,9 @@ void audio_init(void) #endif } + add_event(EVENT_HANDLE_REBUFFER, false, buffering_handle_rebuffer_callback); + add_event(EVENT_HANDLE_FINISHED, false, buffering_handle_finished_callback); + /* Probably safe to say */ audio_is_initialized = true; |