diff --git a/lib/hooks/dp.cpp b/lib/hooks/dp.cpp index 82354c799..b913b5ee0 100644 --- a/lib/hooks/dp.cpp +++ b/lib/hooks/dp.cpp @@ -105,8 +105,9 @@ protected: for (int k = 0; k < fharmonics_len; k++) { double freq = fharmonics[k]; std::complex coeff = in[k]; + std::complex om = 2.0i * M_PI * freq * time; - value += coeff * std::exp(2i * M_PI * freq * time); + value += coeff * std::exp(om); } *out = std::real(value); diff --git a/lib/nodes/rtp.cpp b/lib/nodes/rtp.cpp index 59054181f..694558ed6 100644 --- a/lib/nodes/rtp.cpp +++ b/lib/nodes/rtp.cpp @@ -614,33 +614,40 @@ int rtp_netem_fds(struct node *n, int fds[]) return m; } -struct plugin p = { - .name = "rtp", +struct plugin p; + +__attribute__((constructor(110))) +static void register_plugin() { + p.name = "rtp"; #ifdef WITH_NETEM - .description = "real-time transport protocol (libre, libnl3 netem support)", + p.description = "real-time transport protocol (libre, libnl3 netem support)"; #else - .description = "real-time transport protocol (libre)", + p.description = "real-time transport protocol (libre)"; #endif - .type = PLUGIN_TYPE_NODE, - .node = { - .vectorize = 0, - .size = sizeof(struct rtp), - .type = { - .start = rtp_type_start, - .stop = rtp_type_stop - }, - .init = rtp_init, - .parse = rtp_parse, - .print = rtp_print, - .start = rtp_start, - .stop = rtp_stop, - .read = rtp_read, - .write = rtp_write, - .reverse = rtp_reverse, - .poll_fds = rtp_poll_fds, - .netem_fds = rtp_netem_fds - } -}; + p.type = PLUGIN_TYPE_NODE; + p.node.vectorize = 0; + p.node.size = sizeof(struct rtp); + p.node.type.start = rtp_type_start; + p.node.type.stop = rtp_type_stop; + p.node.init = rtp_init; + p.node.parse = rtp_parse; + p.node.print = rtp_print; + p.node.start = rtp_start; + p.node.stop = rtp_stop; + p.node.read = rtp_read; + p.node.write = rtp_write; + p.node.reverse = rtp_reverse; + p.node.poll_fds = rtp_poll_fds; + p.node.netem_fds = rtp_netem_fds; + + vlist_push(&plugins, &p); +} + +__attribute__((destructor(110))) +static void deregister_plugin() { + if (plugins.state != STATE_DESTROYED) + vlist_remove_all(&plugins, &p); +} } /* extern C */ diff --git a/src/villas-signal.cpp b/src/villas-signal.cpp index 0bbd8aeee..0737699bc 100644 --- a/src/villas-signal.cpp +++ b/src/villas-signal.cpp @@ -183,7 +183,11 @@ int main(int argc, char *argv[]) const char *format = "villas.human"; /** @todo hardcoded for now */ - struct node n = { .name = nullptr, .state = STATE_DESTROYED }; + struct node n; + n.state = STATE_DESTROYED; + n.in.state = STATE_DESTROYED; + n.out.state = STATE_DESTROYED; + struct io io = { .state = STATE_DESTROYED }; struct pool q = { .state = STATE_DESTROYED }; struct sample *t;