summaryrefslogtreecommitdiff
path: root/apps/playback.c
diff options
context:
space:
mode:
authorNicolas Pennequin <nicolas.pennequin@free.fr>2008-04-03 17:51:53 +0000
committerNicolas Pennequin <nicolas.pennequin@free.fr>2008-04-03 17:51:53 +0000
commit33f522de8b36985401c1a17831b5ef8501039953 (patch)
treefe87d8b5e095f73fff04bbca133afe31d8787734 /apps/playback.c
parent81efd6c36d7f424b1c8e6e36f799fe1a047d8f38 (diff)
downloadrockbox-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.c69
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;