mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
parent
d04e430f23
commit
a0a32af386
4 changed files with 17 additions and 2 deletions
|
|
@ -129,6 +129,8 @@ pulse.rules = [
|
|||
# Possible quirks:"
|
||||
# force-s16-info forces sink and source info as S16 format
|
||||
# remove-capture-dont-move removes the capture DONT_MOVE flag
|
||||
# block-source-volume blocks updates to source volume
|
||||
# block-sink-volume blocks updates to sink volume
|
||||
#quirks = [ ]
|
||||
}
|
||||
}
|
||||
|
|
@ -158,4 +160,8 @@ pulse.rules = [
|
|||
}
|
||||
}
|
||||
}
|
||||
#{
|
||||
# matches = [ { application.process.binary = "Discord" } ]
|
||||
# actions = { quirks = [ block-source-volume ] }
|
||||
#}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -2911,10 +2911,15 @@ static int do_set_volume(struct client *client, uint32_t command, uint32_t tag,
|
|||
(index != SPA_ID_INVALID && name != NULL))
|
||||
return -EINVAL;
|
||||
|
||||
if (command == COMMAND_SET_SINK_VOLUME)
|
||||
if (command == COMMAND_SET_SINK_VOLUME) {
|
||||
if (client->quirks & QUIRK_BLOCK_SINK_VOLUME)
|
||||
return -EPERM;
|
||||
direction = PW_DIRECTION_OUTPUT;
|
||||
else
|
||||
} else {
|
||||
if (client->quirks & QUIRK_BLOCK_SOURCE_VOLUME)
|
||||
return -EPERM;
|
||||
direction = PW_DIRECTION_INPUT;
|
||||
}
|
||||
|
||||
o = find_device(client, index, name, direction == PW_DIRECTION_OUTPUT, &is_monitor);
|
||||
if (o == NULL || (info = o->info) == NULL || info->props == NULL)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@ static uint64_t parse_quirks(const char *str)
|
|||
static const struct { const char *key; uint64_t value; } quirk_keys[] = {
|
||||
{ "force-s16-info", QUIRK_FORCE_S16_FORMAT },
|
||||
{ "remove-capture-dont-move", QUIRK_REMOVE_CAPTURE_DONT_MOVE },
|
||||
{ "block-source-volume", QUIRK_BLOCK_SOURCE_VOLUME },
|
||||
{ "block-sink-volume", QUIRK_BLOCK_SINK_VOLUME },
|
||||
};
|
||||
SPA_FOR_EACH_ELEMENT_VAR(quirk_keys, i) {
|
||||
if (spa_streq(str, i->key))
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@
|
|||
#define QUIRK_FORCE_S16_FORMAT (1ull<<0) /** forces S16 sample format in sink and source
|
||||
* info */
|
||||
#define QUIRK_REMOVE_CAPTURE_DONT_MOVE (1ull<<1) /** removes the capture stream DONT_MOVE flag */
|
||||
#define QUIRK_BLOCK_SOURCE_VOLUME (1ull<<2) /** block volume changes to sources */
|
||||
#define QUIRK_BLOCK_SINK_VOLUME (1ull<<3) /** block volume changes to sinks */
|
||||
|
||||
int client_update_quirks(struct client *client);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue