From mboxrd@z Thu Jan 1 00:00:00 1970 Delivery-date: Wed, 27 May 2026 23:55:28 +0200 Received: from metis.whiteo.stw.pengutronix.de ([2a0a:edc0:2:b01:1d::104]) by lore.white.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wSMDo-004WUD-2K for lore@lore.pengutronix.de; Wed, 27 May 2026 23:55:28 +0200 Received: from [127.0.0.1] (helo=metis.whiteo.stw.pengutronix.de) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1wSMDo-0005yd-2J; Wed, 27 May 2026 23:55:28 +0200 Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1wSMDO-0004iU-R2; Wed, 27 May 2026 23:55:02 +0200 Received: from dude05.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::54]) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wSMDO-002AeM-0g; Wed, 27 May 2026 23:55:02 +0200 Received: from mol by dude05.red.stw.pengutronix.de with local (Exim 4.98.2) (envelope-from ) id 1wSMDO-00000008OpM-31Me; Wed, 27 May 2026 23:55:02 +0200 From: Michael Olbrich To: ptxdist@pengutronix.de Date: Wed, 27 May 2026 23:55:02 +0200 Message-ID: <20260527215502.2002035-1-m.olbrich@pengutronix.de> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260521144450.1295826-4-p.zabel@pengutronix.de> References: <20260521144450.1295826-4-p.zabel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: Re: [ptxdist] [APPLIED] weston: build with neatvnc/aml 1.0.0 X-BeenThere: ptxdist@pengutronix.de X-Mailman-Version: 2.1.29 Precedence: list List-Id: PTXdist Development Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: ptxdist@pengutronix.de Cc: Philipp Zabel Sender: "ptxdist" X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: ptxdist-bounces@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false Thanks, applied as 1e780e4148783f85e8f470627081f243aa841a87. Michael [sent from post-receive hook] On Wed, 27 May 2026 23:55:02 +0200, Philipp Zabel wrote: > Update to the stable Neat VNC and aml APIs to allow building against > neatvnc 1.0.0 and aml 1.0.0. > > Signed-off-by: Philipp Zabel > Message-Id: <20260521144450.1295826-4-p.zabel@pengutronix.de> > Signed-off-by: Michael Olbrich > > diff --git a/patches/weston-15.0.1/0001-backend-vnc-gitlab-ci-Update-to-Neat-VNC-1.0.0-aml-1.patch b/patches/weston-15.0.1/0001-backend-vnc-gitlab-ci-Update-to-Neat-VNC-1.0.0-aml-1.patch > new file mode 100644 > index 000000000000..d8b51d7f27dc > --- /dev/null > +++ b/patches/weston-15.0.1/0001-backend-vnc-gitlab-ci-Update-to-Neat-VNC-1.0.0-aml-1.patch > @@ -0,0 +1,340 @@ > +From: Philipp Zabel > +Date: Mon, 31 Mar 2025 15:52:25 +0200 > +Subject: [PATCH] backend-vnc, gitlab-ci: Update to Neat VNC 1.0.0, aml 1.0.0 > + > +Update to Neat VNC 1.0.0 and aml 1.0.0, which promise stable API. > + > +Adapt to API changes: > + - authentication API now wraps username/password into > + credentials and can be asynchronous > + - userdata get/setters are now type specific > + - fbs have been renamed to frames, storing dimensions and damage > + - nvnc_open() is split into nvnc_new() and nvnc_listen_tcp() > + - nvnc_close() is now nvnc_del() > + > +Upstream-Status: Backport [https://gitlab.freedesktop.org/wayland/weston/-/commit/8a1c91e771312d1e0d0cd92495ef717402784dae] > + > +Signed-off-by: Philipp Zabel > +--- > + libweston/backend-vnc/meson.build | 4 +- > + libweston/backend-vnc/vnc.c | 110 ++++++++++++++++++++------------------ > + 2 files changed, 61 insertions(+), 53 deletions(-) > + > +diff --git a/libweston/backend-vnc/meson.build b/libweston/backend-vnc/meson.build > +index cf67c51cbf77..7dc278db3818 100644 > +--- a/libweston/backend-vnc/meson.build > ++++ b/libweston/backend-vnc/meson.build > +@@ -3,12 +3,12 @@ if not get_option('backend-vnc') > + endif > + > + config_h.set('BUILD_VNC_COMPOSITOR', '1') > +-dep_neatvnc = dependency('neatvnc', version: ['>= 0.7.0', '< 0.10.0'], required: false, fallback: ['neatvnc', 'neatvnc_dep']) > ++dep_neatvnc = dependency('neatvnc', version: ['>= 1.0.0', '< 2.0.0'], required: false, fallback: ['neatvnc', 'neatvnc_dep']) > + if not dep_neatvnc.found() > + error('VNC backend requires neatvnc which was not found. Or, you can use \'-Dbackend-vnc=false\'.') > + endif > + > +-dep_aml = dependency('aml', version: ['>= 0.3.0', '< 0.4.0'], required: false, fallback: ['aml', 'aml_dep']) > ++dep_aml = dependency('aml1', version: ['>= 1.0.0', '< 2.0.0'], required: false, fallback: ['aml', 'aml_dep']) > + if not dep_aml.found() > + error('VNC backend requires libaml which was not found. Or, you can use \'-Dbackend-vnc=false\'.') > + endif > +diff --git a/libweston/backend-vnc/vnc.c b/libweston/backend-vnc/vnc.c > +index 554143059e53..6c433d3de8ab 100644 > +--- a/libweston/backend-vnc/vnc.c > ++++ b/libweston/backend-vnc/vnc.c > +@@ -42,7 +42,6 @@ > + #include > + #include > + #include > +-#define AML_UNSTABLE_API 1 > + #include > + #include > + #include > +@@ -89,7 +88,7 @@ struct vnc_output { > + struct wl_event_source *finish_frame_timer; > + struct nvnc_display *display; > + > +- struct nvnc_fb_pool *fb_pool; > ++ struct nvnc_frame_pool *frame_pool; > + > + struct wl_list peers; > + > +@@ -111,7 +110,7 @@ struct vnc_head { > + > + struct vnc_buffer { > + weston_renderbuffer_t rb; > +- struct nvnc_fb *fb; > ++ struct nvnc_frame *frame; > + struct vnc_output *output; > + }; > + > +@@ -296,7 +295,7 @@ static void > + vnc_handle_key_event(struct nvnc_client *client, uint32_t keysym, > + bool is_pressed) > + { > +- struct vnc_peer *peer = nvnc_get_userdata(client); > ++ struct vnc_peer *peer = nvnc_client_get_userdata(client); > + uint32_t key = 0; > + bool needs_shift = false; > + enum weston_key_state_update state_update; > +@@ -356,7 +355,7 @@ static void > + vnc_handle_key_code_event(struct nvnc_client *client, uint32_t key, > + bool is_pressed) > + { > +- struct vnc_peer *peer = nvnc_get_userdata(client); > ++ struct vnc_peer *peer = nvnc_client_get_userdata(client); > + enum wl_keyboard_key_state state; > + struct timespec time; > + > +@@ -403,7 +402,7 @@ static bool > + vnc_handle_desktop_layout_event(struct nvnc_client *client, > + const struct nvnc_desktop_layout *layout) > + { > +- struct vnc_peer *peer = nvnc_get_userdata(client); > ++ struct vnc_peer *peer = nvnc_client_get_userdata(client); > + struct vnc_output *output = peer->backend->output; > + struct weston_mode new_mode; > + uint16_t width = nvnc_desktop_layout_get_width(layout); > +@@ -427,7 +426,7 @@ static void > + vnc_pointer_event(struct nvnc_client *client, uint16_t x, uint16_t y, > + enum nvnc_button_mask button_mask) > + { > +- struct vnc_peer *peer = nvnc_get_userdata(client); > ++ struct vnc_peer *peer = nvnc_client_get_userdata(client); > + struct vnc_output *output = peer->backend->output; > + struct timespec time; > + enum nvnc_button_mask changed_button_mask; > +@@ -482,23 +481,29 @@ vnc_pointer_event(struct nvnc_client *client, uint16_t x, uint16_t y, > + notify_pointer_frame(peer->seat); > + } > + > +-static bool > +-vnc_handle_auth(const char *username, const char *password, void *userdata) > ++static void > ++vnc_handle_auth(struct nvnc_auth_creds *creds, void *userdata) > + { > ++ const char *username = nvnc_auth_creds_get_username(creds); > ++ const char *password = nvnc_auth_creds_get_password(creds); > + struct passwd *pw = getpwnam(username); > + > + if (!pw || pw->pw_uid != getuid()) { > + weston_log("VNC: wrong user '%s'\n", username); > +- return false; > ++ nvnc_auth_creds_reject(creds, "Invalid username"); > ++ return; > + } > + > +- return weston_authenticate_user(username, password); > ++ if (weston_authenticate_user(username, password)) > ++ nvnc_auth_creds_accept(creds); > ++ else > ++ nvnc_auth_creds_reject(creds, "Invalid password"); > + } > + > + static void > +-vnc_client_cleanup(struct nvnc_client *client) > ++vnc_client_cleanup(void *userdata) > + { > +- struct vnc_peer *peer = nvnc_get_userdata(client); > ++ struct vnc_peer *peer = userdata; > + struct vnc_output *output = peer->backend->output; > + > + wl_list_remove(&peer->link); > +@@ -548,7 +553,7 @@ vnc_output_update_cursor(struct vnc_output *output) > + pixman_region32_t damage; > + struct weston_buffer *buffer; > + struct weston_surface *cursor_surface; > +- struct nvnc_fb *fb; > ++ struct nvnc_frame *frame; > + uint8_t *src, *dst; > + int i; > + > +@@ -565,12 +570,11 @@ vnc_output_update_cursor(struct vnc_output *output) > + cursor_surface = output->cursor_surface; > + buffer = cursor_surface->buffer_ref.buffer; > + > +- fb = nvnc_fb_new(buffer->width, buffer->height, DRM_FORMAT_ARGB8888, > +- buffer->width); > +- assert(fb); > ++ frame = nvnc_frame_new(buffer->width, buffer->height, DRM_FORMAT_ARGB8888, buffer->width); > ++ assert(frame); > + > + src = wl_shm_buffer_get_data(buffer->shm_buffer); > +- dst = nvnc_fb_get_addr(fb); > ++ dst = nvnc_frame_get_addr(frame); > + > + wl_shm_buffer_begin_access(buffer->shm_buffer); > + for (i = 0; i < buffer->height; i++) > +@@ -578,9 +582,8 @@ vnc_output_update_cursor(struct vnc_output *output) > + 4 * buffer->width); > + wl_shm_buffer_end_access(buffer->shm_buffer); > + > +- nvnc_set_cursor(backend->server, fb, buffer->width, buffer->height, > +- pointer->hotspot.c.x, pointer->hotspot.c.y, true); > +- nvnc_fb_unref(fb); > ++ nvnc_set_cursor(backend->server, frame, pointer->hotspot.c.x, pointer->hotspot.c.y, true); > ++ nvnc_frame_unref(frame); > + } > + > + static void > +@@ -682,16 +685,16 @@ vnc_rb_discarded_cb(weston_renderbuffer_t rb, void *data) > + { > + struct vnc_buffer *buffer = (struct vnc_buffer *) data; > + > +- assert(nvnc_get_userdata(buffer->fb) == buffer); > ++ assert(nvnc_frame_get_userdata(buffer->frame) == buffer); > + > +- nvnc_set_userdata(buffer->fb, NULL, NULL); > ++ nvnc_frame_set_userdata(buffer->frame, NULL, NULL); > + vnc_buffer_destroy(buffer); > + > + return true; > + } > + > + static struct vnc_buffer * > +-vnc_buffer_create(struct nvnc_fb* fb, struct vnc_output *output) > ++vnc_buffer_create(struct nvnc_frame* frame, struct vnc_output *output) > + { > + const struct pixel_format_info *pfmt = > + pixel_format_get_info(DRM_FORMAT_XRGB8888); > +@@ -699,10 +702,10 @@ vnc_buffer_create(struct nvnc_fb* fb, struct vnc_output *output) > + struct vnc_buffer *buffer = xmalloc(sizeof *buffer); > + > + buffer->rb = rdr->create_renderbuffer(&output->base, pfmt, > +- nvnc_fb_get_addr(fb), > ++ nvnc_frame_get_addr(frame), > + output->base.current_mode->width * 4, > + vnc_rb_discarded_cb, buffer); > +- buffer->fb = fb; > ++ buffer->frame = frame; > + buffer->output = output; > + > + return buffer; > +@@ -727,16 +730,16 @@ vnc_update_buffer(struct nvnc_display *display, struct pixman_region32 *damage) > + struct vnc_buffer *buffer; > + pixman_region32_t local_damage; > + pixman_region16_t nvnc_damage; > +- struct nvnc_fb *fb; > ++ struct nvnc_frame *frame; > + > +- fb = nvnc_fb_pool_acquire(output->fb_pool); > +- assert(fb); > ++ frame = nvnc_frame_pool_acquire(output->frame_pool); > ++ assert(frame); > + > +- buffer = nvnc_get_userdata(fb); > ++ buffer = nvnc_frame_get_userdata(frame); > + if (!buffer) { > +- buffer = vnc_buffer_create(fb, output); > +- nvnc_set_userdata(fb, buffer, > +- (nvnc_cleanup_fn) vnc_buffer_destroy); > ++ buffer = vnc_buffer_create(frame, output); > ++ nvnc_frame_set_userdata(frame, buffer, > ++ (nvnc_cleanup_fn) vnc_buffer_destroy); > + } > + > + vnc_log_damage(backend, damage); > +@@ -751,8 +754,9 @@ vnc_update_buffer(struct nvnc_display *display, struct pixman_region32 *damage) > + pixman_region_init(&nvnc_damage); > + vnc_region32_to_region16(&nvnc_damage, &local_damage); > + > +- nvnc_display_feed_buffer(output->display, fb, &nvnc_damage); > +- nvnc_fb_unref(fb); > ++ nvnc_frame_set_damage(frame, &nvnc_damage); > ++ nvnc_display_feed_frame(output->display, frame); > ++ nvnc_frame_unref(frame); > + pixman_region32_fini(&local_damage); > + pixman_region_fini(&nvnc_damage); > + } > +@@ -782,8 +786,7 @@ vnc_new_client(struct nvnc_client *client) > + > + wl_list_insert(&output->peers, &peer->link); > + > +- nvnc_set_userdata(client, peer, NULL); > +- nvnc_set_client_cleanup_fn(client, vnc_client_cleanup); > ++ nvnc_client_set_userdata(client, peer, vnc_client_cleanup); > + > + /* > + * Make up for repaints that were skipped when no clients were > +@@ -869,10 +872,10 @@ vnc_output_enable(struct weston_output *base) > + finish_frame_handler, > + output); > + > +- output->fb_pool = nvnc_fb_pool_new(output->base.current_mode->width, > +- output->base.current_mode->height, > +- backend->formats[0]->format, > +- output->base.current_mode->width); > ++ output->frame_pool = nvnc_frame_pool_new(output->base.current_mode->width, > ++ output->base.current_mode->height, > ++ backend->formats[0]->format, > ++ output->base.current_mode->width); > + > + output->display = nvnc_display_new(0, 0); > + > +@@ -897,7 +900,7 @@ vnc_output_disable(struct weston_output *base) > + > + nvnc_remove_display(backend->server, output->display); > + nvnc_display_unref(output->display); > +- nvnc_fb_pool_unref(output->fb_pool); > ++ nvnc_frame_pool_unref(output->frame_pool); > + > + switch (renderer->type) { > + case WESTON_RENDERER_PIXMAN: > +@@ -966,7 +969,7 @@ vnc_destroy(struct weston_backend *base) > + struct weston_compositor *ec = backend->compositor; > + struct weston_head *head, *next; > + > +- nvnc_close(backend->server); > ++ nvnc_del(backend->server); > + > + wl_list_remove(&backend->base.link); > + > +@@ -1122,15 +1125,15 @@ vnc_switch_mode(struct weston_output *base, struct weston_mode *target_mode) > + /* vnc_buffers are stored as user data pointers into the renderbuffers > + * for the discarded callback. weston_renderer_resize_output(), which > + * triggers the renderbuffer's discarded callbacks, must be called > +- * before nvnc_fb_pool_resize(), which destroys all the nvnc_fbs and > +- * their associated vnc_buffers, so that the vnc_buffers are valid at > +- * callback. */ > ++ * before nvnc_frame_pool_resize(), which destroys all the nvnc_frames > ++ * and their associated vnc_buffers, so that the vnc_buffers are valid > ++ * at callback. */ > + if (!weston_renderer_resize_output(base, &fb_size, NULL)) > + return -1; > + > +- nvnc_fb_pool_resize(output->fb_pool, target_mode->width, > +- target_mode->height, DRM_FORMAT_XRGB8888, > +- target_mode->width); > ++ nvnc_frame_pool_resize(output->frame_pool, target_mode->width, > ++ target_mode->height, DRM_FORMAT_XRGB8888, > ++ target_mode->width); > + > + return 0; > + } > +@@ -1278,10 +1281,15 @@ vnc_backend_create(struct weston_compositor *compositor, > + vnc_aml_dispatch, > + backend->aml); > + > +- backend->server = nvnc_open(config->bind_address, config->port); > ++ backend->server = nvnc_new(); > + if (!backend->server) > + goto err_aml; > + > ++ ret = nvnc_listen_tcp(backend->server, config->bind_address, config->port, > ++ NVNC_STREAM_NORMAL); > ++ if (ret) > ++ goto err_nvnc; > ++ > + nvnc_set_new_client_fn(backend->server, vnc_new_client); > + nvnc_set_pointer_fn(backend->server, vnc_pointer_event); > + nvnc_set_key_fn(backend->server, vnc_handle_key_event); > +@@ -1352,7 +1360,7 @@ vnc_backend_create(struct weston_compositor *compositor, > + return backend; > + > + err_nvnc: > +- nvnc_close(backend->server); > ++ nvnc_del(backend->server); > + err_aml: > + aml_unref(backend->aml); > + err_output: > diff --git a/patches/weston-15.0.1/series b/patches/weston-15.0.1/series > new file mode 100644 > index 000000000000..39348c953099 > --- /dev/null > +++ b/patches/weston-15.0.1/series > @@ -0,0 +1,4 @@ > +# generated by git-ptx-patches > +#tag:base --start-number 1 > +0001-backend-vnc-gitlab-ci-Update-to-Neat-VNC-1.0.0-aml-1.patch > +# 0f79398813720bf34c5565b3a0a8e1f7 - git-ptx-patches magic