- if (end_sample > start_sample) {
- tie(min_value_, max_value_) = asegment->get_min_max();
+ shared_ptr<sigrok::Analog> analog =
+ dynamic_pointer_cast<sigrok::Analog>(packet->payload());
+
+ // Convert
+ uint64_t i = start_sample;
+
+ if (conversion_type_ == A2LConversionByThreshold) {
+ const double threshold = get_conversion_thresholds()[0];
+
+ // Convert as many sample blocks as we can
+ while ((end_sample - i) > ConversionBlockSize) {
+ asegment->get_samples(i, i + ConversionBlockSize, asamples);
+
+ shared_ptr<sigrok::Logic> logic =
+ analog->get_logic_via_threshold(threshold, lsamples);
+
+ lsegment->append_payload(logic->data_pointer(), logic->data_length());
+
+ samples_added(lsegment, i, i + ConversionBlockSize);
+ i += ConversionBlockSize;
+ }