[WASAPI] set stream audio category
[xbmc.git] / xbmc / cores / AudioEngine / Sinks / pipewire / PipewireThreadLoop.cpp
blob8d3f8a6b92b0eed9746e3a5f8a36cf740e16051b
1 /*
2 * Copyright (C) 2010-2021 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "PipewireThreadLoop.h"
11 #include "utils/log.h"
13 #include <stdexcept>
15 using namespace KODI;
16 using namespace PIPEWIRE;
18 CPipewireThreadLoop::CPipewireThreadLoop()
20 m_mainloop.reset(pw_thread_loop_new("pipewire", nullptr));
21 if (!m_mainloop)
23 CLog::Log(LOGERROR, "CPipewireThreadLoop: failed to create main loop: {}", strerror(errno));
24 throw std::runtime_error("CPipewireThreadLoop: failed to create main loop");
28 bool CPipewireThreadLoop::Start()
30 return pw_thread_loop_start(m_mainloop.get()) == 0;
33 void CPipewireThreadLoop::Stop()
35 pw_thread_loop_stop(m_mainloop.get());
38 void CPipewireThreadLoop::Lock() const
40 pw_thread_loop_lock(m_mainloop.get());
43 void CPipewireThreadLoop::Unlock() const
45 pw_thread_loop_unlock(m_mainloop.get());
48 int CPipewireThreadLoop::Wait(std::chrono::nanoseconds timeout)
50 timespec abstime;
51 pw_thread_loop_get_time(m_mainloop.get(), &abstime, timeout.count());
53 return pw_thread_loop_timed_wait_full(m_mainloop.get(), &abstime);
56 void CPipewireThreadLoop::Signal(bool accept)
58 pw_thread_loop_signal(m_mainloop.get(), accept);