diff options
author | Uwe Hermann <uwe@hermann-uwe.de> | 2016-08-26 15:09:17 +0200 |
---|---|---|
committer | Uwe Hermann <uwe@hermann-uwe.de> | 2016-12-07 22:37:49 +0100 |
commit | 21dfd91d99836bdc6c0da939b601dd8a52358f21 (patch) | |
tree | 54e380dc67e1cd73273679d04c4c5a8af3036e4f /libsigrokdecode.h | |
parent | ee9304c667bf98b3c4e3a767943e3d8f6964601e (diff) | |
download | libsigrokdecode-21dfd91d99836bdc6c0da939b601dd8a52358f21.tar.gz libsigrokdecode-21dfd91d99836bdc6c0da939b601dd8a52358f21.zip |
Add support for the new query-based PD v3 decoder API.
For the time being, both APIs (2 and 3) will remain supported until all
decoders have been converted to API version 3. Then, support for API
version 2 will be dropped.
Decoders using PD v3 API can benefit from both readability improvements
as well as performance improvements. Up to 10x speedup has been measured
in some situations (depends a lot on the decoder, the amount of data,
the amount of edges in the signals, the amount of oversampling etc. etc.).
This is only the first set of (basic) performance improvements for
libsigrokdecode, there are various additional opportunities for further
changes to improve performance.
This changeset has been tested to survive a run of all the test-cases in
the sigrok-test repo without issues (for the converted PDs), however it is
not very well-tested yet, so there might be regressions that need to be
addressed.
Diffstat (limited to 'libsigrokdecode.h')
-rw-r--r-- | libsigrokdecode.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/libsigrokdecode.h b/libsigrokdecode.h index 03a5de0..a4d28d4 100644 --- a/libsigrokdecode.h +++ b/libsigrokdecode.h @@ -228,6 +228,43 @@ struct srd_decoder_inst { int data_unitsize; uint8_t *channel_samples; GSList *next_di; + + /** List of conditions a PD wants to wait for. */ + GSList *condition_list; + + /** Array of booleans denoting which conditions matched. */ + GArray *match_array; + + /** Absolute start sample number. */ + uint64_t start_samplenum; + + /** Absolute end sample number. */ + uint64_t end_samplenum; + + /** Pointer to the buffer/chunk of input samples. */ + const uint8_t *inbuf; + + /** Length (in bytes) of the input sample buffer. */ + uint64_t inbuflen; + + /** Absolute current samplenumber. */ + uint64_t cur_samplenum; + + /** Array of "old" (previous sample) pin values. */ + GArray *old_pins_array; + + /** Handle for this PD stack's worker thread. */ + GThread *thread_handle; + + /** Indicates whether new samples are available for processing. */ + gboolean got_new_samples; + + /** Indicates whether the worker thread has handled all samples. */ + gboolean handled_all_samples; + + GCond got_new_samples_cond; + GCond handled_all_samples_cond; + GMutex data_mutex; }; struct srd_pd_output { |