From: Indrajit Das <indrajit-kumar....@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....@amd.com> Signed-off-by: Indrajit Das <indrajit-kumar....@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....@amd.com> Sent: Friday, January 4, 2019 7:54 PM To: Das, Indrajit-kumar <indrajit-kumar....@amd.com>; mesa-dev@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....@amd.com> On 1/3/19 5:20 AM, Das, Indrajit-kumar wrote: > From: Indrajit Das <indrajit-kumar....@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....@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; > } > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev