mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-06 13:30:01 -05:00
buffer: make data and meta types dynamic
Use dynamic types for the data and meta types. Move the meta into a separate header. Remove port state, we can keep track of that ourselves. Add size to MetaDataEnable params
This commit is contained in:
parent
ed273ec465
commit
b51d3e4862
36 changed files with 543 additions and 553 deletions
|
|
@ -35,6 +35,8 @@
|
|||
typedef struct {
|
||||
uint32_t format;
|
||||
uint32_t props;
|
||||
SpaTypeMeta meta;
|
||||
SpaTypeData data;
|
||||
SpaTypeMediaType media_type;
|
||||
SpaTypeMediaSubtype media_subtype;
|
||||
SpaTypeFormatVideo format_video;
|
||||
|
|
@ -46,6 +48,8 @@ init_type (Type *type, SpaTypeMap *map)
|
|||
{
|
||||
type->format = spa_type_map_get_id (map, SPA_TYPE__Format);
|
||||
type->props = spa_type_map_get_id (map, SPA_TYPE__Props);
|
||||
spa_type_meta_map (map, &type->meta);
|
||||
spa_type_data_map (map, &type->data);
|
||||
spa_type_media_type_map (map, &type->media_type);
|
||||
spa_type_media_subtype_map (map, &type->media_subtype);
|
||||
spa_type_format_video_map (map, &type->format_video);
|
||||
|
|
@ -112,12 +116,12 @@ on_stream_new_buffer (PinosListener *listener,
|
|||
|
||||
buf = pinos_stream_peek_buffer (data->stream, id);
|
||||
|
||||
if (buf->datas[0].type == SPA_DATA_TYPE_MEMFD) {
|
||||
if (buf->datas[0].type == data->type.data.MemFd) {
|
||||
map = mmap (NULL, buf->datas[0].maxsize + buf->datas[0].mapoffset, PROT_READ,
|
||||
MAP_PRIVATE, buf->datas[0].fd, 0);
|
||||
sdata = SPA_MEMBER (map, buf->datas[0].mapoffset, uint8_t);
|
||||
}
|
||||
else if (buf->datas[0].type == SPA_DATA_TYPE_MEMPTR) {
|
||||
else if (buf->datas[0].type == data->type.data.MemPtr) {
|
||||
map = NULL;
|
||||
sdata = buf->datas[0].data;
|
||||
} else
|
||||
|
|
@ -275,7 +279,8 @@ on_stream_format_changed (PinosListener *listener,
|
|||
params[0] = SPA_POD_BUILDER_DEREF (&b, f[0].ref, SpaAllocParam);
|
||||
|
||||
spa_pod_builder_object (&b, &f[0], 0, ctx->type.alloc_param_meta_enable.MetaEnable,
|
||||
PROP (&f[1], ctx->type.alloc_param_meta_enable.type, SPA_POD_TYPE_INT, SPA_META_TYPE_HEADER));
|
||||
PROP (&f[1], ctx->type.alloc_param_meta_enable.type, SPA_POD_TYPE_ID, ctx->type.meta.Header),
|
||||
PROP (&f[1], ctx->type.alloc_param_meta_enable.size, SPA_POD_TYPE_INT, sizeof (SpaMetaHeader)));
|
||||
params[1] = SPA_POD_BUILDER_DEREF (&b, f[0].ref, SpaAllocParam);
|
||||
|
||||
pinos_stream_finish_format (stream, SPA_RESULT_OK, params, 2);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue