kodi
PipewireRegistry.h
1 /*
2  * Copyright (C) 2010-2021 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include <map>
12 #include <memory>
13 #include <string>
14 
15 #include <pipewire/core.h>
16 
17 namespace KODI
18 {
19 namespace PIPEWIRE
20 {
21 
22 class CPipewireCore;
23 class CPipewireGlobal;
24 
26 {
27 public:
28  explicit CPipewireRegistry(CPipewireCore& core);
29  CPipewireRegistry() = delete;
31 
32  pw_registry* Get() const { return m_registry.get(); }
33 
34  CPipewireCore& GetCore() const { return m_core; }
35 
36  std::map<uint32_t, std::unique_ptr<CPipewireGlobal>>& GetGlobals() { return m_globals; }
37 
38 private:
39  static void OnGlobalAdded(void* userdata,
40  uint32_t id,
41  uint32_t permissions,
42  const char* type,
43  uint32_t version,
44  const struct spa_dict* props);
45  static void OnGlobalRemoved(void* userdata, uint32_t id);
46 
47  static pw_registry_events CreateRegistryEvents();
48 
49  CPipewireCore& m_core;
50 
51  const pw_registry_events m_registryEvents;
52 
53  spa_hook m_registryListener;
54  struct PipewireRegistryDeleter
55  {
56  void operator()(pw_registry* p) { pw_proxy_destroy(reinterpret_cast<pw_proxy*>(p)); }
57  };
58 
59  std::unique_ptr<pw_registry, PipewireRegistryDeleter> m_registry;
60 
61  std::map<uint32_t, std::unique_ptr<CPipewireGlobal>> m_globals;
62 };
63 
64 } // namespace PIPEWIRE
65 } // namespace KODI
Definition: PipewireCore.h:22
Definition: PipewireRegistry.h:25
Definition: AudioDecoder.h:18