- *ret_ss = sink->sample_spec;
- *ret_map = sink->channel_map;
- *ret_name = sink->name;
- *ret_proplist = sink->proplist;
- *ret_subtype = sink->flags & PA_SINK_HARDWARE ? SUBTYPE_HARDWARE : SUBTYPE_VIRTUAL;
-
- } else if (pa_source_isinstance(s->device)) {
- pa_source *source = PA_SOURCE(s->device);
-
- *ret_ss = source->sample_spec;
- *ret_map = source->channel_map;
- *ret_name = source->name;
- *ret_proplist = source->proplist;
- *ret_subtype = source->monitor_of ? SUBTYPE_MONITOR : (source->flags & PA_SOURCE_HARDWARE ? SUBTYPE_HARDWARE : SUBTYPE_VIRTUAL);
+ if (pa_sink_isinstance(device)) {
+ pa_sink *sink = PA_SINK(device);
+
+ s->is_sink = true;
+ s->service_type = SERVICE_TYPE_SINK;
+ s->ss = sink->sample_spec;
+ s->cm = sink->channel_map;
+ s->name = pa_xstrdup(sink->name);
+ s->proplist = pa_proplist_copy(sink->proplist);
+ s->subtype = sink->flags & PA_SINK_HARDWARE ? SUBTYPE_HARDWARE : SUBTYPE_VIRTUAL;
+
+ } else if (pa_source_isinstance(device)) {
+ pa_source *source = PA_SOURCE(device);
+
+ s->is_sink = false;
+ s->service_type = SERVICE_TYPE_SOURCE;
+ s->ss = source->sample_spec;
+ s->cm = source->channel_map;
+ s->name = pa_xstrdup(source->name);
+ s->proplist = pa_proplist_copy(source->proplist);
+ s->subtype = source->monitor_of ? SUBTYPE_MONITOR : (source->flags & PA_SOURCE_HARDWARE ? SUBTYPE_HARDWARE : SUBTYPE_VIRTUAL);