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"
15 
16 #include "audiooutput.h"
17 #include "samplerate.h"
18 
19 // NOLINTBEGIN(cppcoreguidelines-macro-usage)
20 #define VBAUDIO(str) LOG(VB_AUDIO, LOG_INFO, LOC + (str))
21 #define VBAUDIOTS(str) LOG(VB_AUDIO | VB_TIMESTAMP, LOG_INFO, LOC + (str))
22 #define VBGENERAL(str) LOG(VB_GENERAL, LOG_INFO, LOC + (str))
23 #define VBERROR(str) LOG(VB_GENERAL, LOG_ERR, LOC + (str))
24 #define VBWARN(str) LOG(VB_GENERAL, LOG_WARNING, LOC + (str))
25 #define VBERRENO(str) Error(LOC + (str) + ": " + ENO)
26 #define VBERRNOCONST(str) LOG(VB_GENERAL, LOG_ERR, LOC + (str) + ": " + ENO)
27 // NOLINTEND(cppcoreguidelines-macro-usage)
28 
29 namespace soundtouch {
30 class SoundTouch;
31 };
32 class FreeSurround;
34 struct AVCodecContext;
35 
37 {
38 public:
39  AsyncLooseLock() = default;
40  void Clear() { m_head = m_tail = 0; }
41  void Ref() { m_head++; }
42  bool TestAndDeref() { bool r = (m_head != m_tail); if (r) m_tail++; return r; }
43 private:
44  int m_head {0};
45  int m_tail {0};
46 };
47 
48 // Forward declaration of SPDIF encoder
49 class SPDIFEncoder;
50 
51 class AudioOutputBase : public AudioOutput, public MThread
52 {
53  public:
54  static const char *quality_string(int q);
55  explicit AudioOutputBase(const AudioSettings &settings);
56  ~AudioOutputBase() override;
57 
58  AudioOutputSettings* GetOutputSettingsCleaned(bool digital = true) override; // AudioOutput
59  AudioOutputSettings* GetOutputSettingsUsers(bool digital = false) override; // AudioOutput
60 
61  // reconfigure sound out for new params
62  void Reconfigure(const AudioSettings &settings) override; // AudioOutput
63 
64  // dsprate is in 100 * samples/second
65  void SetEffDsp(int dsprate) override; // AudioOutput
66 
67  // timestretch
68  void SetStretchFactor(float factor) override; // AudioOutput
69  float GetStretchFactor(void) const override; // AudioOutput
70  int GetChannels(void) const override { return m_channels; } // AudioOutput
71  AudioFormat GetFormat(void) const override { return m_format; }; // AudioOutput
72  int GetBytesPerFrame(void) const override // AudioOutput
73  { return m_sourceBytesPerFrame; }
74 
75  bool CanPassthrough(int samplerate, int channels,
76  AVCodecID codec, int profile) const override; // AudioOutput
77  bool CanDownmix(void) const override { return true; } // AudioOutput
78  bool IsUpmixing(void) override; // AudioOutput
79  bool ToggleUpmix(void) override; // AudioOutput
80  bool CanUpmix(void) override; // AudioOutput
81  bool CanProcess(AudioFormat /*fmt*/) override { return true; } // AudioOutput
82  uint32_t CanProcess(void) override // AudioOutput
83  {
84  // we support all codec
85  return ~(((~0ULL) >> FORMAT_FLT) << FORMAT_FLT);
86  }
87 
88  void Reset(void) override; // AudioOutput
89 
90  void SetSWVolume(int new_volume, bool save) override; // VolumeBase
91  int GetSWVolume(void) override; // VolumeBase
92 
93  // timecode is in milliseconds.
94  bool AddFrames(void *buffer, int frames, std::chrono::milliseconds timecode) override; // AudioOutput
95  bool AddData(void *buffer, int len, std::chrono::milliseconds timecode, int frames) override; // AudioOutput
96  bool NeedDecodingBeforePassthrough() const override { return false; }; // AudioOutput
97  std::chrono::milliseconds LengthLastData(void) const override { return m_lengthLastData; } // AudioOutput
98 
99  void SetTimecode(std::chrono::milliseconds timecode) override; // AudioOutput
100  bool IsPaused(void) const override { return m_actuallyPaused; } // AudioOutput
101  void Pause(bool paused) override; // AudioOutput
102  void PauseUntilBuffered(void) override; // AudioOutput
103 
104  // Wait for all data to finish playing
105  void Drain(void) override; // AudioOutput
106 
107  std::chrono::milliseconds GetAudiotime(void) override; // AudioOutput
108  std::chrono::milliseconds GetAudioBufferedTime(void) override; // AudioOutput
109 
110  // Send output events showing current progress
111  virtual void Status(void);
112 
113  void SetSourceBitrate(int rate) override; // AudioOutput
114 
115  void GetBufferStatus(uint &fill, uint &total) override; // AudioOutput
116 
117  // Only really used by the AudioOutputNULL object
118  void bufferOutputData(bool y) override // AudioOutput
119  { m_bufferOutputDataForUse = y; }
120  int readOutputData(unsigned char *read_buffer, size_t max_length) override; // AudioOutput
121 
122  static const uint kAudioSRCInputSize = 16384;
123 
125  // In other words, divisible by 96.
126  static const uint kAudioRingBufferSize = 10239936U;
127 
128  protected:
129  // Following function must be called from subclass constructor
130  void InitSettings(const AudioSettings &settings);
131 
132  // You need to implement the following functions
133  virtual bool OpenDevice(void) = 0;
134  virtual void CloseDevice(void) = 0;
135  virtual void WriteAudio(unsigned char *aubuf, int size) = 0;
140  virtual int GetBufferedOnSoundcard(void) const = 0;
141  // Default implementation only supports 2ch s16le at 48kHz
142  virtual AudioOutputSettings* GetOutputSettings(bool /*digital*/)
143  { return new AudioOutputSettings; }
144  // You need to call this from any implementation in the dtor.
145  void KillAudio(void);
146 
147  // The following functions may be overridden, but don't need to be
148  virtual bool StartOutputThread(void);
149  virtual void StopOutputThread(void);
150 
151  int GetAudioData(uchar *buffer, int buf_size, bool full_buffer,
152  volatile uint *local_raud = nullptr);
153 
154  void OutputAudioLoop(void);
155 
156  void run() override; // MThread
157 
158  int CheckFreeSpace(int &frames);
159 
160  inline int audiolen() const; // number of valid bytes in audio buffer
161  int audiofree() const; // number of free bytes in audio buffer
162  int audioready() const; // number of bytes ready to be written
163 
164  void SetStretchFactorLocked(float factor);
165 
166  // For audiooutputca
167  std::chrono::milliseconds GetBaseAudBufTimeCode() const
168  { return m_audbufTimecode; }
169 
170  bool usesSpdif() const { return m_usesSpdif; }
171 
172  protected:
173  // Basic details about the audio stream
174  int m_channels {-1};
175  AVCodecID m_codec {AV_CODEC_ID_NONE};
180  int m_sampleRate {-1};
181  int m_effDsp {0}; // from the recorded stream (NuppelVideo)
182  int m_fragmentSize {0};
184 
185  QString m_mainDevice;
187  bool m_discreteDigital {false};
188 
189  bool m_passthru {false};
190  bool m_enc {false};
191  bool m_reEnc {false};
192 
193  float m_stretchFactor {1.0F};
194  int m_effStretchFactor {100000}; // scaled to 100000 ase ffdsp is
196 
197  bool m_killAudio {false};
198 
199  bool m_pauseAudio {false};
200  bool m_actuallyPaused {false};
201  bool m_wasPaused {false};
202  bool m_unpauseWhenReady {false};
204  bool m_bufferOutputDataForUse {false}; // used by AudioOutputNULL
205 
207  int m_maxChannels {0};
208  enum
209  {
214  };
216  long m_sourceBitRate {-1};
218 
219  private:
220  bool SetupPassthrough(AVCodecID codec, int codec_profile,
221  int &samplerate_tmp, int &channels_tmp);
222  AudioOutputSettings* OutputSettings(bool digital = true);
223  int CopyWithUpmix(char *buffer, int frames, uint &org_waud);
224  void SetAudiotime(int frames, std::chrono::milliseconds timecode);
229  bool m_needResampler {false};
230  SRC_STATE *m_srcCtx {nullptr};
231  soundtouch::SoundTouch *m_pSoundStretch {nullptr};
234 
237  bool m_upmixDefault {false};
238  bool m_needsUpmix {false};
239  bool m_needsDownmix {false};
241  float m_oldStretchFactor {1.0F};
242  int m_volume {80};
244 
245  bool m_processing {false};
246 
247  int64_t m_framesBuffered {0};
248 
249  bool m_audioThreadExists {false};
250 
256 
261  QMutex m_avsyncLock;
262 
266  std::chrono::milliseconds m_audioTime {0ms};
267 
271  volatile uint m_raud {0}; // read position
272  volatile uint m_waud {0}; // write position
276  std::chrono::milliseconds m_audbufTimecode {0ms};
278 
280 
281  std::chrono::seconds m_currentSeconds {-1s};
282 
283  float *m_srcIn;
284 
285  // All actual buffers
286  SRC_DATA m_srcData {};
287  [[maybe_unused]] uint m_memoryCorruptionTest0 {0xdeadbeef};
288  alignas(16) std::array<float,kAudioSRCInputSize> m_srcInBuf {};
289  [[maybe_unused]] uint m_memoryCorruptionTest1 {0xdeadbeef};;
290  float *m_srcOut {nullptr};
292  [[maybe_unused]] uint m_memoryCorruptionTest2 {0xdeadbeef};;
296  std::array<uchar,kAudioRingBufferSize> m_audioBuffer {0};
297  [[maybe_unused]] uint m_memoryCorruptionTest3 {0xdeadbeef};;
298  bool m_configureSucceeded {false};
299  std::chrono::milliseconds m_lengthLastData {0ms};
300 
301  // SPDIF Encoder for digital passthrough
302  bool m_usesSpdif {true};
304 
305  // Flag indicating if SetStretchFactor enabled audio float processing
306  bool m_forcedProcessing {false};
307  int m_previousBpf {0};
308 };
309 
310 #endif
AudioOutputBase::m_srcOut
float * m_srcOut
Definition: audiooutputbase.h:290
AudioOutputBase::m_enc
bool m_enc
Definition: audiooutputbase.h:190
FORMAT_NONE
@ FORMAT_NONE
Definition: audiooutputsettings.h:25
AudioOutputBase::m_outputSettingsRaw
AudioOutputSettings * m_outputSettingsRaw
Definition: audiooutputbase.h:225
AudioOutputBase::m_srcIn
float * m_srcIn
Definition: audiooutputbase.h:283
AudioOutputBase::Reset
void Reset(void) override
Reset the audiobuffer, timecode and mythmusic visualisation.
Definition: audiooutputbase.cpp:931
AudioOutputBase::m_pSoundStretch
soundtouch::SoundTouch * m_pSoundStretch
Definition: audiooutputbase.h:231
AudioOutputBase::GetBytesPerFrame
int GetBytesPerFrame(void) const override
Definition: audiooutputbase.h:72
AudioOutputBase::m_discreteDigital
bool m_discreteDigital
Definition: audiooutputbase.h:187
AudioOutputBase::SetTimecode
void SetTimecode(std::chrono::milliseconds timecode) override
Set the timecode of the samples most recently added to the audiobuffer.
Definition: audiooutputbase.cpp:969
AudioOutputBase::Pause
void Pause(bool paused) override
Definition: audiooutputbase.cpp:909
AudioOutputBase::m_raud
volatile uint m_raud
Audio circular buffer.
Definition: audiooutputbase.h:271
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:1323
soundtouch
Definition: audiooutputbase.h:29
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:1190
AudioOutputBase::audiolen
int audiolen() const
Get the number of bytes in the audiobuffer.
Definition: audiooutputbase.cpp:990
AudioOutputBase::m_bufferOutputDataForUse
bool m_bufferOutputDataForUse
Definition: audiooutputbase.h:204
AudioOutputBase::m_resetActive
AsyncLooseLock m_resetActive
Definition: audiooutputbase.h:277
AudioOutputBase::m_avsyncLock
QMutex m_avsyncLock
must hold avsync_lock to read or write 'audiotime' and 'audiotime_updated'
Definition: audiooutputbase.h:261
AudioOutputBase::m_forcedProcessing
bool m_forcedProcessing
Definition: audiooutputbase.h:306
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:209
AsyncLooseLock
Definition: audiooutputbase.h:36
AudioOutputBase::m_needResampler
bool m_needResampler
Definition: audiooutputbase.h:229
AudioOutputBase::CloseDevice
virtual void CloseDevice(void)=0
AudioOutputBase::m_configureSucceeded
bool m_configureSucceeded
Definition: audiooutputbase.h:298
AudioOutputBase::m_memoryCorruptionTest2
uint m_memoryCorruptionTest2
Definition: audiooutputbase.h:292
AudioOutputBase::SetupPassthrough
bool SetupPassthrough(AVCodecID codec, int codec_profile, int &samplerate_tmp, int &channels_tmp)
Definition: audiooutputbase.cpp:409
AudioOutputBase::audiofree
int audiofree() const
Get the free space in the audiobuffer in bytes.
Definition: audiooutputbase.cpp:1000
AudioOutputBase::m_previousBpf
int m_previousBpf
Definition: audiooutputbase.h:307
AudioOutputBase::KillAudio
void KillAudio(void)
Kill the output thread and cleanup.
Definition: audiooutputbase.cpp:867
AudioOutputBase::readOutputData
int readOutputData(unsigned char *read_buffer, size_t max_length) override
Definition: audiooutputbase.cpp:1854
AudioOutputBase::GetAudiotime
std::chrono::milliseconds GetAudiotime(void) override
Calculate the timecode of the samples that are about to become audible.
Definition: audiooutputbase.cpp:1025
AudioOutputBase::GetStretchFactor
float GetStretchFactor(void) const override
Get the timetretch factor.
Definition: audiooutputbase.cpp:366
FreeSurround
Definition: freesurround.h:26
AudioOutputBase::IsUpmixing
bool IsUpmixing(void) override
Source is currently being upmixed.
Definition: audiooutputbase.cpp:374
AudioOutputBase::SetEffDsp
void SetEffDsp(int dsprate) override
Set the effective DSP rate.
Definition: audiooutputbase.cpp:981
AudioOutputBase::CanDownmix
bool CanDownmix(void) const override
Definition: audiooutputbase.h:77
AudioOutputBase::m_audbufTimecode
std::chrono::milliseconds m_audbufTimecode
timecode of audio most recently placed into buffer
Definition: audiooutputbase.h:276
AudioOutputBase::quality_string
static const char * quality_string(int q)
Definition: audiooutputbase.cpp:53
AudioOutputBase::m_sampleRate
int m_sampleRate
Definition: audiooutputbase.h:180
AudioOutputBase::m_volume
int m_volume
Definition: audiooutputbase.h:242
AudioOutputBase::m_sourceChannels
int m_sourceChannels
Definition: audiooutputbase.h:235
AudioOutputBase::m_killAudio
bool m_killAudio
Definition: audiooutputbase.h:197
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:1105
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::m_kAudioSRCOutputSize
int m_kAudioSRCOutputSize
Definition: audiooutputbase.h:291
AudioSettings
Definition: audiosettings.h:28
AudioOutputBase::m_lengthLastData
std::chrono::milliseconds m_lengthLastData
Definition: audiooutputbase.h:299
AudioOutputBase::m_mainDevice
QString m_mainDevice
Definition: audiooutputbase.h:185
AudioOutputBase::LengthLastData
std::chrono::milliseconds LengthLastData(void) const override
Definition: audiooutputbase.h:97
AsyncLooseLock::Ref
void Ref()
Definition: audiooutputbase.h:41
AudioOutputBase::Drain
void Drain(void) override
Block until all available frames have been written to the device.
Definition: audiooutputbase.cpp:1829
AudioOutputBase::m_soundcardBufferSize
long m_soundcardBufferSize
Definition: audiooutputbase.h:183
AudioOutputBase::m_stretchFactor
float m_stretchFactor
Definition: audiooutputbase.h:193
AudioOutputBase::m_unpauseWhenReady
bool m_unpauseWhenReady
Definition: audiooutputbase.h:202
AudioOutputBase::GetChannels
int GetChannels(void) const override
Definition: audiooutputbase.h:70
AudioOutput
Definition: audiooutput.h:26
AudioOutputBase
Definition: audiooutputbase.h:51
AudioOutputBase::m_srcInBuf
std::array< float, kAudioSRCInputSize > m_srcInBuf
Definition: audiooutputbase.h:288
AudioOutputDigitalEncoder
Definition: audiooutputdigitalencoder.h:14
AudioOutputBase::m_upmixer
FreeSurround * m_upmixer
Definition: audiooutputbase.h:233
AudioOutputBase::m_killAudioLock
QMutex m_killAudioLock
Definition: audiooutputbase.h:279
mythlogging.h
AudioOutputBase::m_srcQuality
int m_srcQuality
Definition: audiooutputbase.h:215
AudioOutputBase::m_volumeControl
QString m_volumeControl
Definition: audiooutputbase.h:243
AudioOutputBase::m_audioThreadExists
bool m_audioThreadExists
Definition: audiooutputbase.h:249
hardwareprofile.scan.profile
profile
Definition: scan.py:97
AudioOutputBase::m_format
AudioFormat m_format
Definition: audiooutputbase.h:178
AudioOutputBase::AudioOutputBase
AudioOutputBase(const AudioSettings &settings)
Definition: audiooutputbase.cpp:65
AudioOutputBase::m_waud
volatile uint m_waud
Definition: audiooutputbase.h:272
AudioOutputBase::m_sourceSampleRate
int m_sourceSampleRate
Definition: audiooutputbase.h:217
AsyncLooseLock::m_head
int m_head
Definition: audiooutputbase.h:44
AudioOutputBase::QUALITY_LOW
@ QUALITY_LOW
Definition: audiooutputbase.h:211
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:238
AudioOutputBase::m_effStretchFactor
int m_effStretchFactor
Definition: audiooutputbase.h:194
AudioOutputBase::StopOutputThread
virtual void StopOutputThread(void)
Definition: audiooutputbase.cpp:855
FORMAT_FLT
@ FORMAT_FLT
Definition: audiooutputsettings.h:31
AudioOutputBase::Reconfigure
void Reconfigure(const AudioSettings &settings) override
(Re)Configure AudioOutputBase
Definition: audiooutputbase.cpp:469
AudioOutputBase::GetOutputSettings
virtual AudioOutputSettings * GetOutputSettings(bool)
Definition: audiooutputbase.h:142
AudioOutputBase::~AudioOutputBase
~AudioOutputBase() override
Destructor.
Definition: audiooutputbase.cpp:94
AudioOutputBase::m_memoryCorruptionTest1
uint m_memoryCorruptionTest1
Definition: audiooutputbase.h:289
AudioOutputBase::m_oldStretchFactor
float m_oldStretchFactor
Definition: audiooutputbase.h:241
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:1742
AudioOutputBase::m_maxChannels
int m_maxChannels
Definition: audiooutputbase.h:207
AudioOutputBase::m_currentSeconds
std::chrono::seconds m_currentSeconds
Definition: audiooutputbase.h:281
AudioOutputBase::NeedDecodingBeforePassthrough
bool NeedDecodingBeforePassthrough() const override
Definition: audiooutputbase.h:96
AudioOutputBase::m_outputSettingsDigitalRaw
AudioOutputSettings * m_outputSettingsDigitalRaw
Definition: audiooutputbase.h:227
AudioOutputBase::m_pauseAudio
bool m_pauseAudio
Definition: audiooutputbase.h:199
AudioOutputBase::QUALITY_MEDIUM
@ QUALITY_MEDIUM
Definition: audiooutputbase.h:212
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:126
AudioOutputBase::run
void run() override
Main routine for the output thread.
Definition: audiooutputbase.cpp:1845
AudioOutputBase::bufferOutputData
void bufferOutputData(bool y) override
Definition: audiooutputbase.h:118
AudioOutputBase::m_sourceBytesPerFrame
int m_sourceBytesPerFrame
Definition: audiooutputbase.h:236
uint
unsigned int uint
Definition: compat.h:81
AudioOutputBase::m_upmixDefault
bool m_upmixDefault
Definition: audiooutputbase.h:237
AudioOutputBase::m_passthru
bool m_passthru
Definition: audiooutputbase.h:189
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:1648
AudioOutputBase::m_outputFormat
AudioFormat m_outputFormat
Definition: audiooutputbase.h:179
AudioOutputBase::m_encoder
AudioOutputDigitalEncoder * m_encoder
Definition: audiooutputbase.h:232
AudioOutputBase::m_reEnc
bool m_reEnc
Definition: audiooutputbase.h:191
AudioOutputBase::GetSWVolume
int GetSWVolume(void) override
Get the volume for software volume control.
Definition: audiooutputbase.cpp:1177
AudioOutputBase::audioready
int audioready() const
Get the scaled number of bytes in the audiobuffer, i.e.
Definition: audiooutputbase.cpp:1015
AudioOutputBase::m_channels
int m_channels
Definition: audiooutputbase.h:174
AudioOutputBase::CopyWithUpmix
int CopyWithUpmix(char *buffer, int frames, uint &org_waud)
Copy frames into the audiobuffer, upmixing en route if necessary.
Definition: audiooutputbase.cpp:1225
AudioOutputBase::m_configuredChannels
int m_configuredChannels
Definition: audiooutputbase.h:206
AudioOutputBase::m_setInitialVol
bool m_setInitialVol
Definition: audiooutputbase.h:203
AudioOutputBase::m_passthruDevice
QString m_passthruDevice
Definition: audiooutputbase.h:186
AudioOutputBase::m_spdifEnc
SPDIFEncoder * m_spdifEnc
Definition: audiooutputbase.h:303
AudioOutputBase::m_codec
AVCodecID m_codec
Definition: audiooutputbase.h:175
AudioOutputBase::SetSWVolume
void SetSWVolume(int new_volume, bool save) override
Set the volume for software volume control.
Definition: audiooutputbase.cpp:1167
AudioOutputBase::CanUpmix
bool CanUpmix(void) override
Upmixing of the current source is available if requested.
Definition: audiooutputbase.cpp:400
AudioOutputBase::Status
virtual void Status(void)
Report status via an OutputEvent.
Definition: audiooutputbase.cpp:1613
AudioOutputBase::GetFormat
AudioFormat GetFormat(void) const override
Definition: audiooutputbase.h:71
AudioOutputBase::WriteAudio
virtual void WriteAudio(unsigned char *aubuf, int size)=0
AudioOutputBase::m_outputBytesPerFrame
int m_outputBytesPerFrame
Definition: audiooutputbase.h:177
AudioOutputBase::m_sourceBitRate
long m_sourceBitRate
Definition: audiooutputbase.h:216
AudioOutputBase::m_actuallyPaused
bool m_actuallyPaused
Definition: audiooutputbase.h:200
AudioOutputBase::m_memoryCorruptionTest0
uint m_memoryCorruptionTest0
Definition: audiooutputbase.h:287
AsyncLooseLock::m_tail
int m_tail
Definition: audiooutputbase.h:45
AudioOutputBase::m_wasPaused
bool m_wasPaused
Definition: audiooutputbase.h:201
AudioOutputBase::m_surroundMode
int m_surroundMode
Definition: audiooutputbase.h:240
AudioOutputBase::m_processing
bool m_processing
Definition: audiooutputbase.h:245
AsyncLooseLock::Clear
void Clear()
Definition: audiooutputbase.h:40
AudioOutputSettings
Definition: audiooutputsettings.h:48
AudioOutputBase::usesSpdif
bool usesSpdif() const
Definition: audiooutputbase.h:170
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:1311
AudioOutputBase::QUALITY_DISABLED
@ QUALITY_DISABLED
Definition: audiooutputbase.h:210
AudioOutputBase::SetStretchFactor
void SetStretchFactor(float factor) override
Set the timestretch factor.
Definition: audiooutputbase.cpp:357
AudioOutputBase::m_bytesPerFrame
int m_bytesPerFrame
Definition: audiooutputbase.h:176
AudioOutputBase::m_effDsp
int m_effDsp
Definition: audiooutputbase.h:181
AudioOutputBase::CanProcess
bool CanProcess(AudioFormat) override
Definition: audiooutputbase.h:81
AudioOutputBase::InitSettings
void InitSettings(const AudioSettings &settings)
Definition: audiooutputbase.cpp:120
AudioOutputBase::QUALITY_HIGH
@ QUALITY_HIGH
Definition: audiooutputbase.h:213
AudioOutputBase::OpenDevice
virtual bool OpenDevice(void)=0
AudioOutputBase::IsPaused
bool IsPaused(void) const override
Definition: audiooutputbase.h:100
AudioOutputBase::PauseUntilBuffered
void PauseUntilBuffered(void) override
Definition: audiooutputbase.cpp:921
AudioOutputBase::CanProcess
uint32_t CanProcess(void) override
Definition: audiooutputbase.h:82
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:843
mthread.h
AudioOutputSource
AudioOutputSource
Definition: audiosettings.h:21
AudioOutputBase::m_audioBuffer
std::array< uchar, kAudioRingBufferSize > m_audioBuffer
main audio buffer
Definition: audiooutputbase.h:296
AudioOutputBase::m_audioBufLock
QMutex m_audioBufLock
Writes to the audiobuffer, reconfigures and audiobuffer resets can only take place while holding this...
Definition: audiooutputbase.h:255
AudioOutputBase::m_source
AudioOutputSource m_source
Definition: audiooutputbase.h:195
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:185
AudioOutputBase::SetStretchFactorLocked
void SetStretchFactorLocked(float factor)
Set the timestretch factor.
Definition: audiooutputbase.cpp:282
AudioOutputBase::m_fragmentSize
int m_fragmentSize
Definition: audiooutputbase.h:182
SPDIFEncoder
Definition: spdifencoder.h:14
AudioOutputBase::m_outputSettings
AudioOutputSettings * m_outputSettings
Definition: audiooutputbase.h:226
AudioFormat
AudioFormat
Definition: audiooutputsettings.h:24
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:1637
AudioOutputBase::m_framesBuffered
int64_t m_framesBuffered
Definition: audiooutputbase.h:247
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:1155
AudioOutputBase::m_audioTime
std::chrono::milliseconds m_audioTime
timecode of audio leaving the soundcard (same units as timecodes)
Definition: audiooutputbase.h:266
AudioOutputBase::GetBaseAudBufTimeCode
std::chrono::milliseconds GetBaseAudBufTimeCode() const
Definition: audiooutputbase.h:167
AudioOutputBase::m_srcCtx
SRC_STATE * m_srcCtx
Definition: audiooutputbase.h:230
AudioOutputBase::m_usesSpdif
bool m_usesSpdif
Definition: audiooutputbase.h:302
AudioOutputBase::kAudioSRCInputSize
static const uint kAudioSRCInputSize
Definition: audiooutputbase.h:122
AudioOutputBase::m_memoryCorruptionTest3
uint m_memoryCorruptionTest3
Definition: audiooutputbase.h:297
AudioOutputBase::ToggleUpmix
bool ToggleUpmix(void) override
Toggle between stereo and upmixed 5.1 if the source material is stereo.
Definition: audiooutputbase.cpp:382
AudioOutputBase::m_srcData
SRC_DATA m_srcData
Definition: audiooutputbase.h:286
AudioOutputBase::SetSourceBitrate
void SetSourceBitrate(int rate) override
Set the bitrate of the source material, reported in periodic OutputEvents.
Definition: audiooutputbase.cpp:271
AudioOutputBase::m_outputSettingsDigital
AudioOutputSettings * m_outputSettingsDigital
Definition: audiooutputbase.h:228
AudioOutputBase::m_needsDownmix
bool m_needsDownmix
Definition: audiooutputbase.h:239
AsyncLooseLock::TestAndDeref
bool TestAndDeref()
Definition: audiooutputbase.h:42
AudioOutputBase::OutputSettings
AudioOutputSettings * OutputSettings(bool digital=true)
Definition: audiooutputbase.cpp:457