diff --git a/src/FlightDisplay/VideoManager.cc b/src/FlightDisplay/VideoManager.cc index b6c5a83ea6c1de4ccd9a9636158c5c61b6b1a1eb..7188f1a34d2dccbf69d9df2e8382afb1acd17040 100644 --- a/src/FlightDisplay/VideoManager.cc +++ b/src/FlightDisplay/VideoManager.cc @@ -57,6 +57,9 @@ VideoManager::setToolbox(QGCToolbox *toolbox) _videoSettings = toolbox->settingsManager()->videoSettings(); QString videoSource = _videoSettings->videoSource()->rawValue().toString(); connect(_videoSettings->videoSource(), &Fact::rawValueChanged, this, &VideoManager::_videoSourceChanged); + connect(_videoSettings->udpPort(), &Fact::rawValueChanged, this, &VideoManager::_udpPortChanged); + connect(_videoSettings->rtspUrl(), &Fact::rawValueChanged, this, &VideoManager::_rtspUrlChanged); + #if defined(QGC_GST_STREAMING) #ifndef QGC_DISABLE_UVC @@ -96,6 +99,17 @@ void VideoManager::_videoSourceChanged(void) { emit hasVideoChanged(); emit isGStreamerChanged(); + _restartVideo(); +} + +void VideoManager::_udpPortChanged(void) +{ + _restartVideo(); +} + +void VideoManager::_rtspUrlChanged(void) +{ + _restartVideo(); } //----------------------------------------------------------------------------- @@ -170,6 +184,18 @@ void VideoManager::_updateTimer() #endif } +//----------------------------------------------------------------------------- +void VideoManager::_updateSettings() +{ + if(!_videoSettings || !_videoReceiver) + return; + + if (_videoSettings->videoSource()->rawValue().toString() == VideoSettings::videoSourceUDP) + _videoReceiver->setUri(QStringLiteral("udp://0.0.0.0:%1").arg(_videoSettings->udpPort()->rawValue().toInt())); + else + _videoReceiver->setUri(_videoSettings->rtspUrl()->rawValue().toString()); +} + //----------------------------------------------------------------------------- void VideoManager::_updateVideo() { @@ -182,12 +208,20 @@ void VideoManager::_updateVideo() _videoReceiver = new VideoReceiver(this); #if defined(QGC_GST_STREAMING) _videoReceiver->setVideoSink(_videoSurface->videoSink()); - QString videoSource = _videoSettings->videoSource()->rawValue().toString(); - if (_videoSettings->videoSource()->rawValue().toString() == VideoSettings::videoSourceUDP) - _videoReceiver->setUri(QStringLiteral("udp://0.0.0.0:%1").arg(_videoSettings->udpPort()->rawValue().toInt())); - else - _videoReceiver->setUri(_videoSettings->rtspUrl()->rawValue().toString()); + _updateSettings(); #endif _videoReceiver->start(); } } + +//----------------------------------------------------------------------------- +void VideoManager::_restartVideo() +{ + if(!_videoReceiver) + return; +#if defined(QGC_GST_STREAMING) + _videoReceiver->stop(); + _updateSettings(); + _videoReceiver->start(); +#endif +} diff --git a/src/FlightDisplay/VideoManager.h b/src/FlightDisplay/VideoManager.h index 162da00b0607519e7b1de2c29b4654ec0dac796a..0bade88feb9be2daaba6ffd379945c27508fa86c 100644 --- a/src/FlightDisplay/VideoManager.h +++ b/src/FlightDisplay/VideoManager.h @@ -69,10 +69,16 @@ signals: private slots: void _videoSourceChanged(void); + void _udpPortChanged(void); + void _rtspUrlChanged(void); + private: void _updateTimer (); + void _updateSettings (); void _updateVideo (); + void _restartVideo (); + VideoSurface* _videoSurface; VideoReceiver* _videoReceiver; diff --git a/src/ui/preferences/GeneralSettings.qml b/src/ui/preferences/GeneralSettings.qml index 0f1a160e6c3ec22fe1d17f1e842ace12d30336e7..da291d0fabab88c2dc391d46f18ebc90bf15493d 100644 --- a/src/ui/preferences/GeneralSettings.qml +++ b/src/ui/preferences/GeneralSettings.qml @@ -495,7 +495,7 @@ QGCView { visible: QGroundControl.settingsManager.videoSettings.visible QGCLabel { id: videoLabel - text: qsTr("Video (Requires Restart)") + text: qsTr("Video") font.family: ScreenTools.demiboldFontFamily } }