[Mesa-dev] [PATCH 3/7] st/va: in VaPutImage only destroy previous buffer if pipe->create_video_buffer succeeds
Emil Velikov
emil.l.velikov at gmail.com
Mon Oct 19 09:04:53 PDT 2015
On 17 October 2015 at 00:14, Julien Isorce <julien.isorce at gmail.com> wrote:
> If formats are not the same it seems to re-create the video
> buffer with the right format.
> But if the creation of this new video buffer fails the surface
> loose its video buffer.
> Let's just destroy the previous buffer on success.
>
The formatting looks strange.
> Signed-off-by: Julien Isorce <j.isorce at samsung.com>
> ---
> src/gallium/state_trackers/va/image.c | 19 ++++++++++++++-----
> 1 file changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/src/gallium/state_trackers/va/image.c b/src/gallium/state_trackers/va/image.c
> index c7fbe1a..d3b0cd5 100644
> --- a/src/gallium/state_trackers/va/image.c
> +++ b/src/gallium/state_trackers/va/image.c
> @@ -338,13 +338,22 @@ vlVaPutImage(VADriverContextP ctx, VASurfaceID surface, VAImageID image,
> if (format == PIPE_FORMAT_NONE)
> return VA_STATUS_ERROR_OPERATION_FAILED;
>
> - if (surf->buffer == NULL || format != surf->buffer->buffer_format) {
> + if (format != surf->buffer->buffer_format) {
> + struct pipe_video_buffer *tmp_buf = NULL;
Please drop the initialiser.
> + enum pipe_format old_surf_format = surf->templat.buffer_format;
> +
> + surf->templat.buffer_format = format;
> + tmp_buf = drv->pipe->create_video_buffer(drv->pipe, &surf->templat);
> +
> + if (!tmp_buf) {
> + surf->templat.buffer_format = old_surf_format;
> + return VA_STATUS_ERROR_ALLOCATION_FAILED;
> + }
> +
> if (surf->buffer)
Drop the if (unconditionally destroy the buffer). We're already
checking it before we get here.
With the above sorted
Reviewed-by: Emil Velikov <emil.l.velikov at gmail.com>
-Emil
More information about the mesa-dev
mailing list