mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-01 22:58:50 -04:00
pod-builder: make more generic builder
Make a vararg based builder that produces much smaller code. Catch demarshal errors. Simplify array handling
This commit is contained in:
parent
f92b68c3c3
commit
78a3cd61b8
9 changed files with 862 additions and 637 deletions
|
|
@ -102,7 +102,7 @@ static const struct _test_format {
|
|||
SPA_POD_TYPE_PROP } ,
|
||||
{ SPA_PROP_ID_VIDEO_SIZE, SPA_POD_PROP_RANGE_MIN_MAX | SPA_POD_PROP_FLAG_UNSET,
|
||||
{ sizeof (SpaRectangle), SPA_POD_TYPE_RECTANGLE } }, },
|
||||
{ { 320, 240 },
|
||||
{ { 320, 243 },
|
||||
{ 1, 1 },
|
||||
{ INT32_MAX, INT32_MAX } },
|
||||
|
||||
|
|
@ -125,8 +125,7 @@ main (int argc, char *argv[])
|
|||
SpaFormat *fmt;
|
||||
off_t o;
|
||||
|
||||
b.data = buffer;
|
||||
b.size = 1024;
|
||||
spa_pod_builder_init (&b, buffer, sizeof (buffer));
|
||||
|
||||
fmt = SPA_MEMBER (buffer, spa_pod_builder_push_format (&b, &frame[0],
|
||||
SPA_MEDIA_TYPE_VIDEO,
|
||||
|
|
@ -159,9 +158,7 @@ main (int argc, char *argv[])
|
|||
|
||||
spa_debug_pod (&fmt->pod);
|
||||
|
||||
memset (&b, 0, sizeof(b));
|
||||
b.data = buffer;
|
||||
b.size = 1024;
|
||||
spa_pod_builder_init (&b, buffer, sizeof (buffer));
|
||||
|
||||
o = spa_pod_builder_format (&b, SPA_MEDIA_TYPE_VIDEO, SPA_MEDIA_SUBTYPE_RAW,
|
||||
SPA_PROP_ID_VIDEO_FORMAT, SPA_POD_TYPE_INT,
|
||||
|
|
@ -171,7 +168,7 @@ main (int argc, char *argv[])
|
|||
SPA_VIDEO_FORMAT_I420,
|
||||
SPA_VIDEO_FORMAT_YUY2,
|
||||
SPA_PROP_ID_VIDEO_SIZE , SPA_POD_TYPE_RECTANGLE,
|
||||
320, 240,
|
||||
320, 241,
|
||||
SPA_POD_PROP_FLAG_UNSET |
|
||||
SPA_POD_PROP_RANGE_MIN_MAX,
|
||||
1, 1,
|
||||
|
|
@ -187,6 +184,44 @@ main (int argc, char *argv[])
|
|||
spa_debug_pod (&fmt->pod);
|
||||
spa_debug_format (fmt);
|
||||
|
||||
spa_pod_builder_init (&b, buffer, sizeof (buffer));
|
||||
|
||||
spa_pod_builder_add (&b,
|
||||
SPA_POD_TYPE_OBJECT, &frame[0], 0, 0,
|
||||
SPA_POD_TYPE_INT, SPA_MEDIA_TYPE_VIDEO,
|
||||
SPA_POD_TYPE_INT, SPA_MEDIA_SUBTYPE_RAW,
|
||||
SPA_POD_TYPE_PROP, &frame[1],
|
||||
SPA_PROP_ID_VIDEO_FORMAT, SPA_POD_PROP_FLAG_UNSET |
|
||||
SPA_POD_PROP_RANGE_ENUM,
|
||||
SPA_POD_TYPE_INT, 3,
|
||||
SPA_VIDEO_FORMAT_I420,
|
||||
SPA_VIDEO_FORMAT_I420,
|
||||
SPA_VIDEO_FORMAT_YUY2,
|
||||
-SPA_POD_TYPE_PROP, &frame[1],
|
||||
SPA_POD_TYPE_PROP, &frame[1],
|
||||
SPA_PROP_ID_VIDEO_SIZE, SPA_POD_PROP_FLAG_UNSET |
|
||||
SPA_POD_PROP_RANGE_MIN_MAX,
|
||||
SPA_POD_TYPE_RECTANGLE, 3,
|
||||
320, 242,
|
||||
1, 1,
|
||||
INT32_MAX, INT32_MAX,
|
||||
-SPA_POD_TYPE_PROP, &frame[1],
|
||||
SPA_POD_TYPE_PROP, &frame[1],
|
||||
SPA_PROP_ID_VIDEO_FRAMERATE, SPA_POD_PROP_FLAG_UNSET |
|
||||
SPA_POD_PROP_RANGE_MIN_MAX,
|
||||
SPA_POD_TYPE_FRACTION, 3,
|
||||
25, 1,
|
||||
0, 1,
|
||||
INT32_MAX, 1,
|
||||
-SPA_POD_TYPE_PROP, &frame[1],
|
||||
-SPA_POD_TYPE_OBJECT, &frame[0],
|
||||
0);
|
||||
spa_pod_builder_pop (&b, &frame[0]);
|
||||
|
||||
fmt = SPA_MEMBER (buffer, o, SpaFormat);
|
||||
spa_debug_pod (&fmt->pod);
|
||||
spa_debug_format (fmt);
|
||||
|
||||
spa_debug_pod (&test_format.fmt.pod);
|
||||
spa_debug_format (&test_format.fmt);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue