https://github.com/any1/neatvnc/commit/a4b238241f3f
https://github.com/any1/neatvnc/commit/c1f4833dc134

--- meson.build.orig	2025-07-28 20:37:48 UTC
+++ meson.build
@@ -63,12 +63,12 @@ libavutil = dependency('libavutil', required: get_opti
 libavfilter = dependency('libavfilter', required: get_option('h264'))
 libavutil = dependency('libavutil', required: get_option('h264'))
 
-aml_version = ['>=0.3.0', '<0.4.0']
+aml_version = ['>=1.0.0', '<2.0.0']
 aml_project = subproject('aml', required: false, version: aml_version)
 if aml_project.found()
 	aml = aml_project.get_variable('aml_dep')
 else
-	aml = dependency('aml', version: aml_version)
+	aml = dependency('aml1', version: aml_version)
 endif
 
 inc = include_directories('include')
--- src/enc/h264/ffmpeg-impl.c.orig	2025-07-28 20:37:48 UTC
+++ src/enc/h264/ffmpeg-impl.c
@@ -415,9 +415,9 @@ get_frame_failure:
 	return rc == AVERROR(EAGAIN) ? 0 : rc;
 }
 
-static void h264_encoder__do_work(void* handle)
+static void h264_encoder__do_work(struct aml_work* work)
 {
-	struct h264_encoder_ffmpeg* self = aml_get_userdata(handle);
+	struct h264_encoder_ffmpeg* self = aml_get_userdata(work);
 
 	AVFrame* frame = fb_to_avframe(self->current_fb);
 	assert(frame); // TODO
@@ -453,9 +453,9 @@ failure:
 	av_frame_free(&frame);
 }
 
-static void h264_encoder__on_work_done(void* handle)
+static void h264_encoder__on_work_done(struct aml_work* work)
 {
-	struct h264_encoder_ffmpeg* self = aml_get_userdata(handle);
+	struct h264_encoder_ffmpeg* self = aml_get_userdata(work);
 
 	uint64_t pts = nvnc_fb_get_pts(self->current_fb);
 	nvnc_fb_release(self->current_fb);
--- src/enc/h264/v4l2m2m-impl.c.orig	2025-07-28 20:37:48 UTC
+++ src/enc/h264/v4l2m2m-impl.c
@@ -511,9 +511,9 @@ static void encode_buffer(struct h264_encoder_v4l2m2m*
 	}
 }
 
-static void process_fd_events(void* handle)
+static void process_fd_events(struct aml_handler* handler)
 {
-	struct h264_encoder_v4l2m2m* self = aml_get_userdata(handle);
+	struct h264_encoder_v4l2m2m* self = aml_get_userdata(handler);
 	process_dst_bufs(self);
 }
 
--- src/enc/raw.c.orig	2025-07-28 20:37:48 UTC
+++ src/enc/raw.c
@@ -126,9 +126,9 @@ static int raw_encode_frame(struct raw_encoder_work* c
 	return 0;
 }
 
-static void raw_encoder_do_work(void* obj)
+static void raw_encoder_do_work(struct aml_work* work)
 {
-	struct raw_encoder_work* ctx = aml_get_userdata(obj);
+	struct raw_encoder_work* ctx = aml_get_userdata(work);
 	int rc __attribute__((unused));
 
 	struct nvnc_fb* fb = ctx->fb;
@@ -163,9 +163,9 @@ static void raw_encoder_do_work(void* obj)
 	assert(ctx->result);
 }
 
