#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/sigsession.hpp>
+#include <pv/session.hpp>
#include <pv/view/logicsignal.hpp>
using std::lock_guard;
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)
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<mutex> decode_lock(output_mutex_);
// 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)) &&
if (!data)
return;
- // Check we have a snapshot of data
- const deque< shared_ptr<pv::data::LogicSnapshot> > &snapshots =
- data->get_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_ = data->get_start_time();
- samplerate_ = data->samplerate();
+ start_time_ = segment_->start_time();
+ samplerate_ = segment_->samplerate();
if (samplerate_ == 0.0)
samplerate_ = 1.0;
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)
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) {
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<decode::Decoder> &dec : stack_)
{
// 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
{
{
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();
}
{
{
unique_lock<mutex> lock(input_mutex_);
- if (snapshot_)
+ if (segment_)
frame_complete_ = true;
}
input_cond_.notify_one();