+struct bt_port_input;
+struct bt_port_output;
+struct bt_value;
+
+typedef void (*bt_graph_filter_component_input_port_added_listener_func)(
+ const struct bt_component_filter *component,
+ const struct bt_port_input *port, void *data);
+
+typedef void (*bt_graph_sink_component_input_port_added_listener_func)(
+ const struct bt_component_sink *component,
+ const struct bt_port_input *port, void *data);
+
+typedef void (*bt_graph_source_component_output_port_added_listener_func)(
+ const struct bt_component_source *component,
+ const struct bt_port_output *port, void *data);
+
+typedef void (*bt_graph_filter_component_output_port_added_listener_func)(
+ const struct bt_component_filter *component,
+ const struct bt_port_output *port, void *data);
+
+typedef void (*bt_graph_filter_component_input_port_removed_listener_func)(
+ const struct bt_component_filter *component,
+ const struct bt_port_input *port, void *data);
+
+typedef void (*bt_graph_sink_component_input_port_removed_listener_func)(
+ const struct bt_component_sink *component,
+ const struct bt_port_input *port, void *data);
+
+typedef void (*bt_graph_source_component_output_port_removed_listener_func)(
+ const struct bt_component_source *component,
+ const struct bt_port_output *port, void *data);
+
+typedef void (*bt_graph_filter_component_output_port_removed_listener_func)(
+ const struct bt_component_filter *component,
+ const struct bt_port_output *port, void *data);
+
+typedef void (*bt_graph_source_filter_component_ports_connected_listener_func)(
+ const struct bt_component_source *source_component,
+ const struct bt_component_filter *filter_component,
+ const struct bt_port_output *upstream_port,
+ const struct bt_port_input *downstream_port, void *data);
+
+typedef void (*bt_graph_source_sink_component_ports_connected_listener_func)(
+ const struct bt_component_source *source_component,
+ const struct bt_component_sink *sink_component,
+ const struct bt_port_output *upstream_port,
+ const struct bt_port_input *downstream_port, void *data);
+
+typedef void (*bt_graph_filter_sink_component_ports_connected_listener_func)(
+ const struct bt_component_filter *filter_component,
+ const struct bt_component_sink *sink_component,
+ const struct bt_port_output *upstream_port,
+ const struct bt_port_input *downstream_port, void *data);
+
+typedef void (*bt_graph_source_filter_component_ports_disconnected_listener_func)(
+ const struct bt_component_source *source_component,
+ const struct bt_component_filter *filter_component,
+ const struct bt_port_output *upstream_port,
+ const struct bt_port_input *downstream_port,
+ void *data);
+
+typedef void (*bt_graph_source_sink_component_ports_disconnected_listener_func)(
+ const struct bt_component_source *source_component,
+ const struct bt_component_sink *sink_component,
+ const struct bt_port_output *upstream_port,
+ const struct bt_port_input *downstream_port,
+ void *data);
+
+typedef void (*bt_graph_filter_sink_component_ports_disconnected_listener_func)(
+ const struct bt_component_filter *filter_component,
+ const struct bt_component_sink *sink_component,
+ const struct bt_port_output *upstream_port,
+ const struct bt_port_input *downstream_port,
+ void *data);
+
+typedef void (* bt_graph_listener_removed_func)(void *data);
+
+extern struct bt_graph *bt_graph_create(void);
+
+extern enum bt_graph_status bt_graph_add_source_component(
+ struct bt_graph *graph,
+ const struct bt_component_class_source *component_class,
+ const char *name, const struct bt_value *params,
+ const struct bt_component_source **component);
+
+extern enum bt_graph_status
+bt_graph_add_source_component_with_init_method_data(
+ struct bt_graph *graph,
+ const struct bt_component_class_source *component_class,
+ const char *name, const struct bt_value *params,
+ void *init_method_data,
+ const struct bt_component_source **component);
+
+extern enum bt_graph_status bt_graph_add_filter_component(
+ struct bt_graph *graph,
+ const struct bt_component_class_filter *component_class,
+ const char *name, const struct bt_value *params,
+ const struct bt_component_filter **component);
+
+extern enum bt_graph_status
+bt_graph_add_filter_component_with_init_method_data(
+ struct bt_graph *graph,
+ const struct bt_component_class_filter *component_class,
+ const char *name, const struct bt_value *params,
+ void *init_method_data,
+ const struct bt_component_filter **component);
+
+extern enum bt_graph_status bt_graph_add_sink_component(
+ struct bt_graph *graph,
+ const struct bt_component_class_sink *component_class,
+ const char *name, const struct bt_value *params,
+ const struct bt_component_sink **component);
+
+extern enum bt_graph_status
+bt_graph_add_sink_component_with_init_method_data(
+ struct bt_graph *graph,
+ const struct bt_component_class_sink *component_class,
+ const char *name, const struct bt_value *params,
+ void *init_method_data,
+ const struct bt_component_sink **component);
+
+extern enum bt_graph_status bt_graph_connect_ports(
+ struct bt_graph *graph,
+ const struct bt_port_output *upstream,
+ const struct bt_port_input *downstream,
+ const struct bt_connection **connection);
+
+extern enum bt_graph_status bt_graph_run(struct bt_graph *graph);
+
+extern enum bt_graph_status bt_graph_consume(
+ struct bt_graph *graph);
+
+extern enum bt_graph_status
+bt_graph_add_filter_component_input_port_added_listener(
+ struct bt_graph *graph,
+ bt_graph_filter_component_input_port_added_listener_func listener,
+ bt_graph_listener_removed_func listener_removed, void *data,
+ int *listener_id);
+
+extern enum bt_graph_status
+bt_graph_add_sink_component_input_port_added_listener(
+ struct bt_graph *graph,
+ bt_graph_sink_component_input_port_added_listener_func listener,
+ bt_graph_listener_removed_func listener_removed, void *data,
+ int *listener_id);
+
+extern enum bt_graph_status
+bt_graph_add_source_component_output_port_added_listener(
+ struct bt_graph *graph,
+ bt_graph_source_component_output_port_added_listener_func listener,
+ bt_graph_listener_removed_func listener_removed, void *data,
+ int *listener_id);
+
+extern enum bt_graph_status
+bt_graph_add_filter_component_output_port_added_listener(
+ struct bt_graph *graph,
+ bt_graph_filter_component_output_port_added_listener_func listener,
+ bt_graph_listener_removed_func listener_removed, void *data,
+ int *listener_id);
+
+extern enum bt_graph_status
+bt_graph_add_filter_component_input_port_removed_listener(
+ struct bt_graph *graph,
+ bt_graph_filter_component_input_port_removed_listener_func listener,
+ bt_graph_listener_removed_func listener_removed, void *data,
+ int *listener_id);
+
+extern enum bt_graph_status
+bt_graph_add_sink_component_input_port_removed_listener(
+ struct bt_graph *graph,
+ bt_graph_sink_component_input_port_removed_listener_func listener,
+ bt_graph_listener_removed_func listener_removed, void *data,
+ int *listener_id);
+
+extern enum bt_graph_status
+bt_graph_add_source_component_output_port_removed_listener(
+ struct bt_graph *graph,
+ bt_graph_source_component_output_port_removed_listener_func listener,
+ bt_graph_listener_removed_func listener_removed, void *data,
+ int *listener_id);
+
+extern enum bt_graph_status
+bt_graph_add_filter_component_output_port_removed_listener(
+ struct bt_graph *graph,
+ bt_graph_filter_component_output_port_removed_listener_func listener,
+ bt_graph_listener_removed_func listener_removed, void *data,
+ int *listener_id);
+
+extern enum bt_graph_status
+bt_graph_add_source_filter_component_ports_connected_listener(
+ struct bt_graph *graph,
+ bt_graph_source_filter_component_ports_connected_listener_func listener,
+ bt_graph_listener_removed_func listener_removed, void *data,
+ int *listener_id);
+
+extern enum bt_graph_status
+bt_graph_add_source_sink_component_ports_connected_listener(
+ struct bt_graph *graph,
+ bt_graph_source_sink_component_ports_connected_listener_func listener,
+ bt_graph_listener_removed_func listener_removed, void *data,
+ int *listener_id);
+
+extern enum bt_graph_status
+bt_graph_add_filter_sink_component_ports_connected_listener(
+ struct bt_graph *graph,
+ bt_graph_filter_sink_component_ports_connected_listener_func listener,
+ bt_graph_listener_removed_func listener_removed, void *data,
+ int *listener_id);
+
+extern enum bt_graph_status
+bt_graph_add_source_filter_component_ports_disconnected_listener(
+ struct bt_graph *graph,
+ bt_graph_source_filter_component_ports_disconnected_listener_func listener,
+ bt_graph_listener_removed_func listener_removed, void *data,
+ int *listener_id);
+
+extern enum bt_graph_status
+bt_graph_add_source_sink_component_ports_disconnected_listener(
+ struct bt_graph *graph,
+ bt_graph_source_sink_component_ports_disconnected_listener_func listener,
+ bt_graph_listener_removed_func listener_removed, void *data,
+ int *listener_id);
+
+extern enum bt_graph_status
+bt_graph_add_filter_sink_component_ports_disconnected_listener(
+ struct bt_graph *graph,
+ bt_graph_filter_sink_component_ports_disconnected_listener_func listener,
+ bt_graph_listener_removed_func listener_removed, void *data,
+ int *listener_id);