currently_processed_segment_ = 0;
error_message_ = QString();
- rows_.clear();
+ segmented_rows_.clear();
current_rows_= nullptr;
class_rows_.clear();
}
}
- prepare_annotation_segment();
+ create_new_annotation_segment();
+
+ // TODO Allow logic_mux_data and logic_mux_segment to work with multiple segments
// Free the logic data and its segment(s) if it needs to be updated
if (logic_mux_data_invalid_)
if (!current_rows_)
return;
- // TODO Instead of current_rows_, use rows_ and the ID of the segment
+ // TODO Instead of current_rows_, use segmented_rows_ and the ID of the segment
const auto iter = current_rows_->find(row);
if (iter != current_rows_->end())
}
if (samples_to_process == 0) {
+ logic_mux_data_invalid_ = false;
+
// Wait for more input
unique_lock<mutex> logic_mux_lock(logic_mux_mutex_);
logic_mux_cond_.wait(logic_mux_lock);
}
}
-void DecodeSignal::prepare_annotation_segment()
+void DecodeSignal::create_new_annotation_segment()
{
- // TODO Won't work for multiple segments
- rows_.emplace_back(map<const decode::Row, decode::RowData>());
- current_rows_ = &(rows_.back());
+ segmented_rows_.emplace_back(map<const decode::Row, decode::RowData>());
+ current_rows_ = &(segmented_rows_.back());
// Add annotation classes
for (const shared_ptr<decode::Decoder> &dec : stack_) {
void DecodeSignal::on_capture_state_changed(int state)
{
// If a new acquisition was started, we need to start decoding from scratch
- if (state == Session::Running)
+ if (state == Session::Running) {
+ logic_mux_data_invalid_ = true;
begin_decode();
+ }
}
void DecodeSignal::on_data_cleared()