- void *session;
- QMetaObject::invokeMethod((QObject*)cls, "audioInit", Qt::BlockingQueuedConnection,
- Q_ARG(void*, (void*)&session),
+ audio_session_t *audio_session = 0;
+
+ audio_session = (audio_session_t *)calloc(1, sizeof(audio_session_t));
+ audio_session->cb_thread = new QThread();
+ audio_session->cb_thread->start();
+
+ /* This whole hack is required because QAudioOutput
+ * needs to be created in a QThread, threads created
+ * outside Qt are not allowed (they have no eventloop) */
+ audio_session->cb_handler = new RaopCallbackHandler();
+ audio_session->cb_handler->moveToThread(audio_session->cb_thread);
+ audio_session->cb_handler->init((RaopCallbacks *)cls);
+
+ QMetaObject::invokeMethod(audio_session->cb_handler, "audioInit",
+ Qt::BlockingQueuedConnection,
+ Q_ARG(void*, (void*)&audio_session->cb_session),