diff --git a/src/api/QGCCorePlugin.cc b/src/api/QGCCorePlugin.cc index c0cdd4a59fea8d70ff86e977ce8f0c753200326e..91d95d27173ceb276f27521d00dc2f74beef927a 100644 --- a/src/api/QGCCorePlugin.cc +++ b/src/api/QGCCorePlugin.cc @@ -136,21 +136,44 @@ void QGCCorePlugin::_activeVehicleChanged(Vehicle* activeVehicle) } if(_dynamicCameras) { disconnect(_dynamicCameras, &QGCCameraManager::currentCameraChanged, this, &QGCCorePlugin::_currentCameraChanged); + _dynamicCameras = nullptr; } _activeVehicle = activeVehicle; - connect(_activeVehicle, &Vehicle::dynamicCamerasChanged, this, &QGCCorePlugin::_dynamicCamerasChanged); + if(_activeVehicle) { + connect(_activeVehicle, &Vehicle::dynamicCamerasChanged, this, &QGCCorePlugin::_dynamicCamerasChanged); + } } } void QGCCorePlugin::_dynamicCamerasChanged() { + if(_currentCamera) { + disconnect(_currentCamera, &QGCCameraControl::autoStreamChanged, this, &QGCCorePlugin::_autoStreamChanged); + _currentCamera = nullptr; + } if(_activeVehicle) { _dynamicCameras = _activeVehicle->dynamicCameras(); - connect(_dynamicCameras, &QGCCameraManager::currentCameraChanged, this, &QGCCorePlugin::_currentCameraChanged); + if(_dynamicCameras) { + connect(_dynamicCameras, &QGCCameraManager::currentCameraChanged, this, &QGCCorePlugin::_currentCameraChanged); + } } } void QGCCorePlugin::_currentCameraChanged() +{ + if(_dynamicCameras) { + QGCCameraControl* cp = _dynamicCameras->currentCameraInstance(); + if(_currentCamera) { + disconnect(_currentCamera, &QGCCameraControl::autoStreamChanged, this, &QGCCorePlugin::_autoStreamChanged); + } + if(_currentCamera != cp) { + _currentCamera = cp; + connect(_currentCamera, &QGCCameraControl::autoStreamChanged, this, &QGCCorePlugin::_autoStreamChanged); + } + } +} + +void QGCCorePlugin::_autoStreamChanged() { _resetInstrumentPages(); emit instrumentPagesChanged(); @@ -248,7 +271,7 @@ QVariantList& QGCCorePlugin::instrumentPages() _p->valuesPageWidgetInfo = new QmlComponentInfo(tr("Values"), QUrl::fromUserInput("qrc:/qml/ValuePageWidget.qml")); _p->cameraPageWidgetInfo = new QmlComponentInfo(tr("Camera"), QUrl::fromUserInput("qrc:/qml/CameraPageWidget.qml")); #if defined(QGC_GST_STREAMING) - if(!_dynamicCameras || !_dynamicCameras->currentCameraInstance() || !_dynamicCameras->currentCameraInstance()->autoStream()) { + if(!_currentCamera || !_currentCamera->autoStream()) { //-- Video Page Widget only available if using manual video streaming _p->videoPageWidgetInfo = new QmlComponentInfo(tr("Video Stream"), QUrl::fromUserInput("qrc:/qml/VideoPageWidget.qml")); } diff --git a/src/api/QGCCorePlugin.h b/src/api/QGCCorePlugin.h index 37c6f12c09d7e691e4178e47bb8315560bf06a22..a299944da89f4bbb4cd6c3ddd70e599183c47338 100644 --- a/src/api/QGCCorePlugin.h +++ b/src/api/QGCCorePlugin.h @@ -34,6 +34,7 @@ class QmlObjectListModel; class VideoReceiver; class PlanMasterController; class QGCCameraManager; +class QGCCameraControl; class QGCCorePlugin : public QGCTool { @@ -163,6 +164,7 @@ protected slots: void _activeVehicleChanged (Vehicle* activeVehicle); void _dynamicCamerasChanged (); void _currentCameraChanged (); + void _autoStreamChanged (); protected: void _resetInstrumentPages (); @@ -172,6 +174,7 @@ protected: bool _showAdvancedUI; Vehicle* _activeVehicle = nullptr; QGCCameraManager* _dynamicCameras = nullptr; + QGCCameraControl* _currentCamera = nullptr; private: QGCCorePlugin_p* _p;