data.implement = mir_stream;
data.channels = sinp->channel_map.channels;
data.type = type;
+ data.zone = pa_utils_get_zone(sinp->proplist);
data.visible = TRUE;
data.available = TRUE;
data.amname = name;
fake.implement = mir_stream;
fake.channels = data->channel_map.channels;
fake.type = type;
+ fake.zone = pa_utils_get_zone(data->proplist);
fake.visible = TRUE;
fake.available = TRUE;
fake.amname = "<preroute sink-input>";
data.implement = mir_stream;
data.channels = sinp->channel_map.channels;
data.type = type;
+ data.zone = pa_utils_get_zone(pl);
data.visible = TRUE;
data.available = TRUE;
data.amname = name;
data.implement = mir_stream;
data.channels = sout->channel_map.channels;
data.type = type;
+ data.zone = pa_utils_get_zone(sout->proplist);
data.visible = TRUE;
data.available = TRUE;
data.amname = name;
fake.implement = mir_stream;
fake.channels = data->channel_map.channels;
fake.type = type;
+ fake.zone = pa_utils_get_zone(data->proplist);
fake.visible = TRUE;
fake.available = TRUE;
fake.amname = "<preroute source-output>";
data.implement = mir_stream;
data.channels = sout->channel_map.channels;
data.type = type;
+ data.zone = pa_utils_get_zone(pl);
data.visible = TRUE;
data.available = TRUE;
data.amname = name;
static void handle_alsa_card(struct userdata *u, pa_card *card)
{
- mir_node data;
- const char *udd;
- char *cnam;
- char *cid;
+ mir_node data;
+ const char *udd;
+ char *cnam;
+ char *cid;
memset(&data, 0, sizeof(data));
+ data.zone = pa_utils_get_zone(card->proplist);
data.visible = TRUE;
data.amid = AM_ID_INVALID;
data.implement = mir_device;
memset(&data, 0, sizeof(data));
data.key = key;
+ data.zone = pa_utils_get_zone(card->proplist);
data.visible = TRUE;
data.amid = AM_ID_INVALID;
data.implement = mir_device;
node->location = data->location;
node->privacy = data->privacy;
node->type = data->type;
+ node->zone = pa_xstrdup(data->zone);
node->visible = data->visible;
node->available = data->available;
node->amname = pa_xstrdup(data->amname ? data->amname : data->paname);
pa_idxset_remove_by_index(ns->nodes, node->index);
pa_xfree(node->key);
+ pa_xfree(node->zone);
pa_xfree(node->amname);
pa_xfree(node->amdescr);
pa_xfree(node->paname);
PRINT(" location : %s" , mir_location_str(node->location));
PRINT(" privacy : %s" , mir_privacy_str(node->privacy));
PRINT(" type : %s" , mir_node_type_str(node->type));
+ PRINT(" zone : '%s'", node->zone ? node->zone : "");
PRINT(" visible : %s" , node->visible ? "yes" : "no");
PRINT(" available : %s" , node->available ? "yes" : "no");
PRINT(" amname : '%s'", node->amname ? node->amname : "");
#include "loopback.h"
#include "volume.h"
-#define AM_ID_INVALID 65535
-
+#define AM_ID_INVALID 65535
enum mir_direction {
mir_direction_unknown,
mir_location location; /**< mir_internal | mir_external */
mir_privacy privacy; /**< mir_public | mir_private */
mir_node_type type; /**< mir_speakers | mir_headset | ... */
+ char *zone; /**< zone where the node belong */
pa_bool_t visible; /**< internal or can appear on UI */
pa_bool_t available; /**< eg. is the headset connected? */
pa_bool_t ignore; /**< do not consider it while routing */
#define DIM(a) (sizeof(a)/sizeof((a)[0]))
+#define PA_PROP_ZONE_NAME "zone.name"
#define PA_PROP_ROUTING_CLASS_NAME "routing.class.name"
#define PA_PROP_ROUTING_CLASS_ID "routing.class.id"
#define PA_PROP_ROUTING_METHOD "routing.method"
#define PA_PROP_NODE_TYPE "node.type"
#define PA_PROP_NODE_ROLE "node.role"
+#define PA_ZONE_NAME_DEFAULT "driver"
+
#define PA_ROUTING_DEFAULT "default"
#define PA_ROUTING_EXPLICIT "explicit"
return "<unknown>";
}
+char *pa_utils_get_zone(pa_proplist *pl)
+{
+ const char *zone;
+
+ pa_assert(pl);
+
+ if (!(zone = pa_proplist_gets(pl, PA_PROP_ZONE_NAME)))
+ zone = PA_ZONE_NAME_DEFAULT;
+
+ return (char *)zone;
+}
pa_bool_t pa_utils_set_stream_routing_properties(pa_proplist *pl,
int styp,
char *pa_utils_get_source_output_name(pa_source_output *);
char *pa_utils_get_source_output_name_from_data(pa_source_output_new_data *);
+char *pa_utils_get_zone(pa_proplist *);
+
pa_bool_t pa_utils_set_stream_routing_properties(pa_proplist *, int, void *);
pa_bool_t pa_utils_unset_stream_routing_properties(pa_proplist *);
void pa_utils_set_stream_routing_method_property(pa_proplist *,pa_bool_t);