From aad0e0980d5bca829c4f8b5c9e8fc2706e42be81 Mon Sep 17 00:00:00 2001 From: KuleRucket <737724+KuleRucket@users.noreply.github.com> Date: Thu, 28 Mar 2024 22:52:53 +0100 Subject: [PATCH] Populate host latency for kms/x11 grab (#2273) --- src/platform/linux/kmsgrab.cpp | 10 +++++++--- src/platform/linux/x11grab.cpp | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/platform/linux/kmsgrab.cpp b/src/platform/linux/kmsgrab.cpp index d4feb3557d8..b742e9edc63 100644 --- a/src/platform/linux/kmsgrab.cpp +++ b/src/platform/linux/kmsgrab.cpp @@ -1069,7 +1069,7 @@ namespace platf { } inline capture_e - refresh(file_t *file, egl::surface_descriptor_t *sd) { + refresh(file_t *file, egl::surface_descriptor_t *sd, std::optional &frame_timestamp) { // Check for a change in HDR metadata if (connector_id) { auto connector_props = card.connector_props(*connector_id); @@ -1080,6 +1080,7 @@ namespace platf { } plane_t plane = drmModeGetPlane(card.fd.el, plane_id); + frame_timestamp = std::chrono::steady_clock::now(); auto fb = card.fb(plane.get()); if (!fb) { @@ -1303,7 +1304,8 @@ namespace platf { egl::surface_descriptor_t sd; - auto status = refresh(fb_fd, &sd); + std::optional frame_timestamp; + auto status = refresh(fb_fd, &sd, frame_timestamp); if (status != capture_e::ok) { return status; } @@ -1330,6 +1332,8 @@ namespace platf { gl::ctx.GetTextureSubImage(rgb->tex[0], 0, img_offset_x, img_offset_y, 0, width, height, 1, GL_BGRA, GL_UNSIGNED_BYTE, img_out->height * img_out->row_pitch, img_out->data); + img_out->frame_timestamp = frame_timestamp; + if (cursor && captured_cursor.visible) { blend_cursor(*img_out); } @@ -1456,7 +1460,7 @@ namespace platf { auto img = (egl::img_descriptor_t *) img_out.get(); img->reset(); - auto status = refresh(fb_fd, &img->sd); + auto status = refresh(fb_fd, &img->sd, img->frame_timestamp); if (status != capture_e::ok) { return status; } diff --git a/src/platform/linux/x11grab.cpp b/src/platform/linux/x11grab.cpp index 1167d3f5809..0a639b9cc2b 100644 --- a/src/platform/linux/x11grab.cpp +++ b/src/platform/linux/x11grab.cpp @@ -535,6 +535,7 @@ namespace platf { auto img = (x11_img_t *) img_out.get(); XImage *x_img { x11::GetImage(xdisplay.get(), xwindow, offset_x, offset_y, width, height, AllPlanes, ZPixmap) }; + img->frame_timestamp = std::chrono::steady_clock::now(); img->width = x_img->width; img->height = x_img->height;