#include <unistd.h>
#include <glib.h>
+#include "component-class-sink-simple.h"
#include "component.h"
#include "component-sink.h"
#include "connection.h"
return status;
}
-enum bt_graph_consume_status bt_graph_consume(struct bt_graph *graph)
+enum bt_graph_run_once_status bt_graph_run_once(struct bt_graph *graph)
{
- enum bt_graph_consume_status status;
+ enum bt_graph_run_once_status status;
BT_ASSERT_PRE_DEV_NON_NULL(graph, "Graph");
BT_ASSERT_PRE_DEV(graph->can_consume,
struct bt_graph *graph,
bt_graph_source_component_output_port_added_listener_func func,
bt_graph_listener_removed_func listener_removed, void *data,
- int *out_listener_id)
+ bt_listener_id *out_listener_id)
{
struct bt_graph_listener_port_added listener = {
.base = {
},
.func = (port_added_func_t) func,
};
- int listener_id;
+ bt_listener_id listener_id;
BT_ASSERT_PRE_NON_NULL(graph, "Graph");
BT_ASSERT_PRE_NON_NULL(func, "Listener");
struct bt_graph *graph,
bt_graph_filter_component_output_port_added_listener_func func,
bt_graph_listener_removed_func listener_removed, void *data,
- int *out_listener_id)
+ bt_listener_id *out_listener_id)
{
struct bt_graph_listener_port_added listener = {
.base = {
},
.func = (port_added_func_t) func,
};
- int listener_id;
+ bt_listener_id listener_id;
BT_ASSERT_PRE_NON_NULL(graph, "Graph");
BT_ASSERT_PRE_NON_NULL(func, "Listener");
struct bt_graph *graph,
bt_graph_filter_component_input_port_added_listener_func func,
bt_graph_listener_removed_func listener_removed, void *data,
- int *out_listener_id)
+ bt_listener_id *out_listener_id)
{
struct bt_graph_listener_port_added listener = {
.base = {
},
.func = (port_added_func_t) func,
};
- int listener_id;
+ bt_listener_id listener_id;
BT_ASSERT_PRE_NON_NULL(graph, "Graph");
BT_ASSERT_PRE_NON_NULL(func, "Listener");
struct bt_graph *graph,
bt_graph_sink_component_input_port_added_listener_func func,
bt_graph_listener_removed_func listener_removed, void *data,
- int *out_listener_id)
+ bt_listener_id *out_listener_id)
{
struct bt_graph_listener_port_added listener = {
.base = {
},
.func = (port_added_func_t) func,
};
- int listener_id;
+ bt_listener_id listener_id;
BT_ASSERT_PRE_NON_NULL(graph, "Graph");
BT_ASSERT_PRE_NON_NULL(func, "Listener");
struct bt_graph *graph,
bt_graph_source_filter_component_ports_connected_listener_func func,
bt_graph_listener_removed_func listener_removed, void *data,
- int *out_listener_id)
+ bt_listener_id *out_listener_id)
{
struct bt_graph_listener_ports_connected listener = {
.base = {
},
.func = (ports_connected_func_t) func,
};
- int listener_id;
+ bt_listener_id listener_id;
BT_ASSERT_PRE_NON_NULL(graph, "Graph");
BT_ASSERT_PRE_NON_NULL(func, "Listener");
struct bt_graph *graph,
bt_graph_source_sink_component_ports_connected_listener_func func,
bt_graph_listener_removed_func listener_removed, void *data,
- int *out_listener_id)
+ bt_listener_id *out_listener_id)
{
struct bt_graph_listener_ports_connected listener = {
.base = {
},
.func = (ports_connected_func_t) func,
};
- int listener_id;
+ bt_listener_id listener_id;
BT_ASSERT_PRE_NON_NULL(graph, "Graph");
BT_ASSERT_PRE_NON_NULL(func, "Listener");
struct bt_graph *graph,
bt_graph_filter_filter_component_ports_connected_listener_func func,
bt_graph_listener_removed_func listener_removed, void *data,
- int *out_listener_id)
+ bt_listener_id *out_listener_id)
{
struct bt_graph_listener_ports_connected listener = {
.base = {
},
.func = (ports_connected_func_t) func,
};
- int listener_id;
+ bt_listener_id listener_id;
BT_ASSERT_PRE_NON_NULL(graph, "Graph");
BT_ASSERT_PRE_NON_NULL(func, "Listener");
struct bt_graph *graph,
bt_graph_filter_sink_component_ports_connected_listener_func func,
bt_graph_listener_removed_func listener_removed, void *data,
- int *out_listener_id)
+ bt_listener_id *out_listener_id)
{
struct bt_graph_listener_ports_connected listener = {
.base = {
},
.func = (ports_connected_func_t) func,
};
- int listener_id;
+ bt_listener_id listener_id;
BT_ASSERT_PRE_NON_NULL(graph, "Graph");
BT_ASSERT_PRE_NON_NULL(func, "Listener");
/*
* If it's a sink component, it needs to be part of the graph's
- * sink queue to be consumed by bt_graph_consume().
+ * sink queue to be consumed by bt_graph_run() or
+ * bt_graph_run_once().
*/
if (bt_component_is_sink(component)) {
graph->has_sink = true;
graph, comp_cls, name, params, NULL, log_level, component);
}
+enum bt_graph_add_component_status
+bt_graph_add_simple_sink_component(struct bt_graph *graph, const char *name,
+ bt_graph_simple_sink_component_init_func init_func,
+ bt_graph_simple_sink_component_consume_func consume_func,
+ bt_graph_simple_sink_component_finalize_func finalize_func,
+ void *user_data, const bt_component_sink **component)
+{
+ enum bt_graph_add_component_status status;
+ struct bt_component_class_sink *comp_cls;
+ struct simple_sink_init_method_data init_method_data = {
+ .init_func = init_func,
+ .consume_func = consume_func,
+ .finalize_func = finalize_func,
+ .user_data = user_data,
+ };
+
+ /*
+ * Other preconditions are checked by
+ * bt_graph_add_sink_component_with_init_method_data().
+ */
+ BT_ASSERT_PRE_NON_NULL(consume_func, "Consume function");
+
+ comp_cls = bt_component_class_sink_simple_borrow();
+ if (!comp_cls) {
+ BT_LIB_LOGE_APPEND_CAUSE(
+ "Cannot borrow simple sink component class.");
+ status = BT_FUNC_STATUS_MEMORY_ERROR;
+ goto end;
+ }
+
+ status = bt_graph_add_sink_component_with_init_method_data(graph,
+ comp_cls, name, NULL, &init_method_data,
+ BT_LOGGING_LEVEL_NONE, component);
+
+end:
+ return status;
+}
+
BT_HIDDEN
int bt_graph_remove_unconnected_component(struct bt_graph *graph,
struct bt_component *component)