11 #include "cores/AudioEngine/Interfaces/AESink.h" 12 #include "cores/AudioEngine/Utils/AEDeviceInfo.h" 13 #include "cores/AudioEngine/Utils/AEUtil.h" 14 #include "threads/CriticalSection.h" 15 #include "threads/SystemClock.h" 16 #include "threads/Thread.h" 21 #include <androidjni/AudioTrack.h> 26 const char* GetName()
override {
return "AUDIOTRACK"; }
31 bool Initialize(
AEAudioFormat& format, std::string& device)
override;
32 void Deinitialize()
override;
36 double GetLatency()
override;
37 double GetCacheTotal()
override;
38 unsigned int AddPackets(uint8_t** data,
unsigned int frames,
unsigned int offset)
override;
39 void AddPause(
unsigned int millis)
override;
40 void Drain()
override;
41 static void EnumerateDevicesEx(AEDeviceInfoList &list,
bool force =
false);
42 static void Register();
43 static std::unique_ptr<IAESink> Create(std::string& device,
AEAudioFormat& desiredFormat);
46 static jni::CJNIAudioTrack *CreateAudioTrack(
int stream,
int sampleRate,
int channelMask,
int encoding,
int bufferSize);
47 static bool IsSupported(
int sampleRateInHz,
int channelConfig,
int audioFormat);
48 static bool VerifySinkConfiguration(
int sampleRate,
52 static void UpdateAvailablePCMCapabilities();
53 static void UpdateAvailablePassthroughCapabilities(
bool isRaw =
false);
55 int AudioTrackWrite(
char* audioData,
int offsetInBytes,
int sizeInBytes);
56 int AudioTrackWrite(
char* audioData,
int sizeInBytes, int64_t timestamp);
59 jni::CJNIAudioTrack *m_at_jni;
62 double m_duration_written;
63 unsigned int m_min_buffer_size;
65 uint64_t m_headPosOld;
66 uint32_t m_stuckCounter;
67 uint64_t m_timestampPos = 0;
70 double GetMovingAverageDelay(
double newestdelay);
75 std::deque<double> m_linearmovingaverage;
81 static std::set<unsigned int> m_sink_sampleRates;
82 static bool m_sinkSupportsFloat;
83 static bool m_sinkSupportsMultiChannelFloat;
84 static bool m_passthrough_use_eac3;
87 int16_t *m_alignedS16;
88 unsigned int m_sink_frameSize;
89 unsigned int m_sink_sampleRate;
91 double m_audiotrackbuffer_sec;
92 double m_audiotrackbuffer_sec_orig;
94 double m_pause_ms = 0.0;
96 double m_hw_delay = 0.0;
97 CJNIAudioTimestamp m_timestamp;
99 bool m_superviseAudioDelay =
false;
101 std::vector<float> m_floatbuf;
102 std::vector<int16_t> m_shortbuf;
103 std::vector<char> m_charbuf;
This classt provides the details of what the audio output hardware is capable of. ...
Definition: AEDeviceInfo.h:31
Definition: SystemClock.h:31
void GetDelay(AEDelayStatus &status) override
Return a timestamped status structure with delay and sink info.
Definition: AESinkAUDIOTRACK.cpp:642
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: AESinkAUDIOTRACK.cpp:811
void AddPause(unsigned int millis) override
instruct the sink to add a pause
Definition: AESinkAUDIOTRACK.cpp:969
Definition: AESinkAUDIOTRACK.h:23