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.
11 #include "PipewireContext.h"
12 #include "PipewireCore.h"
13 #include "PipewireRegistry.h"
14 #include "PipewireThreadLoop.h"
15 #include "commons/ilog.h"
16 #include "utils/log.h"
18 #include <pipewire/pipewire.h>
20 using namespace std::chrono_literals
;
23 using namespace PIPEWIRE
;
25 CPipewire::CPipewire()
27 pw_init(nullptr, nullptr);
30 CPipewire::~CPipewire()
46 bool CPipewire::Start()
48 m_loop
= std::make_unique
<CPipewireThreadLoop
>();
50 m_context
= std::make_unique
<CPipewireContext
>(*m_loop
);
52 PIPEWIRE::CLoopLockGuard
lock(*m_loop
);
56 CLog::Log(LOGERROR
, "Pipewire: failed to start threaded mainloop: {}", strerror(errno
));
62 m_core
= std::make_unique
<CPipewireCore
>(*m_context
);
64 catch (std::exception
& e
)
66 CLog::Log(LOGERROR
, "Pipewire: failed to connect to server");
70 CLog::Log(LOGINFO
, "Pipewire: connected to server");
72 m_registry
= std::make_unique
<CPipewireRegistry
>(*m_core
);
76 int ret
= m_loop
->Wait(5s
);
77 if (ret
== -ETIMEDOUT
)
79 CLog::Log(LOGDEBUG
, "Pipewire: timed out out waiting for synchronization");
86 std::unique_ptr
<CPipewire
> CPipewire::Create()
88 struct PipewireMaker
: public CPipewire
90 using CPipewire::CPipewire
;
95 auto pipewire
= std::make_unique
<PipewireMaker
>();
97 if (!pipewire
->Start())
102 catch (const std::exception
& e
)
104 CLog::Log(LOGWARNING
, "Pipewire: Exception in 'Create': {}", e
.what());