Type changes

Only allow properties inside objects, this makes it easier to
iterate the object, which is needed for efficiently processing
control streams.
Add a choice type to mark variable properties.
SPA_TYPE_Enum -> SPA_TYPE_Id to avoid confusion with choice enum
Make it easier to allocate and initialize properties on the stack
Make more efficient methods to make objects.
This commit is contained in:
Wim Taymans 2018-09-05 16:41:07 +02:00
parent 03fdabd155
commit cc842cbdc8
63 changed files with 2253 additions and 1880 deletions

View file

@ -46,24 +46,24 @@ int main(int argc, char *argv[])
spa_pod_builder_push_object(&b, 0, 0);
uint32_t formats[] = { 1, 2 };
spa_pod_builder_push_prop(&b, 1, SPA_POD_PROP_RANGE_ENUM);
spa_pod_builder_prop(&b, 1, 0);
spa_pod_builder_push_array(&b);
spa_pod_builder_int(&b, 1);
spa_pod_builder_int(&b, formats[0]);
spa_pod_builder_int(&b, formats[1]);
spa_pod_builder_pop(&b);
spa_pod_builder_push_prop(&b, 2, 0);
spa_pod_builder_prop(&b, 2, 0);
spa_pod_builder_int(&b, 42);
spa_pod_builder_pop(&b);
struct spa_rectangle sizes[] = { {0, 0}, {1024, 1024} };
spa_pod_builder_push_prop(&b,
3, SPA_POD_PROP_RANGE_MIN_MAX | SPA_POD_PROP_FLAG_UNSET);
spa_pod_builder_prop(&b, 3, 0);
spa_pod_builder_push_array(&b);
spa_pod_builder_rectangle(&b, 320, 240);
spa_pod_builder_raw(&b, sizes, sizeof(sizes));
spa_pod_builder_pop(&b);
spa_pod_builder_push_prop(&b, 4, SPA_POD_PROP_FLAG_READONLY);
spa_pod_builder_prop(&b, 4, SPA_POD_PROP_FLAG_READONLY);
ref = spa_pod_builder_push_struct(&b);
spa_pod_builder_int(&b, 4);
spa_pod_builder_long(&b, 6000);
@ -78,14 +78,12 @@ int main(int argc, char *argv[])
spa_pod_builder_int(&b, 6);
spa_pod_builder_pop(&b);
spa_pod_builder_pop(&b);
spa_pod_builder_pop(&b);
obj = spa_pod_builder_pop(&b);
spa_debug_pod(0, NULL, obj);
struct spa_pod_prop *p = spa_pod_find_prop(obj, 4);
printf("%d %d\n", p->body.key, p->body.flags);
spa_debug_pod(0, NULL, &p->body.value);
spa_debug_pod(0, NULL, &p->value);
obj = spa_pod_builder_deref(&b, ref);