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.tar.gz rockbox-2054627caa7f71c564ce35b4525b6281fcd2cc39.zip |
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 0f76666c1e..91f85f9408 100644 --- a/apps/playback.c +++ b/apps/playback.c | |||
@@ -150,6 +150,8 @@ enum { | |||
150 | Q_ENCODER_LOAD_DISK, | 150 | Q_ENCODER_LOAD_DISK, |
151 | Q_ENCODER_RECORD, | 151 | Q_ENCODER_RECORD, |
152 | #endif | 152 | #endif |
153 | |||
154 | Q_CODEC_DO_CALLBACK, | ||
153 | }; | 155 | }; |
154 | 156 | ||
155 | enum filling_state { | 157 | enum filling_state { |
@@ -1303,6 +1305,13 @@ static void codec_thread(void) | |||
1303 | status = codec_load_buf(CUR_TI->codec_hid, &ci); | 1305 | status = codec_load_buf(CUR_TI->codec_hid, &ci); |
1304 | break; | 1306 | break; |
1305 | 1307 | ||
1308 | case Q_CODEC_DO_CALLBACK: | ||
1309 | LOGFQUEUE("codec < Q_CODEC_DO_CALLBACK"); | ||
1310 | queue_reply(&codec_queue, 1); | ||
1311 | if ((void*)ev.data != NULL) | ||
1312 | ((void (*)(void))ev.data)(); | ||
1313 | break; | ||
1314 | |||
1306 | #ifdef AUDIO_HAVE_RECORDING | 1315 | #ifdef AUDIO_HAVE_RECORDING |
1307 | case Q_ENCODER_LOAD_DISK: | 1316 | case Q_ENCODER_LOAD_DISK: |
1308 | LOGFQUEUE("codec < Q_ENCODER_LOAD_DISK"); | 1317 | LOGFQUEUE("codec < Q_ENCODER_LOAD_DISK"); |
@@ -1419,6 +1428,18 @@ static void codec_thread(void) | |||
1419 | } | 1428 | } |
1420 | } | 1429 | } |
1421 | 1430 | ||
1431 | /* Borrow the codec thread and return the ID */ | ||
1432 | void codec_thread_do_callback(void (*fn)(void), unsigned int *id) | ||
1433 | { | ||
1434 | /* Set id before telling thread to call something; it may be | ||
1435 | * needed before this function returns. */ | ||
1436 | if (id != NULL) | ||
1437 | *id = codec_thread_id; | ||
1438 | |||
1439 | /* Codec thread will signal just before entering callback */ | ||
1440 | LOGFQUEUE("codec >| Q_CODEC_DO_CALLBACK"); | ||
1441 | queue_send(&codec_queue, Q_CODEC_DO_CALLBACK, (intptr_t)fn); | ||
1442 | } | ||
1422 | 1443 | ||
1423 | /* --- Buffering callbacks --- */ | 1444 | /* --- Buffering callbacks --- */ |
1424 | 1445 | ||