[Mesa-dev] st/va: Return correct status from vlVaQuerySurfaceStatus

Das, Indrajit-kumar Indrajit-kumar.Das at amd.com
Tue Jan 8 17:08:08 UTC 2019


From: Indrajit Das <indrajit-kumar.das at amd.com>
Date: Thu, 3 Jan 2019 14:36:33 +0530
Subject: [PATCH] st/va: Return correct status from vlVaQuerySurfaceStatus

This ensures that during encoding, applications can get
the correct status of the surface before submitting
more operations on the same.

Reviewed-by: Leo Liu <leo.liu at amd.com>
Signed-off-by: Indrajit Das <indrajit-kumar.das at amd.com>
---
 src/gallium/state_trackers/va/surface.c | 31 +++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/src/gallium/state_trackers/va/surface.c b/src/gallium/state_trackers/va/surface.c
index cc26efe..e7ed64b 100644
--- a/src/gallium/state_trackers/va/surface.c
+++ b/src/gallium/state_trackers/va/surface.c
@@ -146,9 +146,40 @@ vlVaSyncSurface(VADriverContextP ctx, VASurfaceID render_target)
 VAStatus
 vlVaQuerySurfaceStatus(VADriverContextP ctx, VASurfaceID render_target, VASurfaceStatus *status)
 {
+   vlVaDriver *drv;
+   vlVaSurface *surf;
+   vlVaContext *context;
+
    if (!ctx)
       return VA_STATUS_ERROR_INVALID_CONTEXT;
 
+   drv = VL_VA_DRIVER(ctx);
+   if (!drv)
+      return VA_STATUS_ERROR_INVALID_CONTEXT;
+
+   mtx_lock(&drv->mutex);
+
+   surf = handle_table_get(drv->htab, render_target);
+   if (!surf || !surf->buffer) {
+      mtx_unlock(&drv->mutex);
+      return VA_STATUS_ERROR_INVALID_SURFACE;
+   }
+
+   context = handle_table_get(drv->htab, surf->ctx);
+   if (!context) {
+      mtx_unlock(&drv->mutex);
+      return VA_STATUS_ERROR_INVALID_CONTEXT;
+   }
+
+   if (context->decoder->entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE) {
+      if(surf->feedback == NULL)
+         *status=VASurfaceReady;
+      else
+         *status=VASurfaceRendering;
+   }
+
+   mtx_unlock(&drv->mutex);
+
    return VA_STATUS_SUCCESS;
 }
 
-- 
2.17.1


-----Original Message-----
From: Liu, Leo <Leo.Liu at amd.com> 
Sent: Friday, January 4, 2019 7:54 PM
To: Das, Indrajit-kumar <Indrajit-kumar.Das at amd.com>; mesa-dev at lists.freedesktop.org
Subject: Re: st/va: Return correct status from vlVaQuerySurfaceStatus

Please add some commit messages. With that, the patch is

Reviewed-by: Leo Liu <leo.liu at amd.com>

On 1/3/19 5:20 AM, Das, Indrajit-kumar wrote:
> From: Indrajit Das <indrajit-kumar.das at amd.com>
> Date: Thu, 3 Jan 2019 14:36:33 +0530
> Subject: [PATCH] st/va: Return correct status from vlVaQuerySurfaceStatus
>
> Signed-off-by: Indrajit Das <indrajit-kumar.das at amd.com>
> ---
>   src/gallium/state_trackers/va/surface.c | 31 +++++++++++++++++++++++++
>   1 file changed, 31 insertions(+)
>
> diff --git a/src/gallium/state_trackers/va/surface.c b/src/gallium/state_trackers/va/surface.c
> index cc26efe..e7ed64b 100644
> --- a/src/gallium/state_trackers/va/surface.c
> +++ b/src/gallium/state_trackers/va/surface.c
> @@ -146,9 +146,40 @@ vlVaSyncSurface(VADriverContextP ctx, VASurfaceID render_target)
>   VAStatus
>   vlVaQuerySurfaceStatus(VADriverContextP ctx, VASurfaceID render_target, VASurfaceStatus *status)
>   {
> +   vlVaDriver *drv;
> +   vlVaSurface *surf;
> +   vlVaContext *context;
> +
>      if (!ctx)
>         return VA_STATUS_ERROR_INVALID_CONTEXT;
>   
> +   drv = VL_VA_DRIVER(ctx);
> +   if (!drv)
> +      return VA_STATUS_ERROR_INVALID_CONTEXT;
> +
> +   mtx_lock(&drv->mutex);
> +
> +   surf = handle_table_get(drv->htab, render_target);
> +   if (!surf || !surf->buffer) {
> +      mtx_unlock(&drv->mutex);
> +      return VA_STATUS_ERROR_INVALID_SURFACE;
> +   }
> +
> +   context = handle_table_get(drv->htab, surf->ctx);
> +   if (!context) {
> +      mtx_unlock(&drv->mutex);
> +      return VA_STATUS_ERROR_INVALID_CONTEXT;
> +   }
> +
> +   if (context->decoder->entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE) {
> +      if(surf->feedback == NULL)
> +         *status=VASurfaceReady;
> +      else
> +         *status=VASurfaceRendering;
> +   }
> +
> +   mtx_unlock(&drv->mutex);
> +
>      return VA_STATUS_SUCCESS;
>   }
>   


More information about the mesa-dev mailing list