summaryrefslogtreecommitdiff
path: root/src/pulsecore/device-port.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pulsecore/device-port.c')
-rw-r--r--src/pulsecore/device-port.c59
1 files changed, 52 insertions, 7 deletions
diff --git a/src/pulsecore/device-port.c b/src/pulsecore/device-port.c
index acfc44df..96607027 100644
--- a/src/pulsecore/device-port.c
+++ b/src/pulsecore/device-port.c
@@ -26,6 +26,47 @@
PA_DEFINE_PUBLIC_CLASS(pa_device_port, pa_object);
+pa_device_port_new_data *pa_device_port_new_data_init(pa_device_port_new_data *data) {
+ pa_assert(data);
+
+ pa_zero(*data);
+ data->available = PA_AVAILABLE_UNKNOWN;
+ return data;
+}
+
+void pa_device_port_new_data_set_name(pa_device_port_new_data *data, const char *name) {
+ pa_assert(data);
+
+ pa_xfree(data->name);
+ data->name = pa_xstrdup(name);
+}
+
+void pa_device_port_new_data_set_description(pa_device_port_new_data *data, const char *description) {
+ pa_assert(data);
+
+ pa_xfree(data->description);
+ data->description = pa_xstrdup(description);
+}
+
+void pa_device_port_new_data_set_available(pa_device_port_new_data *data, pa_available_t available) {
+ pa_assert(data);
+
+ data->available = available;
+}
+
+void pa_device_port_new_data_set_direction(pa_device_port_new_data *data, pa_direction_t direction) {
+ pa_assert(data);
+
+ data->direction = direction;
+}
+
+void pa_device_port_new_data_done(pa_device_port_new_data *data) {
+ pa_assert(data);
+
+ pa_xfree(data->name);
+ pa_xfree(data->description);
+}
+
void pa_device_port_set_available(pa_device_port *p, pa_available_t status)
{
pa_core *core;
@@ -66,23 +107,27 @@ static void device_port_free(pa_object *o) {
}
-pa_device_port *pa_device_port_new(pa_core *c, const char *name, const char *description, pa_direction_t direction, size_t extra) {
+pa_device_port *pa_device_port_new(pa_core *c, pa_device_port_new_data *data, size_t extra) {
pa_device_port *p;
- pa_assert(name);
+ pa_assert(data);
+ pa_assert(data->name);
+ pa_assert(data->direction == PA_DIRECTION_OUTPUT || data->direction == PA_DIRECTION_INPUT);
p = PA_DEVICE_PORT(pa_object_new_internal(PA_ALIGN(sizeof(pa_device_port)) + extra, pa_device_port_type_id, pa_device_port_check_type));
p->parent.free = device_port_free;
- p->core = c;
- p->name = pa_xstrdup(name);
- p->description = pa_xstrdup(description);
+ p->name = data->name;
+ data->name = NULL;
+ p->description = data->description;
+ data->description = NULL;
p->core = c;
p->card = NULL;
p->priority = 0;
- p->available = PA_AVAILABLE_UNKNOWN;
+ p->available = data->available;
p->profiles = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
- p->direction = direction;
+ p->direction = data->direction;
+
p->latency_offset = 0;
p->proplist = pa_proplist_new();