MythTV  master
audiooutputbase.h
Go to the documentation of this file.
1 #ifndef AUDIOOUTPUTBASE
2 #define AUDIOOUTPUTBASE
3 
4 // POSIX headers
5 #include <sys/time.h> // for struct timeval
6 
7 // Qt headers
8 #include <QString>
9 #include <QMutex>
10 #include <QWaitCondition>
11 
12 // MythTV headers
13 #include "libmythbase/mthread.h"
14 
15 #include "audiooutput.h"
16 #include "samplerate.h"
17 
18 namespace soundtouch {
19 class SoundTouch;
20 };
21 class FreeSurround;
23 struct AVCodecContext;
24 
26 {
27 public:
28  AsyncLooseLock() = default;
29  void Clear() { m_head = m_tail = 0; }
30  void Ref() { m_head++; }
31  bool TestAndDeref() { bool r = (m_head != m_tail); if (r) m_tail++; return r; }
32 private:
33  int m_head {0};
34  int m_tail {0};
35 };
36 
37 // Forward declaration of SPDIF encoder
38 class SPDIFEncoder;
39 
40 class AudioOutputBase : public AudioOutput, public MThread
41 {
42  public:
43  static const char *quality_string(int q);
44  explicit AudioOutputBase(const AudioSettings &settings);
45  ~AudioOutputBase() override;
46 
47  AudioOutputSettings* GetOutputSettingsCleaned(bool digital = true) override; // AudioOutput
48  AudioOutputSettings* GetOutputSettingsUsers(bool digital = false) override; // AudioOutput
49 
50  // reconfigure sound out for new params
51  void Reconfigure(const AudioSettings &settings) override; // AudioOutput
52 
53  // dsprate is in 100 * samples/second
54  void SetEffDsp(int dsprate) override; // AudioOutput
55 
56  // timestretch
57  void SetStretchFactor(float factor) override; // AudioOutput
58  float GetStretchFactor(void) const override; // AudioOutput
59  int GetChannels(void) const override { return m_channels; } // AudioOutput
60  AudioFormat GetFormat(void) const override { return m_format; }; // AudioOutput
61  int GetBytesPerFrame(void) const override // AudioOutput
62  { return m_sourceBytesPerFrame; }
63 
64  bool CanPassthrough(int samplerate, int channels,
65  AVCodecID codec, int profile) const override; // AudioOutput
66  bool CanDownmix(void) const override { return true; } // AudioOutput
67  bool IsUpmixing(void) override; // AudioOutput
68  bool ToggleUpmix(void) override; // AudioOutput
69  bool CanUpmix(void) override; // AudioOutput
70  bool CanProcess(AudioFormat /*fmt*/) override { return true; } // AudioOutput
71  uint32_t CanProcess(void) override // AudioOutput
72  {
73  // we support all codec
74  return ~(((~0ULL) >> FORMAT_FLT) << FORMAT_FLT);
75  }
76 
77  void Reset(void) override; // AudioOutput
78 
79  void SetSWVolume(int new_volume, bool save) override; // VolumeBase
80  int GetSWVolume(void) override; // VolumeBase
81 
82  // timecode is in milliseconds.
83  bool AddFrames(void *buffer, int frames, std::chrono::milliseconds timecode) override; // AudioOutput
84  bool AddData(void *buffer, int len, std::chrono::milliseconds timecode, int frames) override; // AudioOutput
85  bool NeedDecodingBeforePassthrough() const override { return false; }; // AudioOutput
86  std::chrono::milliseconds LengthLastData(void) const override { return m_lengthLastData; } // AudioOutput
87 
88  void SetTimecode(std::chrono::milliseconds timecode) override; // AudioOutput
89  bool IsPaused(void) const override { return m_actuallyPaused; } // AudioOutput
90  void Pause(bool paused) override; // AudioOutput
91  void PauseUntilBuffered(void) override; // AudioOutput
92 
93  // Wait for all data to finish playing
94  void Drain(void) override; // AudioOutput
95 
96  std::chrono::milliseconds GetAudiotime(void) override; // AudioOutput
97  std::chrono::milliseconds GetAudioBufferedTime(void) override; // AudioOutput
98 
99  // Send output events showing current progress
100  virtual void Status(void);
101 
102  void SetSourceBitrate(int rate) override; // AudioOutput
103 
104  void GetBufferStatus(uint &fill, uint &total) override; // AudioOutput
105 
106  // Only really used by the AudioOutputNULL object
107  void bufferOutputData(bool y) override // AudioOutput
108  { m_bufferOutputDataForUse = y; }
109  int readOutputData(unsigned char *read_buffer, size_t max_length) override; // AudioOutput
110 
111  static const uint kAudioSRCInputSize = 16384;
112 
114  // In other words, divisible by 96.
115  static const uint kAudioRingBufferSize = 10239936U;
116 
117  protected:
118  // Following function must be called from subclass constructor
119  void InitSettings(const AudioSettings &settings);
120 
121  // You need to implement the following functions
122  virtual bool OpenDevice(void) = 0;
123  virtual void CloseDevice(void) = 0;
124  virtual void WriteAudio(unsigned char *aubuf, int size) = 0;
129  virtual int GetBufferedOnSoundcard(void) const = 0;
130  // Default implementation only supports 2ch s16le at 48kHz
131  virtual AudioOutputSettings* GetOutputSettings(bool /*digital*/)
132  { return new AudioOutputSettings; }
133  // You need to call this from any implementation in the dtor.
134  void KillAudio(void);
135 
136  // The following functions may be overridden, but don't need to be
137  virtual bool StartOutputThread(void);
138  virtual void StopOutputThread(void);
139 
140  int GetAudioData(uchar *buffer, int buf_size, bool full_buffer,
141  volatile uint *local_raud = nullptr);
142 
143  void OutputAudioLoop(void);
144 
145  void run() override; // MThread
146 
147  int CheckFreeSpace(int &frames);
148 
149  inline int audiolen() const; // number of valid bytes in audio buffer
150  int audiofree() const; // number of free bytes in audio buffer
151  int audioready() const; // number of bytes ready to be written
152 
153  void SetStretchFactorLocked(float factor);
154 
155  // For audiooutputca
156  std::chrono::milliseconds GetBaseAudBufTimeCode() const
157  { return m_audbufTimecode; }
158 
159  bool usesSpdif() const { return m_usesSpdif; }
160 
161  protected:
162  // Basic details about the audio stream
163  int m_channels {-1};
164  AVCodecID m_codec {AV_CODEC_ID_NONE};
169  int m_sampleRate {-1};
170  int m_effDsp {0}; // from the recorded stream (NuppelVideo)
171  int m_fragmentSize {0};
173 
174  QString m_mainDevice;
176  bool m_discreteDigital {false};
177 
178  bool m_passthru {false};
179  bool m_enc {false};
180  bool m_reEnc {false};
181 
182  float m_stretchFactor {1.0F};
183  int m_effStretchFactor {100000}; // scaled to 100000 ase ffdsp is
185 
186  bool m_killAudio {false};
187 
188  bool m_pauseAudio {false};
189  bool m_actuallyPaused {false};
190  bool m_wasPaused {false};
191  bool m_unpauseWhenReady {false};
193  bool m_bufferOutputDataForUse {false}; // used by AudioOutputNULL
194 
196  int m_maxChannels {0};
197  enum : std::int8_t
198  {
203  };
205  long m_sourceBitRate {-1};
207 
208  private:
209  bool SetupPassthrough(AVCodecID codec, int codec_profile,
210  int &samplerate_tmp, int &channels_tmp);
211  AudioOutputSettings* OutputSettings(bool digital = true);
212  int CopyWithUpmix(char *buffer, int frames, uint &org_waud);
213  void SetAudiotime(int frames, std::chrono::milliseconds timecode);
218  bool m_needResampler {false};
219  SRC_STATE *m_srcCtx {nullptr};
220  soundtouch::SoundTouch *m_pSoundStretch {nullptr};
223 
226  bool m_upmixDefault {false};
227  bool m_needsUpmix {false};
228  bool m_needsDownmix {false};
230  float m_oldStretchFactor {1.0F};
231  int m_volume {80};
233 
234  bool m_processing {false};
235 
236  int64_t m_framesBuffered {0};
237 
238  bool m_audioThreadExists {false};
239 
245 
250  QMutex m_avsyncLock;
251 
255  std::chrono::milliseconds m_audioTime {0ms};
256 
260  volatile uint m_raud {0}; // read position
261  volatile uint m_waud {0}; // write position
265  std::chrono::milliseconds m_audbufTimecode {0ms};
267 
269 
270  std::chrono::seconds m_currentSeconds {-1s};
271 
272  float *m_srcIn;
273 
274  // All actual buffers
275  SRC_DATA m_srcData {};
276  [[maybe_unused]] uint m_memoryCorruptionTest0 {0xdeadbeef};
277  alignas(16) std::array<float,kAudioSRCInputSize> m_srcInBuf {};
278  [[maybe_unused]] uint m_memoryCorruptionTest1 {0xdeadbeef};;
279  float *m_srcOut {nullptr};
281  [[maybe_unused]] uint m_memoryCorruptionTest2 {0xdeadbeef};;
285  std::array<uchar,kAudioRingBufferSize> m_audioBuffer {0};
286  [[maybe_unused]] uint m_memoryCorruptionTest3 {0xdeadbeef};;
287  bool m_configureSucceeded {false};
288  std::chrono::milliseconds m_lengthLastData {0ms};
289 
290  // SPDIF Encoder for digital passthrough
291  bool m_usesSpdif {true};
293 
294  // Flag indicating if SetStretchFactor enabled audio float processing
295  bool m_forcedProcessing {false};
296  int m_previousBpf {0};
297 };
298 
299 #endif
AudioOutputBase::m_srcOut
float * m_srcOut
Definition: audiooutputbase.h:279
AudioOutputBase::m_enc
bool m_enc
Definition: audiooutputbase.h:179
AudioOutputBase::m_outputSettingsRaw
AudioOutputSettings * m_outputSettingsRaw
Definition: audiooutputbase.h:214
AudioOutputBase::m_srcIn
float * m_srcIn
Definition: audiooutputbase.h:272
AudioOutputBase::Reset
void Reset(void) override
Reset the audiobuffer, timecode and mythmusic visualisation.
Definition: audiooutputbase.cpp:935
AudioOutputBase::m_pSoundStretch
soundtouch::SoundTouch * m_pSoundStretch
Definition: audiooutputbase.h:220
AudioOutputBase::GetBytesPerFrame
int GetBytesPerFrame(void) const override
Definition: audiooutputbase.h:61
AudioOutputBase::m_discreteDigital
bool m_discreteDigital
Definition: audiooutputbase.h:176
AudioOutputBase::SetTimecode
void SetTimecode(std::chrono::milliseconds timecode) override
Set the timecode of the samples most recently added to the audiobuffer.
Definition: audiooutputbase.cpp:973
AudioOutputBase::Pause
void Pause(bool paused) override
Definition: audiooutputbase.cpp:913
AudioOutputBase::m_raud
volatile uint m_raud
Audio circular buffer.
Definition: audiooutputbase.h:260
AudioOutputBase::AddData
bool AddData(void *buffer, int len, std::chrono::milliseconds timecode, int frames) override
Add data to the audiobuffer and perform any required processing.
Definition: audiooutputbase.cpp:1329
soundtouch
Definition: audiooutputbase.h:18
AudioOutputBase::CheckFreeSpace
int CheckFreeSpace(int &frames)
Check that there's enough space in the audiobuffer to write the provided number of frames.
Definition: audiooutputbase.cpp:1196
AudioOutputBase::audiolen
int audiolen() const
Get the number of bytes in the audiobuffer.
Definition: audiooutputbase.cpp:994
AudioOutputBase::m_bufferOutputDataForUse
bool m_bufferOutputDataForUse
Definition: audiooutputbase.h:193
AudioOutputBase::m_resetActive
AsyncLooseLock m_resetActive
Definition: audiooutputbase.h:266
AudioOutputBase::m_avsyncLock
QMutex m_avsyncLock
must hold avsync_lock to read or write 'audiotime' and 'audiotime_updated'
Definition: audiooutputbase.h:250
AudioOutputBase::m_forcedProcessing
bool m_forcedProcessing
Definition: audiooutputbase.h:295
AudioOutputBase::CanPassthrough
bool CanPassthrough(int samplerate, int channels, AVCodecID codec, int profile) const override
Test if we can output digital audio and if sample rate is supported.
Definition: audiooutputbase.cpp:213
AsyncLooseLock
Definition: audiooutputbase.h:25
AudioOutputBase::m_needResampler
bool m_needResampler
Definition: audiooutputbase.h:218
AudioOutputBase::CloseDevice
virtual void CloseDevice(void)=0
AudioOutputBase::m_configureSucceeded
bool m_configureSucceeded
Definition: audiooutputbase.h:287
AudioOutputBase::m_memoryCorruptionTest2
uint m_memoryCorruptionTest2
Definition: audiooutputbase.h:281
AudioOutputBase::SetupPassthrough
bool SetupPassthrough(AVCodecID codec, int codec_profile, int &samplerate_tmp, int &channels_tmp)
Definition: audiooutputbase.cpp:413
AudioOutputBase::audiofree
int audiofree() const
Get the free space in the audiobuffer in bytes.
Definition: audiooutputbase.cpp:1004
AudioOutputBase::m_previousBpf
int m_previousBpf
Definition: audiooutputbase.h:296
AudioOutputBase::KillAudio
void KillAudio(void)
Kill the output thread and cleanup.
Definition: audiooutputbase.cpp:871
AudioOutputBase::readOutputData
int readOutputData(unsigned char *read_buffer, size_t max_length) override
Definition: audiooutputbase.cpp:1865
AudioOutputBase::GetAudiotime
std::chrono::milliseconds GetAudiotime(void) override
Calculate the timecode of the samples that are about to become audible.
Definition: audiooutputbase.cpp:1029
AudioOutputBase::GetStretchFactor
float GetStretchFactor(void) const override
Get the timetretch factor.
Definition: audiooutputbase.cpp:370
FreeSurround
Definition: freesurround.h:28
AudioOutputBase::IsUpmixing
bool IsUpmixing(void) override
Source is currently being upmixed.
Definition: audiooutputbase.cpp:378
AudioOutputBase::SetEffDsp
void SetEffDsp(int dsprate) override
Set the effective DSP rate.
Definition: audiooutputbase.cpp:985
AudioOutputBase::CanDownmix
bool CanDownmix(void) const override
Definition: audiooutputbase.h:66
AudioOutputBase::m_audbufTimecode
std::chrono::milliseconds m_audbufTimecode
timecode of audio most recently placed into buffer
Definition: audiooutputbase.h:265
AudioOutputBase::quality_string
static const char * quality_string(int q)
Definition: audiooutputbase.cpp:54
AudioOutputBase::m_sampleRate
int m_sampleRate
Definition: audiooutputbase.h:169
AudioOutputBase::m_volume
int m_volume
Definition: audiooutputbase.h:231
AudioOutputBase::m_sourceChannels
int m_sourceChannels
Definition: audiooutputbase.h:224
AudioOutputBase::m_killAudio
bool m_killAudio
Definition: audiooutputbase.h:186
AudioOutputBase::SetAudiotime
void SetAudiotime(int frames, std::chrono::milliseconds timecode)
Set the timecode of the top of the ringbuffer Exclude all other processing elements as they dont vary...
Definition: audiooutputbase.cpp:1111
AsyncLooseLock::AsyncLooseLock
AsyncLooseLock()=default
AudioOutputBase::GetBufferedOnSoundcard
virtual int GetBufferedOnSoundcard(void) const =0
Return the size in bytes of frames currently in the audio buffer adjusted with the audio playback lat...
AudioOutputBase::QUALITY_HIGH
@ QUALITY_HIGH
Definition: audiooutputbase.h:202
AudioOutputBase::m_kAudioSRCOutputSize
int m_kAudioSRCOutputSize
Definition: audiooutputbase.h:280
AudioSettings
Definition: audiosettings.h:28
AudioOutputBase::m_lengthLastData
std::chrono::milliseconds m_lengthLastData
Definition: audiooutputbase.h:288
AudioOutputBase::m_mainDevice
QString m_mainDevice
Definition: audiooutputbase.h:174
AudioOutputBase::LengthLastData
std::chrono::milliseconds LengthLastData(void) const override
Definition: audiooutputbase.h:86
AsyncLooseLock::Ref
void Ref()
Definition: audiooutputbase.h:30
AudioOutputBase::Drain
void Drain(void) override
Block until all available frames have been written to the device.
Definition: audiooutputbase.cpp:1840
AudioOutputBase::m_soundcardBufferSize
long m_soundcardBufferSize
Definition: audiooutputbase.h:172
AudioOutputBase::m_stretchFactor
float m_stretchFactor
Definition: audiooutputbase.h:182
AudioOutputBase::m_unpauseWhenReady
bool m_unpauseWhenReady
Definition: audiooutputbase.h:191
AudioOutputBase::GetChannels
int GetChannels(void) const override
Definition: audiooutputbase.h:59
AudioOutput
Definition: audiooutput.h:24
AudioOutputBase
Definition: audiooutputbase.h:40
AudioOutputBase::m_srcInBuf
std::array< float, kAudioSRCInputSize > m_srcInBuf
Definition: audiooutputbase.h:277
AudioOutputDigitalEncoder
Definition: audiooutputdigitalencoder.h:14
AudioOutputBase::m_upmixer
FreeSurround * m_upmixer
Definition: audiooutputbase.h:222
AudioOutputBase::m_killAudioLock
QMutex m_killAudioLock
Definition: audiooutputbase.h:268
AudioOutputBase::m_srcQuality
int m_srcQuality
Definition: audiooutputbase.h:204
AudioOutputBase::m_volumeControl
QString m_volumeControl
Definition: audiooutputbase.h:232
AudioOutputBase::m_audioThreadExists
bool m_audioThreadExists
Definition: audiooutputbase.h:238
hardwareprofile.scan.profile
profile
Definition: scan.py:96
AudioOutputBase::m_format
AudioFormat m_format
Definition: audiooutputbase.h:167
AudioOutputBase::AudioOutputBase
AudioOutputBase(const AudioSettings &settings)
Definition: audiooutputbase.cpp:66
AudioOutputBase::m_waud
volatile uint m_waud
Definition: audiooutputbase.h:261
FORMAT_NONE
@ FORMAT_NONE
Definition: audiooutputsettings.h:25
AudioOutputBase::m_sourceSampleRate
int m_sourceSampleRate
Definition: audiooutputbase.h:206
AsyncLooseLock::m_head
int m_head
Definition: audiooutputbase.h:33
AudioOutputBase::GetOutputSettingsCleaned
AudioOutputSettings * GetOutputSettingsCleaned(bool digital=true) override
Returns capabilities supported by the audio device amended to take into account the digital audio opt...
Definition: audiooutputbase.cpp:156
AudioOutputBase::m_needsUpmix
bool m_needsUpmix
Definition: audiooutputbase.h:227
AudioOutputBase::m_effStretchFactor
int m_effStretchFactor
Definition: audiooutputbase.h:183
AudioOutputBase::StopOutputThread
virtual void StopOutputThread(void)
Definition: audiooutputbase.cpp:859
AudioOutputBase::Reconfigure
void Reconfigure(const AudioSettings &settings) override
(Re)Configure AudioOutputBase
Definition: audiooutputbase.cpp:473
AudioOutputBase::GetOutputSettings
virtual AudioOutputSettings * GetOutputSettings(bool)
Definition: audiooutputbase.h:131
AudioOutputBase::~AudioOutputBase
~AudioOutputBase() override
Destructor.
Definition: audiooutputbase.cpp:94
AudioOutputBase::m_memoryCorruptionTest1
uint m_memoryCorruptionTest1
Definition: audiooutputbase.h:278
AudioOutputBase::m_oldStretchFactor
float m_oldStretchFactor
Definition: audiooutputbase.h:230
AudioOutputBase::GetAudioData
int GetAudioData(uchar *buffer, int buf_size, bool full_buffer, volatile uint *local_raud=nullptr)
Copy frames from the audiobuffer into the buffer provided.
Definition: audiooutputbase.cpp:1753
AudioOutputBase::m_maxChannels
int m_maxChannels
Definition: audiooutputbase.h:196
AudioOutputBase::m_currentSeconds
std::chrono::seconds m_currentSeconds
Definition: audiooutputbase.h:270
AudioOutputBase::NeedDecodingBeforePassthrough
bool NeedDecodingBeforePassthrough() const override
Definition: audiooutputbase.h:85
AudioOutputBase::m_outputSettingsDigitalRaw
AudioOutputSettings * m_outputSettingsDigitalRaw
Definition: audiooutputbase.h:216
AudioOutputBase::m_pauseAudio
bool m_pauseAudio
Definition: audiooutputbase.h:188
AudioOutputBase::kAudioRingBufferSize
static const uint kAudioRingBufferSize
Audio Buffer Size – should be divisible by 32,24,16,12,10,8,6,4,2..
Definition: audiooutputbase.h:115
AudioOutputBase::run
void run() override
Main routine for the output thread.
Definition: audiooutputbase.cpp:1856
AudioOutputBase::bufferOutputData
void bufferOutputData(bool y) override
Definition: audiooutputbase.h:107
AudioOutputBase::m_sourceBytesPerFrame
int m_sourceBytesPerFrame
Definition: audiooutputbase.h:225
AudioOutputBase::m_upmixDefault
bool m_upmixDefault
Definition: audiooutputbase.h:226
AudioOutputBase::m_passthru
bool m_passthru
Definition: audiooutputbase.h:178
AudioOutputBase::OutputAudioLoop
void OutputAudioLoop(void)
Run in the output thread, write frames to the output device as they become available and there's spac...
Definition: audiooutputbase.cpp:1660
AudioOutputBase::m_outputFormat
AudioFormat m_outputFormat
Definition: audiooutputbase.h:168
AudioOutputBase::m_encoder
AudioOutputDigitalEncoder * m_encoder
Definition: audiooutputbase.h:221
AudioOutputBase::m_reEnc
bool m_reEnc
Definition: audiooutputbase.h:180
AudioOutputBase::GetSWVolume
int GetSWVolume(void) override
Get the volume for software volume control.
Definition: audiooutputbase.cpp:1183
AudioOutputBase::audioready
int audioready() const
Get the scaled number of bytes in the audiobuffer, i.e.
Definition: audiooutputbase.cpp:1019
AudioOutputBase::m_channels
int m_channels
Definition: audiooutputbase.h:163
AudioOutputBase::CopyWithUpmix
int CopyWithUpmix(char *buffer, int frames, uint &org_waud)
Copy frames into the audiobuffer, upmixing en route if necessary.
Definition: audiooutputbase.cpp:1231
AudioOutputBase::m_configuredChannels
int m_configuredChannels
Definition: audiooutputbase.h:195
AudioOutputBase::m_setInitialVol
bool m_setInitialVol
Definition: audiooutputbase.h:192
AudioOutputBase::m_passthruDevice
QString m_passthruDevice
Definition: audiooutputbase.h:175
AudioOutputBase::m_spdifEnc
SPDIFEncoder * m_spdifEnc
Definition: audiooutputbase.h:292
AudioOutputBase::m_codec
AVCodecID m_codec
Definition: audiooutputbase.h:164
AudioOutputBase::SetSWVolume
void SetSWVolume(int new_volume, bool save) override
Set the volume for software volume control.
Definition: audiooutputbase.cpp:1173
AudioOutputBase::CanUpmix
bool CanUpmix(void) override
Upmixing of the current source is available if requested.
Definition: audiooutputbase.cpp:404
AudioOutputBase::Status
virtual void Status(void)
Report status via an OutputEvent.
Definition: audiooutputbase.cpp:1625
AudioOutputBase::GetFormat
AudioFormat GetFormat(void) const override
Definition: audiooutputbase.h:60
AudioOutputBase::WriteAudio
virtual void WriteAudio(unsigned char *aubuf, int size)=0
AudioOutputBase::m_outputBytesPerFrame
int m_outputBytesPerFrame
Definition: audiooutputbase.h:166
AudioOutputBase::m_sourceBitRate
long m_sourceBitRate
Definition: audiooutputbase.h:205
AudioOutputBase::m_actuallyPaused
bool m_actuallyPaused
Definition: audiooutputbase.h:189
AudioOutputBase::m_memoryCorruptionTest0
uint m_memoryCorruptionTest0
Definition: audiooutputbase.h:276
AsyncLooseLock::m_tail
int m_tail
Definition: audiooutputbase.h:34
AudioOutputBase::m_wasPaused
bool m_wasPaused
Definition: audiooutputbase.h:190
AudioOutputBase::m_surroundMode
int m_surroundMode
Definition: audiooutputbase.h:229
AudioOutputBase::m_processing
bool m_processing
Definition: audiooutputbase.h:234
AsyncLooseLock::Clear
void Clear()
Definition: audiooutputbase.h:29
AudioOutputSettings
Definition: audiooutputsettings.h:48
AudioOutputBase::usesSpdif
bool usesSpdif() const
Definition: audiooutputbase.h:159
audiooutput.h
AudioOutputBase::AddFrames
bool AddFrames(void *buffer, int frames, std::chrono::milliseconds timecode) override
Add frames to the audiobuffer and perform any required processing.
Definition: audiooutputbase.cpp:1317
AudioOutputBase::SetStretchFactor
void SetStretchFactor(float factor) override
Set the timestretch factor.
Definition: audiooutputbase.cpp:361
AudioOutputBase::m_bytesPerFrame
int m_bytesPerFrame
Definition: audiooutputbase.h:165
AudioOutputBase::m_effDsp
int m_effDsp
Definition: audiooutputbase.h:170
AudioOutputBase::CanProcess
bool CanProcess(AudioFormat) override
Definition: audiooutputbase.h:70
AudioOutputBase::InitSettings
void InitSettings(const AudioSettings &settings)
Definition: audiooutputbase.cpp:120
AudioOutputBase::OpenDevice
virtual bool OpenDevice(void)=0
AudioOutputBase::IsPaused
bool IsPaused(void) const override
Definition: audiooutputbase.h:89
AudioFormat
AudioFormat
Definition: audiooutputsettings.h:24
AudioOutputBase::PauseUntilBuffered
void PauseUntilBuffered(void) override
Definition: audiooutputbase.cpp:925
AudioOutputBase::CanProcess
uint32_t CanProcess(void) override
Definition: audiooutputbase.h:71
MThread
This is a wrapper around QThread that does several additional things.
Definition: mthread.h:48
AudioOutputBase::StartOutputThread
virtual bool StartOutputThread(void)
Definition: audiooutputbase.cpp:847
mthread.h
AudioOutputBase::m_audioBuffer
std::array< uchar, kAudioRingBufferSize > m_audioBuffer
main audio buffer
Definition: audiooutputbase.h:285
AudioOutputBase::m_audioBufLock
QMutex m_audioBufLock
Writes to the audiobuffer, reconfigures and audiobuffer resets can only take place while holding this...
Definition: audiooutputbase.h:244
AudioOutputBase::m_source
AudioOutputSource m_source
Definition: audiooutputbase.h:184
AudioOutputBase::GetOutputSettingsUsers
AudioOutputSettings * GetOutputSettingsUsers(bool digital=false) override
Returns capabilities supported by the audio device amended to take into account the digital audio opt...
Definition: audiooutputbase.cpp:187
AudioOutputBase::SetStretchFactorLocked
void SetStretchFactorLocked(float factor)
Set the timestretch factor.
Definition: audiooutputbase.cpp:286
AudioOutputBase::m_fragmentSize
int m_fragmentSize
Definition: audiooutputbase.h:171
AudioOutputBase::QUALITY_LOW
@ QUALITY_LOW
Definition: audiooutputbase.h:200
SPDIFEncoder
Definition: spdifencoder.h:14
FORMAT_FLT
@ FORMAT_FLT
Definition: audiooutputsettings.h:31
AudioOutputBase::m_outputSettings
AudioOutputSettings * m_outputSettings
Definition: audiooutputbase.h:215
AudioOutputBase::GetBufferStatus
void GetBufferStatus(uint &fill, uint &total) override
Fill in the number of bytes in the audiobuffer and the total size of the audiobuffer.
Definition: audiooutputbase.cpp:1649
AudioOutputBase::m_framesBuffered
int64_t m_framesBuffered
Definition: audiooutputbase.h:236
AudioOutputBase::GetAudioBufferedTime
std::chrono::milliseconds GetAudioBufferedTime(void) override
Get the difference in timecode between the samples that are about to become audible and the samples m...
Definition: audiooutputbase.cpp:1161
AudioOutputBase::QUALITY_MEDIUM
@ QUALITY_MEDIUM
Definition: audiooutputbase.h:201
AudioOutputBase::m_audioTime
std::chrono::milliseconds m_audioTime
timecode of audio leaving the soundcard (same units as timecodes)
Definition: audiooutputbase.h:255
AudioOutputBase::QUALITY_DISABLED
@ QUALITY_DISABLED
Definition: audiooutputbase.h:199
AudioOutputBase::GetBaseAudBufTimeCode
std::chrono::milliseconds GetBaseAudBufTimeCode() const
Definition: audiooutputbase.h:156
AudioOutputBase::m_srcCtx
SRC_STATE * m_srcCtx
Definition: audiooutputbase.h:219
AudioOutputBase::m_usesSpdif
bool m_usesSpdif
Definition: audiooutputbase.h:291
AudioOutputBase::kAudioSRCInputSize
static const uint kAudioSRCInputSize
Definition: audiooutputbase.h:111
AudioOutputBase::m_memoryCorruptionTest3
uint m_memoryCorruptionTest3
Definition: audiooutputbase.h:286
AudioOutputBase::ToggleUpmix
bool ToggleUpmix(void) override
Toggle between stereo and upmixed 5.1 if the source material is stereo.
Definition: audiooutputbase.cpp:386
AudioOutputBase::m_srcData
SRC_DATA m_srcData
Definition: audiooutputbase.h:275
uint
unsigned int uint
Definition: freesurround.h:24
AudioOutputBase::SetSourceBitrate
void SetSourceBitrate(int rate) override
Set the bitrate of the source material, reported in periodic OutputEvents.
Definition: audiooutputbase.cpp:275
AudioOutputBase::m_outputSettingsDigital
AudioOutputSettings * m_outputSettingsDigital
Definition: audiooutputbase.h:217
AudioOutputSource
AudioOutputSource
Definition: audiosettings.h:21
AudioOutputBase::m_needsDownmix
bool m_needsDownmix
Definition: audiooutputbase.h:228
AsyncLooseLock::TestAndDeref
bool TestAndDeref()
Definition: audiooutputbase.h:31
AudioOutputBase::OutputSettings
AudioOutputSettings * OutputSettings(bool digital=true)
Definition: audiooutputbase.cpp:461