Merge pull request #26126 from stephan49/fix-pipewire-unlock-error
[xbmc.git] / xbmc / cores / AudioEngine / Sinks / AESinkDirectSound.h
blobbb5e2afbac90330482f316293d7b553bb4f9dcee
1 /*
2 * Copyright (C) 2010-2018 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"
13 #include "threads/CriticalSection.h"
15 #include <stdint.h>
17 #include <mmsystem.h> /* Microsoft can't write standalone headers */
18 #include <DSound.h> /* Microsoft can't write standalone headers */
19 #include <wrl/client.h>
21 class CAESinkDirectSound : public IAESink
23 public:
24 virtual const char *GetName() { return "DIRECTSOUND"; }
26 CAESinkDirectSound();
27 virtual ~CAESinkDirectSound();
29 static void Register();
30 static std::unique_ptr<IAESink> Create(std::string& device, AEAudioFormat& desiredFormat);
32 virtual bool Initialize(AEAudioFormat &format, std::string &device);
33 virtual void Deinitialize();
35 virtual void Stop();
36 virtual void Drain();
37 virtual void GetDelay(AEDelayStatus& status);
38 virtual double GetCacheTotal();
39 virtual unsigned int AddPackets(uint8_t **data, unsigned int frames, unsigned int offset);
41 static void EnumerateDevicesEx (AEDeviceInfoList &deviceInfoList, bool force = false);
42 private:
43 void AEChannelsFromSpeakerMask(DWORD speakers);
44 DWORD SpeakerMaskFromAEChannels(const CAEChannelInfo& channels);
45 void CheckPlayStatus();
46 bool UpdateCacheStatus();
47 unsigned int GetSpace();
49 Microsoft::WRL::ComPtr<IDirectSoundBuffer> m_pBuffer;
50 Microsoft::WRL::ComPtr<IDirectSound> m_pDSound;
52 AEAudioFormat m_format;
53 enum AEDataFormat m_encodedFormat;
54 CAEChannelInfo m_channelLayout;
55 std::string m_device;
57 unsigned int m_AvgBytesPerSec;
59 unsigned int m_dwChunkSize;
60 unsigned int m_dwFrameSize;
61 unsigned int m_dwBufferLen;
63 unsigned int m_BufferOffset;
64 unsigned int m_CacheLen;
65 unsigned int m_BufferTimeouts;
67 bool m_running;
68 bool m_initialized;
69 bool m_isDirtyDS;
70 CCriticalSection m_runLock;