summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg Chini <georg@chini.tk>2023-01-07 19:45:17 +0100
committerPulseAudio Marge Bot <pulseaudio-maintainers@lists.freedesktop.org>2023-01-21 10:06:57 +0000
commit94dd7b4b7b01470d09102402482866ff89037f42 (patch)
treed8aae6f3037a8e2597f8ae398b74acecc9a882a6
parent33129c88dc7a8d18b7f0aa8ef563c50a7904d00c (diff)
downloadpulseaudio-94dd7b4b7b01470d09102402482866ff89037f42.tar.gz
stream-interaction: Extend trigger groups to module-role-cork
For module-role-ducking, trigger and ducking groups were introduced some years ago. This patch extends the functionality to module-role-cork, so that trigger and cork roles may now contain "/" separated groups. Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/767>
-rw-r--r--src/modules/stream-interaction.c54
1 files changed, 30 insertions, 24 deletions
diff --git a/src/modules/stream-interaction.c b/src/modules/stream-interaction.c
index 993b4c3b2..b2602f5aa 100644
--- a/src/modules/stream-interaction.c
+++ b/src/modules/stream-interaction.c
@@ -423,6 +423,9 @@ int pa_stream_interaction_init(pa_module *m, const char* const v_modargs[]) {
bool global = false;
bool source_trigger = false;
uint32_t i = 0;
+ uint32_t group_count_tr = 0;
+ uint32_t group_count_du = 0;
+ uint32_t group_count_vol = 0;
pa_assert(m);
@@ -441,30 +444,28 @@ int pa_stream_interaction_init(pa_module *m, const char* const v_modargs[]) {
u->n_groups = 1;
+ roles = pa_modargs_get_value(ma, "trigger_roles", NULL);
+ if (roles) {
+ const char *split_state = NULL;
+ char *n = NULL;
+ while ((n = pa_split(roles, "/", &split_state))) {
+ group_count_tr++;
+ pa_xfree(n);
+ }
+ }
+ roles = pa_modargs_get_value(ma, u->duck ? "ducking_roles" : "cork_roles", NULL);
+ if (roles) {
+ const char *split_state = NULL;
+ char *n = NULL;
+ while ((n = pa_split(roles, "/", &split_state))) {
+ group_count_du++;
+ pa_xfree(n);
+ }
+ }
+
if (u->duck) {
const char *volumes;
- uint32_t group_count_tr = 0;
- uint32_t group_count_du = 0;
- uint32_t group_count_vol = 0;
- roles = pa_modargs_get_value(ma, "trigger_roles", NULL);
- if (roles) {
- const char *split_state = NULL;
- char *n = NULL;
- while ((n = pa_split(roles, "/", &split_state))) {
- group_count_tr++;
- pa_xfree(n);
- }
- }
- roles = pa_modargs_get_value(ma, "ducking_roles", NULL);
- if (roles) {
- const char *split_state = NULL;
- char *n = NULL;
- while ((n = pa_split(roles, "/", &split_state))) {
- group_count_du++;
- pa_xfree(n);
- }
- }
volumes = pa_modargs_get_value(ma, "volume", NULL);
if (volumes) {
const char *split_state = NULL;
@@ -480,11 +481,16 @@ int pa_stream_interaction_init(pa_module *m, const char* const v_modargs[]) {
pa_log("Invalid number of groups");
goto fail;
}
-
- if (group_count_tr > 0)
- u->n_groups = group_count_tr;
+ } else {
+ if ((group_count_tr > 1 || group_count_du > 1) && (group_count_tr != group_count_du)) {
+ pa_log("Invalid number of groups");
+ goto fail;
+ }
}
+ if (group_count_tr > 0)
+ u->n_groups = group_count_tr;
+
u->groups = pa_xnew0(struct group*, u->n_groups);
for (i = 0; i < u->n_groups; i++) {
u->groups[i] = pa_xnew0(struct group, 1);