+void DecodeSignal::create_new_segment()
+{
+ // Create logic mux segment if we're recreating the muxed data
+ if (logic_mux_data_invalid_) {
+ const double samplerate =
+ (current_segment_) ? current_segment_->samplerate : 0;
+
+ logic_mux_segment_ = make_shared<LogicSegment>(*logic_mux_data_,
+ logic_mux_unit_size_, samplerate);
+ logic_mux_data_->push_segment(logic_mux_segment_);
+ }
+
+ // Create annotation segment
+ segments_.emplace_back(DecodeSegment());
+ current_segment_ = &(segments_.back());
+
+ // TODO Currently we assume there's only one sample rate
+ current_segment_->samplerate = segments_.front().samplerate;
+
+ // Add annotation classes
+ for (const shared_ptr<decode::Decoder> &dec : stack_) {
+ assert(dec);
+ const srd_decoder *const decc = dec->decoder();
+ assert(dec->decoder());
+
+ // Add a row for the decoder if it doesn't have a row list
+ if (!decc->annotation_rows)
+ (current_segment_->annotation_rows)[Row(decc)] = decode::RowData();
+
+ // Add the decoder rows
+ for (const GSList *l = decc->annotation_rows; l; l = l->next) {
+ const srd_decoder_annotation_row *const ann_row =
+ (srd_decoder_annotation_row *)l->data;
+ assert(ann_row);
+
+ const Row row(decc, ann_row);
+
+ // Add a new empty row data object
+ (current_segment_->annotation_rows)[row] = decode::RowData();
+ }
+ }
+}
+