backend-pipewire: move pixman renderbuffer creation to helper

Extract the pixman renderbuffer configuration from the add_buffer function into
a helper function to simplify the addition of the GL renderer.

Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
This commit is contained in:
Michael Tretter 2023-05-03 16:50:41 +02:00 committed by Daniel Stone
parent 7155d00929
commit b5854ff95d

View file

@ -433,34 +433,41 @@ pipewire_output_stream_param_changed(void *data, uint32_t id,
pw_stream_update_params(output->stream, params, 2);
}
static void
pipewire_output_stream_add_buffer(void *data, struct pw_buffer *buffer)
static struct weston_renderbuffer *
pipewire_output_stream_add_buffer_pixman(struct pipewire_output *output,
struct pw_buffer *buffer)
{
struct pipewire_output *output = data;
struct weston_compositor *ec = output->base.compositor;
const struct pixman_renderer_interface *pixman = ec->renderer->pixman;
struct pipewire_frame_data *frame_data;
const struct weston_renderer *renderer = ec->renderer;
const struct pixel_format_info *format;
unsigned int width;
unsigned int height;
unsigned int stride;
void *ptr;
pipewire_output_debug(output, "add buffer: %p", buffer);
frame_data = xzalloc(sizeof *frame_data);
buffer->user_data = frame_data;
format = output->pixel_format;
width = output->base.width;
height = output->base.height;
stride = width * format->bpp / 8;
ptr = buffer->buffer->datas[0].data;
frame_data->renderbuffer = pixman->create_image_from_ptr(&output->base,
format, width,
height, ptr,
stride);
return renderer->pixman->create_image_from_ptr(&output->base,
format, width, height,
ptr, stride);
}
static void
pipewire_output_stream_add_buffer(void *data, struct pw_buffer *buffer)
{
struct pipewire_output *output = data;
struct pipewire_frame_data *frame_data;
pipewire_output_debug(output, "add buffer: %p", buffer);
frame_data = xzalloc(sizeof *frame_data);
buffer->user_data = frame_data;
frame_data->renderbuffer = pipewire_output_stream_add_buffer_pixman(output, buffer);
}
static void