MythTV master
mythplayeraudioui.cpp
Go to the documentation of this file.
1// MythTV
6
7#include "audioplayer.h"
8#include "mythplayeraudioui.h"
9#include "tv_play.h"
10
11#define LOC QString("PlayerAudio: ")
12
34 PlayerContext *Context, PlayerFlags Flags)
35 : MythPlayerOverlayUI(MainWindow, Tv, Context, Flags)
36{
37 // Register our types for signal usage
38 qRegisterMetaType<MythAudioPlayerState>();
39 qRegisterMetaType<MythAudioState>();
40
41 // Setup audio graph
43
44 // Connect incoming signals
52
53 // Connect outgoing signals
56
57 // Setup
59 auto offset = gCoreContext->GetDurSetting<std::chrono::milliseconds>("AudioSyncOffset", 0ms);
61}
62
65{
66 LOG(VB_GENERAL, LOG_INFO, LOC + "Initialising audio");
69}
70
72{
74}
75
77{
78 m_audio.Reset();
80}
81
83{
84 (void)m_audio.ReinitAudio();
86}
87
89{
90 return m_audioGraph;
91}
92
93void MythPlayerAudioUI::SetupAudioGraph(double VideoFrameRate)
94{
95 uint samplerate = static_cast<uint>(m_audio.GetSampleRate());
96 m_audioGraph.SetSampleRate(samplerate);
97 m_audioGraph.SetSampleCount(static_cast<unsigned>(samplerate / VideoFrameRate));
99}
100
102{
105}
106
107void MythPlayerAudioUI::ChangeVolume(bool Direction, int Volume)
108{
109 uint oldvolume = m_audio.GetVolume();
110
111 if (Volume < 0)
112 m_audio.AdjustVolume(Direction ? 2 : -2);
113 else
114 m_audio.SetVolume(Volume);
115
116 if (!(m_browsing || m_editing))
117 {
118 uint volume = m_audio.GetVolume();
119 UpdateOSDStatus(tr("Adjust Volume"), tr("Volume"), QString::number(volume),
120 kOSDFunctionalType_PictureAdjust, "%", static_cast<int>(volume * 10),
123 }
124
125 if (m_audio.GetVolume() != oldvolume)
127}
128
130{
132 return;
133
134 MuteState oldstate = m_audio.GetMuteState();
135
136 if (CycleChannels)
138 else
140
141 QString text;
143 switch (mute)
144 {
145 case kMuteOff: text = tr("Mute Off"); break;
146 case kMuteAll: text = tr("Mute On"); break;
147 case kMuteLeft: text = tr("Left Channel Muted"); break;
148 case kMuteRight: text = tr("Right Channel Muted"); break;
149 }
150
151 UpdateOSDMessage(text);
152
153 if (m_audio.GetMuteState() != oldstate)
155}
156
157void MythPlayerAudioUI::EnableUpmix(bool Enable, bool Toggle)
158{
159 if (!m_audio.HasAudioOut())
160 return;
161
162 bool oldupmixing = m_audio.IsUpmixing();
163 m_audio.EnableUpmix(Enable, Toggle);
165 bool newupmixing = m_audio.IsUpmixing();
166
167 UpdateOSDMessage(newupmixing ? tr("Upmixer On") : tr("Upmixer Off"));
168
169 if (newupmixing != oldupmixing)
171}
172
174{
176}
177
179{
180 QString passthru = gCoreContext->GetBoolSetting("PassThruDeviceOverride", false) ?
181 gCoreContext->GetSetting("PassThruOutputDevice") : QString();
182 m_audio.SetAudioInfo(gCoreContext->GetSetting("AudioOutputDevice"), passthru,
183 static_cast<uint>(gCoreContext->GetNumSetting("AudioSampleRate", 44100)));
185}
186
187void MythPlayerAudioUI::AdjustAudioTimecodeOffset(std::chrono::milliseconds Delta, std::chrono::milliseconds Value)
188{
189 std::chrono::milliseconds oldwrap = m_tcWrap[TC_AUDIO];
190
191 if ((Value >= -1000ms) && (Value <= 1000ms))
192 m_tcWrap[TC_AUDIO] = Value;
193 else
194 m_tcWrap[TC_AUDIO] += Delta;
195
196 std::chrono::milliseconds newwrap = m_tcWrap[TC_AUDIO];
197 if (!(m_browsing || m_editing))
198 {
199 UpdateOSDStatus(tr("Adjust Audio Sync"), tr("Audio Sync"),
200 QString::number(newwrap.count()), kOSDFunctionalType_AudioSyncAdjust,
201 "ms", (newwrap / 2 + 500ms).count(), kOSDTimeout_None);
203 }
204
205 if (newwrap != oldwrap)
206 emit AudioStateChanged({ &m_audio, newwrap });
207}
208
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)
void removeVisual(Visualization *vis)
Definition: audioplayer.cpp:42
uint SetVolume(int newvolume)
void addVisual(Visualization *vis)
Definition: audioplayer.cpp:28
bool IsUpmixing(void)
QString ReinitAudio(void)
int GetSampleRate(void) const
Definition: audioplayer.h:58
bool HasAudioOut(void) const
Definition: audioplayer.h:50
bool IsMuted(void)
Definition: audioplayer.h:84
MuteState GetMuteState(void)
bool ControlsVolume(void) const
Definition: audioplayer.h:51
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:155
unsigned int uint
Definition: compat.h:68
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:64
@ TC_AUDIO
Definition: mythplayer.h:56
#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