extern SRD_PRIV GSList *sessions;
-static void srd_inst_join_decode_thread(struct srd_decoder_inst *di);
-static void srd_inst_reset_state(struct srd_decoder_inst *di);
-static void oldpins_array_seed(struct srd_decoder_inst *di);
-static void oldpins_array_free(struct srd_decoder_inst *di);
-
/** @endcond */
/**
* @{
*/
+static void oldpins_array_seed(struct srd_decoder_inst *di)
+{
+ size_t count;
+ GArray *arr;
+
+ if (!di)
+ return;
+ if (di->old_pins_array)
+ return;
+
+ count = di->dec_num_channels;
+ arr = g_array_sized_new(FALSE, TRUE, sizeof(uint8_t), count);
+ g_array_set_size(arr, count);
+ memset(arr->data, SRD_INITIAL_PIN_SAME_AS_SAMPLE0, count);
+ di->old_pins_array = arr;
+}
+
+static void oldpins_array_free(struct srd_decoder_inst *di)
+{
+ if (!di)
+ return;
+ if (!di->old_pins_array)
+ return;
+
+ srd_dbg("%s: Releasing initial pin state.", di->inst_id);
+
+ g_array_free(di->old_pins_array, TRUE);
+ di->old_pins_array = NULL;
+}
+
/**
* Set one or more options in a decoder instance.
*
sess->di_list = g_slist_remove(sess->di_list, di_top);
}
+ /*
+ * Check if there's at least one matching input/output pair
+ * for the stacked PDs. We warn if that's not the case, but it's
+ * not a hard error for the time being.
+ */
+ gboolean at_least_one_match = FALSE;
+ for (GSList *out = di_bottom->decoder->outputs; out; out = out->next) {
+ const char *o = out->data;
+ for (GSList *in = di_top->decoder->inputs; in; in = in->next) {
+ const char *i = in->data;
+ if (!strcmp(o, i)) {
+ at_least_one_match = TRUE;
+ break;
+ }
+ }
+ }
+
+ if (!at_least_one_match)
+ srd_warn("No matching in-/output when stacking %s onto %s.",
+ di_top->inst_id, di_bottom->inst_id);
+
/* Stack on top of source di. */
di_bottom->next_di = g_slist_append(di_bottom->next_di, di_top);
return SRD_OK;
}
-static void oldpins_array_seed(struct srd_decoder_inst *di)
-{
- size_t count;
- GArray *arr;
-
- if (!di)
- return;
- if (di->old_pins_array)
- return;
-
- count = di->dec_num_channels;
- arr = g_array_sized_new(FALSE, TRUE, sizeof(uint8_t), count);
- g_array_set_size(arr, count);
- memset(arr->data, SRD_INITIAL_PIN_SAME_AS_SAMPLE0, count);
- di->old_pins_array = arr;
-}
-
-static void oldpins_array_free(struct srd_decoder_inst *di)
-{
- if (!di)
- return;
- if (!di->old_pins_array)
- return;
-
- srd_dbg("%s: Releasing initial pin state.", di->inst_id);
-
- g_array_free(di->old_pins_array, TRUE);
- di->old_pins_array = NULL;
-}
-
/** @private */
SRD_PRIV int srd_inst_start(struct srd_decoder_inst *di)
{