[WASAPI] set stream audio category
[xbmc.git] / xbmc / cores / AudioEngine / Sinks / AESinkDirectSound.h
blob7dac7311dfe9654cc9e7c1a22dcf90063d9dfc2c
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 std::string GetDefaultDevice();
42 static void EnumerateDevicesEx (AEDeviceInfoList &deviceInfoList, bool force = false);
43 private:
44 void AEChannelsFromSpeakerMask(DWORD speakers);
45 DWORD SpeakerMaskFromAEChannels(const CAEChannelInfo &channels);
46 void CheckPlayStatus();
47 bool UpdateCacheStatus();
48 unsigned int GetSpace();
49 const char *dserr2str(int err);
51 Microsoft::WRL::ComPtr<IDirectSoundBuffer> m_pBuffer;
52 Microsoft::WRL::ComPtr<IDirectSound> m_pDSound;
54 AEAudioFormat m_format;
55 enum AEDataFormat m_encodedFormat;
56 CAEChannelInfo m_channelLayout;
57 std::string m_device;
59 unsigned int m_AvgBytesPerSec;
61 unsigned int m_dwChunkSize;
62 unsigned int m_dwFrameSize;
63 unsigned int m_dwBufferLen;
65 unsigned int m_BufferOffset;
66 unsigned int m_CacheLen;
67 unsigned int m_BufferTimeouts;
69 bool m_running;
70 bool m_initialized;
71 bool m_isDirtyDS;
72 CCriticalSection m_runLock;