/* Set self.samplenum to 0. */
PyObject_SetAttrString(di->py_inst, "samplenum", PyLong_FromLong(0));
- /* Set self.matches to None. */
- PyObject_SetAttrString(di->py_inst, "matches", Py_None);
+ /* Set self.matched to None. */
+ PyObject_SetAttrString(di->py_inst, "matched", Py_None);
/* Start all the PDs stacked on top of this one. */
for (l = di->next_di; l; l = l->next) {
* sample numbers within the chunk specified by 'inbuf' and 'inbuflen'.
*
* Correct example (4096 samples total, 4 chunks @ 1024 samples each):
- * srd_inst_decode(di, 0, 1023, inbuf, 1024, 1);
- * srd_inst_decode(di, 1024, 2047, inbuf, 1024, 1);
- * srd_inst_decode(di, 2048, 3071, inbuf, 1024, 1);
- * srd_inst_decode(di, 3072, 4095, inbuf, 1024, 1);
+ * srd_inst_decode(di, 0, 1024, inbuf, 1024, 1);
+ * srd_inst_decode(di, 1024, 2048, inbuf, 1024, 1);
+ * srd_inst_decode(di, 2048, 3072, inbuf, 1024, 1);
+ * srd_inst_decode(di, 3072, 4096, inbuf, 1024, 1);
*
* The chunk size ('inbuflen') can be arbitrary and can differ between calls.
*
* Correct example (4096 samples total, 7 chunks @ various samples each):
- * srd_inst_decode(di, 0, 1023, inbuf, 1024, 1);
- * srd_inst_decode(di, 1024, 1123, inbuf, 100, 1);
- * srd_inst_decode(di, 1124, 1423, inbuf, 300, 1);
- * srd_inst_decode(di, 1424, 1642, inbuf, 219, 1);
- * srd_inst_decode(di, 1643, 2047, inbuf, 405, 1);
- * srd_inst_decode(di, 2048, 3071, inbuf, 1024, 1);
- * srd_inst_decode(di, 3072, 4095, inbuf, 1024, 1);
+ * srd_inst_decode(di, 0, 1024, inbuf, 1024, 1);
+ * srd_inst_decode(di, 1024, 1124, inbuf, 100, 1);
+ * srd_inst_decode(di, 1124, 1424, inbuf, 300, 1);
+ * srd_inst_decode(di, 1424, 1643, inbuf, 219, 1);
+ * srd_inst_decode(di, 1643, 2048, inbuf, 405, 1);
+ * srd_inst_decode(di, 2048, 3072, inbuf, 1024, 1);
+ * srd_inst_decode(di, 3072, 4096, inbuf, 1024, 1);
*
* INCORRECT example (4096 samples total, 4 chunks @ 1024 samples each, but
* the start- and end-samplenumbers are not absolute):
- * srd_inst_decode(di, 0, 1023, inbuf, 1024, 1);
- * srd_inst_decode(di, 0, 1023, inbuf, 1024, 1);
- * srd_inst_decode(di, 0, 1023, inbuf, 1024, 1);
- * srd_inst_decode(di, 0, 1023, inbuf, 1024, 1);
+ * srd_inst_decode(di, 0, 1024, inbuf, 1024, 1);
+ * srd_inst_decode(di, 0, 1024, inbuf, 1024, 1);
+ * srd_inst_decode(di, 0, 1024, inbuf, 1024, 1);
+ * srd_inst_decode(di, 0, 1024, inbuf, 1024, 1);
*
* @param di The decoder instance to call. Must not be NULL.
* @param abs_start_samplenum The absolute starting sample number for the
return SRD_ERR_ARG;
}
+ if (abs_start_samplenum != di->abs_cur_samplenum ||
+ abs_end_samplenum < abs_start_samplenum) {
+ srd_dbg("Incorrect sample numbers: start=%" PRIu64 ", cur=%"
+ PRIu64 ", end=%" PRIu64 ".", abs_start_samplenum,
+ di->abs_cur_samplenum, abs_end_samplenum);
+ return SRD_ERR_ARG;
+ }
+
di->data_unitsize = unitsize;
srd_dbg("Decoding: abs start sample %" PRIu64 ", abs end sample %"
di->inst_id);
return SRD_ERR_PYTHON;
}
+ di->abs_cur_samplenum = abs_end_samplenum;
Py_DecRef(py_res);
} else {
/* If this is the first call, start the worker thread. */
- if (!di->thread_handle)
- di->thread_handle = g_thread_new("di_thread",
+ if (!di->thread_handle) {
+ srd_dbg("No worker thread for this decoder stack "
+ "exists yet, creating one: %s.", di->inst_id);
+ di->thread_handle = g_thread_new(di->inst_id,
di_thread, di);
+ }
/* Push the new sample chunk to the worker thread. */
g_mutex_lock(&di->data_mutex);