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