mutex DecoderStack::_global_decode_mutex;
-DecoderStack::DecoderStack(const srd_decoder *const dec)
+DecoderStack::DecoderStack(const srd_decoder *const dec) :
+ _samples_decoded(0)
{
_stack.push_back(shared_ptr<decode::Decoder>(
new decode::Decoder(dec)));
_stack.push_back(decoder);
}
+void DecoderStack::remove(int index)
+{
+ using pv::data::decode::Decoder;
+
+ assert(index >= 0);
+ assert(index < (int)_stack.size());
+
+ // Find the decoder in the stack
+ list< shared_ptr<Decoder> >::iterator iter = _stack.begin();
+ for(int i = 0; i < index; i++, iter++)
+ assert(iter != _stack.end());
+
+ // Delete the element
+ _stack.erase(iter);
+}
+
+int64_t DecoderStack::samples_decoded() const
+{
+ lock_guard<mutex> decode_lock(_mutex);
+ return _samples_decoded;
+}
+
const vector< shared_ptr<view::decode::Annotation> >
DecoderStack::annotations() const
{
_decode_thread.interrupt();
_decode_thread.join();
+ _samples_decoded = 0;
+
_annotations.clear();
// We get the logic data of the first probe in the list.
BOOST_FOREACH (const shared_ptr<decode::Decoder> &dec, _stack)
if (dec && !dec->probes().empty() &&
((logic_signal = (*dec->probes().begin()).second)) &&
- ((data = logic_signal->data())))
+ ((data = logic_signal->logic_data())))
break;
if (!data)
// Get the samplerate and start time
_start_time = data->get_start_time();
- _samplerate = data->get_samplerate();
+ _samplerate = data->samplerate();
if (_samplerate == 0.0)
_samplerate = 1.0;
data);
}
-void DecoderStack::clear_snapshots()
+void DecoderStack::clear()
+{
+ _annotations.clear();
+}
+
+uint64_t DecoderStack::get_max_sample_count() const
{
+ if (_annotations.empty())
+ return 0;
+ return _annotations.back()->end_sample();
}
void DecoderStack::decode_proc(shared_ptr<data::Logic> data)
_error_message = tr("Failed to initialise decoder");
break;
}
+
+ {
+ lock_guard<mutex> lock(_mutex);
+ _samples_decoded = chunk_end;
+ }
}
// Destroy the session