mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-31 22:25:38 -04:00
work on memory references
Add a memory reference helper struct that we can use to track the memory in buffers and formats. Remove custom property get and set, the default ones will work fine. Custom ones are problematic when we want to serialize properties in formats etc. Deserialized Formats are now tracked in the memory pool and can be freed if needed.
This commit is contained in:
parent
8f9222bf9e
commit
dd1fbef28f
23 changed files with 166 additions and 138 deletions
|
|
@ -633,8 +633,6 @@ alsa_sink_init (const SpaHandleFactory *factory,
|
|||
this->node.handle = handle;
|
||||
this->props[1].props.n_prop_info = PROP_ID_LAST;
|
||||
this->props[1].props.prop_info = prop_info;
|
||||
this->props[1].props.set_prop = spa_props_generic_set_prop;
|
||||
this->props[1].props.get_prop = spa_props_generic_get_prop;
|
||||
reset_alsa_sink_props (&this->props[1]);
|
||||
|
||||
this->info.flags = SPA_PORT_INFO_FLAG_NONE;
|
||||
|
|
|
|||
|
|
@ -795,8 +795,6 @@ spa_audiomixer_init (const SpaHandleFactory *factory,
|
|||
this->node.handle = handle;
|
||||
this->props[1].props.n_prop_info = PROP_ID_LAST;
|
||||
this->props[1].props.prop_info = prop_info;
|
||||
this->props[1].props.set_prop = spa_props_generic_set_prop;
|
||||
this->props[1].props.get_prop = spa_props_generic_get_prop;
|
||||
reset_audiomixer_props (&this->props[1]);
|
||||
|
||||
this->ports[0].valid = true;
|
||||
|
|
|
|||
|
|
@ -583,8 +583,6 @@ audiotestsrc_init (const SpaHandleFactory *factory,
|
|||
this->node.handle = handle;
|
||||
this->props[1].props.n_prop_info = PROP_ID_LAST;
|
||||
this->props[1].props.prop_info = prop_info;
|
||||
this->props[1].props.set_prop = spa_props_generic_set_prop;
|
||||
this->props[1].props.get_prop = spa_props_generic_get_prop;
|
||||
reset_audiotestsrc_props (&this->props[1]);
|
||||
|
||||
this->info.flags = SPA_PORT_INFO_FLAG_CAN_USE_BUFFER |
|
||||
|
|
|
|||
|
|
@ -574,8 +574,6 @@ spa_ffmpeg_dec_init (SpaHandle *handle)
|
|||
this->node.handle = handle;
|
||||
this->props[1].props.n_prop_info = PROP_ID_LAST;
|
||||
this->props[1].props.prop_info = prop_info;
|
||||
this->props[1].props.set_prop = spa_props_generic_set_prop;
|
||||
this->props[1].props.get_prop = spa_props_generic_get_prop;
|
||||
reset_ffmpeg_dec_props (&this->props[1]);
|
||||
|
||||
this->state[INPUT_PORT_ID].info.flags = SPA_PORT_INFO_FLAG_NONE;
|
||||
|
|
|
|||
|
|
@ -574,8 +574,6 @@ spa_ffmpeg_enc_init (SpaHandle *handle)
|
|||
this->node.handle = handle;
|
||||
this->props[1].props.n_prop_info = PROP_ID_LAST;
|
||||
this->props[1].props.prop_info = prop_info;
|
||||
this->props[1].props.set_prop = spa_props_generic_set_prop;
|
||||
this->props[1].props.get_prop = spa_props_generic_get_prop;
|
||||
reset_ffmpeg_enc_props (&this->props[1]);
|
||||
|
||||
this->state[INPUT_PORT_ID].info.flags = SPA_PORT_INFO_FLAG_NONE;
|
||||
|
|
|
|||
|
|
@ -565,7 +565,7 @@ add_buffer (SpaProxy *this, uint32_t port_id, SpaBuffer *buffer)
|
|||
|
||||
if (buffer->mem.id == SPA_ID_INVALID) {
|
||||
fprintf (stderr, "proxy %p: alloc buffer space\n", this);
|
||||
bmem = spa_memory_alloc_with_fd (0, buffer, buffer->size);
|
||||
bmem = spa_memory_alloc_with_fd (SPA_MEMORY_POOL_SHARED, buffer, buffer->size);
|
||||
b = spa_memory_ensure_ptr (bmem);
|
||||
b->mem = bmem->mem;
|
||||
b->offset = 0;
|
||||
|
|
@ -1021,8 +1021,6 @@ proxy_instantiate (const SpaHandleFactory *factory,
|
|||
this->node.handle = handle;
|
||||
this->props[1].props.n_prop_info = PROP_ID_LAST;
|
||||
this->props[1].props.prop_info = prop_info;
|
||||
this->props[1].props.set_prop = spa_props_generic_set_prop;
|
||||
this->props[1].props.get_prop = spa_props_generic_get_prop;
|
||||
reset_proxy_props (&this->props[1]);
|
||||
memcpy (&this->props[0], &this->props[1], sizeof (this->props[1]));
|
||||
|
||||
|
|
|
|||
|
|
@ -343,8 +343,6 @@ spa_v4l2_format_init (V4l2Format *f)
|
|||
{
|
||||
f->fmt.props.n_prop_info = 3;
|
||||
f->fmt.props.prop_info = f->infos;
|
||||
f->fmt.props.set_prop = spa_props_generic_set_prop;
|
||||
f->fmt.props.get_prop = spa_props_generic_get_prop;
|
||||
|
||||
spa_video_raw_fill_prop_info (&f->infos[0],
|
||||
SPA_PROP_ID_VIDEO_FORMAT,
|
||||
|
|
@ -716,8 +714,6 @@ v4l2_source_init (const SpaHandleFactory *factory,
|
|||
this->node.handle = handle;
|
||||
this->props[1].props.n_prop_info = PROP_ID_LAST;
|
||||
this->props[1].props.prop_info = prop_info;
|
||||
this->props[1].props.set_prop = spa_props_generic_set_prop;
|
||||
this->props[1].props.get_prop = spa_props_generic_get_prop;
|
||||
reset_v4l2_source_props (&this->props[1]);
|
||||
|
||||
this->state[0].info.flags = SPA_PORT_INFO_FLAG_NONE;
|
||||
|
|
|
|||
|
|
@ -279,8 +279,6 @@ again:
|
|||
fmt->fmt.media_subtype = info->media_subtype;
|
||||
fmt->fmt.props.prop_info = fmt->infos;
|
||||
fmt->fmt.props.n_prop_info = pi = 0;
|
||||
fmt->fmt.props.set_prop = spa_props_generic_set_prop;
|
||||
fmt->fmt.props.get_prop = spa_props_generic_get_prop;
|
||||
fmt->unset_mask = 0;
|
||||
|
||||
if (info->media_subtype == SPA_MEDIA_SUBTYPE_RAW) {
|
||||
|
|
@ -526,8 +524,10 @@ spa_v4l2_import_buffers (SpaV4l2Source *this, SpaBuffer **buffers, uint32_t n_bu
|
|||
state->reqbuf = reqbuf;
|
||||
|
||||
if (state->alloc_mem)
|
||||
spa_memory_free (&state->alloc_mem->mem);
|
||||
state->alloc_mem = spa_memory_alloc_with_fd (0, NULL, sizeof (V4l2Buffer) * reqbuf.count);
|
||||
spa_memory_unref (&state->alloc_mem->mem);
|
||||
state->alloc_mem = spa_memory_alloc_with_fd (SPA_MEMORY_POOL_SHARED,
|
||||
NULL,
|
||||
sizeof (V4l2Buffer) * reqbuf.count);
|
||||
state->alloc_buffers = spa_memory_ensure_ptr (state->alloc_mem);
|
||||
|
||||
for (i = 0; i < reqbuf.count; i++) {
|
||||
|
|
@ -602,8 +602,10 @@ mmap_init (SpaV4l2Source *this,
|
|||
state->reqbuf = reqbuf;
|
||||
|
||||
if (state->alloc_mem)
|
||||
spa_memory_free (&state->alloc_mem->mem);
|
||||
state->alloc_mem = spa_memory_alloc_with_fd (0, NULL, sizeof (V4l2Buffer) * reqbuf.count);
|
||||
spa_memory_unref (&state->alloc_mem->mem);
|
||||
state->alloc_mem = spa_memory_alloc_with_fd (SPA_MEMORY_POOL_SHARED,
|
||||
NULL,
|
||||
sizeof (V4l2Buffer) * reqbuf.count);
|
||||
state->alloc_buffers = spa_memory_ensure_ptr (state->alloc_mem);
|
||||
|
||||
for (i = 0; i < reqbuf.count; i++) {
|
||||
|
|
@ -643,7 +645,7 @@ mmap_init (SpaV4l2Source *this,
|
|||
b->metas[0].offset = offsetof (V4l2Buffer, header);
|
||||
b->metas[0].size = sizeof (b->header);
|
||||
|
||||
mem = spa_memory_alloc (0);
|
||||
mem = spa_memory_alloc (SPA_MEMORY_POOL_SHARED);
|
||||
mem->flags = SPA_MEMORY_FLAG_READABLE;
|
||||
mem->size = buf.length;
|
||||
b->datas[0].mem = mem->mem;
|
||||
|
|
@ -801,7 +803,7 @@ spa_v4l2_stop (SpaV4l2Source *this)
|
|||
} else {
|
||||
munmap (mem->ptr, mem->size);
|
||||
}
|
||||
spa_memory_free (&mem->mem);
|
||||
spa_memory_unref (&mem->mem);
|
||||
}
|
||||
state->have_buffers = false;
|
||||
|
||||
|
|
|
|||
|
|
@ -693,8 +693,6 @@ volume_instantiate (const SpaHandleFactory *factory,
|
|||
this->node.handle = handle;
|
||||
this->props[1].props.n_prop_info = PROP_ID_LAST;
|
||||
this->props[1].props.prop_info = prop_info;
|
||||
this->props[1].props.set_prop = spa_props_generic_set_prop;
|
||||
this->props[1].props.get_prop = spa_props_generic_get_prop;
|
||||
reset_volume_props (&this->props[1]);
|
||||
|
||||
this->ports[0].info.flags = SPA_PORT_INFO_FLAG_CAN_USE_BUFFER |
|
||||
|
|
|
|||
|
|
@ -573,8 +573,6 @@ xv_sink_init (const SpaHandleFactory *factory,
|
|||
this->node.handle = handle;
|
||||
this->props[1].props.n_prop_info = PROP_ID_LAST;
|
||||
this->props[1].props.prop_info = prop_info;
|
||||
this->props[1].props.set_prop = spa_props_generic_set_prop;
|
||||
this->props[1].props.get_prop = spa_props_generic_get_prop;
|
||||
reset_xv_sink_props (&this->props[1]);
|
||||
|
||||
this->info.flags = SPA_PORT_INFO_FLAG_NONE;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue