11 #include "cores/AudioEngine/Engines/ActiveAE/ActiveAE.h" 12 #include "cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.h" 13 #include "cores/AudioEngine/Interfaces/AEStream.h" 14 #include "cores/AudioEngine/Utils/AEAudioFormat.h" 15 #include "cores/AudioEngine/Utils/AELimiter.h" 16 #include "threads/Event.h" 32 void Add(
double error)
38 void Flush(std::chrono::milliseconds interval = std::chrono::milliseconds(100))
43 m_timer.Set(interval);
46 void SetErrorInterval(std::chrono::milliseconds interval = std::chrono::milliseconds(100))
50 m_timer.Set(interval);
53 bool Get(
double& error, std::chrono::milliseconds interval = std::chrono::milliseconds(100))
55 if(m_timer.IsTimePast())
69 double GetLastError(
unsigned int &time)
71 time = m_timer.GetStartTime().time_since_epoch().count();
75 void Correction(
double correction)
77 m_lastError += correction;
84 return m_buffer / m_count;
99 bool Create(
unsigned int totaltime,
bool remap,
bool upmix,
bool normalize =
true);
100 void SetExtraData(
int profile,
enum AVMatrixEncoding matrix_encoding,
enum AVAudioServiceType audio_service_type);
101 bool ProcessBuffers();
102 void ConfigureResampler(
bool normalizelevels,
bool stereoupmix, AEQuality quality);
103 bool HasInputLevel(
int level);
106 void SetDrain(
bool drain);
108 void SetRR(
double rr,
double atempoThreshold);
111 bool DoesNormalize();
112 void ForceResampler(
bool force);
114 std::unique_ptr<CActiveAEBufferPool> GetResampleBuffers();
115 std::unique_ptr<CActiveAEBufferPool> GetAtempoBuffers();
118 std::deque<CSampleBuffer*> m_outputSamples;
119 std::deque<CSampleBuffer*> m_inputSamples;
122 std::unique_ptr<CActiveAEBufferPoolResample> m_resampleBuffers;
123 std::unique_ptr<CActiveAEBufferPoolAtempo> m_atempoBuffers;
137 void FadingFinished();
138 void IncFreeBuffers();
139 void DecFreeBuffers();
140 void ResetFreeBuffers();
143 double CalcResampleRatio(
double error);
144 std::chrono::milliseconds GetErrorInterval();
147 unsigned int GetSpace()
override;
148 unsigned int AddData(
const uint8_t*
const *data,
unsigned int offset,
unsigned int frames,
ExtData *extData)
override;
149 double GetDelay()
override;
151 bool IsBuffering()
override;
152 double GetCacheTime()
override;
153 double GetCacheTotal()
override;
154 double GetMaxDelay()
override;
156 void Pause()
override;
157 void Resume()
override;
158 void Drain(
bool wait)
override;
159 bool IsDraining()
override;
160 bool IsDrained()
override;
161 void Flush()
override;
163 float GetVolume()
override;
164 float GetReplayGain()
override;
165 float GetAmplification()
override;
166 void SetVolume(
float volume)
override;
167 void SetReplayGain(
float factor)
override;
168 void SetAmplification(
float amplify)
override;
169 void SetFFmpegInfo(
int profile,
enum AVMatrixEncoding matrix_encoding,
enum AVAudioServiceType audio_service_type)
override;
171 unsigned int GetFrameSize()
const override;
172 unsigned int GetChannelCount()
const override;
174 unsigned int GetSampleRate()
const override ;
175 enum AEDataFormat GetDataFormat()
const override;
177 double GetResampleRatio()
override;
178 void SetResampleRatio(
double ratio)
override;
179 void SetResampleMode(
int mode)
override;
181 void UnRegisterAudioCallback()
override;
182 void FadeVolume(
float from,
float to,
unsigned int time)
override;
183 bool IsFading()
override;
184 void RegisterSlave(
IAEStream *stream)
override;
191 float m_streamVolume;
193 float m_streamAmplify;
194 double m_streamResampleRatio;
195 int m_streamResampleMode;
196 unsigned int m_streamSpace;
197 bool m_streamDraining;
198 bool m_streamDrained;
200 int m_streamFreeBuffers;
201 bool m_streamIsBuffering;
202 bool m_streamIsFlushed;
204 CCriticalSection m_streamLock;
205 CCriticalSection m_statsLock;
208 std::unique_ptr<CSoundPacket> m_remapBuffer;
209 std::unique_ptr<IAEResample> m_remapper;
211 double m_lastPtsJump;
212 std::chrono::milliseconds m_errorInterval{1000};
215 std::unique_ptr<CActiveAEBufferPool> m_inputBuffers;
216 std::unique_ptr<CActiveAEStreamBuffers> m_processingBuffers;
217 std::deque<CSampleBuffer*> m_processingSamples;
218 std::unique_ptr<CActiveAEDataProtocol> m_streamPort;
227 float m_bufferedTime;
230 float m_fadingTarget;
234 double m_resampleIntegral;
236 enum AVMatrixEncoding m_matrixEncoding;
237 enum AVAudioServiceType m_audioServiceType;
238 bool m_forceResampler;
241 double m_lastSyncError;
242 CAESyncInfo::AESyncState m_syncState;
This is an Event class built from a ConditionVariable.
Definition: Event.h:35
Definition: AELimiter.h:15
Definition: ActiveAEStream.h:130
Callback interface for VideoPlayer clock needed by AE for sync.
Definition: AEStream.h:23
Definition: SystemClock.h:31
Definition: IAudioCallback.h:15
Definition: ActiveAEStream.h:94
IAEStream Stream Interface for streaming audio.
Definition: AEStream.h:52
Definition: Application.h:69
Definition: AEStream.h:60
Definition: ActiveAE.h:182
Definition: ActiveAEStream.h:25
Definition: ActiveAEBuffer.h:45
Definition: ActiveAE.h:228
Definition: AEStream.h:31