From 28cb4e7c3c139d2d688ff29155d6339ea814df6f Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 28 Mar 2018 09:58:45 +0200 Subject: [PATCH] AM demod: removed UDP/RTP copy audio entirely --- doc/img/AMDemod_plugin.png | Bin 18380 -> 17685 bytes doc/img/AMDemod_plugin.xcf | Bin 71901 -> 74429 bytes plugins/channelrx/demodam/amdemod.cpp | 30 -------- plugins/channelrx/demodam/amdemod.h | 9 --- plugins/channelrx/demodam/amdemodgui.cpp | 16 ----- plugins/channelrx/demodam/amdemodgui.h | 2 - plugins/channelrx/demodam/amdemodgui.ui | 13 ---- plugins/channelrx/demodam/amdemodsettings.cpp | 3 - plugins/channelrx/demodam/amdemodsettings.h | 3 - plugins/channelrx/demodam/readme.md | 10 +-- sdrbase/resources/webapi/doc/html2/index.html | 11 +-- .../webapi/doc/swagger/include/AMDemod.yaml | 6 -- .../sdrangel/api/swagger/include/AMDemod.yaml | 6 -- swagger/sdrangel/code/html2/index.html | 11 +-- .../code/qt5/client/SWGAMDemodSettings.cpp | 65 ------------------ .../code/qt5/client/SWGAMDemodSettings.h | 18 ----- 16 files changed, 5 insertions(+), 198 deletions(-) diff --git a/doc/img/AMDemod_plugin.png b/doc/img/AMDemod_plugin.png index 9c280fad6e9bf001191b7c0b4e2b3ddf76af5be6..8a3870050b3ac7eb9c41ab904c8c4e904ec8d1bb 100644 GIT binary patch literal 17685 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 literal 18380 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 delta 4206 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 diff --git a/plugins/channelrx/demodam/amdemod.cpp b/plugins/channelrx/demodam/amdemod.cpp index 8fab5fb8d..d92a73cc5 100644 --- a/plugins/channelrx/demodam/amdemod.cpp +++ b/plugins/channelrx/demodam/amdemod.cpp @@ -65,8 +65,6 @@ AMDemod::AMDemod(DeviceSourceAPI *deviceAPI) : DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(&m_audioFifo, getInputMessageQueue()); m_audioSampleRate = DSPEngine::instance()->getAudioDeviceManager()->getOutputSampleRate(); - m_audioNetSink = new AudioNetSink(0); // parent thread allocated dynamically - no RTP - m_audioNetSink->setDestination(m_settings.m_udpAddress, m_settings.m_udpPort); applyChannelSettings(m_inputSampleRate, m_inputFrequencyOffset, true); applySettings(m_settings, true); @@ -80,7 +78,6 @@ AMDemod::AMDemod(DeviceSourceAPI *deviceAPI) : AMDemod::~AMDemod() { DSPEngine::instance()->getAudioDeviceManager()->removeAudioSink(&m_audioFifo); - delete m_audioNetSink; m_deviceAPI->removeChannelAPI(this); m_deviceAPI->removeThreadedSink(m_threadedChannelizer); delete m_threadedChannelizer; @@ -194,7 +191,6 @@ bool AMDemod::handleMessage(const Message& cmd) BasebandSampleSink::MsgThreadedSink& cfg = (BasebandSampleSink::MsgThreadedSink&) cmd; const QThread *thread = cfg.getThread(); qDebug("AMDemod::handleMessage: BasebandSampleSink::MsgThreadedSink: %p", thread); - m_audioNetSink->moveToThread(const_cast(thread)); // use the thread for udp sinks return true; } else if (DSPSignalNotification::match(cmd)) @@ -273,9 +269,6 @@ void AMDemod::applySettings(const AMDemodSettings& settings, bool force) << " m_squelch: " << settings.m_squelch << " m_audioMute: " << settings.m_audioMute << " m_bandpassEnable: " << settings.m_bandpassEnable - << " m_copyAudioToUDP: " << settings.m_copyAudioToUDP - << " m_udpAddress: " << settings.m_udpAddress - << " m_udpPort: " << settings.m_udpPort << " m_audioDeviceName: " << settings.m_audioDeviceName << " force: " << force; @@ -295,12 +288,6 @@ void AMDemod::applySettings(const AMDemodSettings& settings, bool force) m_squelchLevel = pow(10.0, settings.m_squelch / 10.0); } - if ((m_settings.m_udpAddress != settings.m_udpAddress) - || (m_settings.m_udpPort != settings.m_udpPort) || force) - { - m_audioNetSink->setDestination(settings.m_udpAddress, settings.m_udpPort); - } - if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) { AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager(); @@ -361,9 +348,6 @@ int AMDemod::webapiSettingsPutPatch( if (channelSettingsKeys.contains("audioMute")) { settings.m_audioMute = response.getAmDemodSettings()->getAudioMute() != 0; } - if (channelSettingsKeys.contains("copyAudioToUDP")) { - settings.m_copyAudioToUDP = response.getAmDemodSettings()->getCopyAudioToUdp() != 0; - } if (channelSettingsKeys.contains("inputFrequencyOffset")) { settings.m_inputFrequencyOffset = response.getAmDemodSettings()->getInputFrequencyOffset(); @@ -381,12 +365,6 @@ int AMDemod::webapiSettingsPutPatch( if (channelSettingsKeys.contains("title")) { settings.m_title = *response.getAmDemodSettings()->getTitle(); } - if (channelSettingsKeys.contains("udpAddress")) { - settings.m_udpAddress = *response.getAmDemodSettings()->getUdpAddress(); - } - if (channelSettingsKeys.contains("udpPort")) { - settings.m_udpPort = response.getAmDemodSettings()->getUdpPort(); - } if (channelSettingsKeys.contains("volume")) { settings.m_volume = response.getAmDemodSettings()->getVolume(); } @@ -429,12 +407,10 @@ int AMDemod::webapiReportGet( void AMDemod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const AMDemodSettings& settings) { response.getAmDemodSettings()->setAudioMute(settings.m_audioMute ? 1 : 0); - response.getAmDemodSettings()->setCopyAudioToUdp(settings.m_copyAudioToUDP ? 1 : 0); response.getAmDemodSettings()->setInputFrequencyOffset(settings.m_inputFrequencyOffset); response.getAmDemodSettings()->setRfBandwidth(settings.m_rfBandwidth); response.getAmDemodSettings()->setRgbColor(settings.m_rgbColor); response.getAmDemodSettings()->setSquelch(settings.m_squelch); - response.getAmDemodSettings()->setUdpPort(settings.m_udpPort); response.getAmDemodSettings()->setVolume(settings.m_volume); response.getAmDemodSettings()->setBandpassEnable(settings.m_bandpassEnable ? 1 : 0); @@ -443,12 +419,6 @@ void AMDemod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& respo } else { response.getAmDemodSettings()->setTitle(new QString(settings.m_title)); } - - if (response.getAmDemodSettings()->getUdpAddress()) { - *response.getAmDemodSettings()->getUdpAddress() = settings.m_udpAddress; - } else { - response.getAmDemodSettings()->setUdpAddress(new QString(settings.m_udpAddress)); - } } void AMDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response) diff --git a/plugins/channelrx/demodam/amdemod.h b/plugins/channelrx/demodam/amdemod.h index 37e22601d..cc8fcff88 100644 --- a/plugins/channelrx/demodam/amdemod.h +++ b/plugins/channelrx/demodam/amdemod.h @@ -28,7 +28,6 @@ #include "dsp/agc.h" #include "dsp/bandpass.h" #include "audio/audiofifo.h" -#include "audio/audionetsink.h" #include "util/message.h" #include "amdemodsettings.h" @@ -168,7 +167,6 @@ private: AudioVector m_audioBuffer; uint32_t m_audioBufferFill; AudioFifo m_audioFifo; - AudioNetSink *m_audioNetSink; static const int m_udpBlockSize; @@ -227,18 +225,11 @@ private: Real attack = (m_squelchCount - 0.05f * m_audioSampleRate) / (0.05f * m_audioSampleRate); sample = demod * attack * (m_audioSampleRate/24) * m_settings.m_volume; - if (m_settings.m_copyAudioToUDP) { - m_audioNetSink->write(demod * attack * 32768.0f); - } - m_squelchOpen = true; } else { sample = 0; - if (m_settings.m_copyAudioToUDP) { - m_audioNetSink->write(0); - } m_squelchOpen = false; } diff --git a/plugins/channelrx/demodam/amdemodgui.cpp b/plugins/channelrx/demodam/amdemodgui.cpp index 4eb83e4a8..beb3584e8 100644 --- a/plugins/channelrx/demodam/amdemodgui.cpp +++ b/plugins/channelrx/demodam/amdemodgui.cpp @@ -173,12 +173,6 @@ void AMDemodGUI::on_audioMute_toggled(bool checked) applySettings(); } -void AMDemodGUI::on_copyAudioToUDP_toggled(bool checked) -{ - m_settings.m_copyAudioToUDP = checked; - applySettings(); -} - void AMDemodGUI::onWidgetRolled(QWidget* widget __attribute__((unused)), bool rollDown __attribute__((unused))) { /* @@ -194,14 +188,11 @@ void AMDemodGUI::onMenuDialogCalled(const QPoint &p) dialog.exec(); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - m_settings.m_udpAddress = m_channelMarker.getUDPAddress(), - m_settings.m_udpPort = m_channelMarker.getUDPSendPort(), m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); m_settings.m_title = m_channelMarker.getTitle(); setWindowTitle(m_settings.m_title); setTitleColor(m_settings.m_rgbColor); - displayUDPAddress(); applySettings(); } @@ -296,7 +287,6 @@ void AMDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); - displayUDPAddress(); blockApplySettings(true); @@ -314,16 +304,10 @@ void AMDemodGUI::displaySettings() ui->audioMute->setChecked(m_settings.m_audioMute); ui->bandpassEnable->setChecked(m_settings.m_bandpassEnable); - ui->copyAudioToUDP->setChecked(m_settings.m_copyAudioToUDP); blockApplySettings(false); } -void AMDemodGUI::displayUDPAddress() -{ - ui->copyAudioToUDP->setToolTip(QString("Copy audio output to UDP %1:%2").arg(m_settings.m_udpAddress).arg(m_settings.m_udpPort)); -} - void AMDemodGUI::leaveEvent(QEvent*) { m_channelMarker.setHighlighted(false); diff --git a/plugins/channelrx/demodam/amdemodgui.h b/plugins/channelrx/demodam/amdemodgui.h index 7172fc18a..14efddf93 100644 --- a/plugins/channelrx/demodam/amdemodgui.h +++ b/plugins/channelrx/demodam/amdemodgui.h @@ -59,7 +59,6 @@ private: void blockApplySettings(bool block); void applySettings(bool force = false); void displaySettings(); - void displayUDPAddress(); void leaveEvent(QEvent*); void enterEvent(QEvent*); @@ -71,7 +70,6 @@ private slots: void on_volume_valueChanged(int value); void on_squelch_valueChanged(int value); void on_audioMute_toggled(bool checked); - void on_copyAudioToUDP_toggled(bool copy); void onWidgetRolled(QWidget* widget, bool rollDown); void onMenuDialogCalled(const QPoint& p); void handleInputMessages(); diff --git a/plugins/channelrx/demodam/amdemodgui.ui b/plugins/channelrx/demodam/amdemodgui.ui index d051597a2..a21902430 100644 --- a/plugins/channelrx/demodam/amdemodgui.ui +++ b/plugins/channelrx/demodam/amdemodgui.ui @@ -177,19 +177,6 @@ - - - - Copy audio to UDP - - - U - - - true - - - diff --git a/plugins/channelrx/demodam/amdemodsettings.cpp b/plugins/channelrx/demodam/amdemodsettings.cpp index 3bc2ad550..53d7f8832 100644 --- a/plugins/channelrx/demodam/amdemodsettings.cpp +++ b/plugins/channelrx/demodam/amdemodsettings.cpp @@ -35,9 +35,6 @@ void AMDemodSettings::resetToDefaults() m_volume = 2.0; m_audioMute = false; m_bandpassEnable = false; - m_copyAudioToUDP = false; - m_udpAddress = "127.0.0.1"; - m_udpPort = 9999; m_rgbColor = QColor(255, 255, 0).rgb(); m_title = "AM Demodulator"; m_audioDeviceName = AudioDeviceManager::m_defaultDeviceName; diff --git a/plugins/channelrx/demodam/amdemodsettings.h b/plugins/channelrx/demodam/amdemodsettings.h index 5222808db..54cb97a5b 100644 --- a/plugins/channelrx/demodam/amdemodsettings.h +++ b/plugins/channelrx/demodam/amdemodsettings.h @@ -29,9 +29,6 @@ struct AMDemodSettings Real m_volume; bool m_audioMute; bool m_bandpassEnable; - bool m_copyAudioToUDP; - QString m_udpAddress; - quint16 m_udpPort; quint32 m_rgbColor; QString m_title; Serializable *m_channelMarker; diff --git a/plugins/channelrx/demodam/readme.md b/plugins/channelrx/demodam/readme.md index 7de066f4c..31e6f202c 100644 --- a/plugins/channelrx/demodam/readme.md +++ b/plugins/channelrx/demodam/readme.md @@ -16,15 +16,11 @@ Use the wheels to adjust the frequency shift in Hz from the center frequency of Average total power in dB relative to a +/- 1.0 amplitude signal received in the pass band. -

