diff --git a/spa/include/spa/pod/filter.h b/spa/include/spa/pod/filter.h index 4821cd409..944b4cc64 100644 --- a/spa/include/spa/pod/filter.h +++ b/spa/include/spa/pod/filter.h @@ -163,7 +163,7 @@ spa_pod_filter_prop(struct spa_pod_builder *b, } /* start with copying the property */ - spa_pod_builder_prop(b, p1->key, 0); + spa_pod_builder_prop(b, p1->key, p1->flags & p2->flags); spa_pod_builder_push_choice(b, &f, 0, 0); nc = (struct spa_pod_choice*)spa_pod_builder_frame(b, &f); diff --git a/spa/include/spa/pod/iter.h b/spa/include/spa/pod/iter.h index 5d7727da7..b710a816b 100644 --- a/spa/include/spa/pod/iter.h +++ b/spa/include/spa/pod/iter.h @@ -432,7 +432,8 @@ static inline int spa_pod_object_fixate(struct spa_pod_object *pod) { struct spa_pod_prop *res; SPA_POD_OBJECT_FOREACH(pod, res) { - if (res->value.type == SPA_TYPE_Choice) + if (res->value.type == SPA_TYPE_Choice && + !SPA_FLAG_IS_SET(res->flags, SPA_POD_PROP_FLAG_DONT_FIXATE)) ((struct spa_pod_choice*)&res->value)->body.type = SPA_CHOICE_None; } return 0; diff --git a/spa/include/spa/pod/pod.h b/spa/include/spa/pod/pod.h index af72515b0..2d2eaad6a 100644 --- a/spa/include/spa/pod/pod.h +++ b/spa/include/spa/pod/pod.h @@ -207,6 +207,7 @@ struct spa_pod_prop { * (String : key, * String : value)*)) */ #define SPA_POD_PROP_FLAG_MANDATORY (1u<<3) /**< is mandatory */ +#define SPA_POD_PROP_FLAG_DONT_FIXATE (1u<<4) /**< choices need no fixation */ uint32_t flags; /**< flags for property */ struct spa_pod value; /* value follows */