Commit 1683185c authored by Gus Grubba's avatar Gus Grubba Committed by Gus Grubba

CP - Fix crash bug that could occur when reconnecting a camera.

parent cf7e6107
...@@ -12,8 +12,9 @@ ...@@ -12,8 +12,9 @@
QGC_LOGGING_CATEGORY(CameraManagerLog, "CameraManagerLog") QGC_LOGGING_CATEGORY(CameraManagerLog, "CameraManagerLog")
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
QGCCameraManager::CameraStruct::CameraStruct(QObject* parent) QGCCameraManager::CameraStruct::CameraStruct(QObject* parent, uint8_t compID_)
: QObject(parent) : QObject(parent)
, compID(compID_)
{ {
} }
...@@ -112,7 +113,7 @@ QGCCameraManager::_handleHeartbeat(const mavlink_message_t &message) ...@@ -112,7 +113,7 @@ QGCCameraManager::_handleHeartbeat(const mavlink_message_t &message)
QString sCompID = QString::number(message.compid); QString sCompID = QString::number(message.compid);
if(!_cameraInfoRequest.contains(sCompID)) { if(!_cameraInfoRequest.contains(sCompID)) {
qCDebug(CameraManagerLog) << "Hearbeat from " << message.compid; qCDebug(CameraManagerLog) << "Hearbeat from " << message.compid;
CameraStruct* pInfo = new CameraStruct(this); CameraStruct* pInfo = new CameraStruct(this, message.compid);
pInfo->lastHeartbeat.start(); pInfo->lastHeartbeat.start();
_cameraInfoRequest[sCompID] = pInfo; _cameraInfoRequest[sCompID] = pInfo;
//-- Request camera info //-- Request camera info
...@@ -226,19 +227,22 @@ QGCCameraManager::_cameraTimeout() ...@@ -226,19 +227,22 @@ QGCCameraManager::_cameraTimeout()
//-- Has the camera stopped talking to us? //-- Has the camera stopped talking to us?
if(pInfo->lastHeartbeat.elapsed() > 5000) { if(pInfo->lastHeartbeat.elapsed() > 5000) {
//-- Camera is gone. Remove it. //-- Camera is gone. Remove it.
bool autoStream = false;
QGCCameraControl* pCamera = _findCamera(pInfo->compID); QGCCameraControl* pCamera = _findCamera(pInfo->compID);
qWarning() << "Camera" << pCamera->modelName() << "stopped transmitting. Removing from list."; if(pCamera) {
int idx = _cameraLabels.indexOf(pCamera->modelName()); qWarning() << "Camera" << pCamera->modelName() << "stopped transmitting. Removing from list.";
if(idx >= 0) { int idx = _cameraLabels.indexOf(pCamera->modelName());
_cameraLabels.removeAt(idx); if(idx >= 0) {
} _cameraLabels.removeAt(idx);
idx = _cameras.indexOf(pCamera); }
if(idx >= 0) { idx = _cameras.indexOf(pCamera);
_cameras.removeAt(idx); if(idx >= 0) {
_cameras.removeAt(idx);
}
autoStream = pCamera->autoStream();
pCamera->deleteLater();
delete pInfo;
} }
bool autoStream = pCamera->autoStream();
pCamera->deleteLater();
delete pInfo;
_cameraInfoRequest.remove(sCompID); _cameraInfoRequest.remove(sCompID);
emit cameraLabelsChanged(); emit cameraLabelsChanged();
//-- If we have another camera, switch current camera. //-- If we have another camera, switch current camera.
......
...@@ -76,7 +76,7 @@ protected: ...@@ -76,7 +76,7 @@ protected:
class CameraStruct : public QObject { class CameraStruct : public QObject {
public: public:
CameraStruct(QObject* parent); CameraStruct(QObject* parent, uint8_t compID_);
QTime lastHeartbeat; QTime lastHeartbeat;
bool infoReceived = false; bool infoReceived = false;
bool gaveUp = false; bool gaveUp = false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment