Commit 58b8db24 authored by Andrew Voznytsa's avatar Andrew Voznytsa

More consistent video receiver state handling

parent ff1eb2d3
...@@ -302,25 +302,8 @@ VideoReceiverApp::exec() ...@@ -302,25 +302,8 @@ VideoReceiverApp::exec()
startStreaming(); startStreaming();
QObject::connect(_receiver, &VideoReceiver::timeout, [this](){ QObject::connect(_receiver, &VideoReceiver::timeout, [](){
qCDebug(AppLog) << "Streaming timeout"; qCDebug(AppLog) << "Streaming timeout";
_dispatch([this](){
if (_streaming) {
_receiver->stop();
} else {
if (--_connect > 0) {
qCDebug(AppLog) << "Restarting streaming";
_dispatch([this](){
startStreaming();
});
} else {
qCDebug(AppLog) << "Closing...";
delete _receiver;
_app.exit();
}
}
});
}); });
QObject::connect(_receiver, &VideoReceiver::streamingChanged, [this](bool active){ QObject::connect(_receiver, &VideoReceiver::streamingChanged, [this](bool active){
...@@ -329,16 +312,6 @@ VideoReceiverApp::exec() ...@@ -329,16 +312,6 @@ VideoReceiverApp::exec()
qCDebug(AppLog) << "Streaming started"; qCDebug(AppLog) << "Streaming started";
} else { } else {
qCDebug(AppLog) << "Streaming stopped"; qCDebug(AppLog) << "Streaming stopped";
_dispatch([this](){
if (--_connect > 0) {
qCDebug(AppLog) << "Restarting streaming";
startStreaming();
} else {
qCDebug(AppLog) << "Closing...";
delete _receiver;
_app.exit();
}
});
} }
}); });
...@@ -374,6 +347,44 @@ VideoReceiverApp::exec() ...@@ -374,6 +347,44 @@ VideoReceiverApp::exec()
} }
}); });
QObject::connect(_receiver, &VideoReceiver::onStartComplete, [this](VideoReceiver::STATUS status){
if (status != VideoReceiver::STATUS_OK) {
qCDebug(AppLog) << "Video receiver start failed";
_dispatch([this](){
if (--_connect > 0) {
qCDebug(AppLog) << "Restarting ...";
_dispatch([this](){
startStreaming();
});
} else {
qCDebug(AppLog) << "Closing...";
delete _receiver;
_app.exit();
}
});
} else {
qCDebug(AppLog) << "Video receiver started";
}
});
QObject::connect(_receiver, &VideoReceiver::onStopComplete, [this](VideoReceiver::STATUS ){
qCDebug(AppLog) << "Video receiver stopped";
_dispatch([this](){
if (--_connect > 0) {
qCDebug(AppLog) << "Restarting ...";
_dispatch([this](){
startStreaming();
});
} else {
qCDebug(AppLog) << "Closing...";
delete _receiver;
_app.exit();
}
});
});
return _app.exec(); return _app.exec();
} }
......
...@@ -115,14 +115,9 @@ VideoManager::setToolbox(QGCToolbox *toolbox) ...@@ -115,14 +115,9 @@ VideoManager::setToolbox(QGCToolbox *toolbox)
_videoReceiver[0] = toolbox->corePlugin()->createVideoReceiver(this); _videoReceiver[0] = toolbox->corePlugin()->createVideoReceiver(this);
_videoReceiver[1] = toolbox->corePlugin()->createVideoReceiver(this); _videoReceiver[1] = toolbox->corePlugin()->createVideoReceiver(this);
connect(_videoReceiver[0], &VideoReceiver::timeout, this, [this](){
_stopReceiver(0);
});
connect(_videoReceiver[0], &VideoReceiver::streamingChanged, this, [this](bool active){ connect(_videoReceiver[0], &VideoReceiver::streamingChanged, this, [this](bool active){
_streaming = active; _streaming = active;
emit streamingChanged(); emit streamingChanged();
_restartVideo(0);
}); });
connect(_videoReceiver[0], &VideoReceiver::onStartComplete, this, [this](VideoReceiver::STATUS status) { connect(_videoReceiver[0], &VideoReceiver::onStartComplete, this, [this](VideoReceiver::STATUS status) {
...@@ -178,14 +173,6 @@ VideoManager::setToolbox(QGCToolbox *toolbox) ...@@ -178,14 +173,6 @@ VideoManager::setToolbox(QGCToolbox *toolbox)
// FIXME: AV: I believe _thermalVideoReceiver should be handled just like _videoReceiver in terms of event // FIXME: AV: I believe _thermalVideoReceiver should be handled just like _videoReceiver in terms of event
// and I expect that it will be changed during multiple video stream activity // and I expect that it will be changed during multiple video stream activity
if (_videoReceiver[1] != nullptr) { if (_videoReceiver[1] != nullptr) {
connect(_videoReceiver[1], &VideoReceiver::timeout, this, [this](){
_stopReceiver(1);
});
connect(_videoReceiver[1], &VideoReceiver::streamingChanged, this, [this](bool active){
_restartVideo(1);
});
connect(_videoReceiver[1], &VideoReceiver::onStartComplete, this, [this](VideoReceiver::STATUS status) { connect(_videoReceiver[1], &VideoReceiver::onStartComplete, this, [this](VideoReceiver::STATUS status) {
if (status == VideoReceiver::STATUS_OK) { if (status == VideoReceiver::STATUS_OK) {
_videoStarted[1] = true; _videoStarted[1] = true;
......
...@@ -644,6 +644,7 @@ GstVideoReceiver::_watchdog(void) ...@@ -644,6 +644,7 @@ GstVideoReceiver::_watchdog(void)
_dispatchSignal([this](){ _dispatchSignal([this](){
emit timeout(); emit timeout();
}); });
stop();
} }
if (_decoding && !_removingDecoder) { if (_decoding && !_removingDecoder) {
...@@ -656,6 +657,7 @@ GstVideoReceiver::_watchdog(void) ...@@ -656,6 +657,7 @@ GstVideoReceiver::_watchdog(void)
_dispatchSignal([this](){ _dispatchSignal([this](){
emit timeout(); emit timeout();
}); });
stop();
} }
} }
}); });
......
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