if (data->card)
pa_proplist_update(data->proplist, PA_UPDATE_MERGE, data->card->proplist);
- pa_device_init_description(data->proplist);
+ pa_device_init_description(data->proplist, data->card);
pa_device_init_icon(data->proplist, false);
pa_device_init_intended_roles(data->proplist);
void *state;
pa_device_port *p;
- PA_HASHMAP_FOREACH(p, s->ports, state)
+ PA_HASHMAP_FOREACH(p, s->ports, state) {
+ if (p->available == PA_AVAILABLE_NO)
+ continue;
+
if (!s->active_port || p->priority > s->active_port->priority)
s->active_port = p;
+ }
+
+ if (!s->active_port) {
+ PA_HASHMAP_FOREACH(p, s->ports, state)
+ if (!s->active_port || p->priority > s->active_port->priority)
+ s->active_port = p;
+ }
}
if (s->active_port)
}
}
- if (PA_UNLIKELY (desired_rate < 8000 ||
- desired_rate > PA_RATE_MAX))
+ if (PA_UNLIKELY(!pa_sample_rate_valid(desired_rate)))
return -1;
if (!passthrough) {
/* Let's 'push' the reference volume if necessary */
pa_cvolume_merge(&new_reference_volume, &s->reference_volume, &root_source->real_volume);
- /* If the source and it's root don't have the same number of channels, we need to remap */
+ /* If the source and its root don't have the same number of channels, we need to remap */
if (s != root_source && !pa_channel_map_equal(&s->channel_map, &root_source->channel_map))
pa_cvolume_remap(&new_reference_volume, &s->channel_map, &root_source->channel_map);
update_reference_volume(root_source, &new_reference_volume, &root_source->channel_map, save);
return 0;
}
- case PA_SOURCE_MESSAGE_DETACH:
-
- /* Detach all streams */
- pa_source_detach_within_thread(s);
- return 0;
-
- case PA_SOURCE_MESSAGE_ATTACH:
-
- /* Reattach all streams */
- pa_source_attach_within_thread(s);
- return 0;
-
case PA_SOURCE_MESSAGE_GET_REQUESTED_LATENCY: {
pa_usec_t *usec = userdata;
return ret;
}
-/* Called from main thread */
-void pa_source_detach(pa_source *s) {
- pa_source_assert_ref(s);
- pa_assert_ctl_context();
- pa_assert(PA_SOURCE_IS_LINKED(s->state));
-
- pa_assert_se(pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SOURCE_MESSAGE_DETACH, NULL, 0, NULL) == 0);
-}
-
-/* Called from main thread */
-void pa_source_attach(pa_source *s) {
- pa_source_assert_ref(s);
- pa_assert_ctl_context();
- pa_assert(PA_SOURCE_IS_LINKED(s->state));
-
- pa_assert_se(pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SOURCE_MESSAGE_ATTACH, NULL, 0, NULL) == 0);
-}
-
/* Called from IO thread */
void pa_source_detach_within_thread(pa_source *s) {
pa_source_output *o;