-static void raw_encoder_on_done(void* obj)
+static void raw_encoder_on_done(struct aml_work* work)
 {
-	struct raw_encoder_work* ctx = aml_get_userdata(obj);
+	struct raw_encoder_work* ctx = aml_get_userdata(work);
 	struct raw_encoder* self = ctx->parent;
 
 	assert(ctx->result);
--- src/enc/tight.c.orig	2025-07-28 20:37:48 UTC
+++ src/enc/tight.c
@@ -106,8 +106,8 @@ struct encoder_impl encoder_impl_tight;
 
 struct encoder_impl encoder_impl_tight;
 
-static void do_tight_zs_work(void*);
-static void on_tight_zs_work_done(void*);
+static void do_tight_zs_work(struct aml_work*);
+static void on_tight_zs_work_done(struct aml_work*);
 static int schedule_tight_finish(struct tight_encoder* self);
 
 static inline struct tight_encoder* tight_encoder(struct encoder* encoder)
@@ -428,9 +428,9 @@ static void tight_encode_tile(struct tight_encoder* se
 	tile->state = TIGHT_TILE_ENCODED;
 }
 
-static void do_tight_zs_work(void* obj)
+static void do_tight_zs_work(struct aml_work* work)
 {
-	struct tight_zs_worker_ctx* ctx = aml_get_userdata(obj);
+	struct tight_zs_worker_ctx* ctx = aml_get_userdata(work);
 	struct tight_encoder* self = ctx->encoder;
 	int index = ctx->index;
 
@@ -440,7 +440,7 @@ static void do_tight_zs_work(void* obj)
 				tight_encode_tile(self, x, y);
 }
 
-static void on_tight_zs_work_done(void* obj)
+static void on_tight_zs_work_done(struct aml_work* obj)
 {
 	struct tight_zs_worker_ctx* ctx = aml_get_userdata(obj);
 	struct tight_encoder* self = ctx->encoder;
@@ -509,15 +509,15 @@ static void tight_finish(struct tight_encoder* self)
 				tight_finish_tile(self, x, y);
 }
 
-static void do_tight_finish(void* obj)
+static void do_tight_finish(struct aml_work* work)
 {
-	struct tight_encoder* self = aml_get_userdata(obj);
+	struct tight_encoder* self = aml_get_userdata(work);
 	tight_finish(self);
 }
 
-static void on_tight_finished(void* obj)
+static void on_tight_finished(struct aml_work* work)
 {
-	struct tight_encoder* self = aml_get_userdata(obj);
+	struct tight_encoder* self = aml_get_userdata(work);
 
 	struct encoded_frame* result;
 	result = encoded_frame_new(self->dst.data, self->dst.len, self->n_rects,
--- src/enc/zrle.c.orig	2025-07-28 20:37:48 UTC
+++ src/enc/zrle.c
@@ -340,9 +340,9 @@ static int zrle_encode_frame(struct zrle_encoder* self
 	return 0;
 }
 
-static void zrle_encoder_do_work(void* obj)
+static void zrle_encoder_do_work(struct aml_work* work)
 {
-	struct zrle_encoder* self = aml_get_userdata(obj);
+	struct zrle_encoder* self = aml_get_userdata(work);
 	int rc __attribute__((unused));
 
 	struct nvnc_fb* fb = self->current_fb;
@@ -374,9 +374,9 @@ static void zrle_encoder_do_work(void* obj)
 	assert(self->current_result);
 }
 
-static void zrle_encoder_on_done(void* obj)
+static void zrle_encoder_on_done(struct aml_work* work)
 {
-	struct zrle_encoder* self = aml_get_userdata(obj);
+	struct zrle_encoder* self = aml_get_userdata(work);
 
 	assert(self->current_result);
 
--- src/resampler.c.orig	2025-07-28 20:37:48 UTC
+++ src/resampler.c
@@ -147,9 +147,8 @@ void resample_now(struct nvnc_fb* dst, struct nvnc_fb*
 	pixman_image_unref(dstimg);
 }
 
-static void do_work(void* handle)
+static void do_work(struct aml_work* work)
 {
-	struct aml_work* work = handle;
 	struct resampler_work* ctx = aml_get_userdata(work);
 
 	struct nvnc_fb* src = ctx->src;
@@ -159,11 +158,9 @@ static void do_work(void* handle)
 	resample_now(dst, src, &dst_side_data->buffer_damage);
 }
 
-static void on_work_done(void* handle)
+static void on_work_done(struct aml_work* work)
 {
-	struct aml_work* work = handle;
 	struct resampler_work* ctx = aml_get_userdata(work);
-
 	ctx->on_done(ctx->dst, &ctx->frame_damage, ctx->userdata);
 }
 
--- src/server.c.orig	2025-07-28 20:37:48 UTC
+++ src/server.c
@@ -210,9 +210,8 @@ static void client_close(struct nvnc_client* client)
 	free(client);
 }
 
-static void do_deferred_client_close(void* obj)
+static void do_deferred_client_close(struct aml_idle* idle)
 {
-	struct aml_idle* idle = obj;
 	struct nvnc_client* client = aml_get_userdata(idle);
 	client->close_task = NULL;
 	aml_stop(aml_get_default(), idle);
@@ -2013,9 +2012,9 @@ static void on_client_event(struct stream* stream, enu
 	client->buffer_index = 0;
 }
 
-static void on_connection(void* obj)
+static void on_connection(struct aml_handler* poll_handle)
 {
-	struct nvnc* server = aml_get_userdata(obj);
+	struct nvnc* server = aml_get_userdata(poll_handle);
 
 	struct nvnc_client* client = calloc(1, sizeof(*client));
 	if (!client)
--- src/stream/gnutls.c.orig	2025-07-28 20:37:48 UTC
+++ src/stream/gnutls.c
@@ -171,10 +171,10 @@ static void stream_gnutls__on_writable(struct stream* 
 	}
 }
 
-static void stream_gnutls__on_event(void* obj)
+static void stream_gnutls__on_event(struct aml_handler* handler)
 {
-	struct stream* self = aml_get_userdata(obj);
-	uint32_t events = aml_get_revents(obj);
+	struct stream* self = aml_get_userdata(handler);
+	uint32_t events = aml_get_revents(handler);
 
 	stream_ref(self);
 
--- src/stream/tcp.c.orig	2025-07-28 20:37:48 UTC
+++ src/stream/tcp.c
@@ -191,10 +191,10 @@ static void stream_tcp__on_writable(struct stream* sel
 	}
 }
 
-static void stream_tcp__on_event(void* obj)
+static void stream_tcp__on_event(struct aml_handler* handler)
 {
-	struct stream* self = aml_get_userdata(obj);
-	uint32_t events = aml_get_revents(obj);
+	struct stream* self = aml_get_userdata(handler);
+	uint32_t events = aml_get_revents(handler);
 
 	// We hold a reference here in case the stream gets destroyed inside
 	// callback.
