+void DecodeSignal::query_input_metadata()
+{
+ // Update the samplerate and start time because we cannot start
+ // the libsrd session without the current samplerate
+
+ // TODO Currently we assume all channels have the same sample rate
+ // and start time
+ bool samplerate_valid = false;
+
+ auto any_channel = find_if(channels_.begin(), channels_.end(),
+ [](data::DecodeChannel ch) { return ch.assigned_signal; });
+
+ shared_ptr<Logic> logic_data =
+ any_channel->assigned_signal->logic_data();
+
+ do {
+ if (!logic_data->logic_segments().empty()) {
+ shared_ptr<LogicSegment> first_segment =
+ any_channel->assigned_signal->logic_data()->logic_segments().front();
+ start_time_ = first_segment->start_time();
+ samplerate_ = first_segment->samplerate();
+ if (samplerate_ > 0)
+ samplerate_valid = true;
+ }
+
+ // Wait until input data is available or an interrupt was requested
+ unique_lock<mutex> input_wait_lock(input_mutex_);
+ decode_input_cond_.wait(input_wait_lock);
+ } while (!samplerate_valid && !decode_interrupt_);
+}
+