permit clients to export dmabuf to pipewire
Created by: barrysong6
right now, I find weston, gnome mutter are copying framebuffers to
static void
pipewire_output_handle_frame(struct pipewire_output *output, int fd,
int stride, struct drm_fb *drm_buffer)
{
struct pw_type *t = output->pipewire->t;
struct pw_buffer *buffer;
struct spa_buffer *spa_buffer;
struct spa_meta_header *h;
void *ptr;
if (pw_stream_get_state(output->stream, NULL) !=
PW_STREAM_STATE_STREAMING)
goto out;
buffer = pw_stream_dequeue_buffer(output->stream);
..
spa_buffer = buffer->buffer;
if ((h = spa_buffer_find_meta(spa_buffer, t->meta.Header))) {
...
}
ptr = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);
memcpy(spa_buffer->datas[0].data, ptr, size);
munmap(ptr, size);
spa_buffer->datas[0].chunk->offset = 0;
spa_buffer->datas[0].chunk->stride = stride;
spa_buffer->datas[0].chunk->size = spa_buffer->datas[0].maxsize;
pw_stream_queue_buffer(output->stream, buffer);
}
the memcpy to put the buffer into the queue of pw_stream_queue_buffer() leads to 100% CPU loading. I am wondering whether it is possible for clients to queue the dmabuf fd into pw_stream.