transform: Hook up transforms.
This commit is contained in:
parent
988357ca2f
commit
c0a1e532f5
|
@ -669,6 +669,7 @@ struct sr_session {
|
||||||
GSList *owned_devs;
|
GSList *owned_devs;
|
||||||
/** List of struct datafeed_callback pointers. */
|
/** List of struct datafeed_callback pointers. */
|
||||||
GSList *datafeed_callbacks;
|
GSList *datafeed_callbacks;
|
||||||
|
GSList *transforms;
|
||||||
struct sr_trigger *trigger;
|
struct sr_trigger *trigger;
|
||||||
GTimeVal starttime;
|
GTimeVal starttime;
|
||||||
gboolean running;
|
gboolean running;
|
||||||
|
|
|
@ -697,6 +697,9 @@ SR_PRIV int sr_session_send(const struct sr_dev_inst *sdi,
|
||||||
{
|
{
|
||||||
GSList *l;
|
GSList *l;
|
||||||
struct datafeed_callback *cb_struct;
|
struct datafeed_callback *cb_struct;
|
||||||
|
struct sr_datafeed_packet *packet_in, *packet_out;
|
||||||
|
struct sr_transform *t;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (!sdi) {
|
if (!sdi) {
|
||||||
sr_err("%s: sdi was NULL", __func__);
|
sr_err("%s: sdi was NULL", __func__);
|
||||||
|
@ -713,6 +716,40 @@ SR_PRIV int sr_session_send(const struct sr_dev_inst *sdi,
|
||||||
return SR_ERR_BUG;
|
return SR_ERR_BUG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Pass the packet to the first transform module. If that returns
|
||||||
|
* another packet (instead of NULL), pass that packet to the next
|
||||||
|
* transform module in the list, and so on.
|
||||||
|
*/
|
||||||
|
packet_in = (struct sr_datafeed_packet *)packet;
|
||||||
|
for (l = sdi->session->transforms; l; l = l->next) {
|
||||||
|
t = l->data;
|
||||||
|
sr_spew("Running transform module '%s'.", t->module->id);
|
||||||
|
ret = t->module->receive(t, packet_in, &packet_out);
|
||||||
|
if (ret < 0) {
|
||||||
|
sr_err("Error while running transform module: %d.", ret);
|
||||||
|
return SR_ERR;
|
||||||
|
}
|
||||||
|
if (!packet_out) {
|
||||||
|
/*
|
||||||
|
* If any of the transforms don't return an output
|
||||||
|
* packet, abort.
|
||||||
|
*/
|
||||||
|
sr_spew("Transform module didn't return a packet, aborting.");
|
||||||
|
return SR_OK;
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Use this transform module's output packet as input
|
||||||
|
* for the next transform module.
|
||||||
|
*/
|
||||||
|
packet_in = packet_out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the last transform did output a packet, pass it to all datafeed
|
||||||
|
* callbacks.
|
||||||
|
*/
|
||||||
for (l = sdi->session->datafeed_callbacks; l; l = l->next) {
|
for (l = sdi->session->datafeed_callbacks; l; l = l->next) {
|
||||||
if (sr_log_loglevel_get() >= SR_LOG_DBG)
|
if (sr_log_loglevel_get() >= SR_LOG_DBG)
|
||||||
datafeed_dump(packet);
|
datafeed_dump(packet);
|
||||||
|
|
|
@ -247,6 +247,9 @@ SR_API const struct sr_transform *sr_transform_new(const struct sr_transform_mod
|
||||||
if (new_opts)
|
if (new_opts)
|
||||||
g_hash_table_destroy(new_opts);
|
g_hash_table_destroy(new_opts);
|
||||||
|
|
||||||
|
/* Add the transform to the session's list of transforms. */
|
||||||
|
sdi->session->transforms = g_slist_append(sdi->session->transforms, t);
|
||||||
|
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue