From 7da2b27454aa8c43ba5caef18f25372fca698f93 Mon Sep 17 00:00:00 2001 From: Markus Fritsche Date: Mon, 4 May 2026 14:17:52 +0000 Subject: [PATCH] DEBUG: ENTER logging at libva entry points to trace Firefox call flow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds request_log on entry to: - RequestSyncSurface - RequestQuerySurfaceAttributes - RequestQuerySurfaceStatus (including the returned status value) - RequestDeriveImage - RequestQueryImageFormats - RequestGetImage Goal: identify which API call Firefox 150 makes that returns differently than it expects, causing the SW fallback after frame 0. mpv works end-to-end with the surface-export fix in place; Firefox does not. Per operator's correction: don't assume mpv's success means the driver is correct — Firefox may detect a real spec violation that mpv silently tolerates. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/image.c | 6 ++++++ src/surface.c | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/image.c b/src/image.c index 05ed455..74b961b 100644 --- a/src/image.c +++ b/src/image.c @@ -184,6 +184,8 @@ VAStatus RequestDeriveImage(VADriverContextP context, VASurfaceID surface_id, VAImageFormat format; VAStatus status; + request_log("ENTER RequestDeriveImage(surf=%u)\n", surface_id); + surface_object = SURFACE(driver_data, surface_id); if (surface_object == NULL) return VA_STATUS_ERROR_INVALID_SURFACE; @@ -216,6 +218,7 @@ VAStatus RequestDeriveImage(VADriverContextP context, VASurfaceID surface_id, VAStatus RequestQueryImageFormats(VADriverContextP context, VAImageFormat *formats, int *formats_count) { + request_log("ENTER RequestQueryImageFormats\n"); formats[0].fourcc = VA_FOURCC_NV12; *formats_count = 1; @@ -237,6 +240,9 @@ VAStatus RequestGetImage(VADriverContextP context, VASurfaceID surface_id, struct object_image *image_object; VAImage *image; + request_log("ENTER RequestGetImage(surf=%u, x=%d y=%d w=%u h=%u, img=%u)\n", + surface_id, x, y, width, height, image_id); + surface_object = SURFACE(driver_data, surface_id); if (surface_object == NULL) return VA_STATUS_ERROR_INVALID_SURFACE; diff --git a/src/surface.c b/src/surface.c index f040ce9..e0b184f 100644 --- a/src/surface.c +++ b/src/surface.c @@ -341,6 +341,8 @@ VAStatus RequestDestroySurfaces(VADriverContextP context, VAStatus RequestSyncSurface(VADriverContextP context, VASurfaceID surface_id) { + request_log("ENTER RequestSyncSurface(surf=%u)\n", surface_id); + struct request_data *driver_data = context->pDriverData; struct object_surface *surface_object; VAStatus status; @@ -480,6 +482,9 @@ VAStatus RequestQuerySurfaceAttributes(VADriverContextP context, VASurfaceAttrib *attributes, unsigned int *attributes_count) { + request_log("ENTER RequestQuerySurfaceAttributes(config=%u, attrs_buf=%p)\n", + config, (void *)attributes); + struct request_data *driver_data = context->pDriverData; VASurfaceAttrib *attributes_list; unsigned int attributes_list_size = V4L2_REQUEST_MAX_CONFIG_ATTRIBUTES * @@ -558,12 +563,18 @@ VAStatus RequestQuerySurfaceStatus(VADriverContextP context, struct request_data *driver_data = context->pDriverData; struct object_surface *surface_object; + request_log("ENTER RequestQuerySurfaceStatus(surf=%u)\n", surface_id); + surface_object = SURFACE(driver_data, surface_id); if (surface_object == NULL) return VA_STATUS_ERROR_INVALID_SURFACE; *status = surface_object->status; + request_log(" -> status=%d (Ready=%d Rendering=%d Displaying=%d)\n", + *status, VASurfaceReady, VASurfaceRendering, + VASurfaceDisplaying); + return VA_STATUS_SUCCESS; }