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:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user