11#define LOC QString("AudioPlayer: ")
17 m_mutedOnCreation(muted)
33 QMutexLocker lock(&
m_lock);
47 QMutexLocker lock(&
m_lock);
61 QMutexLocker lock(&
m_lock);
71 QMutexLocker lock(&
m_lock);
81 QMutexLocker lock(&
m_lock);
91 QMutexLocker lock(&
m_lock);
98 QMutexLocker locker(&
m_lock);
111 QMutexLocker lock(&
m_lock);
132 errMsg = tr(
"Unable to create AudioOutput.");
150 if (!errMsg.isEmpty())
152 LOG(VB_GENERAL, LOG_NOTICE,
LOC +
"Disabling Audio" +
153 QString(
", reason is: %1").arg(errMsg));
155 AudioPlayer::tr(
"Audio Player" ), errMsg);
160 LOG(VB_GENERAL, LOG_NOTICE,
LOC +
"Enabling Audio");
186 QMutexLocker lock(&
m_lock);
195 QMutexLocker lock(&
m_lock);
203 QMutexLocker lock(&
m_lock);
221 QMutexLocker lock(&
m_lock);
230 const QString &passthru_device,
236 if (!main_device.isEmpty())
238 if (!passthru_device.isEmpty())
250 int channels, AVCodecID codec,
251 int samplerate,
bool passthru,
269 QMutexLocker lock(&
m_lock);
276 QMutexLocker lock(&
m_lock);
281 LOG(VB_AUDIO, LOG_INFO, QString(
"muting sound %1").arg(
IsMuted()));
287 LOG(VB_AUDIO, LOG_INFO, QString(
"unmuting sound %1").arg(
IsMuted()));
291 LOG(VB_AUDIO, LOG_ERR,
292 QString(
"not changing sound mute state %1").arg(
IsMuted()));
301 QMutexLocker lock(&
m_lock);
316 QMutexLocker lock(&
m_lock);
324 QMutexLocker lock(&
m_lock);
333 QMutexLocker lock(&
m_lock);
342 QMutexLocker lock(&
m_lock);
350 QMutexLocker lock(&
m_lock);
358 QMutexLocker lock(&
m_lock);
368 QMutexLocker lock(&
m_lock);
377 QMutexLocker lock(&
m_lock);
453 std::chrono::milliseconds timecode,
int frames)
465 if (frames == 0 && len > 0)
466 frames = len / samplesize;
469 LOG(VB_PLAYBACK, LOG_ERR,
LOC +
"AddAudioData(): "
470 "Audio buffer overflow, audio data lost!");
502 uint othresh = ((ototal>>1) + (ototal>>2));
541 uint8_t *buffer,
int &data_size,
static const std::array< featureStruct, 7 > feature
bool TestDigitalFeature(AudioOutput *ao, DigitalFeature feature)
int BestSupportedChannels()
bool canFeature(DigitalFeature arg) const
return DigitalFeature mask.
int GetMaxHDRate() const
return the highest iec958 rate supported.
virtual bool AddData(void *buffer, int len, std::chrono::milliseconds timecode, int frames)=0
Add data to the audiobuffer for playback.
virtual bool IsPaused(void) const =0
virtual bool NeedDecodingBeforePassthrough(void) const
virtual void Drain(void)=0
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)
virtual std::chrono::milliseconds GetAudioBufferedTime(void)
report amount of audio buffered in milliseconds.
virtual bool IsUpmixing(void)
virtual void PauseUntilBuffered(void)=0
virtual std::chrono::milliseconds GetAudiotime(void)=0
virtual std::chrono::milliseconds LengthLastData(void) const
virtual void SetEffDsp(int dsprate)=0
virtual AudioOutputSettings * GetOutputSettingsUsers(bool digital=true)
virtual bool ToggleUpmix(void)
virtual int GetBytesPerFrame(void) const
virtual int DecodeAudio(AVCodecContext *ctx, uint8_t *buffer, int &data_size, const AVPacket *pkt)
Utility routine.
virtual bool CanPassthrough(int samplerate, int channels, AVCodecID codec, int profile) const
virtual bool CanDownmix(void) const
virtual void Reset(void)=0
virtual bool CanUpmix(void)
virtual bool CanProcess(AudioFormat fmt)
virtual void Reconfigure(const AudioSettings &settings)=0
virtual void GetBufferStatus(uint &fill, uint &total)
virtual void Pause(bool paused)=0
virtual void SetStretchFactor(float factor)
QString GetError(void) const
std::vector< MythTV::Visual * > m_visuals
void AudioPlayerStateChanged(MythAudioPlayerState State)
std::chrono::milliseconds GetAudioTime(void)
MuteState IncrMuteState(void)
void PauseAudioUntilBuffered(void)
AudioOutput * m_audioOutput
uint SetVolume(int newvolume)
QString ReinitAudio(void)
bool CanPassthrough(int samplerate, int channels, AVCodecID codec, int profile)
AudioPlayer(MythPlayer *parent, bool muted)
uint GetMaxChannels(void)
void addVisual(MythTV::Visual *vis)
bool GetBufferStatus(uint &fill, uint &total)
void removeVisual(MythTV::Visual *vis)
int DecodeAudio(AVCodecContext *ctx, uint8_t *buffer, int &data_size, const AVPacket *pkt)
DecodeAudio Utility routine.
void SetEffDsp(int dsprate)
void AddAudioData(char *buffer, int len, std::chrono::milliseconds timecode, int frames)
std::chrono::milliseconds LengthLastData(void)
bool NeedDecodingBeforePassthrough(void)
MythAudioPlayerState m_state
void SetAudioParams(AudioFormat format, int orig_channels, int channels, AVCodecID codec, int samplerate, bool passthru, int codec_profile=-1)
Set audio output parameters.
MuteState SetMuteState(MuteState mstate)
void SetAudioOutput(AudioOutput *ao)
MuteState GetMuteState(void)
std::chrono::milliseconds GetAudioBufferedTime(void)
void SetAudioInfo(const QString &main_device, const QString &passthru_device, uint samplerate, int codec_profile=-1)
Set audio output device parameters.
bool IsBufferAlmostFull(void)
bool EnableUpmix(bool enable, bool toggle=false)
void SetStretchFactor(float factor)
uint32_t CanProcess(void)
uint AdjustVolume(int change)
bool m_init
If set to false, AudioOutput instance will not try to initially open the audio device.
bool GetBoolSetting(const QString &key, bool defaultval=false)
virtual bool PrepareAudioSample(std::chrono::milliseconds &timecode)
void removeVisual(MythTV::Visual *v)
void addVisual(MythTV::Visual *v)
static MuteState NextMuteState(MuteState)
virtual MuteState GetMuteState(void) const
virtual void SetCurrentVolume(int value)
virtual uint GetCurrentVolume(void) const
virtual MuteState SetMuteState(MuteState)
virtual void AdjustCurrentVolume(int change)
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)
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
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