xbmc
AESinkStarfish.h
1 /*
2  * Copyright (C) 2023 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 "cores/AudioEngine/Utils/AEUtil.h"
14 #include "utils/Map.h"
15 
16 #include <chrono>
17 
18 #include <starfish-media-pipeline/StarfishMediaAPIs.h>
19 
20 class CAESinkStarfish : public IAESink
21 {
22 public:
23  const char* GetName() override { return "Starfish"; }
25  ~CAESinkStarfish() override;
26 
27  static void Register();
28  static std::unique_ptr<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  double GetCacheTotal() override;
34  double GetLatency() override;
35  unsigned int AddPackets(uint8_t** data, unsigned int frames, unsigned int offset) override;
36  void AddPause(unsigned int millis) override;
37  void GetDelay(AEDelayStatus& status) override;
38  void Drain() override;
39 
40 private:
41  void PlayerCallback(const int32_t type, const int64_t numValue, const char* strValue);
42  static void PlayerCallback(const int32_t type,
43  const int64_t numValue,
44  const char* strValue,
45  void* data);
46 
47  std::unique_ptr<StarfishMediaAPIs> m_starfishMediaAPI;
48  AEAudioFormat m_format;
49  std::chrono::nanoseconds m_pts{0};
50  int64_t m_bufferSize{0};
51  bool m_firstFeed{true};
52 };
Definition: AESinkStarfish.h:20
void GetDelay(AEDelayStatus &status) override
Return a timestamped status structure with delay and sink info.
Definition: AESinkStarfish.cpp:231
Definition: AESink.h:18
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: AESinkStarfish.cpp:187
void AddPause(unsigned int millis) override
instruct the sink to add a pause
Definition: AESinkStarfish.cpp:224