#include <pv/data/logicsnapshot.h>
#include <pv/data/decode/decoder.h>
#include <pv/data/decode/annotation.h>
+#include <pv/sigsession.h>
#include <pv/view/logicsignal.h>
using boost::lock_guard;
mutex DecoderStack::_global_decode_mutex;
-DecoderStack::DecoderStack(const srd_decoder *const dec) :
+DecoderStack::DecoderStack(pv::SigSession &session,
+ const srd_decoder *const dec) :
+ _session(session),
_samples_decoded(0)
{
+ connect(&_session, SIGNAL(frame_began()), this, SLOT(on_new_frame()));
+
_stack.push_back(shared_ptr<decode::Decoder>(
new decode::Decoder(dec)));
}
DecoderStack::~DecoderStack()
{
- _decode_thread.interrupt();
- _decode_thread.join();
+ if (_decode_thread.joinable()) {
+ _decode_thread.interrupt();
+ _decode_thread.join();
+ }
}
const std::list< boost::shared_ptr<decode::Decoder> >&
shared_ptr<pv::view::LogicSignal> logic_signal;
shared_ptr<pv::data::Logic> data;
- _decode_thread.interrupt();
- _decode_thread.join();
+ if (_decode_thread.joinable()) {
+ _decode_thread.interrupt();
+ _decode_thread.join();
+ }
clear();
// Create the decoders
BOOST_FOREACH(const shared_ptr<decode::Decoder> &dec, _stack)
{
- srd_decoder_inst *const di = dec->create_decoder_inst(session);
+ srd_decoder_inst *const di = dec->create_decoder_inst(session, unit_size);
if (!di)
{
d->new_decode_data();
}
+void DecoderStack::on_new_frame()
+{
+ begin_decode();
+}
+
} // namespace data
} // namespace pv