3: Audio mute

+

3: Audio mute and audio output select

-Use this button to toggle audio mute for this channel. The button will light up in green if the squelch is open. This helps identifying which channels are active in a multi-channel configuration. +Left click on this button to toggle audio mute for this channel. The button will light up in green if the squelch is open. This helps identifying which channels are active in a multi-channel configuration. -

4: UDP output

- -Copies audio output to UDP. Audio is set at fixed level and is muted by the mute button (13) and squelch (9) is also applied. Output is mono S16LE samples. - -UDP address and send port are specified in the basic channel settings. See: [here](https://github.com/f4exb/sdrangel/blob/master/sdrgui/readme.md#6-channels) +If you right click on it it will open a dialog to select the audio output device.

5: Level meter in dB

diff --git a/sdrbase/resources/webapi/doc/html2/index.html b/sdrbase/resources/webapi/doc/html2/index.html index 84711b135..ef2be5151 100644 --- a/sdrbase/resources/webapi/doc/html2/index.html +++ b/sdrbase/resources/webapi/doc/html2/index.html @@ -744,15 +744,6 @@ margin-bottom: 20px; "type" : "integer", "description" : "use bandpass filter (1 for yes, 0 for no)" }, - "copyAudioToUDP" : { - "type" : "integer" - }, - "udpAddress" : { - "type" : "string" - }, - "udpPort" : { - "type" : "integer" - }, "rgbColor" : { "type" : "integer" }, @@ -18054,7 +18045,7 @@ except ApiException as e:
- Generated 2018-03-28T09:34:59.109+02:00 + Generated 2018-03-28T09:46:11.248+02:00
diff --git a/sdrbase/resources/webapi/doc/swagger/include/AMDemod.yaml b/sdrbase/resources/webapi/doc/swagger/include/AMDemod.yaml index 1aff73c5d..37a05eb34 100644 --- a/sdrbase/resources/webapi/doc/swagger/include/AMDemod.yaml +++ b/sdrbase/resources/webapi/doc/swagger/include/AMDemod.yaml @@ -21,12 +21,6 @@ AMDemodSettings: bandpassEnable: description: use bandpass filter (1 for yes, 0 for no) type: integer - copyAudioToUDP: - type: integer - udpAddress: - type: string - udpPort: - type: integer rgbColor: type: integer title: diff --git a/swagger/sdrangel/api/swagger/include/AMDemod.yaml b/swagger/sdrangel/api/swagger/include/AMDemod.yaml index 1aff73c5d..37a05eb34 100644 --- a/swagger/sdrangel/api/swagger/include/AMDemod.yaml +++ b/swagger/sdrangel/api/swagger/include/AMDemod.yaml @@ -21,12 +21,6 @@ AMDemodSettings: bandpassEnable: description: use bandpass filter (1 for yes, 0 for no) type: integer - copyAudioToUDP: - type: integer - udpAddress: - type: string - udpPort: - type: integer rgbColor: type: integer title: diff --git a/swagger/sdrangel/code/html2/index.html b/swagger/sdrangel/code/html2/index.html index 84711b135..ef2be5151 100644 --- a/swagger/sdrangel/code/html2/index.html +++ b/swagger/sdrangel/code/html2/index.html @@ -744,15 +744,6 @@ margin-bottom: 20px; "type" : "integer", "description" : "use bandpass filter (1 for yes, 0 for no)" }, - "copyAudioToUDP" : { - "type" : "integer" - }, - "udpAddress" : { - "type" : "string" - }, - "udpPort" : { - "type" : "integer" - }, "rgbColor" : { "type" : "integer" }, @@ -18054,7 +18045,7 @@ except ApiException as e:
- Generated 2018-03-28T09:34:59.109+02:00 + Generated 2018-03-28T09:46:11.248+02:00
diff --git a/swagger/sdrangel/code/qt5/client/SWGAMDemodSettings.cpp b/swagger/sdrangel/code/qt5/client/SWGAMDemodSettings.cpp index 0315fd7fe..d9b74809e 100644 --- a/swagger/sdrangel/code/qt5/client/SWGAMDemodSettings.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGAMDemodSettings.cpp @@ -40,12 +40,6 @@ SWGAMDemodSettings::SWGAMDemodSettings() { m_audio_mute_isSet = false; bandpass_enable = 0; m_bandpass_enable_isSet = false; - copy_audio_to_udp = 0; - m_copy_audio_to_udp_isSet = false; - udp_address = nullptr; - m_udp_address_isSet = false; - udp_port = 0; - m_udp_port_isSet = false; rgb_color = 0; m_rgb_color_isSet = false; title = nullptr; @@ -70,12 +64,6 @@ SWGAMDemodSettings::init() { m_audio_mute_isSet = false; bandpass_enable = 0; m_bandpass_enable_isSet = false; - copy_audio_to_udp = 0; - m_copy_audio_to_udp_isSet = false; - udp_address = new QString(""); - m_udp_address_isSet = false; - udp_port = 0; - m_udp_port_isSet = false; rgb_color = 0; m_rgb_color_isSet = false; title = new QString(""); @@ -91,11 +79,6 @@ SWGAMDemodSettings::cleanup() { - if(udp_address != nullptr) { - delete udp_address; - } - - if(title != nullptr) { delete title; } @@ -124,12 +107,6 @@ SWGAMDemodSettings::fromJsonObject(QJsonObject &pJson) { ::SWGSDRangel::setValue(&bandpass_enable, pJson["bandpassEnable"], "qint32", ""); - ::SWGSDRangel::setValue(©_audio_to_udp, pJson["copyAudioToUDP"], "qint32", ""); - - ::SWGSDRangel::setValue(&udp_address, pJson["udpAddress"], "QString", "QString"); - - ::SWGSDRangel::setValue(&udp_port, pJson["udpPort"], "qint32", ""); - ::SWGSDRangel::setValue(&rgb_color, pJson["rgbColor"], "qint32", ""); ::SWGSDRangel::setValue(&title, pJson["title"], "QString", "QString"); @@ -168,15 +145,6 @@ SWGAMDemodSettings::asJsonObject() { if(m_bandpass_enable_isSet){ obj->insert("bandpassEnable", QJsonValue(bandpass_enable)); } - if(m_copy_audio_to_udp_isSet){ - obj->insert("copyAudioToUDP", QJsonValue(copy_audio_to_udp)); - } - if(udp_address != nullptr && *udp_address != QString("")){ - toJsonValue(QString("udpAddress"), udp_address, obj, QString("QString")); - } - if(m_udp_port_isSet){ - obj->insert("udpPort", QJsonValue(udp_port)); - } if(m_rgb_color_isSet){ obj->insert("rgbColor", QJsonValue(rgb_color)); } @@ -247,36 +215,6 @@ SWGAMDemodSettings::setBandpassEnable(qint32 bandpass_enable) { this->m_bandpass_enable_isSet = true; } -qint32 -SWGAMDemodSettings::getCopyAudioToUdp() { - return copy_audio_to_udp; -} -void -SWGAMDemodSettings::setCopyAudioToUdp(qint32 copy_audio_to_udp) { - this->copy_audio_to_udp = copy_audio_to_udp; - this->m_copy_audio_to_udp_isSet = true; -} - -QString* -SWGAMDemodSettings::getUdpAddress() { - return udp_address; -} -void -SWGAMDemodSettings::setUdpAddress(QString* udp_address) { - this->udp_address = udp_address; - this->m_udp_address_isSet = true; -} - -qint32 -SWGAMDemodSettings::getUdpPort() { - return udp_port; -} -void -SWGAMDemodSettings::setUdpPort(qint32 udp_port) { - this->udp_port = udp_port; - this->m_udp_port_isSet = true; -} - qint32 SWGAMDemodSettings::getRgbColor() { return rgb_color; @@ -308,9 +246,6 @@ SWGAMDemodSettings::isSet(){ if(m_volume_isSet){ isObjectUpdated = true; break;} if(m_audio_mute_isSet){ isObjectUpdated = true; break;} if(m_bandpass_enable_isSet){ isObjectUpdated = true; break;} - if(m_copy_audio_to_udp_isSet){ isObjectUpdated = true; break;} - if(udp_address != nullptr && *udp_address != QString("")){ isObjectUpdated = true; break;} - if(m_udp_port_isSet){ isObjectUpdated = true; break;} if(m_rgb_color_isSet){ isObjectUpdated = true; break;} if(title != nullptr && *title != QString("")){ isObjectUpdated = true; break;} }while(false); diff --git a/swagger/sdrangel/code/qt5/client/SWGAMDemodSettings.h b/swagger/sdrangel/code/qt5/client/SWGAMDemodSettings.h index 338106e48..44e6e82df 100644 --- a/swagger/sdrangel/code/qt5/client/SWGAMDemodSettings.h +++ b/swagger/sdrangel/code/qt5/client/SWGAMDemodSettings.h @@ -60,15 +60,6 @@ public: qint32 getBandpassEnable(); void setBandpassEnable(qint32 bandpass_enable); - qint32 getCopyAudioToUdp(); - void setCopyAudioToUdp(qint32 copy_audio_to_udp); - - QString* getUdpAddress(); - void setUdpAddress(QString* udp_address); - - qint32 getUdpPort(); - void setUdpPort(qint32 udp_port); - qint32 getRgbColor(); void setRgbColor(qint32 rgb_color); @@ -97,15 +88,6 @@ private: qint32 bandpass_enable; bool m_bandpass_enable_isSet; - qint32 copy_audio_to_udp; - bool m_copy_audio_to_udp_isSet; - - QString* udp_address; - bool m_udp_address_isSet; - - qint32 udp_port; - bool m_udp_port_isSet; - qint32 rgb_color; bool m_rgb_color_isSet;