mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-12-17 08:56:49 -05:00
Add new pod parser and builder
Add a new pod builder and parser that is less verbose and a little more powerful.
This commit is contained in:
parent
3e49aec61b
commit
24d80e5c00
54 changed files with 3616 additions and 2817 deletions
|
|
@ -277,7 +277,6 @@ static int make_nodes(struct data *data, const char *device)
|
|||
int res;
|
||||
struct spa_props *props;
|
||||
struct spa_pod_builder b = { 0 };
|
||||
struct spa_pod_frame f[2];
|
||||
uint8_t buffer[128];
|
||||
|
||||
if ((res = make_node(data, &data->sink,
|
||||
|
|
@ -288,12 +287,10 @@ static int make_nodes(struct data *data, const char *device)
|
|||
spa_node_set_callbacks(data->sink, &sink_callbacks, data);
|
||||
|
||||
spa_pod_builder_init(&b, buffer, sizeof(buffer));
|
||||
spa_pod_builder_props(&b, &f[0], data->type.props,
|
||||
SPA_POD_PROP(&f[1], data->type.props_device, 0, SPA_POD_TYPE_STRING, 1,
|
||||
device ? device : "hw:0"),
|
||||
SPA_POD_PROP(&f[1], data->type.props_min_latency, 0, SPA_POD_TYPE_INT, 1,
|
||||
64));
|
||||
props = SPA_POD_BUILDER_DEREF(&b, f[0].ref, struct spa_props);
|
||||
props = spa_pod_builder_props(&b,
|
||||
data->type.props,
|
||||
":", data->type.props_device, "s", device ? device : "hw:0",
|
||||
":", data->type.props_min_latency, "i", 64);
|
||||
|
||||
if ((res = spa_node_set_props(data->sink, props)) < 0)
|
||||
printf("got set_props error %d\n", res);
|
||||
|
|
@ -306,10 +303,9 @@ static int make_nodes(struct data *data, const char *device)
|
|||
}
|
||||
|
||||
spa_pod_builder_init(&b, buffer, sizeof(buffer));
|
||||
spa_pod_builder_props(&b, &f[0], data->type.props,
|
||||
SPA_POD_PROP(&f[1], data->type.props_live, 0, SPA_POD_TYPE_BOOL, 1,
|
||||
false));
|
||||
props = SPA_POD_BUILDER_DEREF(&b, f[0].ref, struct spa_props);
|
||||
props = spa_pod_builder_props(&b,
|
||||
data->type.props,
|
||||
":", data->type.props_live, "b", false);
|
||||
|
||||
if ((res = spa_node_set_props(data->source, props)) < 0)
|
||||
printf("got set_props error %d\n", res);
|
||||
|
|
@ -322,22 +318,16 @@ static int negotiate_formats(struct data *data)
|
|||
struct spa_format *format, *filter;
|
||||
uint32_t state = 0;
|
||||
struct spa_pod_builder b = { 0 };
|
||||
struct spa_pod_frame f[2];
|
||||
uint8_t buffer[256];
|
||||
|
||||
spa_pod_builder_init(&b, buffer, sizeof(buffer));
|
||||
spa_pod_builder_format(&b, &f[0], data->type.format,
|
||||
data->type.media_type.audio,
|
||||
data->type.media_subtype.raw,
|
||||
SPA_POD_PROP(&f[1], data->type.format_audio.format, 0, SPA_POD_TYPE_ID, 1,
|
||||
data->type.audio_format.S16),
|
||||
SPA_POD_PROP(&f[1], data->type.format_audio.layout, 0, SPA_POD_TYPE_INT, 1,
|
||||
SPA_AUDIO_LAYOUT_INTERLEAVED),
|
||||
SPA_POD_PROP(&f[1], data->type.format_audio.rate, 0, SPA_POD_TYPE_INT, 1,
|
||||
44100),
|
||||
SPA_POD_PROP(&f[1], data->type.format_audio.channels, 0, SPA_POD_TYPE_INT, 1,
|
||||
2));
|
||||
filter = SPA_POD_BUILDER_DEREF(&b, f[0].ref, struct spa_format);
|
||||
filter = spa_pod_builder_format(&b,
|
||||
data->type.format,
|
||||
data->type.media_type.audio, data->type.media_subtype.raw,
|
||||
":", data->type.format_audio.format, "I", data->type.audio_format.S16,
|
||||
":", data->type.format_audio.layout, "i", SPA_AUDIO_LAYOUT_INTERLEAVED,
|
||||
":", data->type.format_audio.rate, "i", 44100,
|
||||
":", data->type.format_audio.channels, "i", 2);
|
||||
|
||||
if ((res =
|
||||
spa_node_port_enum_formats(data->sink, SPA_DIRECTION_INPUT, 0, &format, filter,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue