Session: Query the device's sample rate when needed, not sooner
[pulseview.git] / pv / session.cpp
index ad4c17e246f0609079e470750c9c3f979d3f20cd..07ee594d7c1ca0390e5af1cef6ca6d24c2f4b22e 100644 (file)
@@ -677,6 +677,17 @@ double Session::get_samplerate() const
        return samplerate;
 }
 
+int Session::get_segment_count() const
+{
+       int min_val = INT_MAX;
+
+       for (shared_ptr<data::SignalData> data : all_signal_data_)
+               if (data->get_segment_count() < min_val)
+                       min_val = data->get_segment_count();
+
+       return min_val;
+}
+
 const unordered_set< shared_ptr<data::SignalBase> > Session::signalbases() const
 {
        return signalbases_;
@@ -941,7 +952,7 @@ void Session::free_unused_memory()
 
 void Session::feed_in_header()
 {
-       cur_samplerate_ = device_->read_config<uint64_t>(ConfigKey::SAMPLERATE);
+       // Nothing to do here for now
 }
 
 void Session::feed_in_meta(shared_ptr<Meta> meta)
@@ -1012,6 +1023,9 @@ void Session::feed_in_frame_end()
 
 void Session::feed_in_logic(shared_ptr<Logic> logic)
 {
+       if (!cur_samplerate_)
+               cur_samplerate_ = device_->read_config<uint64_t>(ConfigKey::SAMPLERATE);
+
        lock_guard<recursive_mutex> lock(data_mutex_);
 
        if (!logic_data_) {
@@ -1044,6 +1058,9 @@ void Session::feed_in_logic(shared_ptr<Logic> logic)
 
 void Session::feed_in_analog(shared_ptr<Analog> analog)
 {
+       if (!cur_samplerate_)
+               cur_samplerate_ = device_->read_config<uint64_t>(ConfigKey::SAMPLERATE);
+
        lock_guard<recursive_mutex> lock(data_mutex_);
 
        const vector<shared_ptr<Channel>> channels = analog->channels();