33 static constexpr struct pw_node_events nodeEvents{
34 .version = PW_VERSION_NODE_EVENTS,
35 .info = NodeEventListener::onInfo,
36 .param = NodeEventListener::onParam,
39 int status = pw_node_add_listener(m_node.get(), &m_listenerHook, &nodeEvents,
this);
41 qFatal() <<
"Failed to add listener: " << make_error_code(-status).message();
71 self->m_handler.paramHandler(seq, id, index, next, param);
96 coreEvents.done = [](
void *self, uint32_t id,
int seq) {
97 Q_ASSERT(QAudioContextManager::isInPwThreadLoop());
98 CoreEventDoneListener *listener =
reinterpret_cast<CoreEventDoneListener *>(self);
99 if (id == PW_ID_CORE && listener->m_seqnum == seq) {
100 listener->m_seqnum = -1;
101 if (
auto handler = std::exchange(listener->m_handler, {}))
108 std::function<
void()> handler)
110 m_handler = std::move(handler);
112 return QAudioContextManager::withEventLoopLock([&]() -> q23::expected<
void,
int> {
113 int status = pw_core_add_listener(coreConnection, &m_listenerHook, &coreEvents,
this);
115 qFatal() <<
"pw_core_add_listener failed" << make_error_code(-status).message();
116 return q23::unexpected(status);
119 Q_ASSERT(m_seqnum == -1);
120 status = pw_core_sync(coreConnection, PW_ID_CORE, 0);
122 return q23::unexpected(status);