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:
parent
1e73500c75
commit
b6201287d9
2 changed files with 7 additions and 24 deletions
|
@ -43,7 +43,6 @@ struct loopback {
|
|||
int queuelen;
|
||||
enum QueueSignalledMode mode;
|
||||
struct queue_signalled queue;
|
||||
struct pool pool;
|
||||
};
|
||||
|
||||
/** @see node_type::print */
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue