summaryrefslogtreecommitdiff
path: root/apps/playback.c
diff options
context:
space:
mode:
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