diff options
author | Mark Thompson <[email protected]> | 2016-09-26 23:22:31 +0100 |
---|---|---|
committer | Christian König <[email protected]> | 2016-09-27 14:21:44 +0200 |
commit | a543f231d712dbdfd309ff589766179c5cb32b20 (patch) | |
tree | a2e80e7eb6c80fd55787524c1a5925b529e933aa /src/gallium | |
parent | df920367bf85d3a326da5928a73f35844a4a8c72 (diff) |
st/va: Fix vaSyncSurface with no outstanding operation
Fixes crash if the application doesn't do what the state tracker expects.
Reviewed-by: Christian König <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/state_trackers/va/surface.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/va/surface.c b/src/gallium/state_trackers/va/surface.c index 115db43f791..173e7d91ac6 100644 --- a/src/gallium/state_trackers/va/surface.c +++ b/src/gallium/state_trackers/va/surface.c @@ -111,6 +111,12 @@ vlVaSyncSurface(VADriverContextP ctx, VASurfaceID render_target) return VA_STATUS_ERROR_INVALID_SURFACE; } + if (!surf->feedback) { + // No outstanding operation: nothing to do. + pipe_mutex_unlock(drv->mutex); + return VA_STATUS_SUCCESS; + } + context = handle_table_get(drv->htab, surf->ctx); if (!context) { pipe_mutex_unlock(drv->mutex); @@ -126,6 +132,7 @@ vlVaSyncSurface(VADriverContextP ctx, VASurfaceID render_target) if (frame_diff < 2) context->decoder->flush(context->decoder); context->decoder->get_feedback(context->decoder, surf->feedback, &(surf->coded_buf->coded_size)); + surf->feedback = NULL; } pipe_mutex_unlock(drv->mutex); return VA_STATUS_SUCCESS; |