1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-06-08 17:52:27 -04:00

Separate construction/destruction for the sink output plugin core and the GUI

This commit is contained in:
f4exb 2017-09-16 11:34:25 +02:00
parent 1d4cb21bb5
commit 9dd99a4530
22 changed files with 143 additions and 99 deletions

View File

@ -51,6 +51,11 @@ BladerfOutput::~BladerfOutput()
m_deviceAPI->setBuddySharedPtr(0); m_deviceAPI->setBuddySharedPtr(0);
} }
void BladerfOutput::destroy()
{
delete this;
}
bool BladerfOutput::openDevice() bool BladerfOutput::openDevice()
{ {
if (m_dev != 0) if (m_dev != 0)

View File

@ -70,6 +70,7 @@ public:
BladerfOutput(DeviceSinkAPI *deviceAPI); BladerfOutput(DeviceSinkAPI *deviceAPI);
virtual ~BladerfOutput(); virtual ~BladerfOutput();
virtual void destroy();
virtual bool start(); virtual bool start();
virtual void stop(); virtual void stop();

View File

@ -37,8 +37,7 @@ BladerfOutputGui::BladerfOutputGui(DeviceSinkAPI *deviceAPI, QWidget* parent) :
m_sampleRate(0), m_sampleRate(0),
m_lastEngineState((DSPDeviceSinkEngine::State)-1) m_lastEngineState((DSPDeviceSinkEngine::State)-1)
{ {
m_deviceSampleSink = new BladerfOutput(m_deviceAPI); m_deviceSampleSink = (BladerfOutput*) m_deviceAPI->getSampleSink();
m_deviceAPI->setSink(m_deviceSampleSink);
ui->setupUi(this); ui->setupUi(this);
ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold));
@ -68,7 +67,6 @@ BladerfOutputGui::BladerfOutputGui(DeviceSinkAPI *deviceAPI, QWidget* parent) :
BladerfOutputGui::~BladerfOutputGui() BladerfOutputGui::~BladerfOutputGui()
{ {
delete m_deviceSampleSink; // Valgrind memcheck
delete ui; delete ui;
} }

View File

@ -65,9 +65,8 @@ FileSinkGui::FileSinkGui(DeviceSinkAPI *deviceAPI, QWidget* parent) :
displaySettings(); displaySettings();
m_deviceSampleSink = new FileSinkOutput(m_deviceAPI); m_deviceSampleSink = (FileSinkOutput*) m_deviceAPI->getSampleSink();
connect(m_deviceSampleSink->getOutputMessageQueueToGUI(), SIGNAL(messageEnqueued()), this, SLOT(handleSinkMessages())); connect(m_deviceSampleSink->getOutputMessageQueueToGUI(), SIGNAL(messageEnqueued()), this, SLOT(handleSinkMessages()));
m_deviceAPI->setSink(m_deviceSampleSink);
connect(m_deviceAPI->getDeviceEngineOutputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleDSPMessages()), Qt::QueuedConnection); connect(m_deviceAPI->getDeviceEngineOutputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleDSPMessages()), Qt::QueuedConnection);
} }

View File

