00001 #ifndef MYTHAUDIOSETTINGS_H
00002 #define MYTHAUDIOSETTINGS_H
00003
00004 #include <QStringList>
00005 #include <QObject>
00006 #include <QMutex>
00007
00008 #include "mythuistatetype.h"
00009 #include "mythscreentype.h"
00010 #include "mythdialogbox.h"
00011 #include "mythuibutton.h"
00012 #include "audiooutput.h"
00013 #include "mythcontext.h"
00014 #include "settings.h"
00015 #include "mthread.h"
00016
00017 class AudioDeviceComboBox;
00018
00019 class AudioConfigSettings : public VerticalConfigurationGroup
00020 {
00021 Q_OBJECT
00022
00023 public:
00024 AudioConfigSettings(ConfigurationWizard *);
00025
00026 typedef QMap<QString,AudioOutput::AudioDeviceConfig> ADCMap;
00027
00028 ADCMap &AudioDeviceMap(void) { return audiodevs; };
00029 AudioOutput::ADCVect &AudioDeviceVect(void) { return devices; };
00030
00031 private slots:
00032 void UpdateVisibility(const QString&);
00033 AudioOutputSettings UpdateCapabilities(const QString&,
00034 bool restore = true,
00035 bool AC3 = false);
00036 AudioOutputSettings UpdateCapabilitiesAC3(void);
00037 void AudioRescan();
00038 void AudioAdvanced();
00039 void StartAudioTest();
00040
00041 private:
00042 AudioDeviceComboBox *OutputDevice();
00043 HostComboBox *MaxAudioChannels();
00044 HostCheckBox *AudioUpmix();
00045 HostComboBox *AudioUpmixType();
00046 HostCheckBox *AC3PassThrough();
00047 HostCheckBox *DTSPassThrough();
00048 HostCheckBox *EAC3PassThrough();
00049 HostCheckBox *TrueHDPassThrough();
00050 HostCheckBox *DTSHDPassThrough();
00051 bool CheckPassthrough();
00052
00053 ConfigurationGroup *m_cgsettings;
00054 AudioDeviceComboBox *m_OutputDevice;
00055 HostComboBox *m_MaxAudioChannels;
00056 HostCheckBox *m_AudioUpmix;
00057 HostComboBox *m_AudioUpmixType;
00058 CheckBoxSetting *m_triggerDigital;
00059 HostCheckBox *m_AC3PassThrough;
00060 HostCheckBox *m_DTSPassThrough;
00061 HostCheckBox *m_EAC3PassThrough;
00062 HostCheckBox *m_TrueHDPassThrough;
00063 HostCheckBox *m_DTSHDPassThrough;
00064 ADCMap audiodevs;
00065 AudioOutput::ADCVect devices;
00066 QMutex slotlock;
00067 ConfigurationWizard *m_parent;
00068 int m_maxspeakers;
00069 QString m_lastAudioDevice;
00070 };
00071
00072 class AudioDeviceComboBox : public HostComboBox
00073 {
00074 Q_OBJECT
00075 public:
00076 AudioDeviceComboBox(AudioConfigSettings*);
00077 void AudioRescan();
00078
00079 private slots:
00080 void AudioDescriptionHelp(const QString&);
00081
00082 private:
00083 AudioConfigSettings *m_parent;
00084 };
00085
00086 class AudioMixerSettings : public TriggeredConfigurationGroup
00087 {
00088 public:
00089 AudioMixerSettings();
00090 private:
00091 HostCheckBox *MythControlsVolume();
00092 HostComboBox *MixerDevice();
00093 HostComboBox *MixerControl();
00094 HostSlider *MixerVolume();
00095 HostSlider *PCMVolume();
00096 static const char *MixerControlControls[];
00097 };
00098
00099 class AudioGeneralSettings : public ConfigurationWizard
00100 {
00101 public:
00102 AudioGeneralSettings();
00103 };
00104
00105 class AudioAdvancedSettings : public VerticalConfigurationGroup
00106 {
00107 public:
00108 AudioAdvancedSettings(bool mpcm);
00109
00110 HostCheckBox *MPCM();
00111 HostCheckBox *SRCQualityOverride();
00112 HostComboBox *SRCQuality();
00113 HostCheckBox *Audio48kOverride();
00114 HostCheckBox *PassThroughOverride();
00115 HostComboBox *PassThroughOutputDevice();
00116 HostCheckBox *SPDIFRateOverride();
00117 HostCheckBox *HBRPassthrough();
00118
00119 CheckBoxSetting *m_triggerMPCM;
00120 HostCheckBox *m_MPCM;
00121 HostCheckBox *m_PassThroughOverride;
00122 };
00123
00124 class AudioAdvancedSettingsGroup : public ConfigurationWizard
00125 {
00126 public:
00127 AudioAdvancedSettingsGroup(bool mpcm);
00128 };
00129
00130 class AudioTestGroup : public ConfigurationWizard
00131 {
00132 public:
00133 AudioTestGroup(QString main, QString passthrough,
00134 int channels, AudioOutputSettings settings);
00135 };
00136
00137 class ChannelChangedEvent : public QEvent
00138 {
00139 public:
00140 ChannelChangedEvent(QString channame, bool fulltest) :
00141 QEvent(kEventType), channel(channame), fulltest(fulltest) {}
00142 ~ChannelChangedEvent() {}
00143
00144 QString channel;
00145 bool fulltest;
00146
00147 static Type kEventType;
00148 };
00149
00150 class AudioTestThread : public MThread
00151 {
00152 public:
00153
00154 AudioTestThread(QObject *parent, QString main, QString passthrough,
00155 int channels, AudioOutputSettings settings, bool hd);
00156 ~AudioTestThread();
00157
00158 void cancel();
00159 QString result();
00160 void setChannel(int channel);
00161
00162 protected:
00163 void run();
00164
00165 private:
00166 QObject *m_parent;
00167 AudioOutput *m_audioOutput;
00168 int m_channels;
00169 QString m_device;
00170 QString m_passthrough;
00171 bool m_interrupted;
00172 int m_channel;
00173 bool m_hd;
00174 int m_samplerate;
00175 AudioFormat m_format;
00176 };
00177
00178 class AudioTest : public VerticalConfigurationGroup
00179 {
00180 Q_OBJECT
00181 public:
00182 AudioTest(QString main, QString passthrough,
00183 int channels, AudioOutputSettings settings);
00184 ~AudioTest();
00185 bool event(QEvent *event);
00186
00187 private:
00188 int m_channels;
00189 TransButtonSetting *m_frontleft;
00190 TransButtonSetting *m_frontright;
00191 TransButtonSetting *m_center;
00192 TransButtonSetting *m_surroundleft;
00193 TransButtonSetting *m_surroundright;
00194 TransButtonSetting *m_rearleft;
00195 TransButtonSetting *m_rearright;
00196 TransButtonSetting *m_lfe;
00197 AudioTestThread *m_at;
00198 TransButtonSetting *m_button;
00199 TransCheckBoxSetting *m_hd;
00200 QString m_main;
00201 QString m_passthrough;
00202 AudioOutputSettings m_settings;
00203 bool m_quality;
00204
00205 private slots:
00206 void toggle(QString str);
00207 void togglequality(void);
00208 };
00209 #endif