]> sigrok.org Git - pulseview.git/blobdiff - pv/data/decoderstack.cpp
Use a type with a greater resolution to represent time values
[pulseview.git] / pv / data / decoderstack.cpp
index e5a758773b17d0a886b424492fbd50dad59fb6e7..0bb875da74b68e8a30086e90124d69eea93400b5 100644 (file)
@@ -27,7 +27,7 @@
 #include "decoderstack.hpp"
 
 #include <pv/data/logic.hpp>
-#include <pv/data/logicsnapshot.hpp>
+#include <pv/data/logicsegment.hpp>
 #include <pv/data/decode/decoder.hpp>
 #include <pv/data/decode/annotation.hpp>
 #include <pv/session.hpp>
@@ -107,7 +107,7 @@ void DecoderStack::remove(int index)
 
        // Find the decoder in the stack
        auto iter = stack_.begin();
-       for(int i = 0; i < index; i++, iter++)
+       for (int i = 0; i < index; i++, iter++)
                assert(iter != stack_.end());
 
        // Delete the element
@@ -119,7 +119,7 @@ double DecoderStack::samplerate() const
        return samplerate_;
 }
 
-double DecoderStack::start_time() const
+const pv::util::Timestamp& DecoderStack::start_time() const
 {
        return start_time_;
 }
@@ -245,7 +245,7 @@ void DecoderStack::begin_decode()
 
        // We get the logic data of the first channel in the list.
        // This works because we are currently assuming all
-       // LogicSignals have the same data/snapshot
+       // LogicSignals have the same data/segment
        for (const shared_ptr<decode::Decoder> &dec : stack_)
                if (dec && !dec->channels().empty() &&
                        ((logic_signal = (*dec->channels().begin()).second)) &&
@@ -255,16 +255,16 @@ void DecoderStack::begin_decode()
        if (!data)
                return;
 
-       // Check we have a snapshot of data
-       const deque< shared_ptr<pv::data::LogicSnapshot> > &snapshots =
-               data->logic_snapshots();
-       if (snapshots.empty())
+       // Check we have a segment of data
+       const deque< shared_ptr<pv::data::LogicSegment> > &segments =
+               data->logic_segments();
+       if (segments.empty())
                return;
-       snapshot_ = snapshots.front();
+       segment_ = segments.front();
 
        // Get the samplerate and start time
-       start_time_ = snapshot_->start_time();
-       samplerate_ = data->samplerate();
+       start_time_ = segment_->start_time();
+       samplerate_ = segment_->samplerate();
        if (samplerate_ == 0.0)
                samplerate_ = 1.0;
 
@@ -272,7 +272,7 @@ void DecoderStack::begin_decode()
        decode_thread_ = std::thread(&DecoderStack::decode_proc, this);
 }
 
-uint64_t DecoderStack::get_max_sample_count() const
+uint64_t DecoderStack::max_sample_count() const
 {
        uint64_t max_sample_count = 0;
 
@@ -286,7 +286,7 @@ uint64_t DecoderStack::get_max_sample_count() const
 optional<int64_t> DecoderStack::wait_for_data() const
 {
        unique_lock<mutex> input_lock(input_mutex_);
-       while(!interrupt_ && !frame_complete_ &&
+       while (!interrupt_ && !frame_complete_ &&
                samples_decoded_ >= sample_count_)
                input_cond_.wait(input_lock);
        return boost::make_optional(!interrupt_ &&
@@ -301,7 +301,7 @@ void DecoderStack::decode_data(
        uint8_t chunk[DecodeChunkLength];
 
        const unsigned int chunk_sample_count =
-               DecodeChunkLength / snapshot_->unit_size();
+               DecodeChunkLength / segment_->unit_size();
 
        for (int64_t i = 0; !interrupt_ && i < sample_count;
                i += chunk_sample_count)
@@ -310,10 +310,10 @@ void DecoderStack::decode_data(
 
                const int64_t chunk_end = min(
                        i + chunk_sample_count, sample_count);
-               snapshot_->get_samples(chunk, i, chunk_end);
+               segment_->get_samples(chunk, i, chunk_end);
 
-               if (srd_session_send(session, i, i + sample_count, chunk,
-                               (chunk_end - i) * unit_size) != SRD_OK) {
+               if (srd_session_send(session, i, chunk_end, chunk,
+                               (chunk_end - i) * unit_size, unit_size) != SRD_OK) {
                        error_message_ = tr("Decoder reported an error");
                        break;
                }
@@ -334,20 +334,20 @@ void DecoderStack::decode_proc()
 {
        optional<int64_t> sample_count;
        srd_session *session;
-       srd_decoder_inst *prev_di = NULL;
+       srd_decoder_inst *prev_di = nullptr;
 
-       assert(snapshot_);
+       assert(segment_);
 
        // Create the session
        srd_session_new(&session);
        assert(session);
 
        // Create the decoders
-       const unsigned int unit_size = snapshot_->unit_size();
+       const unsigned int unit_size = segment_->unit_size();
 
        for (const shared_ptr<decode::Decoder> &dec : stack_)
        {
-               srd_decoder_inst *const di = dec->create_decoder_inst(session, unit_size);
+               srd_decoder_inst *const di = dec->create_decoder_inst(session);
 
                if (!di)
                {
@@ -365,7 +365,7 @@ void DecoderStack::decode_proc()
        // Get the intial sample count
        {
                unique_lock<mutex> input_lock(input_mutex_);
-               sample_count = sample_count_ = snapshot_->get_sample_count();
+               sample_count = sample_count_ = segment_->get_sample_count();
        }
 
        // Start the session
@@ -379,7 +379,7 @@ void DecoderStack::decode_proc()
 
        do {
                decode_data(*sample_count, unit_size, session);
-       } while(error_message_.isEmpty() && (sample_count = wait_for_data()));
+       } while (error_message_.isEmpty() && (sample_count = wait_for_data()));
 
        // Destroy the session
        srd_session_destroy(session);
@@ -436,8 +436,8 @@ void DecoderStack::on_data_received()
 {
        {
                unique_lock<mutex> lock(input_mutex_);
-               if (snapshot_)
-                       sample_count_ = snapshot_->get_sample_count();
+               if (segment_)
+                       sample_count_ = segment_->get_sample_count();
        }
        input_cond_.notify_one();
 }
@@ -446,7 +446,7 @@ void DecoderStack::on_frame_ended()
 {
        {
                unique_lock<mutex> lock(input_mutex_);
-               if (snapshot_)
+               if (segment_)
                        frame_complete_ = true;
        }
        input_cond_.notify_one();