struct bt_connection;
enum bt_graph_status {
+ BT_GRAPH_STATUS_COMPONENT_REFUSES_PORT_CONNECTION = 111,
/** Canceled. */
BT_GRAPH_STATUS_CANCELED = 125,
/** No sink can consume at the moment. */
/** Downstream component does not support multiple inputs. */
BT_GRAPH_STATUS_END = 1,
BT_GRAPH_STATUS_OK = 0,
- /** Component is already part of another graph. */
- BT_GRAPH_STATUS_ALREADY_IN_A_GRAPH = -2,
/** Invalid arguments. */
BT_GRAPH_STATUS_INVALID = -22,
/** No sink in graph. */
BT_GRAPH_STATUS_NO_SINK = -6,
/** General error. */
BT_GRAPH_STATUS_ERROR = -1,
+ BT_GRAPH_STATUS_CANNOT_CONSUME = -2,
+ BT_GRAPH_STATUS_NOMEM = -12,
};
typedef void (*bt_graph_port_added_listener)(struct bt_port *port,
struct bt_component *downstream_component,
struct bt_port *upstream_port, struct bt_port *downstream_port,
void *data);
+typedef void (* bt_graph_listener_removed)(void *data);
extern struct bt_graph *bt_graph_create(void);
+extern enum bt_graph_status bt_graph_add_component(
+ struct bt_graph *graph,
+ struct bt_component_class *component_class,
+ const char *name, struct bt_value *params,
+ struct bt_component **component);
+
+extern enum bt_graph_status bt_graph_add_component_with_init_method_data(
+ struct bt_graph *graph,
+ struct bt_component_class *component_class,
+ const char *name, struct bt_value *params,
+ void *init_method_data,
+ struct bt_component **component);
+
/**
* Creates a connection between two components using the two ports specified
* and adds the connection and components (if not already added) to the graph.
*/
-extern struct bt_connection *bt_graph_connect_ports(struct bt_graph *graph,
- struct bt_port *upstream,
- struct bt_port *downstream);
+extern enum bt_graph_status bt_graph_connect_ports(struct bt_graph *graph,
+ struct bt_port *upstream, struct bt_port *downstream,
+ struct bt_connection **connection);
/**
* Run graph to completion or until a single sink is left and "AGAIN" is received.
extern enum bt_graph_status bt_graph_consume(struct bt_graph *graph);
extern int bt_graph_add_port_added_listener(struct bt_graph *graph,
- bt_graph_port_added_listener listener, void *data);
+ bt_graph_port_added_listener listener,
+ bt_graph_listener_removed listener_removed, void *data);
extern int bt_graph_add_port_removed_listener(struct bt_graph *graph,
- bt_graph_port_removed_listener listener, void *data);
+ bt_graph_port_removed_listener listener,
+ bt_graph_listener_removed listener_removed, void *data);
extern int bt_graph_add_ports_connected_listener(struct bt_graph *graph,
- bt_graph_ports_connected_listener listener, void *data);
+ bt_graph_ports_connected_listener listener,
+ bt_graph_listener_removed listener_removed, void *data);
extern int bt_graph_add_ports_disconnected_listener(struct bt_graph *graph,
- bt_graph_ports_disconnected_listener listener, void *data);
+ bt_graph_ports_disconnected_listener listener,
+ bt_graph_listener_removed listener_removed, void *data);
extern enum bt_graph_status bt_graph_cancel(struct bt_graph *graph);
extern bt_bool bt_graph_is_canceled(struct bt_graph *graph);