#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>
// 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
return samplerate_;
}
-double DecoderStack::start_time() const
+const pv::util::Timestamp& DecoderStack::start_time() const
{
return start_time_;
}
// 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->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_ = snapshot_->samplerate();
+ start_time_ = segment_->start_time();
+ samplerate_ = segment_->samplerate();
if (samplerate_ == 0.0)
samplerate_ = 1.0;
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;
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_ &&
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) {
+ 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;
}
{
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)
{
// 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
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);
{
{
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();