From da4d2505a5772c29effbd7080b84458c824acb42 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Fri, 3 Mar 2017 15:38:18 +0100 Subject: [PATCH] feat(ui/views/App/Settings/SettingsVideo): supports video parameters --- linphone-desktop/assets/languages/en.ts | 39 +++++++++ linphone-desktop/assets/languages/fr.ts | 39 +++++++++ .../src/components/settings/SettingsModel.cpp | 54 ++++++++++++ .../src/components/settings/SettingsModel.hpp | 29 +++++++ .../ui/views/App/Settings/SettingsVideo.qml | 82 +++++++++++++++++++ 5 files changed, 243 insertions(+) diff --git a/linphone-desktop/assets/languages/en.ts b/linphone-desktop/assets/languages/en.ts index 6bbac0d0c..09bba3bf2 100644 --- a/linphone-desktop/assets/languages/en.ts +++ b/linphone-desktop/assets/languages/en.ts @@ -899,6 +899,45 @@ Server url not configured. System locale + + SettingsVideo + + videoInputDeviceLabel + Video input device + + + useCustomVideoFramerateLabel + Use custom framerate + + + videoFramerateLabel + Framerate + + + videoCaptureTitle + Video capture parameters + + + videoPresetLabel + Video preset + + + presetDefault + Default + + + presetHighFps + High FPS + + + presetCustom + Custom + + + videoSizeLabel + Video resolution + + SettingsWindow diff --git a/linphone-desktop/assets/languages/fr.ts b/linphone-desktop/assets/languages/fr.ts index 684a9e148..7bd2d2b95 100644 --- a/linphone-desktop/assets/languages/fr.ts +++ b/linphone-desktop/assets/languages/fr.ts @@ -909,6 +909,45 @@ Url du serveur non configurée. Locale du système + + SettingsVideo + + videoInputDeviceLabel + Périphérique de capture vidéo + + + useCustomVideoFramerateLabel + Forcer n.b. images/s + + + videoFramerateLabel + Images/s + + + videoCaptureTitle + Paramètres de capture vidéo + + + videoPresetLabel + Profil vidéo + + + presetDefault + Défaut + + + presetHighFps + Fluide + + + presetCustom + Personnalisé + + + videoSizeLabel + Définition + + SettingsWindow diff --git a/linphone-desktop/src/components/settings/SettingsModel.cpp b/linphone-desktop/src/components/settings/SettingsModel.cpp index 4d2eacc4e..3fc9bd874 100644 --- a/linphone-desktop/src/components/settings/SettingsModel.cpp +++ b/linphone-desktop/src/components/settings/SettingsModel.cpp @@ -148,6 +148,60 @@ void SettingsModel::setEchoCancellationEnabled (bool status) { emit echoCancellationEnabledChanged(status); } +// ============================================================================= +// Video. +// ============================================================================= + +QStringList SettingsModel::getVideoDevices () const { + QStringList list; + + for (const auto &device : CoreManager::getInstance()->getCore()->getVideoDevices()) + list << ::Utils::linphoneStringToQString(device); + + return list; +} + +// ----------------------------------------------------------------------------- + +QString SettingsModel::getVideoDevice () const { + return ::Utils::linphoneStringToQString( + CoreManager::getInstance()->getCore()->getVideoDevice() + ); +} + +void SettingsModel::setVideoDevice (const QString &device) { + CoreManager::getInstance()->getCore()->setVideoDevice( + ::Utils::qStringToLinphoneString(device) + ); + emit videoDeviceChanged(device); +} + +// ----------------------------------------------------------------------------- + +QString SettingsModel::getVideoPreset () const { + return ::Utils::linphoneStringToQString( + CoreManager::getInstance()->getCore()->getVideoPreset() + ); +} + +void SettingsModel::setVideoPreset (const QString &preset) { + CoreManager::getInstance()->getCore()->setVideoPreset( + ::Utils::qStringToLinphoneString(preset) + ); + emit videoPresetChanged(preset); +} + +// ----------------------------------------------------------------------------- + +int SettingsModel::getVideoFramerate () const { + return static_cast(CoreManager::getInstance()->getCore()->getPreferredFramerate()); +} + +void SettingsModel::setVideoFramerate (int framerate) { + CoreManager::getInstance()->getCore()->setPreferredFramerate(static_cast(framerate)); + emit videoFramerateChanged(framerate); +} + // ============================================================================= // Chat & calls. // ============================================================================= diff --git a/linphone-desktop/src/components/settings/SettingsModel.hpp b/linphone-desktop/src/components/settings/SettingsModel.hpp index 7c07fd165..957ae40e1 100644 --- a/linphone-desktop/src/components/settings/SettingsModel.hpp +++ b/linphone-desktop/src/components/settings/SettingsModel.hpp @@ -49,6 +49,15 @@ class SettingsModel : public QObject { Q_PROPERTY(bool echoCancellationEnabled READ getEchoCancellationEnabled WRITE setEchoCancellationEnabled NOTIFY echoCancellationEnabledChanged); + // Video. -------------------------------------------------------------------- + + Q_PROPERTY(QStringList videoDevices READ getVideoDevices CONSTANT); + + Q_PROPERTY(QString videoDevice READ getVideoDevice WRITE setVideoDevice NOTIFY videoDeviceChanged); + + Q_PROPERTY(QString videoPreset READ getVideoPreset WRITE setVideoPreset NOTIFY videoPresetChanged); + Q_PROPERTY(int videoFramerate READ getVideoFramerate WRITE setVideoFramerate NOTIFY videoFramerateChanged); + // Chat & calls. ------------------------------------------------------------- Q_PROPERTY(bool autoAnswerStatus READ getAutoAnswerStatus WRITE setAutoAnswerStatus NOTIFY autoAnswerStatusChanged); @@ -147,6 +156,19 @@ public: bool getEchoCancellationEnabled () const; void setEchoCancellationEnabled (bool status); + // Video. -------------------------------------------------------------------- + + QStringList getVideoDevices () const; + + QString getVideoDevice () const; + void setVideoDevice (const QString &device); + + QString getVideoPreset () const; + void setVideoPreset (const QString &preset); + + int getVideoFramerate () const; + void setVideoFramerate (int framerate); + // Chat & calls. ------------------------------------------------------------- bool getAutoAnswerStatus () const; @@ -249,6 +271,13 @@ signals: void echoCancellationEnabledChanged (bool status); + // Video. -------------------------------------------------------------------- + + void videoDeviceChanged (const QString &device); + + void videoPresetChanged (const QString &preset); + void videoFramerateChanged (int framerate); + // Chat & calls. ------------------------------------------------------------- void autoAnswerStatusChanged (bool status); diff --git a/linphone-desktop/ui/views/App/Settings/SettingsVideo.qml b/linphone-desktop/ui/views/App/Settings/SettingsVideo.qml index f5c0de773..f2c344d7c 100644 --- a/linphone-desktop/ui/views/App/Settings/SettingsVideo.qml +++ b/linphone-desktop/ui/views/App/Settings/SettingsVideo.qml @@ -1,9 +1,91 @@ import QtQuick 2.7 import Common 1.0 +import Linphone 1.0 +import Utils 1.0 // ============================================================================= TabContainer { + Form { + title: qsTr('videoCaptureTitle') + width: parent.width + FormLine { + FormGroup { + label: qsTr('videoInputDeviceLabel') + + ComboBox { + model: SettingsModel.videoDevices + + Component.onCompleted: currentIndex = Utils.findIndex(model, function (device) { + return device === SettingsModel.videoDevice + }) + + onActivated: SettingsModel.videoDevice = model[index] + } + } + } + + FormLine { + FormGroup { + label: qsTr('videoPresetLabel') + + ComboBox { + model: ListModel { + id: presets + + ListElement { + key: qsTr('presetDefault') + value: 'default' + } + + ListElement { + key: qsTr('presetHighFps') + value: 'high-fps' + } + + ListElement { + key: qsTr('presetCustom') + value: 'custom' + } + } + + textRole: 'key' + + Component.onCompleted: { + var preset = SettingsModel.videoPreset + currentIndex = Number(Utils.findIndex([ 'default', 'high-fps', 'custom' ], function (value) { + return preset === value + })) + } + + onActivated: SettingsModel.videoPreset = presets.get(index).value + } + } + } + + FormLine { + FormGroup { + label: qsTr('videoSizeLabel') + + ComboBox { + // TODO + } + } + + FormGroup { + label: qsTr('videoFramerateLabel') + + NumericField { + maxValue: 60 + minValue: 1 + readOnly: SettingsModel.videoPreset !== 'custom' + text: SettingsModel.videoFramerate + + onEditingFinished: SettingsModel.videoFramerate = text + } + } + } + } }