1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

loopback: do not copy samples to internal pool

This commit is contained in:
Steffen Vogel 2020-08-28 09:43:12 +02:00
parent 1e73500c75
commit b6201287d9
2 changed files with 7 additions and 24 deletions

View file

@ -43,7 +43,6 @@ struct loopback {
int queuelen;
enum QueueSignalledMode mode;
struct queue_signalled queue;
struct pool pool;
};
/** @see node_type::print */

View file

@ -36,13 +36,13 @@ int loopback_parse(struct vnode *n, json_t *cfg)
const char *mode_str = nullptr;
json_error_t err;
int ret;
int ret, copy = 1;
/* Default values */
l->mode = QueueSignalledMode::AUTO;
l->queuelen = DEFAULT_QUEUE_LENGTH;
ret = json_unpack_ex(cfg, &err, 0, "{ s?: i, s?: s }",
ret = json_unpack_ex(cfg, &err, 0, "{ s?: s }",
"queuelen", &l->queuelen,
"mode", &mode_str
);
@ -68,6 +68,8 @@ int loopback_parse(struct vnode *n, json_t *cfg)
error("Unknown mode '%s' in node %s", mode_str, node_name(n));
}
l->copy = copy;
return 0;
}
@ -76,14 +78,7 @@ int loopback_start(struct vnode *n)
int ret;
struct loopback *l = (struct loopback *) n->_vd;
int len = MAX(
vlist_length(&n->in.signals),
vlist_length(&n->out.signals)
);
ret = pool_init(&l->pool, l->queuelen, SAMPLE_LENGTH(len));
if (ret)
return ret;
int len = vlist_length(&n->in.signals);
return queue_signalled_init(&l->queue, l->queuelen, memory_default, l->mode);
}
@ -93,10 +88,6 @@ int loopback_stop(struct vnode *n)
int ret;
struct loopback *l= (struct loopback *) n->_vd;
ret = pool_destroy(&l->pool);
if (ret)
return ret;
return queue_signalled_destroy(&l->queue);
}
@ -120,17 +111,10 @@ int loopback_read(struct vnode *n, struct sample *smps[], unsigned cnt, unsigned
int loopback_write(struct vnode *n, struct sample *smps[], unsigned cnt, unsigned *release)
{
struct loopback *l = (struct loopback *) n->_vd;
struct sample *copies[cnt];
unsigned copied;
sample_incref_many(smps, cnt);
copied = sample_alloc_many(&l->pool, copies, cnt);
if (copied < cnt)
warning("Pool underrun for node %s", node_name(n));
sample_copy_many(copies, smps, copied);
return queue_signalled_push_many(&l->queue, (void **) copies, copied);
return queue_signalled_push_many(&l->queue, (void **) smps, cnt);
}
char * loopback_print(struct vnode *n)