@ -52,6 +52,11 @@ FileSinkOutput::~FileSinkOutput()
stop(); stop();
} }
void FileSinkOutput::destroy()
{
delete this;
}
void FileSinkOutput::openFileStream() void FileSinkOutput::openFileStream()
{ {
if (m_ofstream.is_open()) { if (m_ofstream.is_open()) {

View File

@ -150,6 +150,7 @@ public:
FileSinkOutput(DeviceSinkAPI *deviceAPI); FileSinkOutput(DeviceSinkAPI *deviceAPI);
virtual ~FileSinkOutput(); virtual ~FileSinkOutput();
virtual void destroy();
virtual bool start(); virtual bool start();
virtual void stop(); virtual void stop();

View File

@ -52,6 +52,11 @@ HackRFOutput::~HackRFOutput()
m_deviceAPI->setBuddySharedPtr(0); m_deviceAPI->setBuddySharedPtr(0);
} }
void HackRFOutput::destroy()
{
delete this;
}
bool HackRFOutput::openDevice() bool HackRFOutput::openDevice()
{ {
if (m_dev != 0) if (m_dev != 0)

View File

@ -70,6 +70,7 @@ public:
HackRFOutput(DeviceSinkAPI *deviceAPI); HackRFOutput(DeviceSinkAPI *deviceAPI);
virtual ~HackRFOutput(); virtual ~HackRFOutput();
virtual void destroy();
virtual bool start(); virtual bool start();
virtual void stop(); virtual void stop();

View File

@ -40,8 +40,7 @@ HackRFOutputGui::HackRFOutputGui(DeviceSinkAPI *deviceAPI, QWidget* parent) :
m_deviceSampleSink(0), m_deviceSampleSink(0),
m_lastEngineState((DSPDeviceSinkEngine::State)-1) m_lastEngineState((DSPDeviceSinkEngine::State)-1)
{ {
m_deviceSampleSink = new HackRFOutput(m_deviceAPI); m_deviceSampleSink = (HackRFOutput*) m_deviceAPI->getSampleSink();
m_deviceAPI->setSink(m_deviceSampleSink);
ui->setupUi(this); ui->setupUi(this);
ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold));
@ -62,7 +61,6 @@ HackRFOutputGui::HackRFOutputGui(DeviceSinkAPI *deviceAPI, QWidget* parent) :
HackRFOutputGui::~HackRFOutputGui() HackRFOutputGui::~HackRFOutputGui()
{ {
delete m_deviceSampleSink; // Valgrind memcheck
delete ui; delete ui;
} }

View File

@ -59,6 +59,11 @@ LimeSDROutput::~LimeSDROutput()
resumeBuddies(); resumeBuddies();
} }
void LimeSDROutput::destroy()
{
delete this;
}
bool LimeSDROutput::openDevice() bool LimeSDROutput::openDevice()
{ {
// look for Tx buddies and get reference to common parameters // look for Tx buddies and get reference to common parameters

View File

@ -210,6 +210,7 @@ public:
LimeSDROutput(DeviceSinkAPI *deviceAPI); LimeSDROutput(DeviceSinkAPI *deviceAPI);
virtual ~LimeSDROutput(); virtual ~LimeSDROutput();
virtual void destroy();
virtual bool start(); virtual bool start();
virtual void stop(); virtual void stop();

View File

@ -37,9 +37,8 @@ LimeSDROutputGUI::LimeSDROutputGUI(DeviceSinkAPI *deviceAPI, QWidget* parent) :
m_statusCounter(0), m_statusCounter(0),
m_deviceStatusCounter(0) m_deviceStatusCounter(0)
{ {
m_limeSDROutput = new LimeSDROutput(m_deviceAPI); m_limeSDROutput = (LimeSDROutput*) m_deviceAPI->getSampleSink();
m_sampleSink = (DeviceSampleSink *) m_limeSDROutput; m_deviceAPI->setSampleSink(m_sampleSink);
m_deviceAPI->setSink(m_sampleSink);
ui->setupUi(this); ui->setupUi(this);
@ -81,7 +80,6 @@ LimeSDROutputGUI::LimeSDROutputGUI(DeviceSinkAPI *deviceAPI, QWidget* parent) :
LimeSDROutputGUI::~LimeSDROutputGUI() LimeSDROutputGUI::~LimeSDROutputGUI()
{ {
delete m_sampleSink; // Valgrind memcheck
delete ui; delete ui;
} }

View File

@ -83,9 +83,8 @@ SDRdaemonSinkGui::SDRdaemonSinkGui(DeviceSinkAPI *deviceAPI, QWidget* parent) :
connect(&m_statusTimer, SIGNAL(timeout()), this, SLOT(updateStatus())); connect(&m_statusTimer, SIGNAL(timeout()), this, SLOT(updateStatus()));
m_statusTimer.start(500); m_statusTimer.start(500);
m_deviceSampleSink = new SDRdaemonSinkOutput(m_deviceAPI); m_deviceSampleSink = (SDRdaemonSinkOutput*) m_deviceAPI->getSampleSink();
connect(m_deviceSampleSink->getOutputMessageQueueToGUI(), SIGNAL(messageEnqueued()), this, SLOT(handleSinkMessages())); connect(m_deviceSampleSink->getOutputMessageQueueToGUI(), SIGNAL(messageEnqueued()), this, SLOT(handleSinkMessages()));
m_deviceAPI->setSink(m_deviceSampleSink);
connect(m_deviceAPI->getDeviceEngineOutputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleDSPMessages()), Qt::QueuedConnection); connect(m_deviceAPI->getDeviceEngineOutputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleDSPMessages()), Qt::QueuedConnection);

View File

@ -50,6 +50,11 @@ SDRdaemonSinkOutput::~SDRdaemonSinkOutput()
stop(); stop();
} }
void SDRdaemonSinkOutput::destroy()
{
delete this;
}
bool SDRdaemonSinkOutput::start() bool SDRdaemonSinkOutput::start()
{ {
QMutexLocker mutexLocker(&m_mutex); QMutexLocker mutexLocker(&m_mutex);

View File

@ -134,6 +134,7 @@ public:
SDRdaemonSinkOutput(DeviceSinkAPI *deviceAPI); SDRdaemonSinkOutput(DeviceSinkAPI *deviceAPI);
virtual ~SDRdaemonSinkOutput(); virtual ~SDRdaemonSinkOutput();
virtual void destroy();
virtual bool start(); virtual bool start();
virtual void stop(); virtual void stop();

View File

@ -83,11 +83,16 @@ uint32_t DeviceSinkAPI::getNumberOfSources()
return m_deviceSinkEngine->getNumberOfSources(); return m_deviceSinkEngine->getNumberOfSources();
} }
void DeviceSinkAPI::setSink(DeviceSampleSink* sink) void DeviceSinkAPI::setSampleSink(DeviceSampleSink* sink)
{ {
m_deviceSinkEngine->setSink(sink); m_deviceSinkEngine->setSink(sink);
} }
DeviceSampleSink *DeviceSinkAPI::getSampleSink()
{
return m_deviceSinkEngine->getSink();
}
bool DeviceSinkAPI::initGeneration() bool DeviceSinkAPI::initGeneration()
{ {
return m_deviceSinkEngine->initGeneration(); return m_deviceSinkEngine->initGeneration();
@ -157,6 +162,11 @@ void DeviceSinkAPI::setSampleSinkId(const QString& id)
m_sampleSinkId = id; m_sampleSinkId = id;
} }
void DeviceSinkAPI::resetSampleSinkId()
{
m_sampleSinkId.clear();
}
void DeviceSinkAPI::setSampleSinkSerial(const QString& serial) void DeviceSinkAPI::setSampleSinkSerial(const QString& serial)
{ {
m_sampleSinkSerial = serial; m_sampleSinkSerial = serial;
@ -180,12 +190,6 @@ void DeviceSinkAPI::setSampleSinkPluginInterface(PluginInterface *iface)
void DeviceSinkAPI::setSampleSinkPluginInstanceUI(PluginInstanceUI *gui) void DeviceSinkAPI::setSampleSinkPluginInstanceUI(PluginInstanceUI *gui)
{ {
if (m_sampleSinkPluginInstanceUI != 0)
{
m_sampleSinkPluginInstanceUI->destroy();
m_sampleSinkId.clear();
}
m_sampleSinkPluginInstanceUI = gui; m_sampleSinkPluginInstanceUI = gui;
} }
@ -217,23 +221,13 @@ void DeviceSinkAPI::renameChannelInstances()
} }
} }
void DeviceSinkAPI::freeAll() void DeviceSinkAPI::freeChannels()
{ {
for(int i = 0; i < m_channelInstanceRegistrations.count(); i++) for(int i = 0; i < m_channelInstanceRegistrations.count(); i++)
{ {
qDebug("DeviceSinkAPI::freeAll: destroying channel [%s]", qPrintable(m_channelInstanceRegistrations[i].m_channelName)); qDebug("DeviceSinkAPI::freeAll: destroying channel [%s]", qPrintable(m_channelInstanceRegistrations[i].m_channelName));
m_channelInstanceRegistrations[i].m_gui->destroy(); m_channelInstanceRegistrations[i].m_gui->destroy();
} }
if(m_sampleSinkPluginInstanceUI != 0)
{
qDebug("DeviceSinkAPI::freeAll: destroying m_sampleSourcePluginGUI");
m_deviceSinkEngine->setSink(0);
m_sampleSinkPluginInstanceUI->destroy();
m_sampleSinkPluginInstanceUI = 0;
m_sampleSinkId.clear();
}
} }
void DeviceSinkAPI::loadSinkSettings(const Preset* preset) void DeviceSinkAPI::loadSinkSettings(const Preset* preset)

