Skip to content
Snippets Groups Projects
Commit 5fc541a2 authored by Sebastian Hahta's avatar Sebastian Hahta
Browse files

fix crash

parent 6c103941
Branches main
No related tags found
1 merge request!316Resolves #343 GUI and Frame Refactor
Pipeline #28100 failed
...@@ -24,10 +24,10 @@ void Calibration::init() { ...@@ -24,10 +24,10 @@ void Calibration::init() {
std::vector<std::pair<std::string, FrameID>> cameras; std::vector<std::pair<std::string, FrameID>> cameras;
auto* view = new ftl::gui2::CalibrationStart(screen, this); auto* view = new ftl::gui2::CalibrationStart(screen, this);
for (auto id : io->feed()->listFrames()) { for (auto id : io->feed()->listFrames()) {
if (io->feed()->availableChannels(id).count(Channel::CalibrationData)) { //if (io->feed()->availableChannels(id).count(Channel::CalibrationData)) {
cameras.push_back( cameras.push_back(
{io->feed()->getURI(id.frameset()) + "#" + std::to_string(id.source()), id}); {io->feed()->getURI(id.frameset()) + "#" + std::to_string(id.source()), id});
} //}
} }
view->setCameras(cameras); view->setCameras(cameras);
screen->setView(view); screen->setView(view);
......
...@@ -76,7 +76,7 @@ private: ...@@ -76,7 +76,7 @@ private:
//ftl::Handler<const ftl::data::FrameSetPtr&> frameset_cb_; //ftl::Handler<const ftl::data::FrameSetPtr&> frameset_cb_;
std::unordered_map<std::string, uint32_t> fsid_lookup_; std::unordered_map<std::string, uint32_t> fsid_lookup_;
std::map<ftl::data::FrameID, std::unordered_set<ftl::codecs::Channel>> available_channels_; std::map<uint32_t, ftl::data::FrameSetPtr> latest_;
std::unordered_map<uint32_t, ftl::stream::Stream*> streams_; std::unordered_map<uint32_t, ftl::stream::Stream*> streams_;
std::unordered_map<uint32_t, ftl::operators::Graph*> pre_pipelines_; std::unordered_map<uint32_t, ftl::operators::Graph*> pre_pipelines_;
...@@ -102,7 +102,7 @@ public: ...@@ -102,7 +102,7 @@ public:
/** list possible channels /** list possible channels
* BUG:/TODO: only returns requested + persistent * BUG:/TODO: only returns requested + persistent
*/ */
const std::unordered_set<ftl::codecs::Channel>& availableChannels(ftl::data::FrameID); const std::unordered_set<ftl::codecs::Channel> availableChannels(ftl::data::FrameID);
/** Add source (file path, device path or URI) */ /** Add source (file path, device path or URI) */
uint32_t add(const std::string &str); uint32_t add(const std::string &str);
......
...@@ -106,10 +106,7 @@ Feed::Feed(nlohmann::json &config, ftl::net::Universe*net) : ...@@ -106,10 +106,7 @@ Feed::Feed(nlohmann::json &config, ftl::net::Universe*net) :
pre_pipelines_[fs->frameset()]->apply(*fs, *fs, 0); pre_pipelines_[fs->frameset()]->apply(*fs, *fs, 0);
} }
for (unsigned i = 0; i < fs->frames.size(); i++) { std::atomic_store(&latest_[fs->frameset()], fs);
auto id = ftl::data::FrameID(fs->frameset(), i);
available_channels_[id].merge((*fs)[i].channels());
}
std::unique_lock<std::mutex> lk(mtx_); std::unique_lock<std::mutex> lk(mtx_);
for (auto* filter : filters_) { for (auto* filter : filters_) {
...@@ -376,16 +373,22 @@ uint32_t Feed::getID(const std::string &source) { ...@@ -376,16 +373,22 @@ uint32_t Feed::getID(const std::string &source) {
return fsid_lookup_.at(source); return fsid_lookup_.at(source);
} }
const std::unordered_set<Channel>& Feed::availableChannels(ftl::data::FrameID id) { const std::unordered_set<Channel> Feed::availableChannels(ftl::data::FrameID id) {
return available_channels_[id]; ftl::data::FrameSetPtr fs;
std::atomic_store(&fs, latest_[id.frameset()]);
if (fs && fs->hasFrame(id.source())) {
return (*fs.get())[id.source()].available();
}
return {};
} }
std::vector<ftl::data::FrameID> Feed::listFrames() { std::vector<ftl::data::FrameID> Feed::listFrames() {
std::vector<ftl::data::FrameID> result; std::vector<ftl::data::FrameID> result;
result.reserve(available_channels_.size()); result.reserve(fsid_lookup_.size());
for (const auto& [k, v] : available_channels_) { for (const auto [k, fs] : latest_) {
std::ignore = v; for (unsigned i = 0; i < fs->frames.size(); i++) {
result.push_back(k); result.push_back(ftl::data::FrameID(fs->frameset(), i));
}
} }
return result; return result;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment