From aea77dc05571f8fc629a60f7281352c350778342 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 26 Mar 2025 09:41:45 +0100 Subject: [PATCH] spa: avoid duplicate default value When filtering an enum/none against a range/step, make sure we don't add the default value twice. --- spa/include/spa/pod/filter.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/spa/include/spa/pod/filter.h b/spa/include/spa/pod/filter.h index 16e3b0b43..4160a7e0f 100644 --- a/spa/include/spa/pod/filter.h +++ b/spa/include/spa/pod/filter.h @@ -201,6 +201,7 @@ spa_pod_filter_prop(struct spa_pod_builder *b, void *min = SPA_PTROFF(alt2,size,void); void *max = SPA_PTROFF(min,size,void); void *step = p2c == SPA_CHOICE_Step ? SPA_PTROFF(max,size,void) : NULL; + bool found_def = false; /* we should prefer the alt2 range default value but only if valid */ for (j = 0, a1 = alt1; j < nalt1; j++, a1 = SPA_PTROFF(a1,size,void)) { @@ -210,7 +211,7 @@ spa_pod_filter_prop(struct spa_pod_builder *b, if (spa_pod_compare_value(type, a1, alt2, size) == 0) { /* it is in the enum, use as default then */ spa_pod_builder_raw(b, a1, size); - n_copied++; + found_def = true; break; } } @@ -220,7 +221,7 @@ spa_pod_filter_prop(struct spa_pod_builder *b, return res; if (res == 0) continue; - if (n_copied++ == 0) + if (n_copied++ == 0 && !found_def) spa_pod_builder_raw(b, a1, size); spa_pod_builder_raw(b, a1, size); }