xbmc
PipewireThreadLoop.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 <chrono>
12 #include <memory>
13 
14 #include <pipewire/thread-loop.h>
15 
16 namespace KODI
17 {
18 namespace PIPEWIRE
19 {
20 
22 {
23 public:
25  ~CPipewireThreadLoop() = default;
26 
27  pw_loop* Get() const { return pw_thread_loop_get_loop(m_mainloop.get()); }
28 
29  bool Start();
30  void Stop();
31 
32  void Lock() const;
33  void Unlock() const;
34 
35  int Wait(std::chrono::nanoseconds timeout);
36  void Signal(bool accept);
37 
38 private:
39  struct PipewireThreadLoopDeleter
40  {
41  void operator()(pw_thread_loop* p) { pw_thread_loop_destroy(p); }
42  };
43 
44  std::unique_ptr<pw_thread_loop, PipewireThreadLoopDeleter> m_mainloop;
45 };
46 
48 {
49 public:
50  explicit CLoopLockGuard(const CPipewireThreadLoop& loop) : m_loop(loop) { m_loop.Lock(); }
51 
52  ~CLoopLockGuard() { m_loop.Unlock(); }
53 
54  CLoopLockGuard() = delete;
55  CLoopLockGuard(const CLoopLockGuard&) = delete;
56  CLoopLockGuard& operator=(const CLoopLockGuard&) = delete;
57 
58 private:
59  const CPipewireThreadLoop& m_loop;
60 };
61 
62 } // namespace PIPEWIRE
63 } // namespace KODI
Definition: PipewireThreadLoop.h:47
Definition: AudioDecoder.h:18
Definition: PipewireThreadLoop.h:21