summaryrefslogtreecommitdiff
path: root/apps/playback.c
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2009-01-05 10:31:19 +0000
committerMichael Sevakis <jethead71@rockbox.org>2009-01-05 10:31:19 +0000
commit2054627caa7f71c564ce35b4525b6281fcd2cc39 (patch)
tree2b0aa3b9b8888c4746b75d4750d90f79552159ee /apps/playback.c
parent45aa9a22f9a3e08505cc2f2999459d249356ed9c (diff)
downloadrockbox-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.c21
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
155enum filling_state { 157enum 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 */
1432void 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