DEBUG: ENTER logging at libva entry points to trace Firefox call flow

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) <noreply@anthropic.com>
This commit is contained in:
2026-05-04 14:17:52 +00:00
parent 37c0e720fc
commit 7da2b27454
2 changed files with 17 additions and 0 deletions
+6
View File
@@ -184,6 +184,8 @@ VAStatus RequestDeriveImage(VADriverContextP context, VASurfaceID surface_id,
VAImageFormat format; VAImageFormat format;
VAStatus status; VAStatus status;
request_log("ENTER RequestDeriveImage(surf=%u)\n", surface_id);
surface_object = SURFACE(driver_data, surface_id); surface_object = SURFACE(driver_data, surface_id);
if (surface_object == NULL) if (surface_object == NULL)
return VA_STATUS_ERROR_INVALID_SURFACE; return VA_STATUS_ERROR_INVALID_SURFACE;
@@ -216,6 +218,7 @@ VAStatus RequestDeriveImage(VADriverContextP context, VASurfaceID surface_id,
VAStatus RequestQueryImageFormats(VADriverContextP context, VAStatus RequestQueryImageFormats(VADriverContextP context,
VAImageFormat *formats, int *formats_count) VAImageFormat *formats, int *formats_count)
{ {
request_log("ENTER RequestQueryImageFormats\n");
formats[0].fourcc = VA_FOURCC_NV12; formats[0].fourcc = VA_FOURCC_NV12;
*formats_count = 1; *formats_count = 1;
@@ -237,6 +240,9 @@ VAStatus RequestGetImage(VADriverContextP context, VASurfaceID surface_id,
struct object_image *image_object; struct object_image *image_object;
VAImage *image; 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); surface_object = SURFACE(driver_data, surface_id);
if (surface_object == NULL) if (surface_object == NULL)
return VA_STATUS_ERROR_INVALID_SURFACE; return VA_STATUS_ERROR_INVALID_SURFACE;
+11
View File
@@ -341,6 +341,8 @@ VAStatus RequestDestroySurfaces(VADriverContextP context,
VAStatus RequestSyncSurface(VADriverContextP context, VASurfaceID surface_id) VAStatus RequestSyncSurface(VADriverContextP context, VASurfaceID surface_id)
{ {
request_log("ENTER RequestSyncSurface(surf=%u)\n", surface_id);
struct request_data *driver_data = context->pDriverData; struct request_data *driver_data = context->pDriverData;
struct object_surface *surface_object; struct object_surface *surface_object;
VAStatus status; VAStatus status;
@@ -480,6 +482,9 @@ VAStatus RequestQuerySurfaceAttributes(VADriverContextP context,
VASurfaceAttrib *attributes, VASurfaceAttrib *attributes,
unsigned int *attributes_count) unsigned int *attributes_count)
{ {
request_log("ENTER RequestQuerySurfaceAttributes(config=%u, attrs_buf=%p)\n",
config, (void *)attributes);
struct request_data *driver_data = context->pDriverData; struct request_data *driver_data = context->pDriverData;
VASurfaceAttrib *attributes_list; VASurfaceAttrib *attributes_list;
unsigned int attributes_list_size = V4L2_REQUEST_MAX_CONFIG_ATTRIBUTES * 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 request_data *driver_data = context->pDriverData;
struct object_surface *surface_object; struct object_surface *surface_object;
request_log("ENTER RequestQuerySurfaceStatus(surf=%u)\n", surface_id);
surface_object = SURFACE(driver_data, surface_id); surface_object = SURFACE(driver_data, surface_id);
if (surface_object == NULL) if (surface_object == NULL)
return VA_STATUS_ERROR_INVALID_SURFACE; return VA_STATUS_ERROR_INVALID_SURFACE;
*status = surface_object->status; *status = surface_object->status;
request_log(" -> status=%d (Ready=%d Rendering=%d Displaying=%d)\n",
*status, VASurfaceReady, VASurfaceRendering,
VASurfaceDisplaying);
return VA_STATUS_SUCCESS; return VA_STATUS_SUCCESS;
} }