X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdata%2Fdecoderstack.cpp;h=912d98c7bc4cda8fc364aaf76e75f9ca23584193;hp=1c47016055fddae6dda477713487836b34b52793;hb=e45b13b536666034c9b6fe52a9321d749dae3c02;hpb=360ab9be5d6060d05cd7d40f5a50f7eafb787290 diff --git a/pv/data/decoderstack.cpp b/pv/data/decoderstack.cpp index 1c470160..912d98c7 100644 --- a/pv/data/decoderstack.cpp +++ b/pv/data/decoderstack.cpp @@ -27,10 +27,10 @@ #include "decoderstack.hpp" #include -#include +#include #include #include -#include +#include #include using std::lock_guard; @@ -62,6 +62,8 @@ mutex DecoderStack::global_decode_mutex_; DecoderStack::DecoderStack(pv::Session &session, const srd_decoder *const dec) : session_(session), + start_time_(0), + samplerate_(0), sample_count_(0), frame_complete_(false), samples_decoded_(0) @@ -112,6 +114,16 @@ void DecoderStack::remove(int index) stack_.erase(iter); } +double DecoderStack::samplerate() const +{ + return samplerate_; +} + +double DecoderStack::start_time() const +{ + return start_time_; +} + int64_t DecoderStack::samples_decoded() const { lock_guard decode_lock(output_mutex_); @@ -233,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 &dec : stack_) if (dec && !dec->channels().empty() && ((logic_signal = (*dec->channels().begin()).second)) && @@ -243,16 +255,16 @@ void DecoderStack::begin_decode() if (!data) return; - // Check we have a snapshot of data - const deque< shared_ptr > &snapshots = - data->get_snapshots(); - if (snapshots.empty()) + // Check we have a segment of data + const deque< shared_ptr > &segments = + data->logic_segments(); + if (segments.empty()) return; - snapshot_ = snapshots.front(); + segment_ = segments.front(); // Get the samplerate and start time - start_time_ = data->get_start_time(); - samplerate_ = data->samplerate(); + start_time_ = segment_->start_time(); + samplerate_ = segment_->samplerate(); if (samplerate_ == 0.0) samplerate_ = 1.0; @@ -260,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; @@ -289,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) @@ -298,7 +310,7 @@ 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) { @@ -324,14 +336,14 @@ void DecoderStack::decode_proc() srd_session *session; srd_decoder_inst *prev_di = NULL; - 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 &dec : stack_) { @@ -353,7 +365,7 @@ void DecoderStack::decode_proc() // Get the intial sample count { unique_lock input_lock(input_mutex_); - sample_count = sample_count_ = snapshot_->get_sample_count(); + sample_count = sample_count_ = segment_->get_sample_count(); } // Start the session @@ -424,8 +436,8 @@ void DecoderStack::on_data_received() { { unique_lock lock(input_mutex_); - if (snapshot_) - sample_count_ = snapshot_->get_sample_count(); + if (segment_) + sample_count_ = segment_->get_sample_count(); } input_cond_.notify_one(); } @@ -434,7 +446,7 @@ void DecoderStack::on_frame_ended() { { unique_lock lock(input_mutex_); - if (snapshot_) + if (segment_) frame_complete_ = true; } input_cond_.notify_one();