xbmc
AESinkSNDIO.h
1 /*
2  * Copyright (C) 2010-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "cores/AudioEngine/Interfaces/AESink.h"
12 #include "cores/AudioEngine/Utils/AEDeviceInfo.h"
13 #include "threads/CriticalSection.h"
14 
15 #include <stdint.h>
16 
17 #include <sndio.h>
18 
19 class CAESinkSNDIO : public IAESink
20 {
21 public:
22  const char *GetName() override { return "sndio"; }
23 
24  CAESinkSNDIO();
25  ~CAESinkSNDIO() override;
26 
27  static void Register();
28  static IAESink* Create(std::string &device, AEAudioFormat &desiredFormat);
29  static void EnumerateDevicesEx(AEDeviceInfoList &list, bool force = false);
30 
31  bool Initialize(AEAudioFormat &format, std::string &device) override;
32  void Deinitialize() override;
33 
34  virtual void Stop();
35  void GetDelay(AEDelayStatus& status) override;
36  double GetCacheTotal() override { return 0.0; }
37  unsigned int AddPackets(uint8_t **data, unsigned int frames, unsigned int offset) override;
38  void Drain() override;
39 private:
40  void AudioFormatToPar(AEAudioFormat& format);
41  bool ParToAudioFormat(AEAudioFormat& format);
42  static void OnmoveCb(void *arg, int delta);
43 
44  struct sio_hdl *m_hdl;
45  struct sio_par m_par;
46  ssize_t m_played;
47  ssize_t m_written;
48 };
49 
Definition: AESinkSNDIO.h:19
Definition: AESink.h:18
void GetDelay(AEDelayStatus &status) override
Return a timestamped status structure with delay and sink info.
Definition: AESinkSNDIO.cpp:223
The audio format structure that fully defines a stream&#39;s audio information.
Definition: AEAudioFormat.h:19
Definition: AEUtil.h:27
unsigned int AddPackets(uint8_t **data, unsigned int frames, unsigned int offset) override
Adds packets to be sent out, this routine MUST block or sleep.
Definition: AESinkSNDIO.cpp:230