diff --git a/sdrbase/audio/audiodevicemanager.cpp b/sdrbase/audio/audiodevicemanager.cpp
index 1e1a7157e..ddae0ba9a 100644
--- a/sdrbase/audio/audiodevicemanager.cpp
+++ b/sdrbase/audio/audiodevicemanager.cpp
@@ -42,13 +42,15 @@ QDataStream& operator>>(QDataStream& ds, AudioDeviceManager::InputDeviceInfo& in
QDataStream& operator<<(QDataStream& ds, const AudioDeviceManager::OutputDeviceInfo& info)
{
- ds << info.sampleRate << info.udpAddress << info.udpPort << info.copyToUDP << info.udpStereo << info.udpUseRTP;
+ ds << info.sampleRate << info.udpAddress << info.udpPort << info.copyToUDP << info.udpUseRTP << (int) info.udpChannelMode;
return ds;
}
QDataStream& operator>>(QDataStream& ds, AudioDeviceManager::OutputDeviceInfo& info)
{
- ds >> info.sampleRate >> info.udpAddress >> info.udpPort >> info.copyToUDP >> info.udpStereo >> info.udpUseRTP;
+ int intChannelMode;
+ ds >> info.sampleRate >> info.udpAddress >> info.udpPort >> info.copyToUDP >> info.udpUseRTP >> intChannelMode;
+ info.udpChannelMode = (AudioOutput::UDPChannelMode) intChannelMode;
return ds;
}
@@ -331,8 +333,8 @@ void AudioDeviceManager::startAudioOutput(int outputDeviceIndex)
QString udpAddress;
quint16 udpPort;
bool copyAudioToUDP;
- bool udpStereo;
bool udpUseRTP;
+ AudioOutput::UDPChannelMode udpChannelMode;
QString deviceName;
if (getOutputDeviceName(outputDeviceIndex, deviceName))
@@ -343,8 +345,8 @@ void AudioDeviceManager::startAudioOutput(int outputDeviceIndex)
udpAddress = m_defaultUDPAddress;
udpPort = m_defaultUDPPort;
copyAudioToUDP = false;
- udpStereo = false;
udpUseRTP = false;
+ udpChannelMode = AudioOutput::UDPChannelLeft;
}
else
{
@@ -352,8 +354,8 @@ void AudioDeviceManager::startAudioOutput(int outputDeviceIndex)
udpAddress = m_audioOutputInfos[deviceName].udpAddress;
udpPort = m_audioOutputInfos[deviceName].udpPort;
copyAudioToUDP = m_audioOutputInfos[deviceName].copyToUDP;
- udpStereo = m_audioOutputInfos[deviceName].udpStereo;
udpUseRTP = m_audioOutputInfos[deviceName].udpUseRTP;
+ udpChannelMode = m_audioOutputInfos[deviceName].udpChannelMode;
}
m_audioOutputs[outputDeviceIndex]->start(outputDeviceIndex, sampleRate);
@@ -361,8 +363,8 @@ void AudioDeviceManager::startAudioOutput(int outputDeviceIndex)
m_audioOutputInfos[deviceName].udpAddress = udpAddress;
m_audioOutputInfos[deviceName].udpPort = udpPort;
m_audioOutputInfos[deviceName].copyToUDP = copyAudioToUDP;
- m_audioOutputInfos[deviceName].udpStereo = udpStereo;
m_audioOutputInfos[deviceName].udpUseRTP = udpUseRTP;
+ m_audioOutputInfos[deviceName].udpChannelMode = udpChannelMode;
}
else
{
@@ -570,7 +572,6 @@ void AudioDeviceManager::setOutputDeviceInfo(int outputDeviceIndex, const Output
audioOutput->setUdpCopyToUDP(deviceInfo.copyToUDP);
audioOutput->setUdpDestination(deviceInfo.udpAddress, deviceInfo.udpPort);
- audioOutput->setUdpStereo(deviceInfo.udpStereo);
audioOutput->setUdpUseRTP(deviceInfo.udpUseRTP);
}
@@ -723,7 +724,7 @@ void AudioDeviceManager::debugAudioOutputInfos() const
<< " udpAddress: " << it.value().udpAddress
<< " udpPort: " << it.value().udpPort
<< " copyToUDP: " << it.value().copyToUDP
- << " udpStereo: " << it.value().udpStereo
- << " udpUseRTP: " << it.value().udpUseRTP;
+ << " udpUseRTP: " << it.value().udpUseRTP
+ << " udpChannelMode: " << (int) it.value().udpChannelMode;
}
}
diff --git a/sdrbase/audio/audiodevicemanager.h b/sdrbase/audio/audiodevicemanager.h
index 901e48e5f..4ee715bc6 100644
--- a/sdrbase/audio/audiodevicemanager.h
+++ b/sdrbase/audio/audiodevicemanager.h
@@ -58,23 +58,23 @@ public:
udpAddress(m_defaultUDPAddress),
udpPort(m_defaultUDPPort),
copyToUDP(false),
- udpStereo(false),
- udpUseRTP(false)
+ udpUseRTP(false),
+ udpChannelMode(AudioOutput::UDPChannelLeft)
{}
void resetToDefaults() {
sampleRate = m_defaultAudioSampleRate;
udpAddress = m_defaultUDPAddress;
udpPort = m_defaultUDPPort;
copyToUDP = false;
- udpStereo = false;
udpUseRTP = false;
+ udpChannelMode = AudioOutput::UDPChannelLeft;
}
unsigned int sampleRate;
QString udpAddress;
quint16 udpPort;
bool copyToUDP;
- bool udpStereo;
bool udpUseRTP;
+ AudioOutput::UDPChannelMode udpChannelMode;
friend QDataStream& operator<<(QDataStream& ds, const OutputDeviceInfo& info);
friend QDataStream& operator>>(QDataStream& ds, OutputDeviceInfo& info);
};
diff --git a/sdrbase/audio/audiooutput.cpp b/sdrbase/audio/audiooutput.cpp
index 504ec89cd..f2d1324cc 100644
--- a/sdrbase/audio/audiooutput.cpp
+++ b/sdrbase/audio/audiooutput.cpp
@@ -28,7 +28,7 @@ AudioOutput::AudioOutput() :
m_audioOutput(0),
m_audioNetSink(0),
m_copyAudioToUdp(false),
- m_udpStereo(false),
+ m_udpChannelMode(UDPChannelLeft),
m_audioUsageCount(0),
m_onExit(false),
m_audioFifos()
@@ -188,15 +188,6 @@ void AudioOutput::setUdpCopyToUDP(bool copyToUDP)
m_copyAudioToUdp = copyToUDP;
}
-void AudioOutput::setUdpStereo(bool stereo)
-{
- if (m_audioNetSink) {
- m_audioNetSink->setStereo(stereo);
- }
-
- m_udpStereo = stereo;
-}
-
void AudioOutput::setUdpUseRTP(bool useRTP)
{
if (m_audioNetSink) {
@@ -204,6 +195,14 @@ void AudioOutput::setUdpUseRTP(bool useRTP)
}
}
+void AudioOutput::setUdpChannelMode(UDPChannelMode udpChannelMode)
+{
+ if (m_audioNetSink) {
+ m_audioNetSink->setStereo(udpChannelMode == UDPChannelStereo);
+ }
+
+ m_udpChannelMode = udpChannelMode;
+}
qint64 AudioOutput::readData(char* data, qint64 maxLen)
{
diff --git a/sdrbase/audio/audiooutput.h b/sdrbase/audio/audiooutput.h
index ec2d2c9f0..910407aa9 100644
--- a/sdrbase/audio/audiooutput.h
+++ b/sdrbase/audio/audiooutput.h
@@ -33,6 +33,14 @@ class AudioNetSink;
class SDRBASE_API AudioOutput : QIODevice {
public:
+ enum UDPChannelMode
+ {
+ UDPChannelLeft,
+ UDPChannelRight,
+ UDPChannelMixed,
+ UDPChannelStereo
+ };
+
AudioOutput();
virtual ~AudioOutput();
@@ -48,15 +56,15 @@ public:
void setUdpDestination(const QString& address, uint16_t port);
void setUdpCopyToUDP(bool copyToUDP);
- void setUdpStereo(bool stereo);
void setUdpUseRTP(bool useRTP);
+ void setUdpChannelMode(UDPChannelMode udpChannelMode);
private:
QMutex m_mutex;
QAudioOutput* m_audioOutput;
AudioNetSink* m_audioNetSink;
bool m_copyAudioToUdp;
- bool m_udpStereo;
+ UDPChannelMode m_udpChannelMode;
uint m_audioUsageCount;
bool m_onExit;
diff --git a/sdrgui/gui/audiodialog.cpp b/sdrgui/gui/audiodialog.cpp
index 270cfbc3a..ff0d5ec8c 100644
--- a/sdrgui/gui/audiodialog.cpp
+++ b/sdrgui/gui/audiodialog.cpp
@@ -198,8 +198,8 @@ void AudioDialogX::updateOutputDisplay()
ui->outputUDPAddress->setText(m_outputDeviceInfo.udpAddress);
ui->outputUDPPort->setText(tr("%1").arg(m_outputDeviceInfo.udpPort));
ui->outputUDPCopy->setChecked(m_outputDeviceInfo.copyToUDP);
- ui->outputUDPStereo->setChecked(m_outputDeviceInfo.udpStereo);
ui->outputUDPUseRTP->setChecked(m_outputDeviceInfo.udpUseRTP);
+ ui->outputUDPChannelMode->setCurrentIndex((int) m_outputDeviceInfo.udpChannelMode);
}
void AudioDialogX::updateOutputDeviceInfo()
@@ -208,7 +208,7 @@ void AudioDialogX::updateOutputDeviceInfo()
m_outputDeviceInfo.udpAddress = ui->outputUDPAddress->text();
m_outputDeviceInfo.udpPort = m_outputUDPPort;
m_outputDeviceInfo.copyToUDP = ui->outputUDPCopy->isChecked();
- m_outputDeviceInfo.udpStereo = ui->outputUDPStereo->isChecked();
m_outputDeviceInfo.udpUseRTP = ui->outputUDPUseRTP->isChecked();
+ m_outputDeviceInfo.udpChannelMode = (AudioOutput::UDPChannelMode) ui->outputUDPChannelMode->currentIndex();
}
diff --git a/sdrgui/gui/audiodialog.ui b/sdrgui/gui/audiodialog.ui
index 68fdc93a4..487bf1130 100644
--- a/sdrgui/gui/audiodialog.ui
+++ b/sdrgui/gui/audiodialog.ui
@@ -6,7 +6,7 @@
0
0
- 400
+ 472
349
@@ -204,13 +204,33 @@
-
-
-
- Copy to UDP as stereo (no L+R mix)
-
-
- S
+
+
+
+ 80
+ 0
+
+
-
+
+ Left
+
+
+ -
+
+ Right
+
+
+ -
+
+ Mixed
+
+
+ -
+
+ Stereo
+
+
-