mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 11:28:03 +02:00
adding hmd audio device info to deviceslist
changing locations one more merge working on the threading issue changing offices, working on qml simple qml filtering fixed spacing problem when item is removed
This commit is contained in:
parent
8f7f23480f
commit
c7e1fdaeac
10 changed files with 111 additions and 34 deletions
|
@ -258,13 +258,12 @@ Flickable {
|
||||||
Layout.preferredHeight: contentItem.height
|
Layout.preferredHeight: contentItem.height
|
||||||
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
|
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
|
||||||
interactive: false
|
interactive: false
|
||||||
spacing: simplifiedUI.margins.settings.spacingBetweenRadiobuttons
|
|
||||||
clip: true
|
clip: true
|
||||||
model: AudioScriptingInterface.devices.input
|
model: AudioScriptingInterface.devices.input
|
||||||
delegate: Item {
|
delegate: Item {
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: inputDeviceCheckbox.height
|
height: model.type != "hmd" ? inputDeviceCheckbox.height + simplifiedUI.margins.settings.spacingBetweenRadiobuttons : 0
|
||||||
|
visible: model.type != "hmd"
|
||||||
SimplifiedControls.RadioButton {
|
SimplifiedControls.RadioButton {
|
||||||
id: inputDeviceCheckbox
|
id: inputDeviceCheckbox
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
|
@ -354,13 +353,12 @@ Flickable {
|
||||||
Layout.preferredHeight: contentItem.height
|
Layout.preferredHeight: contentItem.height
|
||||||
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
|
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
|
||||||
interactive: false
|
interactive: false
|
||||||
spacing: simplifiedUI.margins.settings.spacingBetweenRadiobuttons
|
|
||||||
clip: true
|
clip: true
|
||||||
model: AudioScriptingInterface.devices.output
|
model: AudioScriptingInterface.devices.output
|
||||||
delegate: Item {
|
delegate: Item {
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: outputDeviceCheckbox.height
|
height: model.type != "hmd" ? outputDeviceCheckbox.height +simplifiedUI.margins.settings.spacingBetweenRadiobuttons : 0
|
||||||
|
visible: model.type != "hmd"
|
||||||
SimplifiedControls.RadioButton {
|
SimplifiedControls.RadioButton {
|
||||||
id: outputDeviceCheckbox
|
id: outputDeviceCheckbox
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
|
|
|
@ -259,13 +259,13 @@ Flickable {
|
||||||
Layout.preferredHeight: contentItem.height
|
Layout.preferredHeight: contentItem.height
|
||||||
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
|
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
|
||||||
interactive: false
|
interactive: false
|
||||||
spacing: simplifiedUI.margins.settings.spacingBetweenRadiobuttons
|
|
||||||
clip: true
|
clip: true
|
||||||
model: AudioScriptingInterface.devices.input
|
model: AudioScriptingInterface.devices.input
|
||||||
delegate: Item {
|
delegate: Item {
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: inputDeviceCheckbox.height
|
height: model.type != "desktop" ? inputDeviceCheckbox.height + simplifiedUI.margins.settings.spacingBetweenRadiobuttons : 0
|
||||||
|
visible: model.type != "desktop"
|
||||||
|
|
||||||
SimplifiedControls.RadioButton {
|
SimplifiedControls.RadioButton {
|
||||||
id: inputDeviceCheckbox
|
id: inputDeviceCheckbox
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
|
@ -355,13 +355,12 @@ Flickable {
|
||||||
Layout.preferredHeight: contentItem.height
|
Layout.preferredHeight: contentItem.height
|
||||||
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
|
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
|
||||||
interactive: false
|
interactive: false
|
||||||
spacing: simplifiedUI.margins.settings.spacingBetweenRadiobuttons
|
|
||||||
clip: true
|
clip: true
|
||||||
model: AudioScriptingInterface.devices.output
|
model: AudioScriptingInterface.devices.output
|
||||||
delegate: Item {
|
delegate: Item {
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: outputDeviceCheckbox.height
|
height: model.type != "desktop" ? outputDeviceCheckbox.height + simplifiedUI.margins.settings.spacingBetweenRadiobuttons : 0
|
||||||
|
visible: model.type != "desktop"
|
||||||
SimplifiedControls.RadioButton {
|
SimplifiedControls.RadioButton {
|
||||||
id: outputDeviceCheckbox
|
id: outputDeviceCheckbox
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
|
|
|
@ -44,7 +44,8 @@ enum AudioDeviceRole {
|
||||||
SelectedDesktopRole,
|
SelectedDesktopRole,
|
||||||
SelectedHMDRole,
|
SelectedHMDRole,
|
||||||
PeakRole,
|
PeakRole,
|
||||||
InfoRole
|
InfoRole,
|
||||||
|
TypeRole
|
||||||
};
|
};
|
||||||
|
|
||||||
QHash<int, QByteArray> AudioDeviceList::_roles {
|
QHash<int, QByteArray> AudioDeviceList::_roles {
|
||||||
|
@ -52,7 +53,8 @@ QHash<int, QByteArray> AudioDeviceList::_roles {
|
||||||
{ SelectedDesktopRole, "selectedDesktop" },
|
{ SelectedDesktopRole, "selectedDesktop" },
|
||||||
{ SelectedHMDRole, "selectedHMD" },
|
{ SelectedHMDRole, "selectedHMD" },
|
||||||
{ PeakRole, "peak" },
|
{ PeakRole, "peak" },
|
||||||
{ InfoRole, "info" }
|
{ InfoRole, "info" },
|
||||||
|
{ TypeRole, "type"}
|
||||||
};
|
};
|
||||||
|
|
||||||
static QString getTargetDevice(bool hmd, QAudio::Mode mode) {
|
static QString getTargetDevice(bool hmd, QAudio::Mode mode) {
|
||||||
|
@ -144,6 +146,8 @@ QVariant AudioDeviceList::data(const QModelIndex& index, int role) const {
|
||||||
return _devices.at(index.row())->selectedHMD;
|
return _devices.at(index.row())->selectedHMD;
|
||||||
} else if (role == InfoRole) {
|
} else if (role == InfoRole) {
|
||||||
return QVariant::fromValue<HifiAudioDeviceInfo>(_devices.at(index.row())->info);
|
return QVariant::fromValue<HifiAudioDeviceInfo>(_devices.at(index.row())->info);
|
||||||
|
} else if (role == TypeRole) {
|
||||||
|
return _devices.at(index.row())->type;
|
||||||
} else {
|
} else {
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
@ -281,10 +285,18 @@ void AudioDeviceList::onDevicesChanged(const QList<HifiAudioDeviceInfo>& devices
|
||||||
device.info = deviceInfo;
|
device.info = deviceInfo;
|
||||||
|
|
||||||
if (deviceInfo.isDefault()) {
|
if (deviceInfo.isDefault()) {
|
||||||
if (deviceInfo.getMode() == QAudio::AudioInput) {
|
if (deviceInfo.getDeviceType() == HifiAudioDeviceInfo::desktop) {
|
||||||
device.display = "Computer's default microphone (recommended)";
|
if (deviceInfo.getMode() == QAudio::AudioInput) {
|
||||||
} else {
|
device.display = "Computer's default microphone (recommended)";
|
||||||
device.display = "Computer's default audio (recommended)";
|
} else {
|
||||||
|
device.display = "Computer's default audio (recommended)";
|
||||||
|
}
|
||||||
|
} else if (deviceInfo.getDeviceType() == HifiAudioDeviceInfo::hmd) {
|
||||||
|
if (deviceInfo.getMode() == QAudio::AudioInput) {
|
||||||
|
device.display = "Headset's default mic (recommended)";
|
||||||
|
} else {
|
||||||
|
device.display = "Headset's default audio (recommended)";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
device.display = device.info.deviceName()
|
device.display = device.info.deviceName()
|
||||||
|
@ -292,6 +304,19 @@ void AudioDeviceList::onDevicesChanged(const QList<HifiAudioDeviceInfo>& devices
|
||||||
.remove("Device")
|
.remove("Device")
|
||||||
.replace(" )", ")");
|
.replace(" )", ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (deviceInfo.getDeviceType()) {
|
||||||
|
case HifiAudioDeviceInfo::hmd:
|
||||||
|
device.type = "hmd";
|
||||||
|
break;
|
||||||
|
case HifiAudioDeviceInfo::desktop:
|
||||||
|
device.type = "desktop";
|
||||||
|
break;
|
||||||
|
case HifiAudioDeviceInfo::both:
|
||||||
|
device.type = "both";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
for (bool isHMD : {false, true}) {
|
for (bool isHMD : {false, true}) {
|
||||||
HifiAudioDeviceInfo& selectedDevice = isHMD ? _selectedHMDDevice : _selectedDesktopDevice;
|
HifiAudioDeviceInfo& selectedDevice = isHMD ? _selectedHMDDevice : _selectedDesktopDevice;
|
||||||
|
|
|
@ -29,6 +29,7 @@ public:
|
||||||
QString display;
|
QString display;
|
||||||
bool selectedDesktop { false };
|
bool selectedDesktop { false };
|
||||||
bool selectedHMD { false };
|
bool selectedHMD { false };
|
||||||
|
QString type;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AudioDeviceList : public QAbstractListModel {
|
class AudioDeviceList : public QAbstractListModel {
|
||||||
|
|
|
@ -6,7 +6,7 @@ setup_hifi_library(Network Multimedia ${PLATFORM_QT_COMPONENTS})
|
||||||
link_hifi_libraries(audio plugins)
|
link_hifi_libraries(audio plugins)
|
||||||
include_hifi_library_headers(shared)
|
include_hifi_library_headers(shared)
|
||||||
include_hifi_library_headers(networking)
|
include_hifi_library_headers(networking)
|
||||||
|
include_hifi_library_headers(gpu)
|
||||||
if (ANDROID)
|
if (ANDROID)
|
||||||
else ()
|
else ()
|
||||||
target_webrtc()
|
target_webrtc()
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
#include <SettingHandle.h>
|
#include <SettingHandle.h>
|
||||||
#include <SharedUtil.h>
|
#include <SharedUtil.h>
|
||||||
#include <Transform.h>
|
#include <Transform.h>
|
||||||
|
#include <plugins/DisplayPlugin.h>
|
||||||
#include "AudioClientLogging.h"
|
#include "AudioClientLogging.h"
|
||||||
#include "AudioLogging.h"
|
#include "AudioLogging.h"
|
||||||
#include "AudioHelpers.h"
|
#include "AudioHelpers.h"
|
||||||
|
@ -81,6 +81,21 @@ Mutex _recordMutex;
|
||||||
|
|
||||||
HifiAudioDeviceInfo defaultAudioDeviceForMode(QAudio::Mode mode);
|
HifiAudioDeviceInfo defaultAudioDeviceForMode(QAudio::Mode mode);
|
||||||
|
|
||||||
|
#include <shared/QtHelpers.h>
|
||||||
|
static QString getHmdAudioDeviceName(QAudio::Mode mode) {
|
||||||
|
foreach(DisplayPluginPointer displayPlugin, PluginManager::getInstance()->getAllDisplayPlugins()) {
|
||||||
|
if (displayPlugin && displayPlugin->isHmd()) {
|
||||||
|
if (mode == QAudio::AudioInput) {
|
||||||
|
return displayPlugin->getPreferredAudioInDevice();
|
||||||
|
} else {
|
||||||
|
return displayPlugin->getPreferredAudioOutDevice();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
// thread-safe
|
// thread-safe
|
||||||
QList<HifiAudioDeviceInfo> getAvailableDevices(QAudio::Mode mode) {
|
QList<HifiAudioDeviceInfo> getAvailableDevices(QAudio::Mode mode) {
|
||||||
// NOTE: availableDevices() clobbers the Qt internal device list
|
// NOTE: availableDevices() clobbers the Qt internal device list
|
||||||
|
@ -88,13 +103,26 @@ QList<HifiAudioDeviceInfo> getAvailableDevices(QAudio::Mode mode) {
|
||||||
auto devices = QAudioDeviceInfo::availableDevices(mode);
|
auto devices = QAudioDeviceInfo::availableDevices(mode);
|
||||||
|
|
||||||
QList<HifiAudioDeviceInfo> newDevices;
|
QList<HifiAudioDeviceInfo> newDevices;
|
||||||
|
|
||||||
for (auto& device : devices) {
|
for (auto& device : devices) {
|
||||||
newDevices.push_back(HifiAudioDeviceInfo(device, false, mode));
|
newDevices.push_back(HifiAudioDeviceInfo(device, false, mode));
|
||||||
}
|
}
|
||||||
|
|
||||||
newDevices.push_front(defaultAudioDeviceForMode(mode));
|
newDevices.push_front(defaultAudioDeviceForMode(mode));
|
||||||
|
|
||||||
|
QString hmdDeviceName = getHmdAudioDeviceName(mode);
|
||||||
|
if (!hmdDeviceName.isNull() && !hmdDeviceName.isEmpty()) {
|
||||||
|
HifiAudioDeviceInfo hmdDevice;
|
||||||
|
foreach(auto device, newDevices) {
|
||||||
|
if (device.getDevice().deviceName() == hmdDeviceName) {
|
||||||
|
hmdDevice = HifiAudioDeviceInfo(device.getDevice(), true, mode, HifiAudioDeviceInfo::hmd);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hmdDevice.getDevice().isNull()) {
|
||||||
|
newDevices.push_front(hmdDevice);
|
||||||
|
}
|
||||||
|
}
|
||||||
return newDevices;
|
return newDevices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -477,7 +505,7 @@ HifiAudioDeviceInfo defaultAudioDeviceForMode(QAudio::Mode mode) {
|
||||||
// find a device in the list that matches the name we have and return it
|
// find a device in the list that matches the name we have and return it
|
||||||
foreach(QAudioDeviceInfo audioDevice, devices){
|
foreach(QAudioDeviceInfo audioDevice, devices){
|
||||||
if (audioDevice.deviceName() == CFStringGetCStringPtr(deviceName, kCFStringEncodingMacRoman)) {
|
if (audioDevice.deviceName() == CFStringGetCStringPtr(deviceName, kCFStringEncodingMacRoman)) {
|
||||||
return HifiAudioDeviceInfo(audioDevice, true, mode);
|
return HifiAudioDeviceInfo(audioDevice, true, mode, HifiAudioDeviceInfo::desktop);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -532,7 +560,7 @@ HifiAudioDeviceInfo defaultAudioDeviceForMode(QAudio::Mode mode) {
|
||||||
HifiAudioDeviceInfo foundDevice;
|
HifiAudioDeviceInfo foundDevice;
|
||||||
foreach(QAudioDeviceInfo audioDevice, devices) {
|
foreach(QAudioDeviceInfo audioDevice, devices) {
|
||||||
if (audioDevice.deviceName().trimmed() == deviceName.trimmed()) {
|
if (audioDevice.deviceName().trimmed() == deviceName.trimmed()) {
|
||||||
foundDevice=HifiAudioDeviceInfo(audioDevice,true,mode);
|
foundDevice=HifiAudioDeviceInfo(audioDevice,true,mode, HifiAudioDeviceInfo::desktop);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -558,8 +586,8 @@ HifiAudioDeviceInfo defaultAudioDeviceForMode(QAudio::Mode mode) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// fallback for failed lookup is the default device
|
// fallback for failed lookup is the default device
|
||||||
return (mode == QAudio::AudioInput) ? HifiAudioDeviceInfo(QAudioDeviceInfo::defaultInputDevice(), true,mode) :
|
return (mode == QAudio::AudioInput) ? HifiAudioDeviceInfo(QAudioDeviceInfo::defaultInputDevice(), true,mode, HifiAudioDeviceInfo::desktop) :
|
||||||
HifiAudioDeviceInfo(QAudioDeviceInfo::defaultOutputDevice(), true, mode);
|
HifiAudioDeviceInfo(QAudioDeviceInfo::defaultOutputDevice(), true, mode, HifiAudioDeviceInfo::desktop);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AudioClient::getNamedAudioDeviceForModeExists(QAudio::Mode mode, const QString& deviceName) {
|
bool AudioClient::getNamedAudioDeviceForModeExists(QAudio::Mode mode, const QString& deviceName) {
|
||||||
|
|
|
@ -22,6 +22,7 @@ HifiAudioDeviceInfo& HifiAudioDeviceInfo::operator=(const HifiAudioDeviceInfo& o
|
||||||
_audioDeviceInfo = other.getDevice();
|
_audioDeviceInfo = other.getDevice();
|
||||||
_mode = other.getMode();
|
_mode = other.getMode();
|
||||||
_isDefault = other.isDefault();
|
_isDefault = other.isDefault();
|
||||||
|
_deviceType = other.getDeviceType();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,19 +23,28 @@ class HifiAudioDeviceInfo : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
enum deviceType {
|
||||||
|
desktop,
|
||||||
|
hmd,
|
||||||
|
both
|
||||||
|
};
|
||||||
|
|
||||||
HifiAudioDeviceInfo() : QObject() {}
|
HifiAudioDeviceInfo() : QObject() {}
|
||||||
HifiAudioDeviceInfo(const HifiAudioDeviceInfo &deviceInfo) : QObject(){
|
HifiAudioDeviceInfo(const HifiAudioDeviceInfo &deviceInfo) : QObject(){
|
||||||
_audioDeviceInfo = deviceInfo.getDevice();
|
_audioDeviceInfo = deviceInfo.getDevice();
|
||||||
_mode = deviceInfo.getMode();
|
_mode = deviceInfo.getMode();
|
||||||
_isDefault = deviceInfo.isDefault();
|
_isDefault = deviceInfo.isDefault();
|
||||||
|
_deviceType = deviceInfo.getDeviceType();
|
||||||
}
|
}
|
||||||
|
|
||||||
HifiAudioDeviceInfo(QAudioDeviceInfo deviceInfo, bool isDefault, QAudio::Mode mode) :
|
|
||||||
|
HifiAudioDeviceInfo(QAudioDeviceInfo deviceInfo, bool isDefault, QAudio::Mode mode, deviceType devType=both) :
|
||||||
_audioDeviceInfo(deviceInfo),
|
_audioDeviceInfo(deviceInfo),
|
||||||
_isDefault(isDefault),
|
_isDefault(isDefault),
|
||||||
_mode(mode){
|
_mode(mode),
|
||||||
|
_deviceType(devType){
|
||||||
}
|
}
|
||||||
|
|
||||||
void setMode(QAudio::Mode mode) { _mode = mode; }
|
void setMode(QAudio::Mode mode) { _mode = mode; }
|
||||||
void setIsDefault() { _isDefault = true; }
|
void setIsDefault() { _isDefault = true; }
|
||||||
void setDevice(QAudioDeviceInfo devInfo);
|
void setDevice(QAudioDeviceInfo devInfo);
|
||||||
|
@ -52,15 +61,17 @@ public:
|
||||||
QAudioDeviceInfo getDevice() const { return _audioDeviceInfo; }
|
QAudioDeviceInfo getDevice() const { return _audioDeviceInfo; }
|
||||||
bool isDefault() const { return _isDefault; }
|
bool isDefault() const { return _isDefault; }
|
||||||
QAudio::Mode getMode() const { return _mode; }
|
QAudio::Mode getMode() const { return _mode; }
|
||||||
|
deviceType getDeviceType() const { return _deviceType; }
|
||||||
HifiAudioDeviceInfo& operator=(const HifiAudioDeviceInfo& other);
|
HifiAudioDeviceInfo& operator=(const HifiAudioDeviceInfo& other);
|
||||||
bool operator==(const HifiAudioDeviceInfo& rhs) const;
|
bool operator==(const HifiAudioDeviceInfo& rhs) const;
|
||||||
bool operator!=(const HifiAudioDeviceInfo& rhs) const;
|
bool operator!=(const HifiAudioDeviceInfo& rhs) const;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QAudioDeviceInfo _audioDeviceInfo;
|
QAudioDeviceInfo _audioDeviceInfo;
|
||||||
bool _isDefault { false };
|
bool _isDefault { false };
|
||||||
QAudio::Mode _mode { QAudio::AudioInput };
|
QAudio::Mode _mode { QAudio::AudioInput };
|
||||||
|
deviceType _deviceType{ both };
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static const QString DEFAULT_DEVICE_NAME;
|
static const QString DEFAULT_DEVICE_NAME;
|
||||||
|
|
|
@ -221,7 +221,21 @@ const OculusPlatformPluginPointer PluginManager::getOculusPlatformPlugin() {
|
||||||
return oculusPlatformPlugin;
|
return oculusPlatformPlugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
const DisplayPluginList& PluginManager::getDisplayPlugins() {
|
#include <shared/QtHelpers.h>
|
||||||
|
#include <QThreadPool>
|
||||||
|
|
||||||
|
|
||||||
|
DisplayPluginList PluginManager::getAllDisplayPlugins() {
|
||||||
|
if (thread() != QThread::currentThread()) {
|
||||||
|
DisplayPluginList list;
|
||||||
|
QMetaObject::invokeMethod(this, "getAllDisplayPlugins", Qt::BlockingQueuedConnection, Q_RETURN_ARG(DisplayPluginList, list));
|
||||||
|
return list;
|
||||||
|
} else {
|
||||||
|
return _displayPlugins;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const DisplayPluginList& PluginManager::getDisplayPlugins() {
|
||||||
static std::once_flag once;
|
static std::once_flag once;
|
||||||
static auto deviceAddedCallback = [](QString deviceName) {
|
static auto deviceAddedCallback = [](QString deviceName) {
|
||||||
qCDebug(plugins) << "Added device: " << deviceName;
|
qCDebug(plugins) << "Added device: " << deviceName;
|
||||||
|
|
|
@ -51,7 +51,7 @@ public:
|
||||||
|
|
||||||
using PluginFilter = std::function<bool(const QJsonObject&)>;
|
using PluginFilter = std::function<bool(const QJsonObject&)>;
|
||||||
void setPluginFilter(PluginFilter pluginFilter) { _pluginFilter = pluginFilter; }
|
void setPluginFilter(PluginFilter pluginFilter) { _pluginFilter = pluginFilter; }
|
||||||
|
Q_INVOKABLE DisplayPluginList getAllDisplayPlugins();
|
||||||
signals:
|
signals:
|
||||||
void inputDeviceRunningChanged(const QString& pluginName, bool isRunning, const QStringList& runningDevices);
|
void inputDeviceRunningChanged(const QString& pluginName, bool isRunning, const QStringList& runningDevices);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue