summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta-oe/recipes-graphics/neatvnc/neatvnc/0001-Add-method-to-listen-on-multiple-fds.patch309
-rw-r--r--meta-oe/recipes-graphics/neatvnc/neatvnc/0001-Use-aml-v1.patch281
-rw-r--r--meta-oe/recipes-graphics/neatvnc/neatvnc/0001-meson-Use-new-pkgconfig-for-aml1.patch27
-rw-r--r--meta-oe/recipes-graphics/neatvnc/neatvnc_0.9.5.bb (renamed from meta-oe/recipes-graphics/neatvnc/neatvnc_0.8.1.bb)8
4 files changed, 623 insertions, 2 deletions
diff --git a/meta-oe/recipes-graphics/neatvnc/neatvnc/0001-Add-method-to-listen-on-multiple-fds.patch b/meta-oe/recipes-graphics/neatvnc/neatvnc/0001-Add-method-to-listen-on-multiple-fds.patch
new file mode 100644
index 0000000000..601ddeed93
--- /dev/null
+++ b/meta-oe/recipes-graphics/neatvnc/neatvnc/0001-Add-method-to-listen-on-multiple-fds.patch
@@ -0,0 +1,309 @@
1From a701040581706a2abf3483ea68d19142cbd68bcf Mon Sep 17 00:00:00 2001
2From: Andri Yngvason <andri@yngvason.is>
3Date: Sat, 23 Nov 2024 11:36:06 +0000
4Subject: [PATCH] Add method to listen on multiple fds
5
6Upstream-Status: Backport [https://github.com/any1/neatvnc/commit/a701040581706a2abf3483ea68d19142cbd68bcf]
7---
8 examples/draw.c | 2 +-
9 examples/png-server.c | 2 +-
10 include/common.h | 15 ++++--
11 include/neatvnc.h | 14 ++++-
12 src/server.c | 122 ++++++++++++++++++++++++++++++------------
13 5 files changed, 116 insertions(+), 39 deletions(-)
14
15diff --git a/examples/draw.c b/examples/draw.c
16index 7fb8fe6..13d5d09 100644
17--- a/examples/draw.c
18+++ b/examples/draw.c
19@@ -340,7 +340,7 @@ int main(int argc, char* argv[])
20
21 aml_run(aml);
22
23- nvnc_close(server);
24+ nvnc_del(server);
25 nvnc_display_unref(draw.display);
26 nvnc_fb_pool_unref(draw.fb_pool);
27 pixman_image_unref(draw.whiteboard);
28diff --git a/examples/png-server.c b/examples/png-server.c
29index b8cc015..e35a6f1 100644
30--- a/examples/png-server.c
31+++ b/examples/png-server.c
32@@ -68,7 +68,7 @@ int main(int argc, char* argv[])
33
34 aml_run(aml);
35
36- nvnc_close(server);
37+ nvnc_del(server);
38 nvnc_display_unref(display);
39 nvnc_fb_unref(fb);
40 aml_unref(aml);
41diff --git a/include/common.h b/include/common.h
42index e0b87c2..14c0ed9 100644
43--- a/include/common.h
44+++ b/include/common.h
45@@ -157,12 +157,21 @@ enum nvnc__socket_type {
46 NVNC__SOCKET_FROM_FD,
47 };
48
49+struct nvnc__socket {
50+ struct nvnc* parent;
51+ enum nvnc_stream_type type;
52+ bool is_external;
53+ int fd;
54+ struct aml_handler* poll_handle;
55+ LIST_ENTRY(nvnc__socket) link;
56+};
57+
58+LIST_HEAD(nvnc__socket_list, nvnc__socket);
59+
60 struct nvnc {
61 struct nvnc_common common;
62 bool is_closing;
63- int fd;
64- enum nvnc__socket_type socket_type;
65- struct aml_handler* poll_handle;
66+ struct nvnc__socket_list sockets;
67 struct nvnc_client_list clients;
68 char name[256];
69 void* userdata;
70diff --git a/include/neatvnc.h b/include/neatvnc.h
71index 78d9f97..c9303a8 100644
72--- a/include/neatvnc.h
73+++ b/include/neatvnc.h
74@@ -74,6 +74,11 @@ enum nvnc_fb_type {
75 NVNC_FB_GBM_BO,
76 };
77
78+enum nvnc_stream_type {
79+ NVNC_STREAM_NORMAL = 0,
80+ NVNC_STREAM_WEBSOCKET,
81+};
82+
83 /* This is the same as wl_output_transform */
84 enum nvnc_transform {
85 NVNC_TRANSFORM_NORMAL = 0,
86@@ -135,11 +140,18 @@ typedef bool (*nvnc_desktop_layout_fn)(
87
88 extern const char nvnc_version[];
89
90+struct nvnc* nvnc_new(void);
91+void nvnc_del(struct nvnc* self);
92+
93+int nvnc_listen(struct nvnc* self, int fd, enum nvnc_stream_type type);
94+
95 struct nvnc* nvnc_open(const char* addr, uint16_t port);
96 struct nvnc* nvnc_open_unix(const char *addr);
97 struct nvnc* nvnc_open_websocket(const char* addr, uint16_t port);
98 struct nvnc* nvnc_open_from_fd(int fd);
99-void nvnc_close(struct nvnc* self);
100+
101+void nvnc_close(struct nvnc* self)
102+ __attribute__((deprecated("replaced with nvnc_del")));
103
104 void nvnc_add_display(struct nvnc*, struct nvnc_display*);
105 void nvnc_remove_display(struct nvnc*, struct nvnc_display*);
106diff --git a/src/server.c b/src/server.c
107index b94ed0d..ded2dab 100644
108--- a/src/server.c
109+++ b/src/server.c
110@@ -1981,7 +1981,9 @@ static void on_client_event(struct stream* stream, enum stream_event event)
111
112 static void on_connection(void* obj)
113 {
114- struct nvnc* server = aml_get_userdata(obj);
115+ struct aml_handler* poll_handle = obj;
116+ struct nvnc__socket* socket = aml_get_userdata(poll_handle);
117+ struct nvnc* server = socket->parent;
118
119 struct nvnc_client* client = calloc(1, sizeof(*client));
120 if (!client)
121@@ -2002,7 +2004,7 @@ static void on_connection(void* obj)
122 client->ext_clipboard_max_unsolicited_text_size =
123 MAX_CLIENT_UNSOLICITED_TEXT_SIZE;
124
125- int fd = accept(server->fd, NULL, 0);
126+ int fd = accept(socket->fd, NULL, 0);
127 if (fd < 0) {
128 nvnc_log(NVNC_LOG_WARNING, "Failed to accept a connection");
129 goto accept_failure;
130@@ -2012,7 +2014,7 @@ static void on_connection(void* obj)
131 setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(one));
132
133 #ifdef ENABLE_WEBSOCKET
134- if (server->socket_type == NVNC__SOCKET_WEBSOCKET)
135+ if (socket->type == NVNC_STREAM_WEBSOCKET)
136 {
137 client->net_stream = stream_ws_new(fd, on_client_event, client);
138 }
139@@ -2182,44 +2184,60 @@ static int bind_address(const char* name, uint16_t port,
140 return -1;
141 }
142
143-static struct nvnc* open_common(const char* address, uint16_t port,
144- int fd, enum nvnc__socket_type type)
145+static struct nvnc__socket* nvnc__listen(struct nvnc* self, int fd,
146+ enum nvnc_stream_type type)
147 {
148- nvnc__log_init();
149+ struct nvnc__socket* socket = calloc(1, sizeof(*self));
150+ if (!socket)
151+ return NULL;
152
153- aml_require_workers(aml_get_default(), -1);
154+ if (listen(fd, 16) < 0)
155+ goto failure;
156
157- struct nvnc* self = calloc(1, sizeof(*self));
158- if (!self)
159- return NULL;
160+ socket->parent = self;
161+ socket->type = type;
162+ socket->fd = fd;
163+ socket->is_external = true;
164
165- self->socket_type = type;
166+ socket->poll_handle = aml_handler_new(fd, on_connection, socket, NULL);
167+ if (!socket->poll_handle) {
168+ goto failure;
169+ }
170
171- strcpy(self->name, DEFAULT_NAME);
172+ aml_start(aml_get_default(), socket->poll_handle);
173
174- LIST_INIT(&self->clients);
175+ LIST_INSERT_HEAD(&self->sockets, socket, link);
176+ return socket;
177
178- self->fd = bind_address(address, port, fd, type);
179- if (self->fd < 0)
180+failure:
181+ free(socket);
182+ return NULL;
183+}
184+
185+static struct nvnc* open_common(const char* address, uint16_t port,
186+ int fd, enum nvnc__socket_type type)
187+{
188+ struct nvnc* self = nvnc_new();
189+ if (!self)
190+ return NULL;
191+
192+ int bound_fd = bind_address(address, port, fd, type);
193+ if (bound_fd < 0)
194 goto bind_failure;
195
196- if (listen(self->fd, 16) < 0)
197- goto listen_failure;
198+ enum nvnc_stream_type stream_type = type == NVNC__SOCKET_WEBSOCKET ?
199+ NVNC_STREAM_WEBSOCKET : NVNC_STREAM_NORMAL;
200
201- self->poll_handle = aml_handler_new(self->fd, on_connection, self, NULL);
202- if (!self->poll_handle)
203- goto handle_failure;
204+ struct nvnc__socket* socket = nvnc__listen(self, bound_fd, stream_type);
205+ if (!socket)
206+ goto listen_failure;
207
208- if (aml_start(aml_get_default(), self->poll_handle) < 0)
209- goto poll_start_failure;
210+ socket->is_external = type == NVNC__SOCKET_FROM_FD;
211
212 return self;
213
214-poll_start_failure:
215- aml_unref(self->poll_handle);
216-handle_failure:
217 listen_failure:
218- close(self->fd);
219+ close(bound_fd);
220 if (type == NVNC__SOCKET_UNIX) {
221 unlink(address);
222 }
223@@ -2229,6 +2247,31 @@ bind_failure:
224 return NULL;
225 }
226
227+EXPORT
228+struct nvnc* nvnc_new(void)
229+{
230+ nvnc__log_init();
231+ aml_require_workers(aml_get_default(), -1);
232+
233+ struct nvnc* self = calloc(1, sizeof(*self));
234+ if (!self)
235+ return NULL;
236+
237+ strcpy(self->name, DEFAULT_NAME);
238+
239+ LIST_INIT(&self->sockets);
240+ LIST_INIT(&self->clients);
241+
242+ return self;
243+}
244+
245+EXPORT
246+int nvnc_listen(struct nvnc* self, int fd, enum nvnc_stream_type type)
247+{
248+ struct nvnc__socket* socket = nvnc__listen(self, fd, type);
249+ return socket ? 0 : -1;
250+}
251+
252 EXPORT
253 struct nvnc* nvnc_open(const char* address, uint16_t port)
254 {
255@@ -2270,7 +2313,7 @@ static void unlink_fd_path(int fd)
256 }
257
258 EXPORT
259-void nvnc_close(struct nvnc* self)
260+void nvnc_del(struct nvnc* self)
261 {
262 self->is_closing = true;
263
264@@ -2293,12 +2336,20 @@ void nvnc_close(struct nvnc* self)
265 while (!LIST_EMPTY(&self->clients))
266 client_close(LIST_FIRST(&self->clients));
267
268- aml_stop(aml_get_default(), self->poll_handle);
269- // Do not unlink an externally managed fd.
270- if(self->socket_type != NVNC__SOCKET_FROM_FD) {
271- unlink_fd_path(self->fd);
272+ while (!LIST_EMPTY(&self->sockets)) {
273+ struct nvnc__socket* socket = LIST_FIRST(&self->sockets);
274+ LIST_REMOVE(socket, link);
275+
276+ aml_stop(aml_get_default(), socket->poll_handle);
277+ aml_unref(socket->poll_handle);
278+
279+ if (!socket->is_external) {
280+ unlink_fd_path(socket->fd);
281+ }
282+ close(socket->fd);
283+
284+ free(socket);
285 }
286- close(self->fd);
287
288 #ifdef HAVE_CRYPTO
289 crypto_rsa_priv_key_del(self->rsa_priv);
290@@ -2314,10 +2365,15 @@ void nvnc_close(struct nvnc* self)
291
292 free(self->ext_clipboard_provide_msg.buffer);
293
294- aml_unref(self->poll_handle);
295 free(self);
296 }
297
298+EXPORT
299+void nvnc_close(struct nvnc* self)
300+{
301+ nvnc_del(self);
302+}
303+
304 static void process_pending_fence(struct nvnc_client* client)
305 {
306 if (client->pending_fence.n_pending_requests == 0) {
307--
3082.43.0
309
diff --git a/meta-oe/recipes-graphics/neatvnc/neatvnc/0001-Use-aml-v1.patch b/meta-oe/recipes-graphics/neatvnc/neatvnc/0001-Use-aml-v1.patch
new file mode 100644
index 0000000000..26c3a0230c
--- /dev/null
+++ b/meta-oe/recipes-graphics/neatvnc/neatvnc/0001-Use-aml-v1.patch
@@ -0,0 +1,281 @@
1From a4b238241f3f3016ef3ddcd260c1490a9c9e8168 Mon Sep 17 00:00:00 2001
2From: Andri Yngvason <andri@yngvason.is>
3Date: Sun, 23 Mar 2025 15:55:11 +0000
4Subject: [PATCH] Use aml v1
5
6Upstream-Status: Backport [https://github.com/any1/neatvnc/commit/a4b238241f3f3016ef3ddcd260c1490a9c9e8168]
7---
8 meson.build | 2 +-
9 src/enc/h264/ffmpeg-impl.c | 8 ++++----
10 src/enc/h264/v4l2m2m-impl.c | 4 ++--
11 src/enc/raw.c | 8 ++++----
12 src/enc/tight.c | 18 +++++++++---------
13 src/enc/zrle.c | 8 ++++----
14 src/resampler.c | 7 ++-----
15 src/server.c | 6 ++----
16 src/stream/gnutls.c | 6 +++---
17 src/stream/tcp.c | 6 +++---
18 11 files changed, 35 insertions(+), 41 deletions(-)
19
20diff --git a/meson.build b/meson.build
21index 1017ffd..e731886 100644
22--- a/meson.build
23+++ b/meson.build
24@@ -71,7 +71,7 @@ libavcodec = dependency('libavcodec', required: get_option('h264'))
25 libavfilter = dependency('libavfilter', required: get_option('h264'))
26 libavutil = dependency('libavutil', required: get_option('h264'))
27
28-aml_version = ['>=0.3.0', '<0.4.0']
29+aml_version = ['>=1.0.0', '<2.0.0']
30 aml_project = subproject('aml', required: false, version: aml_version)
31 if aml_project.found()
32 aml = aml_project.get_variable('aml_dep')
33diff --git a/src/enc/h264/ffmpeg-impl.c b/src/enc/h264/ffmpeg-impl.c
34index 3bd584c..148b1c3 100644
35--- a/src/enc/h264/ffmpeg-impl.c
36+++ b/src/enc/h264/ffmpeg-impl.c
37@@ -415,9 +415,9 @@ get_frame_failure:
38 return rc == AVERROR(EAGAIN) ? 0 : rc;
39 }
40
41-static void h264_encoder__do_work(void* handle)
42+static void h264_encoder__do_work(struct aml_work* work)
43 {
44- struct h264_encoder_ffmpeg* self = aml_get_userdata(handle);
45+ struct h264_encoder_ffmpeg* self = aml_get_userdata(work);
46
47 AVFrame* frame = fb_to_avframe(self->current_fb);
48 assert(frame); // TODO
49@@ -453,9 +453,9 @@ failure:
50 av_frame_free(&frame);
51 }
52
53-static void h264_encoder__on_work_done(void* handle)
54+static void h264_encoder__on_work_done(struct aml_work* work)
55 {
56- struct h264_encoder_ffmpeg* self = aml_get_userdata(handle);
57+ struct h264_encoder_ffmpeg* self = aml_get_userdata(work);
58
59 uint64_t pts = nvnc_fb_get_pts(self->current_fb);
60 nvnc_fb_release(self->current_fb);
61diff --git a/src/enc/h264/v4l2m2m-impl.c b/src/enc/h264/v4l2m2m-impl.c
62index b9d1236..d286932 100644
63--- a/src/enc/h264/v4l2m2m-impl.c
64+++ b/src/enc/h264/v4l2m2m-impl.c
65@@ -511,9 +511,9 @@ static void encode_buffer(struct h264_encoder_v4l2m2m* self,
66 }
67 }
68
69-static void process_fd_events(void* handle)
70+static void process_fd_events(struct aml_handler* handler)
71 {
72- struct h264_encoder_v4l2m2m* self = aml_get_userdata(handle);
73+ struct h264_encoder_v4l2m2m* self = aml_get_userdata(handler);
74 process_dst_bufs(self);
75 }
76
77diff --git a/src/enc/raw.c b/src/enc/raw.c
78index 806f074..2bc8302 100644
79--- a/src/enc/raw.c
80+++ b/src/enc/raw.c
81@@ -126,9 +126,9 @@ static int raw_encode_frame(struct raw_encoder_work* ctx, struct vec* dst,
82 return 0;
83 }
84
85-static void raw_encoder_do_work(void* obj)
86+static void raw_encoder_do_work(struct aml_work* work)
87 {
88- struct raw_encoder_work* ctx = aml_get_userdata(obj);
89+ struct raw_encoder_work* ctx = aml_get_userdata(work);
90 int rc __attribute__((unused));
91
92 struct nvnc_fb* fb = ctx->fb;
93@@ -163,9 +163,9 @@ static void raw_encoder_do_work(void* obj)
94 assert(ctx->result);
95 }
96
97-static void raw_encoder_on_done(void* obj)
98+static void raw_encoder_on_done(struct aml_work* work)
99 {
100- struct raw_encoder_work* ctx = aml_get_userdata(obj);
101+ struct raw_encoder_work* ctx = aml_get_userdata(work);
102 struct raw_encoder* self = ctx->parent;
103
104 assert(ctx->result);
105diff --git a/src/enc/tight.c b/src/enc/tight.c
106index a361974..441df19 100644
107--- a/src/enc/tight.c
108+++ b/src/enc/tight.c
109@@ -106,8 +106,8 @@ struct tight_zs_worker_ctx {
110
111 struct encoder_impl encoder_impl_tight;
112
113-static void do_tight_zs_work(void*);
114-static void on_tight_zs_work_done(void*);
115+static void do_tight_zs_work(struct aml_work*);
116+static void on_tight_zs_work_done(struct aml_work*);
117 static int schedule_tight_finish(struct tight_encoder* self);
118
119 static inline struct tight_encoder* tight_encoder(struct encoder* encoder)
120@@ -428,9 +428,9 @@ static void tight_encode_tile(struct tight_encoder* self,
121 tile->state = TIGHT_TILE_ENCODED;
122 }
123
124-static void do_tight_zs_work(void* obj)
125+static void do_tight_zs_work(struct aml_work* work)
126 {
127- struct tight_zs_worker_ctx* ctx = aml_get_userdata(obj);
128+ struct tight_zs_worker_ctx* ctx = aml_get_userdata(work);
129 struct tight_encoder* self = ctx->encoder;
130 int index = ctx->index;
131
132@@ -440,7 +440,7 @@ static void do_tight_zs_work(void* obj)
133 tight_encode_tile(self, x, y);
134 }
135
136-static void on_tight_zs_work_done(void* obj)
137+static void on_tight_zs_work_done(struct aml_work* obj)
138 {
139 struct tight_zs_worker_ctx* ctx = aml_get_userdata(obj);
140 struct tight_encoder* self = ctx->encoder;
141@@ -509,15 +509,15 @@ static void tight_finish(struct tight_encoder* self)
142 tight_finish_tile(self, x, y);
143 }
144
145-static void do_tight_finish(void* obj)
146+static void do_tight_finish(struct aml_work* work)
147 {
148- struct tight_encoder* self = aml_get_userdata(obj);
149+ struct tight_encoder* self = aml_get_userdata(work);
150 tight_finish(self);
151 }
152
153-static void on_tight_finished(void* obj)
154+static void on_tight_finished(struct aml_work* work)
155 {
156- struct tight_encoder* self = aml_get_userdata(obj);
157+ struct tight_encoder* self = aml_get_userdata(work);
158
159 struct encoded_frame* result;
160 result = encoded_frame_new(self->dst.data, self->dst.len, self->n_rects,
161diff --git a/src/enc/zrle.c b/src/enc/zrle.c
162index 42044dc..e775f34 100644
163--- a/src/enc/zrle.c
164+++ b/src/enc/zrle.c
165@@ -315,9 +315,9 @@ static int zrle_encode_frame(struct zrle_encoder* self,
166 return 0;
167 }
168
169-static void zrle_encoder_do_work(void* obj)
170+static void zrle_encoder_do_work(struct aml_work* work)
171 {
172- struct zrle_encoder* self = aml_get_userdata(obj);
173+ struct zrle_encoder* self = aml_get_userdata(work);
174 int rc __attribute__((unused));
175
176 struct nvnc_fb* fb = self->current_fb;
177@@ -349,9 +349,9 @@ static void zrle_encoder_do_work(void* obj)
178 assert(self->current_result);
179 }
180
181-static void zrle_encoder_on_done(void* obj)
182+static void zrle_encoder_on_done(struct aml_work* work)
183 {
184- struct zrle_encoder* self = aml_get_userdata(obj);
185+ struct zrle_encoder* self = aml_get_userdata(work);
186
187 assert(self->current_result);
188
189diff --git a/src/resampler.c b/src/resampler.c
190index e24798b..8f4cfa0 100644
191--- a/src/resampler.c
192+++ b/src/resampler.c
193@@ -147,9 +147,8 @@ void resample_now(struct nvnc_fb* dst, struct nvnc_fb* src,
194 pixman_image_unref(dstimg);
195 }
196
197-static void do_work(void* handle)
198+static void do_work(struct aml_work* work)
199 {
200- struct aml_work* work = handle;
201 struct resampler_work* ctx = aml_get_userdata(work);
202
203 struct nvnc_fb* src = ctx->src;
204@@ -159,11 +158,9 @@ static void do_work(void* handle)
205 resample_now(dst, src, &dst_side_data->buffer_damage);
206 }
207
208-static void on_work_done(void* handle)
209+static void on_work_done(struct aml_work* work)
210 {
211- struct aml_work* work = handle;
212 struct resampler_work* ctx = aml_get_userdata(work);
213-
214 ctx->on_done(ctx->dst, &ctx->frame_damage, ctx->userdata);
215 }
216
217diff --git a/src/server.c b/src/server.c
218index f172658..61da4dd 100644
219--- a/src/server.c
220+++ b/src/server.c
221@@ -210,9 +210,8 @@ static void client_close(struct nvnc_client* client)
222 free(client);
223 }
224
225-static void do_deferred_client_close(void* obj)
226+static void do_deferred_client_close(struct aml_idle* idle)
227 {
228- struct aml_idle* idle = obj;
229 struct nvnc_client* client = aml_get_userdata(idle);
230 client->close_task = NULL;
231 aml_stop(aml_get_default(), idle);
232@@ -2033,9 +2032,8 @@ static void on_client_event(struct stream* stream, enum stream_event event)
233 client->buffer_index = 0;
234 }
235
236-static void on_connection(void* obj)
237+static void on_connection(struct aml_handler* poll_handle)
238 {
239- struct aml_handler* poll_handle = obj;
240 struct nvnc__socket* socket = aml_get_userdata(poll_handle);
241 struct nvnc* server = socket->parent;
242
243diff --git a/src/stream/gnutls.c b/src/stream/gnutls.c
244index 14661e5..00a7c13 100644
245--- a/src/stream/gnutls.c
246+++ b/src/stream/gnutls.c
247@@ -171,10 +171,10 @@ static void stream_gnutls__on_writable(struct stream* self)
248 }
249 }
250
251-static void stream_gnutls__on_event(void* obj)
252+static void stream_gnutls__on_event(struct aml_handler* handler)
253 {
254- struct stream* self = aml_get_userdata(obj);
255- uint32_t events = aml_get_revents(obj);
256+ struct stream* self = aml_get_userdata(handler);
257+ uint32_t events = aml_get_revents(handler);
258
259 stream_ref(self);
260
261diff --git a/src/stream/tcp.c b/src/stream/tcp.c
262index 37f139a..95f5aa8 100644
263--- a/src/stream/tcp.c
264+++ b/src/stream/tcp.c
265@@ -191,10 +191,10 @@ static void stream_tcp__on_writable(struct stream* self)
266 }
267 }
268
269-static void stream_tcp__on_event(void* obj)
270+static void stream_tcp__on_event(struct aml_handler* handler)
271 {
272- struct stream* self = aml_get_userdata(obj);
273- uint32_t events = aml_get_revents(obj);
274+ struct stream* self = aml_get_userdata(handler);
275+ uint32_t events = aml_get_revents(handler);
276
277 // We hold a reference here in case the stream gets destroyed inside
278 // callback.
279--
2802.43.0
281
diff --git a/meta-oe/recipes-graphics/neatvnc/neatvnc/0001-meson-Use-new-pkgconfig-for-aml1.patch b/meta-oe/recipes-graphics/neatvnc/neatvnc/0001-meson-Use-new-pkgconfig-for-aml1.patch
new file mode 100644
index 0000000000..ec47fb61fb
--- /dev/null
+++ b/meta-oe/recipes-graphics/neatvnc/neatvnc/0001-meson-Use-new-pkgconfig-for-aml1.patch
@@ -0,0 +1,27 @@
1From c1f4833dc13403882a3efbb8a69de33191fb72c6 Mon Sep 17 00:00:00 2001
2From: Andri Yngvason <andri@yngvason.is>
3Date: Sun, 27 Jul 2025 14:17:54 +0000
4Subject: [PATCH] meson: Use new pkgconfig for aml1
5
6Upstream-Status: Backport [https://github.com/any1/neatvnc/commit/c1f4833dc13403882a3efbb8a69de33191fb72c6]
7
8---
9 meson.build | 2 +-
10 1 file changed, 1 insertion(+), 1 deletion(-)
11
12diff --git a/meson.build b/meson.build
13index e731886..59364a7 100644
14--- a/meson.build
15+++ b/meson.build
16@@ -76,7 +76,7 @@ aml_project = subproject('aml', required: false, version: aml_version)
17 if aml_project.found()
18 aml = aml_project.get_variable('aml_dep')
19 else
20- aml = dependency('aml', version: aml_version)
21+ aml = dependency('aml1', version: aml_version)
22 endif
23
24 inc = include_directories('include')
25--
262.43.0
27
diff --git a/meta-oe/recipes-graphics/neatvnc/neatvnc_0.8.1.bb b/meta-oe/recipes-graphics/neatvnc/neatvnc_0.9.5.bb
index 2b26ec57ae..b83a886f11 100644
--- a/meta-oe/recipes-graphics/neatvnc/neatvnc_0.8.1.bb
+++ b/meta-oe/recipes-graphics/neatvnc/neatvnc_0.9.5.bb
@@ -4,9 +4,13 @@ HOMEPAGE = "https://github.com/any1/neatvnc"
4LICENSE = "ISC" 4LICENSE = "ISC"
5LIC_FILES_CHKSUM = "file://COPYING;md5=94fc374e7174f41e3afe0f027ee59ff7" 5LIC_FILES_CHKSUM = "file://COPYING;md5=94fc374e7174f41e3afe0f027ee59ff7"
6 6
7SRC_URI = "git://github.com/any1/neatvnc;branch=v0.8;protocol=https" 7SRC_URI = "git://github.com/any1/neatvnc;branch=v0.9;protocol=https \
8 file://0001-meson-Use-new-pkgconfig-for-aml1.patch \
9 file://0001-Add-method-to-listen-on-multiple-fds.patch \
10 file://0001-Use-aml-v1.patch \
11 "
8 12
9SRCREV = "07081567ab21a2b099ceb41ae8cab872a31cbb9a" 13SRCREV = "36ef59a83291368d72f471700702a8b6a76f763b"
10 14
11 15
12DEPENDS = "libdrm pixman aml zlib" 16DEPENDS = "libdrm pixman aml zlib"