MythTV master
mythplayeraudioui.cpp
Go to the documentation of this file.
1// MythTV
5
6#include "audioplayer.h"
7#include "mythplayeraudioui.h"
8#include "tv_play.h"
9
10#define LOC QString("PlayerAudio: ")
11
33 PlayerContext *Context, PlayerFlags Flags)
34 : MythPlayerOverlayUI(MainWindow, Tv, Context, Flags)
35{
36 // Register our types for signal usage
37 qRegisterMetaType<MythAudioPlayerState>();
38 qRegisterMetaType<MythAudioState>();
39
40 // Setup audio graph
42
43 // Connect incoming signals
51
52 // Connect outgoing signals
55
56 // Setup
58 auto offset = gCoreContext->GetDurSetting<std::chrono::milliseconds>("AudioSyncOffset", 0ms);
60}
61
64{
65 LOG(VB_GENERAL, LOG_INFO, LOC + "Initialising audio");
68}
69
71{
73}
74
76{
77 m_audio.Reset();
79}
80
82{
83 (void)m_audio.ReinitAudio();
85}
86
88{
89 return m_audioGraph;
90}
91
92void MythPlayerAudioUI::SetupAudioGraph(double VideoFrameRate)
93{
94 uint samplerate = static_cast<uint>(m_audio.GetSampleRate());
95 m_audioGraph.SetSampleRate(samplerate);
96 m_audioGraph.SetSampleCount(static_cast<unsigned>(samplerate / VideoFrameRate));
98}
99
101{
104}
105
106void MythPlayerAudioUI::ChangeVolume(bool Direction, int Volume)
107{
108 uint oldvolume = m_audio.GetVolume();
109
110 if (Volume < 0)
111 m_audio.AdjustVolume(Direction ? 2 : -2);
112 else
113 m_audio.SetVolume(Volume);
114
115 if (!(m_browsing || m_editing))
116 {
117 uint volume = m_audio.GetVolume();
118 UpdateOSDStatus(tr("Adjust Volume"), tr("Volume"), QString::number(volume),
119 kOSDFunctionalType_PictureAdjust, "%", static_cast<int>(volume * 10),
122 }
123
124 if (m_audio.GetVolume() != oldvolume)
126}
127
129{
131 return;
132
133 MuteState oldstate = m_audio.GetMuteState();
134
135 if (CycleChannels)
137 else
139
140 QString text;
142 switch (mute)
143 {
144 case kMuteOff: text = tr("Mute Off"); break;
145 case kMuteAll: text = tr("Mute On"); break;
146 case kMuteLeft: text = tr("Left Channel Muted"); break;
147 case kMuteRight: text = tr("Right Channel Muted"); break;
148 }
149
150 UpdateOSDMessage(text);
151
152 if (m_audio.GetMuteState() != oldstate)
154}
155
156void MythPlayerAudioUI::EnableUpmix(bool Enable, bool Toggle)
157{
158 if (!m_audio.HasAudioOut())
159 return;
160
161 bool oldupmixing = m_audio.IsUpmixing();
162 m_audio.EnableUpmix(Enable, Toggle);
164 bool newupmixing = m_audio.IsUpmixing();
165
166 UpdateOSDMessage(newupmixing ? tr("Upmixer On") : tr("Upmixer Off"));
167
168 if (newupmixing != oldupmixing)
170}
171
173{
175}
176
178{
179 QString passthru = gCoreContext->GetBoolSetting("PassThruDeviceOverride", false) ?
180 gCoreContext->GetSetting("PassThruOutputDevice") : QString();
181 m_audio.SetAudioInfo(gCoreContext->GetSetting("AudioOutputDevice"), passthru,
182 static_cast<uint>(gCoreContext->GetNumSetting("AudioSampleRate", 44100)));
184}
185
186void MythPlayerAudioUI::AdjustAudioTimecodeOffset(std::chrono::milliseconds Delta, std::chrono::milliseconds Value)
187{
188 std::chrono::milliseconds oldwrap = m_tcWrap[TC_AUDIO];
189
190 if ((Value >= -1000ms) && (Value <= 1000ms))
191 m_tcWrap[TC_AUDIO] = Value;
192 else
193 m_tcWrap[TC_AUDIO] += Delta;
194
195 std::chrono::milliseconds newwrap = m_tcWrap[TC_AUDIO];
196 if (!(m_browsing || m_editing))
197 {
198 UpdateOSDStatus(tr("Adjust Audio Sync"), tr("Audio Sync"),
199 QString::number(newwrap.count()), kOSDFunctionalType_AudioSyncAdjust,
200 "ms", (newwrap / 2 + 500ms).count(), kOSDTimeout_None);
202 }
203
204 if (newwrap != oldwrap)
205 emit AudioStateChanged({ &m_audio, newwrap });
206}
207
void SetSampleRate(uint16_t SampleRate)
void SetSampleCount(uint16_t SampleCount)
void SetPainter(MythPainter *Painter)
void AudioPlayerStateChanged(MythAudioPlayerState State)
MuteState IncrMuteState(void)
uint GetVolume(void)
void PauseAudioUntilBuffered(void)
uint SetVolume(int newvolume)
bool IsUpmixing(void)
QString ReinitAudio(void)
void addVisual(MythTV::Visual *vis)
Definition: audioplayer.cpp:28
void removeVisual(MythTV::Visual *vis)
Definition: audioplayer.cpp:42
int GetSampleRate(void) const
Definition: audioplayer.h:60
bool HasAudioOut(void) const
Definition: audioplayer.h:52
bool IsMuted(void)
Definition: audioplayer.h:86
MuteState GetMuteState(void)
bool ControlsVolume(void) const
Definition: audioplayer.h:53
void Reset(void)
Definition: audioplayer.cpp:86
void SetAudioInfo(const QString &main_device, const QString &passthru_device, uint samplerate, int codec_profile=-1)
Set audio output device parameters.
bool EnableUpmix(bool enable, bool toggle=false)
void SetStretchFactor(float factor)
bool SetMuted(bool mute)
uint AdjustVolume(int change)
QString GetSetting(const QString &key, const QString &defaultval="")
int GetNumSetting(const QString &key, int defaultval=0)
std::enable_if_t< std::chrono::__is_duration< T >::value, T > GetDurSetting(const QString &key, T defaultval=T::zero())
bool GetBoolSetting(const QString &key, bool defaultval=false)
const AudioOutputGraph & GetAudioGraph() const
AudioOutputGraph m_audioGraph
void ChangeMuteState(bool CycleChannels)
void ChangeVolume(bool Direction, int Volume)
void EnableUpmix(bool Enable, bool Toggle=false)
void SetupAudioOutput(float TimeStretch)
void SetupAudioGraph(double VideoFrameRate)
MythPlayerAudioUI(MythMainWindow *MainWindow, TV *Tv, PlayerContext *Context, PlayerFlags Flags)
void InitialiseState() override
Initialise audio and signal initial state.
void AudioStateChanged(MythAudioState State)
void AdjustAudioTimecodeOffset(std::chrono::milliseconds Delta, std::chrono::milliseconds Value)
void ChangeOSDPositionUpdates(bool Enable)
void UpdateOSDMessage(const QString &Message)
void UpdateOSDStatus(osdInfo &Info, int Type, OSDTimeout Timeout)
virtual void InitialiseState()
MythPainter * m_painter
AudioPlayer m_audio
Definition: mythplayer.h:472
void ForceSetupAudioStream(void)
tctype_arr m_tcWrap
Definition: mythplayer.h:496
float m_tsNormal
Time stretch speed, 1.0F for normal playback.
void AudioPlayerStateChanged(const MythAudioPlayerState &AudioPlayerState)
void ChangeMuteState(bool CycleChannels=false)
void PauseAudioUntilReady()
void AudioStateChanged(const MythAudioState &AudioState)
void ChangeVolume(bool Direction, int Volume)
void ChangeAudioOffset(std::chrono::milliseconds Delta, std::chrono::milliseconds Value=-9999ms)
void ChangeUpmix(bool Enable, bool Toggle=false)
Control TV playback.
Definition: tv_play.h:156
unsigned int uint
Definition: freesurround.h:24
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
PlayerFlags
Definition: mythplayer.h:65
@ TC_AUDIO
Definition: mythplayer.h:57
#define LOC
@ kOSDFunctionalType_AudioSyncAdjust
Definition: osd.h:50
@ kOSDFunctionalType_PictureAdjust
Definition: osd.h:47
@ kOSDTimeout_None
Definition: osd.h:58
@ kOSDTimeout_Med
Definition: osd.h:60
MuteState
Definition: volumebase.h:8
@ kMuteLeft
Definition: volumebase.h:10
@ kMuteOff
Definition: volumebase.h:9
@ kMuteRight
Definition: volumebase.h:11
@ kMuteAll
Definition: volumebase.h:12