pa_assert(data);
pa_assert(u);
- pa_log_info("[SELECT] data(%p), stream_type(%d), stream_role(%s), device_role(%s), route_type(%d)",
- data, data->stream_type, data->stream_role, data->device_role, data->route_type);
+ pa_log_info("[SELECT] data(%p), stream_type(%d), stream_role(%s), device_role(%s), route_type(%d), parent_id(%d)",
+ data, data->stream_type, data->stream_role, data->device_role, data->route_type, data->parent_id);
null_sink = (pa_sink*)pa_namereg_get(u->core, SINK_NAME_NULL, PA_NAMEREG_SINK);
null_source = (pa_source*)pa_namereg_get(u->core, SOURCE_NAME_NULL, PA_NAMEREG_SOURCE);
pa_assert(data);
pa_assert(u);
- pa_log_info("[STREAM][%s] stream(%p, type:%d, role:%s, parent_id:%s)",
+ pa_log_info("[STREAM][%s] stream(%p, type:%d, role:%s, parent_id:%d)",
data->is_connected ? "connected" : "disconnected",
data->stream, data->stream_type, data->stream_role, data->parent_id);
pa_stream_manager_hook_data_for_select hook_call_select_data;
pa_idxset *filtered_avail_devices = NULL;
void *s = NULL;
+ const char *parent_id;
+ uint32_t parent_id_u;
pa_assert(m);
pa_assert(user_data);
if (hook_call_select_data.route_type == STREAM_ROUTE_TYPE_MANUAL)
CONVERT_TO_DEVICE_ROLE(hook_call_select_data.stream_role, hook_call_select_data.device_role);
+ parent_id = is_new_data ? pa_proplist_gets(GET_STREAM_NEW_PROPLIST(s, type), PA_PROP_MEDIA_PARENT_ID) :
+ pa_proplist_gets(GET_STREAM_PROPLIST(s, type), PA_PROP_MEDIA_PARENT_ID);
+ if (parent_id && pa_atou(parent_id, &parent_id_u) == 0)
+ hook_call_select_data.parent_id = parent_id_u;
+ else
+ hook_call_select_data.parent_id = -1;
+
if (pa_hook_fire(pa_communicator_hook(m->comm.comm, PA_COMMUNICATOR_HOOK_SELECT_INIT_SINK_OR_SOURCE), &hook_call_select_data)) {
ret = RET_MSG_ERROR_INTERNAL;
} else {
hook_call_route_data.stream = NULL;
}
}
- if (pa_hook_fire(pa_communicator_hook(m->comm.comm, PA_COMMUNICATOR_HOOK_CHANGE_ROUTE), &hook_call_route_data))
- ret = RET_MSG_ERROR_INTERNAL;
} else {
memset(&hook_call_route_data, 0, sizeof(pa_stream_manager_hook_data_for_route));
hook_call_route_data.stream = NULL;
hook_call_route_data.stream_type = type;
}
- if (pa_hook_fire(pa_communicator_hook(m->comm.comm, PA_COMMUNICATOR_HOOK_CHANGE_ROUTE), &hook_call_route_data))
- ret = RET_MSG_ERROR_INTERNAL;
}
+ if (pa_hook_fire(pa_communicator_hook(m->comm.comm, PA_COMMUNICATOR_HOOK_CHANGE_ROUTE), &hook_call_route_data))
+ ret = RET_MSG_ERROR_INTERNAL;
+
return ret;
}
static ret_msg_t prepare_and_invoke_hook_to_inform_stream_connection(pa_stream_manager *m, bool is_connected,
stream_type_t type, void *s) {
pa_stream_manager_hook_data_for_stream hook_call_stream_data;
+ const char *parent_id;
+ uint32_t parent_id_u;
pa_assert(m);
pa_assert(s);
+ memset(&hook_call_stream_data, 0, sizeof(pa_stream_manager_hook_data_for_stream));
hook_call_stream_data.stream = s;
hook_call_stream_data.stream_type = type;
hook_call_stream_data.stream_role = pa_proplist_gets(GET_STREAM_PROPLIST(s, type), PA_PROP_MEDIA_ROLE);
- hook_call_stream_data.parent_id = pa_proplist_gets(GET_STREAM_PROPLIST(s, type), PA_PROP_MEDIA_PARENT_ID);
+ parent_id = pa_proplist_gets(GET_STREAM_PROPLIST(s, type), PA_PROP_MEDIA_PARENT_ID);
+ if (parent_id && pa_atou(parent_id, &parent_id_u) == 0)
+ hook_call_stream_data.parent_id = parent_id_u;
+ else
+ hook_call_stream_data.parent_id = -1;
hook_call_stream_data.is_connected = is_connected;
if (pa_hook_fire(pa_communicator_hook(m->comm.comm, PA_COMMUNICATOR_HOOK_STREAM_CONNECTION_CHANGED), &hook_call_stream_data))