[WASAPI] set stream audio category
[xbmc.git] / xbmc / cores / AudioEngine / Sinks / pipewire / AESinkPipewire.h
blobaecd30f51ac6a2c7de79b2f2e74edd0073b2bb93
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 #pragma once
11 #include "cores/AudioEngine/Interfaces/AESink.h"
12 #include "cores/AudioEngine/Utils/AEDeviceInfo.h"
14 #include <chrono>
16 namespace KODI
18 namespace PIPEWIRE
20 class CPipewireStream;
22 } // namespace KODI
24 namespace AE
26 namespace SINK
29 class CAESinkPipewire : public IAESink
31 public:
32 CAESinkPipewire() = default;
33 ~CAESinkPipewire() override = default;
35 static bool Register();
36 static std::unique_ptr<IAESink> Create(std::string& device, AEAudioFormat& desiredFormat);
37 static void EnumerateDevicesEx(AEDeviceInfoList& list, bool force = false);
38 static void Destroy();
40 // overrides via IAESink
41 const char* GetName() override { return "PIPEWIRE"; }
43 bool Initialize(AEAudioFormat& format, std::string& device) override;
44 void Deinitialize() override;
46 double GetCacheTotal() override;
47 void GetDelay(AEDelayStatus& status) override;
49 unsigned int AddPackets(uint8_t** data, unsigned int frames, unsigned int offset) override;
50 void Drain() override;
52 private:
53 AEAudioFormat m_format;
54 std::chrono::duration<double, std::ratio<1>> m_latency;
56 std::unique_ptr<KODI::PIPEWIRE::CPipewireStream> m_stream;
59 } // namespace SINK
60 } // namespace AE