st/va: set the visible image dimensions in vlVaDeriveImage
authorJulien Isorce <jisorce@oblong.com>
Wed, 8 May 2019 19:40:50 +0000 (12:40 -0700)
committerJulien Isorce <julien.isorce@gmail.com>
Fri, 10 May 2019 17:13:31 +0000 (17:13 +0000)
This fixes video being rendered incorrectly.

User wants height of 360 but internally pipe_video_buffer 's height
is 368 in the test below.

Test:
  GST_GL_PLATFORM=egl gst-launch-1.0 videotestsrc ! video/x-raw, width=868, height=360, format=NV12 ! vaapipostproc ! glimagesink

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110443
Signed-off-by: Julien Isorce <jisorce@oblong.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Leo Liu <leo.liu@amd.com>
src/gallium/state_trackers/va/image.c

index d4b9ce5596dcf5fd682ec26d48cce57f1a587044..9e3a49f1996f9a3137813fcb4fccd44da47cf328 100644 (file)
@@ -236,10 +236,12 @@ vlVaDeriveImage(VADriverContextP ctx, VASurfaceID surface, VAImage *image)
 
    img->format.fourcc = PipeFormatToVaFourcc(surf->buffer->buffer_format);
    img->buf = VA_INVALID_ID;
-   img->width = surf->buffer->width;
-   img->height = surf->buffer->height;
+   /* Use the visible dimensions. */
+   img->width = surf->templat.width;
+   img->height = surf->templat.height;
    img->num_palette_entries = 0;
    img->entry_bytes = 0;
+   /* Image data size is computed using internal dimensions. */
    w = align(surf->buffer->width, 2);
    h = align(surf->buffer->height, 2);