X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdata%2Fdecoder.cpp;h=5907f649e95db58eb3c1af35763613c03505a1ca;hp=2848d16ca4dffd166697b2517193acaec7030592;hb=9d20a7415bfe41d8985fb026ef0ba164de08c313;hpb=e0fc58100fbcd6c3bfd5aecb213d7541a3436622 diff --git a/pv/data/decoder.cpp b/pv/data/decoder.cpp index 2848d16c..5907f649 100644 --- a/pv/data/decoder.cpp +++ b/pv/data/decoder.cpp @@ -41,9 +41,12 @@ const int64_t Decoder::DecodeChunkLength = 4096; Decoder::Decoder(const srd_decoder *const dec, std::map > probes) : + boost::shared_ptr > probes, + GHashTable *options) : _decoder(dec), _probes(probes), + _options(options), + _session(NULL), _decoder_inst(NULL) { init_decoder(); @@ -54,6 +57,8 @@ Decoder::~Decoder() { _decode_thread.interrupt(); _decode_thread.join(); + + g_hash_table_destroy(_options); } const srd_decoder* Decoder::get_decoder() const @@ -111,8 +116,14 @@ void Decoder::init_decoder() } } - _decoder_inst = srd_inst_new(_decoder->id, NULL); - assert(_decoder_inst); + srd_session_new(&_session); + assert(_session); + + _decoder_inst = srd_inst_new(_session, _decoder->id, _options); + if(!_decoder_inst) { + qDebug() << "Failed to initialise decoder"; + return; + } _decoder_inst->data_samplerate = _samplerate; @@ -155,9 +166,16 @@ void Decoder::decode_proc(shared_ptr data) if (samplerate == 0.0) samplerate = 1.0; - srd_session_start(_probes.size(), snapshot->unit_size(), samplerate); + srd_session_config_set(_session, SRD_CONF_NUM_PROBES, + g_variant_new_uint64(_probes.size())); + srd_session_config_set(_session, SRD_CONF_UNITSIZE, + g_variant_new_uint64(snapshot->unit_size())); + srd_session_config_set(_session, SRD_CONF_SAMPLERATE, + g_variant_new_uint64((uint64_t)samplerate)); + + srd_session_start(_session); - srd_pd_output_callback_add(SRD_OUTPUT_ANN, + srd_pd_output_callback_add(_session, SRD_OUTPUT_ANN, Decoder::annotation_callback, this); for (int64_t i = 0; @@ -168,7 +186,8 @@ void Decoder::decode_proc(shared_ptr data) i + DecodeChunkLength, sample_count); snapshot->get_samples(chunk, i, chunk_end); - if (srd_session_send(i, chunk, chunk_end - i) != SRD_OK) + if (srd_session_send(_session, i, chunk, chunk_end - i) != + SRD_OK) break; } } @@ -185,6 +204,8 @@ void Decoder::annotation_callback(srd_proto_data *pdata, void *decoder) shared_ptr a(new Annotation(pdata)); lock_guard lock(d->_annotations_mutex); d->_annotations.push_back(a); + + d->new_decode_data(); } } // namespace data