mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
pulse-server: set source and sink flags
This commit is contained in:
parent
acfb48e3da
commit
1ec00e37fc
2 changed files with 36 additions and 2 deletions
|
|
@ -307,3 +307,26 @@ static inline bool pw_endswith(const char *s, const char *sfx)
|
||||||
l2 = strlen(sfx);
|
l2 = strlen(sfx);
|
||||||
return l1 >= l2 && strcmp(s + l1 - l2, sfx) == 0;
|
return l1 >= l2 && strcmp(s + l1 - l2, sfx) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum {
|
||||||
|
SINK_HW_VOLUME_CTRL = 0x0001U,
|
||||||
|
SINK_LATENCY = 0x0002U,
|
||||||
|
SINK_HARDWARE = 0x0004U,
|
||||||
|
SINK_NETWORK = 0x0008U,
|
||||||
|
SINK_HW_MUTE_CTRL = 0x0010U,
|
||||||
|
SINK_DECIBEL_VOLUME = 0x0020U,
|
||||||
|
SINK_FLAT_VOLUME = 0x0040U,
|
||||||
|
SINK_DYNAMIC_LATENCY = 0x0080U,
|
||||||
|
SINK_SET_FORMATS = 0x0100U,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
SOURCE_HW_VOLUME_CTRL = 0x0001U,
|
||||||
|
SOURCE_LATENCY = 0x0002U,
|
||||||
|
SOURCE_HARDWARE = 0x0004U,
|
||||||
|
SOURCE_NETWORK = 0x0008U,
|
||||||
|
SOURCE_HW_MUTE_CTRL = 0x0010U,
|
||||||
|
SOURCE_DECIBEL_VOLUME = 0x0020U,
|
||||||
|
SOURCE_DYNAMIC_LATENCY = 0x0040U,
|
||||||
|
SOURCE_FLAT_VOLUME = 0x0080U,
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -2897,10 +2897,12 @@ static int fill_sink_info(struct client *client, struct message *m,
|
||||||
uint32_t module_id = SPA_ID_INVALID;
|
uint32_t module_id = SPA_ID_INVALID;
|
||||||
uint32_t card_id = SPA_ID_INVALID;
|
uint32_t card_id = SPA_ID_INVALID;
|
||||||
struct pw_manager_param *p;
|
struct pw_manager_param *p;
|
||||||
|
uint32_t flags;
|
||||||
|
|
||||||
if (o == NULL || info == NULL || info->props == NULL || !is_sink(o))
|
if (o == NULL || info == NULL || info->props == NULL || !is_sink(o))
|
||||||
return ERR_NOENTITY;
|
return ERR_NOENTITY;
|
||||||
|
|
||||||
|
|
||||||
if ((name = spa_dict_lookup(info->props, PW_KEY_NODE_NAME)) != NULL) {
|
if ((name = spa_dict_lookup(info->props, PW_KEY_NODE_NAME)) != NULL) {
|
||||||
size_t size = strlen(name) + 10;
|
size_t size = strlen(name) + 10;
|
||||||
monitor_name = alloca(size);
|
monitor_name = alloca(size);
|
||||||
|
|
@ -2911,6 +2913,10 @@ static int fill_sink_info(struct client *client, struct message *m,
|
||||||
if ((str = spa_dict_lookup(info->props, PW_KEY_DEVICE_ID)) != NULL)
|
if ((str = spa_dict_lookup(info->props, PW_KEY_DEVICE_ID)) != NULL)
|
||||||
card_id = (uint32_t)atoi(str);
|
card_id = (uint32_t)atoi(str);
|
||||||
|
|
||||||
|
flags = SINK_LATENCY | SINK_DYNAMIC_LATENCY | SINK_DECIBEL_VOLUME;
|
||||||
|
if ((str = spa_dict_lookup(info->props, PW_KEY_DEVICE_API)) != NULL)
|
||||||
|
flags |= SINK_HARDWARE;
|
||||||
|
|
||||||
spa_list_for_each(p, &o->param_list, link) {
|
spa_list_for_each(p, &o->param_list, link) {
|
||||||
switch (p->id) {
|
switch (p->id) {
|
||||||
case SPA_PARAM_EnumFormat:
|
case SPA_PARAM_EnumFormat:
|
||||||
|
|
@ -2944,7 +2950,7 @@ static int fill_sink_info(struct client *client, struct message *m,
|
||||||
TAG_STRING, monitor_name, /* monitor source name */
|
TAG_STRING, monitor_name, /* monitor source name */
|
||||||
TAG_USEC, 0LL, /* latency */
|
TAG_USEC, 0LL, /* latency */
|
||||||
TAG_STRING, "PipeWire", /* driver */
|
TAG_STRING, "PipeWire", /* driver */
|
||||||
TAG_U32, 0, /* flags */
|
TAG_U32, flags, /* flags */
|
||||||
TAG_INVALID);
|
TAG_INVALID);
|
||||||
|
|
||||||
if (client->version >= 13) {
|
if (client->version >= 13) {
|
||||||
|
|
@ -2995,6 +3001,7 @@ static int fill_source_info(struct client *client, struct message *m,
|
||||||
uint32_t module_id = SPA_ID_INVALID;
|
uint32_t module_id = SPA_ID_INVALID;
|
||||||
uint32_t card_id = SPA_ID_INVALID;
|
uint32_t card_id = SPA_ID_INVALID;
|
||||||
struct pw_manager_param *p;
|
struct pw_manager_param *p;
|
||||||
|
uint32_t flags;
|
||||||
|
|
||||||
is_monitor = is_sink(o);
|
is_monitor = is_sink(o);
|
||||||
if (o == NULL || info == NULL || info->props == NULL ||
|
if (o == NULL || info == NULL || info->props == NULL ||
|
||||||
|
|
@ -3016,6 +3023,10 @@ static int fill_source_info(struct client *client, struct message *m,
|
||||||
if ((str = spa_dict_lookup(info->props, PW_KEY_DEVICE_ID)) != NULL)
|
if ((str = spa_dict_lookup(info->props, PW_KEY_DEVICE_ID)) != NULL)
|
||||||
card_id = (uint32_t)atoi(str);
|
card_id = (uint32_t)atoi(str);
|
||||||
|
|
||||||
|
flags = SOURCE_LATENCY | SOURCE_DYNAMIC_LATENCY | SOURCE_DECIBEL_VOLUME;
|
||||||
|
if ((str = spa_dict_lookup(info->props, PW_KEY_DEVICE_API)) != NULL)
|
||||||
|
flags |= SOURCE_HARDWARE;
|
||||||
|
|
||||||
spa_list_for_each(p, &o->param_list, link) {
|
spa_list_for_each(p, &o->param_list, link) {
|
||||||
switch (p->id) {
|
switch (p->id) {
|
||||||
case SPA_PARAM_EnumFormat:
|
case SPA_PARAM_EnumFormat:
|
||||||
|
|
@ -3049,7 +3060,7 @@ static int fill_source_info(struct client *client, struct message *m,
|
||||||
TAG_STRING, is_monitor ? name : NULL, /* monitor of sink name */
|
TAG_STRING, is_monitor ? name : NULL, /* monitor of sink name */
|
||||||
TAG_USEC, 0LL, /* latency */
|
TAG_USEC, 0LL, /* latency */
|
||||||
TAG_STRING, "PipeWire", /* driver */
|
TAG_STRING, "PipeWire", /* driver */
|
||||||
TAG_U32, 0, /* flags */
|
TAG_U32, flags, /* flags */
|
||||||
TAG_INVALID);
|
TAG_INVALID);
|
||||||
|
|
||||||
if (client->version >= 13) {
|
if (client->version >= 13) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue