From 24203b9306d75c3209969a6fdbb363afa51e15fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Fri, 13 Feb 2026 11:20:51 +0100 Subject: [PATCH] Revert "mdk: Use PipeWire damage region for minimizing redraws" This reverts commit fc337eb0b81740388f6e4496c87dbd4b3a578439. --- mdk/mdk-stream.c | 117 ++++------------------------------------------- 1 file changed, 9 insertions(+), 108 deletions(-) diff --git a/mdk/mdk-stream.c b/mdk/mdk-stream.c index 979f89b834..96b31ea34f 100644 --- a/mdk/mdk-stream.c +++ b/mdk/mdk-stream.c @@ -396,8 +396,7 @@ on_stream_param_changed (void *user_data, MdkStream *stream = MDK_STREAM (user_data); uint8_t params_buffer[1024]; struct spa_pod_builder pod_builder; - const struct spa_pod *params[4]; - const size_t meta_region_size = sizeof (struct spa_meta_region); + const struct spa_pod *params[3]; int result; if (!format || id != SPA_PARAM_Format) @@ -453,15 +452,6 @@ on_stream_param_changed (void *user_data, CURSOR_META_SIZE (384, 384)), 0); - params[3] = spa_pod_builder_add_object ( - &pod_builder, - SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, - SPA_PARAM_META_type, SPA_POD_Id (SPA_META_VideoDamage), - SPA_PARAM_META_size, SPA_POD_CHOICE_RANGE_Int (meta_region_size * 32, - meta_region_size * 1, - meta_region_size * 32), - 0); - pw_stream_update_params (stream->pipewire_stream, params, G_N_ELEMENTS (params)); } @@ -547,60 +537,6 @@ read_cursor_metadata (MdkStream *stream, } } -static cairo_region_t * -read_damage_metadata (MdkStream *stream, - struct spa_buffer *spa_buffer) -{ - struct spa_meta *video_damage; - struct spa_meta_region *meta_region; - g_autofree cairo_rectangle_int_t *cairo_rects = NULL; - int num_rects = 0; - - video_damage = spa_buffer_find_meta (spa_buffer, SPA_META_VideoDamage); - if (!video_damage) - return NULL; - - meta_region = spa_meta_first (video_damage); - if (!meta_region) - return NULL; - - spa_meta_for_each (meta_region, video_damage) - { - if (!spa_meta_region_is_valid (meta_region)) - break; - - num_rects++; - } - - if (!num_rects) - return NULL; - - g_debug ("Stream has damage with %d rectangles", num_rects); - - cairo_rects = g_new (cairo_rectangle_int_t, num_rects); - num_rects = 0; - spa_meta_for_each (meta_region, video_damage) - { - if (!spa_meta_region_is_valid (meta_region)) - break; - - g_debug ("Stream damage rectangle %d: %ux%u +%d+%d", - num_rects, - meta_region->region.size.width, - meta_region->region.size.height, - meta_region->region.position.x, - meta_region->region.position.y); - - cairo_rects[num_rects].x = meta_region->region.position.x; - cairo_rects[num_rects].y = meta_region->region.position.y; - cairo_rects[num_rects].width = meta_region->region.size.width; - cairo_rects[num_rects].height = meta_region->region.size.height; - num_rects++; - } - - return cairo_region_create_rectangles (cairo_rects, num_rects); -} - static void on_stream_process (void *user_data) { @@ -609,7 +545,6 @@ on_stream_process (void *user_data) struct pw_buffer *buffer = NULL; struct spa_buffer *spa_buffer; struct spa_meta_header *spa_header; - cairo_region_t *damage_region = NULL; gboolean hold_buffer = FALSE; gboolean has_buffer; uint32_t drm_format; @@ -634,13 +569,11 @@ on_stream_process (void *user_data) if (!has_buffer) goto read_metadata; - damage_region = read_damage_metadata (stream, spa_buffer); - if (spa_buffer->datas[0].type == SPA_DATA_DmaBuf) { g_autoptr (GdkDmabufTextureBuilder) builder = NULL; - g_autoptr (GError) error = NULL; unsigned int i; + g_autoptr (GError) error = NULL; if (!spa_pixel_format_to_drm_format (stream->format.info.raw.format, &drm_format)) @@ -671,13 +604,6 @@ on_stream_process (void *user_data) gdk_dmabuf_texture_builder_set_stride (builder, i, spa_buffer->datas[i].chunk->stride); } - if (GDK_IS_TEXTURE (stream->paintable)) - { - gdk_dmabuf_texture_builder_set_update_region (builder, damage_region); - gdk_dmabuf_texture_builder_set_update_texture (builder, - GDK_TEXTURE (stream->paintable)); - } - g_clear_object (&stream->paintable); stream->paintable = GDK_PAINTABLE (gdk_dmabuf_texture_builder_build (builder, @@ -703,10 +629,9 @@ on_stream_process (void *user_data) } else { - g_autoptr (GdkMemoryTextureBuilder) builder = NULL; + g_autoptr (GdkTexture) texture = NULL; g_autoptr (GBytes) bytes = NULL; GdkMemoryFormat gdk_format; - unsigned int i; uint8_t *map; void *data; uint32_t bpp; @@ -721,29 +646,6 @@ on_stream_process (void *user_data) goto read_metadata; } - builder = gdk_memory_texture_builder_new (); - gdk_memory_texture_builder_set_width (builder, - stream->format.info.raw.size.width); - gdk_memory_texture_builder_set_height (builder, - stream->format.info.raw.size.height); - gdk_memory_texture_builder_set_format (builder, - gdk_format); - - for (i = 0; i < spa_buffer->n_datas; i++) - { - gdk_memory_texture_builder_set_offset (builder, i, - spa_buffer->datas[i].chunk->offset); - gdk_memory_texture_builder_set_stride_for_plane (builder, i, - spa_buffer->datas[i].chunk->stride); - } - - if (GDK_IS_TEXTURE (stream->paintable)) - { - gdk_memory_texture_builder_set_update_region (builder, damage_region); - gdk_memory_texture_builder_set_update_texture (builder, - GDK_TEXTURE (stream->paintable)); - } - size = spa_buffer->datas[0].maxsize + spa_buffer->datas[0].mapoffset; map = mmap (NULL, size, PROT_READ, MAP_PRIVATE, spa_buffer->datas[0].fd, 0); @@ -756,11 +658,12 @@ on_stream_process (void *user_data) bytes = g_bytes_new (data, size); - gdk_memory_texture_builder_set_bytes (builder, bytes); - - g_clear_object (&stream->paintable); - stream->paintable = - GDK_PAINTABLE (gdk_memory_texture_builder_build (builder)); + texture = gdk_memory_texture_new (stream->format.info.raw.size.width, + stream->format.info.raw.size.height, + gdk_format, + bytes, + spa_buffer->datas[0].chunk->stride); + g_set_object (&stream->paintable, GDK_PAINTABLE (texture)); munmap (map, size); } @@ -789,8 +692,6 @@ read_metadata: if (!pw_stream_is_driving (stream->pipewire_stream)) gdk_paintable_invalidate_contents (GDK_PAINTABLE (stream)); - - g_clear_pointer (&damage_region, cairo_region_destroy); } static void -- 2.51.0