[WASAPI] set stream audio category
[xbmc.git] / xbmc / cores / AudioEngine / Sinks / AESinkDARWINOSX.h
blob1db70800aa01e60a75746b24c60381f7283e9a85
1 /*
2 * Copyright (C) 2005-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/Sinks/osx/CoreAudioDevice.h"
13 #include "cores/AudioEngine/Utils/AEDeviceInfo.h"
15 class AERingBuffer;
16 struct AEDelayStatus;
18 class CAESinkDARWINOSX : public IAESink
20 public:
21 const char* GetName() override { return "DARWINOSX"; }
23 CAESinkDARWINOSX();
24 ~CAESinkDARWINOSX() override;
26 static void Register();
27 static void EnumerateDevicesEx(AEDeviceInfoList &list, bool force);
28 static std::unique_ptr<IAESink> Create(std::string& device, AEAudioFormat& desiredFormat);
30 bool Initialize(AEAudioFormat& format, std::string& device) override;
31 void Deinitialize() override;
33 void GetDelay(AEDelayStatus& status) override;
34 double GetCacheTotal() override;
35 unsigned int AddPackets(uint8_t** data, unsigned int frames, unsigned int offset) override;
36 void Drain() override;
38 private:
39 static OSStatus renderCallback(AudioDeviceID inDevice, const AudioTimeStamp* inNow, const AudioBufferList* inInputData, const AudioTimeStamp* inInputTime, AudioBufferList* outOutputData, const AudioTimeStamp* inOutputTime, void* inClientData);
40 void SetHogMode(bool on);
42 CAEDeviceInfo m_info;
44 CCoreAudioDevice m_device;
45 CCoreAudioStream m_outputStream;
46 unsigned int m_latentFrames = 0;
47 unsigned int m_outputBufferIndex = 0;
49 bool m_outputBitstream =
50 false; ///< true if we're bistreaming into a LinearPCM stream rather than AC3 stream.
51 unsigned int m_planes = 1; ///< number of audio planes (1 if non-planar)
52 unsigned int m_frameSizePerPlane = 0; ///< frame size (per plane) in bytes
53 unsigned int m_framesPerSecond = 0; ///< sample rate
55 AERingBuffer* m_buffer = nullptr;
56 volatile bool m_started =
57 false; // set once we get a callback from CoreAudio, which can take a little while.
59 CAESpinSection m_render_locker;
60 volatile int64_t m_render_tick = 0;
61 volatile double m_render_delay = 0.0;