diff options
| author | Michael Sevakis <jethead71@rockbox.org> | 2009-01-05 10:31:19 +0000 |
|---|---|---|
| committer | Michael Sevakis <jethead71@rockbox.org> | 2009-01-05 10:31:19 +0000 |
| commit | 2054627caa7f71c564ce35b4525b6281fcd2cc39 (patch) | |
| tree | 2b0aa3b9b8888c4746b75d4750d90f79552159ee /apps/playback.c | |
| parent | 45aa9a22f9a3e08505cc2f2999459d249356ed9c (diff) | |
| download | rockbox-2054627caa7f71c564ce35b4525b6281fcd2cc39.zip rockbox-2054627caa7f71c564ce35b4525b6281fcd2cc39.tar.gz rockbox-2054627caa7f71c564ce35b4525b6281fcd2cc39.tar.bz2 rockbox-2054627caa7f71c564ce35b4525b6281fcd2cc39.tar.xz | |
Have the codec thread do callbacks instead of messing with the stack which is much simpler and safer. Remove threads array from plugin API since it now serves no purpose. Up minimum API version and sort.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19684 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/playback.c')
| -rw-r--r-- | apps/playback.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/apps/playback.c b/apps/playback.c index 0f76666..91f85f9 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -150,6 +150,8 @@ enum { Q_ENCODER_LOAD_DISK, Q_ENCODER_RECORD, #endif + + Q_CODEC_DO_CALLBACK, }; enum filling_state { @@ -1303,6 +1305,13 @@ static void codec_thread(void) status = codec_load_buf(CUR_TI->codec_hid, &ci); break; + case Q_CODEC_DO_CALLBACK: + LOGFQUEUE("codec < Q_CODEC_DO_CALLBACK"); + queue_reply(&codec_queue, 1); + if ((void*)ev.data != NULL) + ((void (*)(void))ev.data)(); + break; + #ifdef AUDIO_HAVE_RECORDING case Q_ENCODER_LOAD_DISK: LOGFQUEUE("codec < Q_ENCODER_LOAD_DISK"); @@ -1419,6 +1428,18 @@ static void codec_thread(void) } } +/* Borrow the codec thread and return the ID */ +void codec_thread_do_callback(void (*fn)(void), unsigned int *id) +{ + /* Set id before telling thread to call something; it may be + * needed before this function returns. */ + if (id != NULL) + *id = codec_thread_id; + + /* Codec thread will signal just before entering callback */ + LOGFQUEUE("codec >| Q_CODEC_DO_CALLBACK"); + queue_send(&codec_queue, Q_CODEC_DO_CALLBACK, (intptr_t)fn); +} /* --- Buffering callbacks --- */ |