#pragma once #include #include #include #include #include #include #include #include #include "core.hpp" #include "registry.hpp" namespace qs::service::pipewire { class PwDevice; constexpr const char TYPE_INTERFACE_Device[] = PW_TYPE_INTERFACE_Device; // NOLINT class PwDevice: public PwBindable { Q_OBJECT; public: void bindHooks() override; void unbindHooks() override; bool setVolumes(qint32 routeDevice, const QVector& volumes); bool setMuted(qint32 routeDevice, bool muted); private slots: void polled(); private: static const pw_device_events EVENTS; static void onInfo(void* data, const pw_device_info* info); static void onParam(void* data, qint32 seq, quint32 id, quint32 index, quint32 next, const spa_pod* param); QHash routeDeviceIndexes; QHash stagingIndexes; void addDeviceIndexPairs(const spa_pod* param); bool setRouteProps(qint32 routeDevice, const std::function& propsCallback); SpaHook listener; }; } // namespace qs::service::pipewire