MythTV  master
audioplayer.cpp
Go to the documentation of this file.
1 
2 #include "audioplayer.h"
4 #include "mythplayer.h"
5 #include "audiooutput.h"
7 
8 #define LOC QString("AudioPlayer: ")
9 
10 //static const QString _Location = AudioPlayer::tr("Audio Player");
11 
13  : m_parent(parent),
14  m_mutedOnCreation(muted)
15 {
16  m_controlsVolume = gCoreContext->GetBoolSetting("MythControlsVolume", true);
17 }
18 
20 {
21  DeleteOutput();
22  m_visuals.clear();
23 }
24 
26 {
27  if (!m_audioOutput)
28  return;
29 
30  QMutexLocker lock(&m_lock);
31  auto it = std::find(m_visuals.begin(), m_visuals.end(), vis);
32  if (it == m_visuals.end())
33  {
34  m_visuals.push_back(vis);
36  }
37 }
38 
40 {
41  if (!m_audioOutput)
42  return;
43 
44  QMutexLocker lock(&m_lock);
45  auto it = std::find(m_visuals.begin(), m_visuals.end(), vis);
46  if (it != m_visuals.end())
47  {
48  m_visuals.erase(it);
50  }
51 }
52 
54 {
55  if (!m_audioOutput)
56  return;
57 
58  QMutexLocker lock(&m_lock);
59  for (auto & visual : m_visuals)
60  m_audioOutput->addVisual(visual);
61 }
62 
64 {
65  if (!m_audioOutput)
66  return;
67 
68  QMutexLocker lock(&m_lock);
69  for (auto & visual : m_visuals)
70  m_audioOutput->removeVisual(visual);
71 }
72 
74 {
75  if (!m_audioOutput)
76  return;
77 
78  QMutexLocker lock(&m_lock);
79  for (auto & visual : m_visuals)
80  visual->prepare();
81 }
82 
84 {
85  if (!m_audioOutput)
86  return;
87 
88  QMutexLocker lock(&m_lock);
90 }
91 
93 {
94  RemoveVisuals();
95  QMutexLocker locker(&m_lock);
96  if (m_audioOutput)
97  {
98  delete m_audioOutput;
99  m_audioOutput = nullptr;
100  }
101  m_noAudioOut = true;
102 }
103 
105 {
106  bool want_audio = m_parent->IsAudioNeeded();
107  QString errMsg;
108  QMutexLocker lock(&m_lock);
109 
110  if ((m_format == FORMAT_NONE) ||
111  (m_channels <= 0) ||
112  (m_sampleRate <= 0))
113  {
114  m_noAudioIn = m_noAudioOut = true;
115  }
116  else
117  m_noAudioIn = false;
118 
119  if (want_audio && !m_audioOutput)
120  {
121  // AudioOutput has never been created and we will want audio
128  if (m_noAudioIn)
129  aos.m_init = false;
130 
132  if (!m_audioOutput)
133  {
134  errMsg = tr("Unable to create AudioOutput.");
135  }
136  else
137  {
138  errMsg = m_audioOutput->GetError();
139  }
140  AddVisuals();
141  }
142  else if (!m_noAudioIn && m_audioOutput)
143  {
144  const AudioSettings settings(m_format, m_channels, m_codec,
147  m_audioOutput->Reconfigure(settings);
148  errMsg = m_audioOutput->GetError();
150  }
151 
152  if (!errMsg.isEmpty())
153  {
154  LOG(VB_GENERAL, LOG_NOTICE, LOC + "Disabling Audio" +
155  QString(", reason is: %1").arg(errMsg));
156  ShowNotificationError(tr("Disabling Audio"),
157  AudioPlayer::tr( "Audio Player" ), errMsg);
158  m_noAudioOut = true;
159  }
160  else if (m_noAudioOut && m_audioOutput)
161  {
162  LOG(VB_GENERAL, LOG_NOTICE, LOC + "Enabling Audio");
163  m_noAudioOut = false;
164  }
165 
166  if (m_mutedOnCreation)
167  {
169  m_mutedOnCreation = false;
170  }
171 
172  ResetVisuals();
173 
174  return errMsg;
175 }
176 
178 {
179  if (m_format == FORMAT_NONE)
180  m_noAudioIn = m_noAudioOut = true;
181 }
182 
183 bool AudioPlayer::Pause(bool pause)
184 {
185  if (!m_audioOutput || m_noAudioOut)
186  return false;
187 
188  QMutexLocker lock(&m_lock);
189  m_audioOutput->Pause(pause);
190  return true;
191 }
192 
194 {
195  if (!m_audioOutput || m_noAudioOut)
196  return false;
197  QMutexLocker lock(&m_lock);
198  return m_audioOutput->IsPaused();
199 }
200 
202 {
203  if (!m_audioOutput || m_noAudioOut)
204  return;
205  QMutexLocker lock(&m_lock);
207 }
208 
210 {
211  // delete current audio class if any
212  DeleteOutput();
213  m_lock.lock();
214  m_audioOutput = ao;
215  AddVisuals();
216  m_lock.unlock();
217 }
218 
220 {
221  if (!m_audioOutput || m_noAudioOut)
222  return 0;
223  QMutexLocker lock(&m_lock);
225 }
226 
231 void AudioPlayer::SetAudioInfo(const QString &main_device,
232  const QString &passthru_device,
233  uint samplerate,
234  int codec_profile)
235 {
236  m_mainDevice.clear();
237  m_passthruDevice.clear();
238  if (!main_device.isEmpty())
239  m_mainDevice = main_device;
240  if (!passthru_device.isEmpty())
241  m_passthruDevice = passthru_device;
242  m_sampleRate = (int)samplerate;
243  m_codecProfile = codec_profile;
244 }
245 
250 void AudioPlayer::SetAudioParams(AudioFormat format, int orig_channels,
251  int channels, AVCodecID codec,
252  int samplerate, bool passthru,
253  int codec_profile)
254 {
255  m_format = CanProcess(format) ? format : FORMAT_S16;
256  m_origChannels = orig_channels;
257  m_channels = channels;
258  m_codec = codec;
259  m_sampleRate = samplerate;
260  m_passthru = passthru;
261  m_codecProfile = codec_profile;
262 
263  ResetVisuals();
264 }
265 
266 void AudioPlayer::SetEffDsp(int dsprate)
267 {
268  if (!m_audioOutput || !m_noAudioOut)
269  return;
270  QMutexLocker lock(&m_lock);
271  m_audioOutput->SetEffDsp(dsprate);
272 }
273 
274 bool AudioPlayer::SetMuted(bool mute)
275 {
276  bool is_muted = IsMuted();
277  QMutexLocker lock(&m_lock);
278 
279  if (m_audioOutput && !m_noAudioOut && !is_muted && mute &&
281  {
282  LOG(VB_AUDIO, LOG_INFO, QString("muting sound %1").arg(IsMuted()));
283  return true;
284  }
285  if (m_audioOutput && !m_noAudioOut && is_muted && !mute &&
287  {
288  LOG(VB_AUDIO, LOG_INFO, QString("unmuting sound %1").arg(IsMuted()));
289  return true;
290  }
291 
292  LOG(VB_AUDIO, LOG_ERR,
293  QString("not changing sound mute state %1").arg(IsMuted()));
294 
295  return false;
296 }
297 
299 {
300  if (!m_audioOutput || m_noAudioOut)
301  return kMuteAll;
302  QMutexLocker lock(&m_lock);
303  return m_audioOutput->SetMuteState(mstate);
304 }
305 
307 {
308  if (!m_audioOutput || m_noAudioOut)
309  return kMuteAll;
311 }
312 
314 {
315  if (!m_audioOutput || m_noAudioOut)
316  return kMuteAll;
317  QMutexLocker lock(&m_lock);
318  return m_audioOutput->GetMuteState();
319 }
320 
322 {
323  if (!m_audioOutput || m_noAudioOut)
324  return GetVolume();
325  QMutexLocker lock(&m_lock);
327  return GetVolume();
328 }
329 
331 {
332  if (!m_audioOutput || m_noAudioOut)
333  return GetVolume();
334  QMutexLocker lock(&m_lock);
335  m_audioOutput->SetCurrentVolume(newvolume);
336  return GetVolume();
337 }
338 
340 {
341  if (!m_audioOutput || m_noAudioOut)
342  return 0LL;
343  QMutexLocker lock(&m_lock);
344  return m_audioOutput->GetAudiotime();
345 }
346 
348 {
349  if (!m_audioOutput)
350  return false;
351  QMutexLocker lock(&m_lock);
352  return m_audioOutput->IsUpmixing();
353 }
354 
355 bool AudioPlayer::EnableUpmix(bool enable, bool toggle)
356 {
357  if (!m_audioOutput)
358  return false;
359  QMutexLocker lock(&m_lock);
360  if (toggle || (enable != IsUpmixing()))
361  return m_audioOutput->ToggleUpmix();
362  return enable;
363 }
364 
366 {
367  if (!m_audioOutput)
368  return false;
369  QMutexLocker lock(&m_lock);
370  return m_audioOutput->CanUpmix();
371 }
372 
374 {
375  m_stretchFactor = factor;
376  if (!m_audioOutput)
377  return;
378  QMutexLocker lock(&m_lock);
380 }
381 
382 // The following methods are not locked as this hinders performance.
383 // They are however only called from the Decoder and only the decode
384 // thread will trigger a deletion/recreation of the AudioOutput device, hence
385 // they should be safe.
386 
388 {
389  if (!ao)
390  return false;
391 
392  return ao->GetOutputSettingsUsers(true)->canFeature(feature);
393 }
394 
396 {
398 }
399 
401 {
403 }
404 
406 {
408 }
409 
411 {
413 }
414 
416 {
418 }
419 
421 {
422  if (!m_audioOutput)
423  return 2;
425 }
426 
428 {
429  if (!m_audioOutput)
430  return 0;
432 }
433 
434 bool AudioPlayer::CanPassthrough(int samplerate, int channels,
435  AVCodecID codec, int profile)
436 {
437  if (!m_audioOutput)
438  return false;
439  return m_audioOutput->CanPassthrough(samplerate, channels, codec, profile);
440 }
441 
443 {
444  if (!m_audioOutput)
445  return false;
446  return m_audioOutput->CanDownmix();
447 }
448 
449 /*
450  * if frames = -1 : let AudioOuput calculate value
451  * if frames = 0 && len > 0: will calculate according to len
452  */
453 void AudioPlayer::AddAudioData(char *buffer, int len,
454  int64_t timecode, int frames)
455 {
456  if (!m_audioOutput || m_noAudioOut)
457  return;
458 
459  if (m_parent->PrepareAudioSample(timecode) && !m_noAudioOut)
460  m_audioOutput->Drain();
461  int samplesize = m_audioOutput->GetBytesPerFrame();
462 
463  if (samplesize <= 0)
464  return;
465 
466  if (frames == 0 && len > 0)
467  frames = len / samplesize;
468 
469  if (!m_audioOutput->AddData(buffer, len, timecode, frames))
470  LOG(VB_PLAYBACK, LOG_ERR, LOC + "AddAudioData(): "
471  "Audio buffer overflow, audio data lost!");
472 }
473 
475 {
476  if (!m_audioOutput)
477  return true;
479 }
480 
482 {
483  if (!m_audioOutput)
484  return 0;
485  return m_audioOutput->LengthLastData();
486 }
487 
489 {
490  fill = total = 0;
491  if (!m_audioOutput || m_noAudioOut)
492  return false;
493  m_audioOutput->GetBufferStatus(fill, total);
494  return true;
495 }
496 
498 {
499  uint ofill = 0;
500  uint ototal = 0;
501  if (GetBufferStatus(ofill, ototal))
502  {
503  uint othresh = ((ototal>>1) + (ototal>>2));
504  if (ofill > othresh)
505  return true;
506  return GetAudioBufferedTime() > 8000;
507  }
508  return false;
509 }
510 
512 {
514 }
515 
516 
518 {
519  if (!m_audioOutput)
520  return false;
521  return m_audioOutput->CanProcess(fmt);
522 }
523 
525 {
526  if (!m_audioOutput)
527  return 0;
528  return m_audioOutput->CanProcess();
529 }
530 
541 int AudioPlayer::DecodeAudio(AVCodecContext *ctx,
542  uint8_t *buffer, int &data_size,
543  const AVPacket *pkt)
544 {
545  if (!m_audioOutput)
546  {
547  data_size = 0;
548  return 0;
549  }
550  return m_audioOutput->DecodeAudio(ctx, buffer, data_size, pkt);
551 }
AudioOutput::GetError
QString GetError(void) const
Definition: audiooutput.h:146
OutputListeners::addVisual
void addVisual(MythTV::Visual *v)
Definition: output.cpp:35
AudioPlayer::addVisual
void addVisual(MythTV::Visual *vis)
Definition: audioplayer.cpp:25
FORMAT_NONE
@ FORMAT_NONE
Definition: audiooutputsettings.h:26
AudioPlayer::CanAC3
bool CanAC3(void)
Definition: audioplayer.cpp:395
VolumeBase::SetCurrentVolume
virtual void SetCurrentVolume(int value)
Definition: volumebase.cpp:122
AudioOutput::LengthLastData
virtual int64_t LengthLastData(void) const
Definition: audiooutput.h:129
AudioOutput::GetAudioBufferedTime
virtual int64_t GetAudioBufferedTime(void)
report amount of audio buffered in milliseconds.
Definition: audiooutput.h:142
LOC
#define LOC
Definition: audioplayer.cpp:8
AudioPlayer::SetEffDsp
void SetEffDsp(int dsprate)
Definition: audioplayer.cpp:266
AudioPlayer::m_audioOutput
AudioOutput * m_audioOutput
Definition: audioplayer.h:113
AudioPlayer::Reset
void Reset(void)
Definition: audioplayer.cpp:83
ShowNotificationError
void ShowNotificationError(const QString &msg, const QString &from, const QString &detail, const VNMask visibility, const MythNotification::Priority priority)
convenience utility to display error message as notification
Definition: mythnotificationcenter.cpp:1428
FORMAT_S16
@ FORMAT_S16
Definition: audiooutputsettings.h:28
MythPlayer::PrepareAudioSample
virtual bool PrepareAudioSample(int64_t &timecode)
Definition: mythplayer.cpp:2272
AudioPlayer::m_format
AudioFormat m_format
Definition: audioplayer.h:117
VolumeBase::AdjustCurrentVolume
virtual void AdjustCurrentVolume(int change)
Definition: volumebase.cpp:131
AudioPlayer::ReinitAudio
QString ReinitAudio(void)
Definition: audioplayer.cpp:104
VolumeBase::GetCurrentVolume
virtual uint GetCurrentVolume(void) const
Definition: volumebase.cpp:117
AudioOutput::Reset
virtual void Reset(void)=0
AudioPlayer::ResetVisuals
void ResetVisuals(void)
Definition: audioplayer.cpp:73
FEATURE_AC3
@ FEATURE_AC3
Definition: audiooutputsettings.h:37
AudioPlayer::EnableUpmix
bool EnableUpmix(bool enable, bool toggle=false)
Definition: audioplayer.cpp:355
AudioPlayer::m_lock
QMutex m_lock
Definition: audioplayer.h:122
AudioOutput::GetBytesPerFrame
virtual int GetBytesPerFrame(void) const
Definition: audiooutput.h:78
VolumeBase::SetMuteState
virtual MuteState SetMuteState(MuteState)
Definition: volumebase.cpp:136
AudioPlayer::GetVolume
uint GetVolume(void)
Definition: audioplayer.cpp:219
arg
arg(title).arg(filename).arg(doDelete))
AudioPlayer::SetStretchFactor
void SetStretchFactor(float factor)
Definition: audioplayer.cpp:373
AudioPlayer::SetMuteState
MuteState SetMuteState(MuteState mstate)
Definition: audioplayer.cpp:298
AudioOutput::NeedDecodingBeforePassthrough
virtual bool NeedDecodingBeforePassthrough(void) const
Definition: audiooutput.h:122
AudioPlayer::CheckFormat
void CheckFormat(void)
Definition: audioplayer.cpp:177
AudioPlayer::IsBufferAlmostFull
bool IsBufferAlmostFull(void)
Definition: audioplayer.cpp:497
FEATURE_TRUEHD
@ FEATURE_TRUEHD
Definition: audiooutputsettings.h:41
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:23
AudioPlayer::m_mainDevice
QString m_mainDevice
Definition: audioplayer.h:124
mythplayer.h
AudioPlayer::m_codecProfile
int m_codecProfile
Definition: audioplayer.h:119
FEATURE_EAC3
@ FEATURE_EAC3
Definition: audiooutputsettings.h:40
MythPlayer
Definition: mythplayer.h:100
AudioPlayer::SetMuted
bool SetMuted(bool mute)
Definition: audioplayer.cpp:274
AudioPlayer::GetMuteState
MuteState GetMuteState(void)
Definition: audioplayer.cpp:313
OutputListeners::removeVisual
void removeVisual(MythTV::Visual *v)
Definition: output.cpp:42
AudioPlayer::CanTrueHD
bool CanTrueHD(void)
Definition: audioplayer.cpp:410
AudioPlayer::GetAudioBufferedTime
int64_t GetAudioBufferedTime(void)
Definition: audioplayer.cpp:511
AudioOutput::CanDownmix
virtual bool CanDownmix(void) const
Definition: audiooutput.h:84
AudioOutput::OpenAudio
static AudioOutput * OpenAudio(const QString &main_device, const QString &passthru_device, AudioFormat format, int channels, AVCodecID codec, int samplerate, AudioOutputSource source, bool set_initial_vol, bool passthru, int upmixer_startup=0, AudioOutputSettings *custom=nullptr)
Definition: audiooutput.cpp:56
AudioOutput::CanProcess
virtual bool CanProcess(AudioFormat fmt)
Definition: audiooutput.h:167
AudioOutput::CanUpmix
virtual bool CanUpmix(void)
Definition: audiooutput.h:159
AudioOutput::Drain
virtual void Drain(void)=0
MuteState
MuteState
Definition: volumebase.h:6
AudioPlayer::SetAudioInfo
void SetAudioInfo(const QString &main_device, const QString &passthru_device, uint samplerate, int codec_profile=-1)
Set audio output device parameters.
Definition: audioplayer.cpp:231
AudioSettings
Definition: audiosettings.h:29
AudioPlayer::IsPaused
bool IsPaused(void)
Definition: audioplayer.cpp:193
MythTV::Visual
Definition: visual.h:17
AudioOutput::CanPassthrough
virtual bool CanPassthrough(int samplerate, int channels, AVCodecID codec, int profile) const
Definition: audiooutput.cpp:265
AudioPlayer::GetAudioTime
int64_t GetAudioTime(void)
Definition: audioplayer.cpp:339
AudioOutput
Definition: audiooutput.h:26
AudioPlayer::SetVolume
uint SetVolume(int newvolume)
Definition: audioplayer.cpp:330
TestDigitalFeature
bool TestDigitalFeature(AudioOutput *ao, DigitalFeature feature)
Definition: audioplayer.cpp:387
AudioSettings::m_init
bool m_init
If set to false, AudioOutput instance will not try to initially open the audio device.
Definition: audiosettings.h:85
AudioPlayer::DecodeAudio
int DecodeAudio(AVCodecContext *ctx, uint8_t *buffer, int &data_size, const AVPacket *pkt)
DecodeAudio Utility routine.
Definition: audioplayer.cpp:541
AudioOutput::Pause
virtual void Pause(bool paused)=0
hardwareprofile.scan.profile
profile
Definition: scan.py:99
AudioOutputSettings::GetMaxHDRate
int GetMaxHDRate() const
return the highest iec958 rate supported.
Definition: audiooutputsettings.cpp:414
AudioPlayer::m_controlsVolume
bool m_controlsVolume
Definition: audioplayer.h:128
AudioPlayer::DeleteOutput
void DeleteOutput(void)
Definition: audioplayer.cpp:92
AudioPlayer::AudioPlayer
AudioPlayer(MythPlayer *parent, bool muted)
Definition: audioplayer.cpp:12
feature
static const std::array< featureStruct, 7 > feature
Definition: audiooutputsettings.cpp:433
AudioPlayer::SetAudioParams
void SetAudioParams(AudioFormat format, int orig_channels, int channels, AVCodecID codec, int samplerate, bool passthru, int codec_profile=-1)
Set audio output parameters.
Definition: audioplayer.cpp:250
AudioOutputSettings::BestSupportedChannels
int BestSupportedChannels()
Definition: audiooutputsettings.cpp:253
FEATURE_DTS
@ FEATURE_DTS
Definition: audiooutputsettings.h:38
AudioPlayer::AdjustVolume
uint AdjustVolume(int change)
Definition: audioplayer.cpp:321
AudioPlayer::m_stretchFactor
float m_stretchFactor
Definition: audioplayer.h:120
AudioPlayer::CanPassthrough
bool CanPassthrough(int samplerate, int channels, AVCodecID codec, int profile)
Definition: audioplayer.cpp:434
AudioPlayer::CanDTS
bool CanDTS(void)
Definition: audioplayer.cpp:400
AudioOutput::GetAudiotime
virtual int64_t GetAudiotime(void)=0
AudioPlayer::IsUpmixing
bool IsUpmixing(void)
Definition: audioplayer.cpp:347
MythPlayer::IsAudioNeeded
bool IsAudioNeeded(void)
Definition: mythplayer.h:150
VolumeBase::GetMuteState
virtual MuteState GetMuteState(void) const
Definition: volumebase.cpp:149
AudioPlayer::IncrMuteState
MuteState IncrMuteState(void)
Definition: audioplayer.cpp:306
AudioPlayer::GetMaxHDRate
int GetMaxHDRate(void)
Definition: audioplayer.cpp:427
VolumeBase::NextMuteState
static MuteState NextMuteState(MuteState)
Definition: volumebase.cpp:154
AudioPlayer::RemoveVisuals
void RemoveVisuals(void)
Definition: audioplayer.cpp:63
AudioPlayer::~AudioPlayer
~AudioPlayer()
Definition: audioplayer.cpp:19
AudioOutput::DecodeAudio
virtual int DecodeAudio(AVCodecContext *ctx, uint8_t *buffer, int &data_size, const AVPacket *pkt)
Utility routine.
Definition: audiooutput.cpp:595
AudioPlayer::GetBufferStatus
bool GetBufferStatus(uint &fill, uint &total)
Definition: audioplayer.cpp:488
AudioPlayer::CanDTSHD
bool CanDTSHD(void)
Definition: audioplayer.cpp:415
AudioPlayer::IsMuted
bool IsMuted(void)
Definition: audioplayer.h:88
AudioOutput::SetEffDsp
virtual void SetEffDsp(int dsprate)=0
AudioPlayer::m_origChannels
int m_origChannels
Definition: audioplayer.h:115
AudioOutputSettings::canFeature
bool canFeature(DigitalFeature arg) const
return DigitalFeature mask.
Definition: audiooutputsettings.h:89
kMuteOff
@ kMuteOff
Definition: volumebase.h:7
uint
unsigned int uint
Definition: compat.h:140
gCoreContext
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
Definition: mythcorecontext.cpp:56
AudioPlayer::AddAudioData
void AddAudioData(char *buffer, int len, int64_t timecode, int frames)
Definition: audioplayer.cpp:453
AudioPlayer::m_noAudioIn
bool m_noAudioIn
Definition: audioplayer.h:126
AudioPlayer::m_parent
MythPlayer * m_parent
Definition: audioplayer.h:112
AudioOutput::AddData
virtual bool AddData(void *buffer, int len, int64_t timecode, int frames)=0
Add data to the audiobuffer for playback.
AudioPlayer::SetAudioOutput
void SetAudioOutput(AudioOutput *ao)
Definition: audioplayer.cpp:209
MythCoreContext::GetBoolSetting
bool GetBoolSetting(const QString &key, bool defaultval=false)
Definition: mythcorecontext.cpp:923
AudioPlayer::GetMaxChannels
uint GetMaxChannels(void)
Definition: audioplayer.cpp:420
AudioPlayer::removeVisual
void removeVisual(MythTV::Visual *vis)
Definition: audioplayer.cpp:39
AudioPlayer::AddVisuals
void AddVisuals(void)
Definition: audioplayer.cpp:53
AudioPlayer::m_codec
AVCodecID m_codec
Definition: audioplayer.h:116
AudioPlayer::CanUpmix
bool CanUpmix(void)
Definition: audioplayer.cpp:365
AudioPlayer::m_visuals
vector< MythTV::Visual * > m_visuals
Definition: audioplayer.h:129
AudioPlayer::m_passthru
bool m_passthru
Definition: audioplayer.h:121
AudioPlayer::NeedDecodingBeforePassthrough
bool NeedDecodingBeforePassthrough(void)
Definition: audioplayer.cpp:474
AudioOutput::Reconfigure
virtual void Reconfigure(const AudioSettings &settings)=0
AUDIOOUTPUT_VIDEO
@ AUDIOOUTPUT_VIDEO
Definition: audiosettings.h:23
AudioOutput::GetBufferStatus
virtual void GetBufferStatus(uint &fill, uint &total)
Definition: audiooutput.h:149
AudioOutput::SetStretchFactor
virtual void SetStretchFactor(float factor)
Definition: audiooutput.cpp:251
AudioPlayer::m_noAudioOut
bool m_noAudioOut
Definition: audioplayer.h:127
audiooutput.h
DigitalFeature
DigitalFeature
Definition: audiooutputsettings.h:35
AudioPlayer::LengthLastData
int64_t LengthLastData(void)
Definition: audioplayer.cpp:481
audioplayer.h
videovisual.h
AudioPlayer::Pause
bool Pause(bool pause)
Definition: audioplayer.cpp:183
AudioPlayer::m_passthruDevice
QString m_passthruDevice
Definition: audioplayer.h:125
AudioOutput::IsUpmixing
virtual bool IsUpmixing(void)
Definition: audiooutput.h:157
AudioPlayer::CanDownmix
bool CanDownmix(void)
Definition: audioplayer.cpp:442
AudioPlayer::CanProcess
uint32_t CanProcess(void)
Definition: audioplayer.cpp:524
AudioPlayer::m_channels
int m_channels
Definition: audioplayer.h:114
kMuteAll
@ kMuteAll
Definition: volumebase.h:10
AudioPlayer::PauseAudioUntilBuffered
void PauseAudioUntilBuffered(void)
Definition: audioplayer.cpp:201
AudioPlayer::CanEAC3
bool CanEAC3(void)
Definition: audioplayer.cpp:405
AudioFormat
AudioFormat
Definition: audiooutputsettings.h:25
AudioOutput::GetOutputSettingsUsers
virtual AudioOutputSettings * GetOutputSettingsUsers(bool digital=true)
Definition: audiooutput.cpp:260
mythnotificationcenter.h
FEATURE_DTSHD
@ FEATURE_DTSHD
Definition: audiooutputsettings.h:42
AudioPlayer::m_mutedOnCreation
bool m_mutedOnCreation
Definition: audioplayer.h:123
AudioOutput::ToggleUpmix
virtual bool ToggleUpmix(void)
Definition: audiooutput.h:158
AudioOutput::PauseUntilBuffered
virtual void PauseUntilBuffered(void)=0
AudioOutput::IsPaused
virtual bool IsPaused(void) const =0
AudioPlayer::m_sampleRate
int m_sampleRate
Definition: audioplayer.h:118
find
static pid_list_t::iterator find(const PIDInfoMap &map, pid_list_t &list, pid_list_t::iterator begin, pid_list_t::iterator end, bool find_open)
Definition: dvbstreamhandler.cpp:356