View File

@ -50,7 +50,8 @@ public:
void addThreadedSource(ThreadedBasebandSampleSource* sink); //!< Add a baseband sample source that will run on its own thread to device engine void addThreadedSource(ThreadedBasebandSampleSource* sink); //!< Add a baseband sample source that will run on its own thread to device engine
void removeThreadedSource(ThreadedBasebandSampleSource* sink); //!< Remove a baseband sample source that runs on its own thread from device engine void removeThreadedSource(ThreadedBasebandSampleSource* sink); //!< Remove a baseband sample source that runs on its own thread from device engine
uint32_t getNumberOfSources(); uint32_t getNumberOfSources();
void setSink(DeviceSampleSink* sink); //!< Set device engine sample sink type void setSampleSink(DeviceSampleSink* sink); //!< Set device engine sample sink type
DeviceSampleSink *getSampleSink(); //!< Return pointer to the device sample sink
bool initGeneration(); //!< Initialize device engine generation sequence bool initGeneration(); //!< Initialize device engine generation sequence
bool startGeneration(); //!< Start device engine generation sequence bool startGeneration(); //!< Start device engine generation sequence
void stopGeneration(); //!< Stop device engine generation sequence void stopGeneration(); //!< Stop device engine generation sequence
@ -67,6 +68,7 @@ public:
void setHardwareId(const QString& id); void setHardwareId(const QString& id);
void setSampleSinkId(const QString& id); void setSampleSinkId(const QString& id);
void resetSampleSinkId();
void setSampleSinkSerial(const QString& serial); void setSampleSinkSerial(const QString& serial);
void setSampleSinkDisplayName(const QString& serial); void setSampleSinkDisplayName(const QString& serial);
void setSampleSinkSequence(int sequence); void setSampleSinkSequence(int sequence);
@ -77,13 +79,14 @@ public:
const QString& getSampleSinkId() const { return m_sampleSinkId; } const QString& getSampleSinkId() const { return m_sampleSinkId; }
const QString& getSampleSinkSerial() const { return m_sampleSinkSerial; } const QString& getSampleSinkSerial() const { return m_sampleSinkSerial; }
const QString& getSampleSinkDisplayName() const { return m_sampleSinkDisplayName; } const QString& getSampleSinkDisplayName() const { return m_sampleSinkDisplayName; }
PluginInterface *getSampleSinkPluginInterface() { return m_pluginInterface; } PluginInterface *getPluginInterface() { return m_pluginInterface; }
uint32_t getSampleSinkSequence() const { return m_sampleSinkSequence; } uint32_t getSampleSinkSequence() const { return m_sampleSinkSequence; }
PluginInstanceUI *getSampleSinkPluginInstanceGUI() { return m_sampleSinkPluginInstanceUI; }
void registerChannelInstance(const QString& channelName, PluginInstanceUI* pluginGUI); void registerChannelInstance(const QString& channelName, PluginInstanceUI* pluginGUI);
void removeChannelInstance(PluginInstanceUI* pluginGUI); void removeChannelInstance(PluginInstanceUI* pluginGUI);
void freeAll(); void freeChannels();
void loadSinkSettings(const Preset* preset); void loadSinkSettings(const Preset* preset);
void saveSinkSettings(Preset* preset); void saveSinkSettings(Preset* preset);

