#pragma once #include #include #include #include #include #include #include #include #include #include #include namespace qs::service::pipewire { class PwCore: public QObject { Q_OBJECT; public: explicit PwCore(QObject* parent = nullptr); ~PwCore() override; Q_DISABLE_COPY_MOVE(PwCore); [[nodiscard]] bool isValid() const; pw_loop* loop = nullptr; pw_context* context = nullptr; pw_core* core = nullptr; private slots: void poll() const; private: QSocketNotifier notifier; }; template class PwObject { public: explicit PwObject(T* object = nullptr): object(object) {} ~PwObject() { pw_proxy_destroy(reinterpret_cast(this->object)); // NOLINT } Q_DISABLE_COPY_MOVE(PwObject); T* object; }; class SpaHook { public: explicit SpaHook(); void remove(); spa_hook hook; }; } // namespace qs::service::pipewire