/* Spa * Copyright (C) 2017 Wim Taymans * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include int main (int argc, char *argv[]) { SpaPODBuilder b = { NULL, }; SpaPODFrame frame[4]; uint8_t buffer[1024]; SpaPOD *obj; SpaPODIter i; b.data = buffer; b.size = 1024; spa_pod_builder_push_object (&b, &frame[0], 0, 0); uint32_t formats[] = { 1, 2 }; spa_pod_builder_push_prop (&b, &frame[1], 1, SPA_POD_PROP_RANGE_ENUM | SPA_POD_PROP_FLAG_READWRITE); 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, &frame[1]); spa_pod_builder_push_prop (&b, &frame[1], 2, SPA_POD_PROP_RANGE_NONE | SPA_POD_PROP_FLAG_READWRITE); spa_pod_builder_int (&b, 42); spa_pod_builder_pop (&b, &frame[1]); SpaRectangle sizes[] = { { 0, 0 }, { 1024, 1024} }; spa_pod_builder_push_prop (&b, &frame[1], 3, SPA_POD_PROP_RANGE_MIN_MAX | SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE); spa_pod_builder_rectangle (&b, 320, 240); spa_pod_builder_raw (&b, sizes, sizeof (sizes)); spa_pod_builder_pop (&b, &frame[1]); spa_pod_builder_push_prop (&b, &frame[1], 4, SPA_POD_PROP_RANGE_NONE | SPA_POD_PROP_FLAG_READABLE); spa_pod_builder_push_struct (&b, &frame[2]); spa_pod_builder_int (&b, 4); spa_pod_builder_long (&b, 6000); spa_pod_builder_float (&b, 4.0); spa_pod_builder_double (&b, 3.14); spa_pod_builder_string (&b, "test123"); spa_pod_builder_rectangle (&b, 320, 240); spa_pod_builder_fraction (&b, 25, 1); spa_pod_builder_push_array (&b, &frame[3]); spa_pod_builder_int (&b, 4); spa_pod_builder_int (&b, 5); spa_pod_builder_int (&b, 6); spa_pod_builder_pop (&b, &frame[3]); spa_pod_builder_pop (&b, &frame[2]); spa_pod_builder_pop (&b, &frame[1]); spa_pod_builder_pop (&b, &frame[0]); obj = SPA_POD_BUILDER_DEREF (&b, frame[0].ref, SpaPOD); spa_debug_pod (obj); SpaPODProp *p = spa_pod_object_find_prop ((SpaPODObject *)obj, 4); printf ("%d %d\n", p->body.key, p->body.flags); spa_debug_pod (&p->body.value); obj = SPA_POD_BUILDER_DEREF (&b, frame[2].ref, SpaPOD); int32_t vi, *pi; int64_t vl; float vf; double vd; char *vs; SpaRectangle vr; SpaFraction vfr; SpaPODArray *va; spa_pod_iter_pod (&i, obj); spa_pod_iter_get (&i, SPA_POD_TYPE_INT, &vi, SPA_POD_TYPE_LONG, &vl, SPA_POD_TYPE_FLOAT, &vf, SPA_POD_TYPE_DOUBLE, &vd, SPA_POD_TYPE_STRING, &vs, SPA_POD_TYPE_RECTANGLE, &vr, SPA_POD_TYPE_FRACTION, &vfr, SPA_POD_TYPE_ARRAY, &va, 0); printf ("%u %lu %f %g %s %ux%u %u/%u\n", vi, vl, vf, vd, vs, vr.width, vr.height, vfr.num, vfr.denom); SPA_POD_ARRAY_BODY_FOREACH (&va->body, SPA_POD_BODY_SIZE (va), pi) { printf ("%d\n", *pi); } return 0; }