|
|
@ -50,20 +50,20 @@ Replay::~Replay() { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void Replay::stop() { |
|
|
|
void Replay::stop() { |
|
|
|
if (!stream_thread_ && segments_.empty()) return; |
|
|
|
exit_ = true; |
|
|
|
|
|
|
|
|
|
|
|
rInfo("shutdown: in progress..."); |
|
|
|
|
|
|
|
if (stream_thread_ != nullptr) { |
|
|
|
if (stream_thread_ != nullptr) { |
|
|
|
exit_ = true; |
|
|
|
rInfo("shutdown: in progress..."); |
|
|
|
pauseStreamThread(); |
|
|
|
pauseStreamThread(); |
|
|
|
stream_cv_.notify_one(); |
|
|
|
stream_cv_.notify_one(); |
|
|
|
stream_thread_->quit(); |
|
|
|
stream_thread_->quit(); |
|
|
|
stream_thread_->wait(); |
|
|
|
stream_thread_->wait(); |
|
|
|
stream_thread_->deleteLater(); |
|
|
|
stream_thread_->deleteLater(); |
|
|
|
stream_thread_ = nullptr; |
|
|
|
stream_thread_ = nullptr; |
|
|
|
|
|
|
|
rInfo("shutdown: done"); |
|
|
|
} |
|
|
|
} |
|
|
|
timeline_future.waitForFinished(); |
|
|
|
timeline_future.waitForFinished(); |
|
|
|
rInfo("shutdown: done"); |
|
|
|
camera_server_.reset(nullptr); |
|
|
|
|
|
|
|
segments_.clear(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool Replay::load() { |
|
|
|
bool Replay::load() { |
|
|
|