View File

@ -30,6 +30,7 @@ class SDRANGEL_API DeviceSampleSink : public QObject {
public: public:
DeviceSampleSink(); DeviceSampleSink();
virtual ~DeviceSampleSink(); virtual ~DeviceSampleSink();
virtual void destroy() = 0;
virtual bool start() = 0; virtual bool start() = 0;
virtual void stop() = 0; virtual void stop() = 0;

View File

@ -64,6 +64,7 @@ public:
void stopGeneration(); //!< Stop generation sequence void stopGeneration(); //!< Stop generation sequence
void setSink(DeviceSampleSink* sink); //!< Set the sample sink type void setSink(DeviceSampleSink* sink); //!< Set the sample sink type
DeviceSampleSink *getSink() { return m_deviceSampleSink; }
void setSinkSequence(int sequence); //!< Set the sample sink sequence in type void setSinkSequence(int sequence); //!< Set the sample sink sequence in type
void addSource(BasebandSampleSource* source); //!< Add a baseband sample source void addSource(BasebandSampleSource* source); //!< Add a baseband sample source

View File

@ -276,12 +276,15 @@ void MainWindow::addSinkDevice()
ui->tabInputsSelect->addTab(m_deviceUIs.back()->m_samplingDeviceControl, tabNameCStr); ui->tabInputsSelect->addTab(m_deviceUIs.back()->m_samplingDeviceControl, tabNameCStr);
ui->tabInputsSelect->setTabToolTip(deviceTabIndex, QString(uidCStr)); ui->tabInputsSelect->setTabToolTip(deviceTabIndex, QString(uidCStr));
// create a file sink by default
m_pluginManager->selectSampleSinkBySerialOrSequence("sdrangel.samplesink.filesink", "0", 0, m_deviceUIs.back()->m_deviceSinkAPI); m_pluginManager->selectSampleSinkBySerialOrSequence("sdrangel.samplesink.filesink", "0", 0, m_deviceUIs.back()->m_deviceSinkAPI);
DeviceSampleSink *sink = m_deviceUIs.back()->m_deviceSinkAPI->getPluginInterface()->createSampleSinkPluginInstanceOutput(
m_deviceUIs.back()->m_deviceSinkAPI->getSampleSinkId(), m_deviceUIs.back()->m_deviceSinkAPI);
m_deviceUIs.back()->m_deviceSinkAPI->setSampleSink(sink);
QWidget *gui; QWidget *gui;
PluginInstanceUI *pluginGUI = m_deviceUIs.back()->m_deviceSinkAPI->getSampleSinkPluginInterface()->createSampleSinkPluginInstanceGUI( PluginInstanceUI *pluginUI = m_deviceUIs.back()->m_deviceSinkAPI->getPluginInterface()->createSampleSinkPluginInstanceGUI(
m_deviceUIs.back()->m_deviceSinkAPI->getSampleSinkId(), &gui, m_deviceUIs.back()->m_deviceSinkAPI); m_deviceUIs.back()->m_deviceSinkAPI->getSampleSinkId(), &gui, m_deviceUIs.back()->m_deviceSinkAPI);
m_deviceUIs.back()->m_deviceSinkAPI->setSampleSinkPluginInstanceUI(pluginGUI); m_deviceUIs.back()->m_deviceSinkAPI->setSampleSinkPluginInstanceUI(pluginUI);
setDeviceGUI(deviceTabIndex, gui, m_deviceUIs.back()->m_deviceSinkAPI->getSampleSinkDisplayName(), false); setDeviceGUI(deviceTabIndex, gui, m_deviceUIs.back()->m_deviceSinkAPI->getSampleSinkDisplayName(), false);
} }
@ -333,8 +336,14 @@ void MainWindow::removeLastDevice()
ui->tabSpectraGUI->removeTab(ui->tabSpectraGUI->count() - 1); ui->tabSpectraGUI->removeTab(ui->tabSpectraGUI->count() - 1);
ui->tabSpectra->removeTab(ui->tabSpectra->count() - 1); ui->tabSpectra->removeTab(ui->tabSpectra->count() - 1);
m_deviceUIs.back()->m_deviceSinkAPI->freeAll(); // deletes old UI and output object
m_deviceUIs.back()->m_deviceSinkAPI->clearBuddiesLists(); // remove old API from buddies lists m_deviceUIs.back()->m_deviceSinkAPI->freeChannels();
m_deviceUIs.back()->m_deviceSinkAPI->getPluginInterface()->deleteSampleSourcePluginInstanceGUI(
m_deviceUIs.back()->m_deviceSinkAPI->getSampleSinkPluginInstanceGUI());
m_deviceUIs.back()->m_deviceSinkAPI->resetSampleSinkId();
m_deviceUIs.back()->m_deviceSinkAPI->clearBuddiesLists(); // clear old API buddies lists
m_deviceUIs.back()->m_deviceSinkAPI->getPluginInterface()->deleteSampleSinkPluginInstanceOutput(
m_deviceUIs.back()->m_deviceSinkAPI->getSampleSink());
ui->tabChannels->removeTab(ui->tabChannels->count() - 1); ui->tabChannels->removeTab(ui->tabChannels->count() - 1);
@ -904,8 +913,13 @@ void MainWindow::on_sampleSink_confirmClicked(bool checked __attribute__((unused
void *devicePtr = deviceUI->m_samplingDeviceControl->getDeviceSelector()->itemData(selectedComboIndex).value<void *>(); void *devicePtr = deviceUI->m_samplingDeviceControl->getDeviceSelector()->itemData(selectedComboIndex).value<void *>();
deviceUI->m_deviceSinkAPI->stopGeneration(); deviceUI->m_deviceSinkAPI->stopGeneration();
deviceUI->m_deviceSinkAPI->setSampleSinkPluginInstanceUI(0); // deletes old GUI and input object // deletes old UI and output object
deviceUI->m_deviceSinkAPI->clearBuddiesLists(); // remove old API from buddies lists deviceUI->m_deviceSinkAPI->getPluginInterface()->deleteSampleSourcePluginInstanceGUI(
deviceUI->m_deviceSinkAPI->getSampleSinkPluginInstanceGUI());
deviceUI->m_deviceSinkAPI->resetSampleSinkId();
deviceUI->m_deviceSinkAPI->clearBuddiesLists(); // clear old API buddies lists
deviceUI->m_deviceSinkAPI->getPluginInterface()->deleteSampleSinkPluginInstanceOutput(
deviceUI->m_deviceSinkAPI->getSampleSink());
m_pluginManager->selectSampleSinkByDevice(devicePtr, deviceUI->m_deviceSinkAPI); // sets the new API m_pluginManager->selectSampleSinkByDevice(devicePtr, deviceUI->m_deviceSinkAPI); // sets the new API
@ -944,8 +958,11 @@ void MainWindow::on_sampleSink_confirmClicked(bool checked __attribute__((unused
} }
// constructs new GUI and output object // constructs new GUI and output object
DeviceSampleSink *sink = deviceUI->m_deviceSinkAPI->getPluginInterface()->createSampleSinkPluginInstanceOutput(
deviceUI->m_deviceSinkAPI->getSampleSinkId(), deviceUI->m_deviceSinkAPI);
deviceUI->m_deviceSinkAPI->setSampleSink(sink);
QWidget *gui; QWidget *gui;
PluginInstanceUI *pluginUI = deviceUI->m_deviceSinkAPI->getSampleSinkPluginInterface()->createSampleSinkPluginInstanceGUI( PluginInstanceUI *pluginUI = deviceUI->m_deviceSinkAPI->getPluginInterface()->createSampleSinkPluginInstanceGUI(
deviceUI->m_deviceSinkAPI->getSampleSinkId(), &gui, deviceUI->m_deviceSinkAPI); deviceUI->m_deviceSinkAPI->getSampleSinkId(), &gui, deviceUI->m_deviceSinkAPI);
deviceUI->m_deviceSinkAPI->setSampleSinkPluginInstanceUI(pluginUI); deviceUI->m_deviceSinkAPI->setSampleSinkPluginInstanceUI(pluginUI);
setDeviceGUI(currentSinkTabIndex, gui, deviceUI->m_deviceSinkAPI->getSampleSinkDisplayName(), false); setDeviceGUI(currentSinkTabIndex, gui, deviceUI->m_deviceSinkAPI->getSampleSinkDisplayName(), false);

View File

@ -1,4 +1,5 @@
#include "dsp/devicesamplesource.h" #include "dsp/devicesamplesource.h"
#include "dsp/devicesamplesink.h"
#include "plugin/plugininterface.h" #include "plugin/plugininterface.h"
#include "plugininstanceui.h" #include "plugininstanceui.h"
@ -18,3 +19,7 @@ void PluginInterface::deleteSampleSinkPluginInstanceGUI(PluginInstanceUI *ui)
ui->destroy(); ui->destroy();
} }
void PluginInterface::deleteSampleSinkPluginInstanceOutput(DeviceSampleSink *sink)
{
sink->destroy();
}

View File

@ -69,6 +69,7 @@ public:
virtual PluginInstanceUI* createSampleSinkPluginInstanceGUI(const QString& sinkId __attribute__((unused)), QWidget **widget __attribute__((unused)), DeviceSinkAPI *deviceAPI __attribute__((unused))) { return 0; } virtual PluginInstanceUI* createSampleSinkPluginInstanceGUI(const QString& sinkId __attribute__((unused)), QWidget **widget __attribute__((unused)), DeviceSinkAPI *deviceAPI __attribute__((unused))) { return 0; }
virtual DeviceSampleSink* createSampleSinkPluginInstanceOutput(const QString& sinkId __attribute__((unused)), DeviceSinkAPI *deviceAPI __attribute__((unused))) { return 0; } // creates the output "core" virtual DeviceSampleSink* createSampleSinkPluginInstanceOutput(const QString& sinkId __attribute__((unused)), DeviceSinkAPI *deviceAPI __attribute__((unused))) { return 0; } // creates the output "core"
virtual void deleteSampleSinkPluginInstanceGUI(PluginInstanceUI *ui); virtual void deleteSampleSinkPluginInstanceGUI(PluginInstanceUI *ui);
virtual void deleteSampleSinkPluginInstanceOutput(DeviceSampleSink *sink);
}; };
Q_DECLARE_INTERFACE(PluginInterface, "SDRangel.PluginInterface/0.1"); Q_DECLARE_INTERFACE(PluginInterface, "SDRangel.PluginInterface/0.1");