[Mesa-dev] [PATCH] st/va: also honors interlaced preference when providing a video format

Christian König christian.koenig at amd.com
Thu Sep 8 07:50:49 UTC 2016


Am 08.09.2016 um 09:34 schrieb Julien Isorce:
> This fixes a crash when using the prefered video format with vaapisink
> on Nvidia hardwares.
> Also caught by the following assert:
>    nouveau_vp3_video.c:91: Assertion `templat->interlaced' failed.
>
> TEST= gst-launch-1.0 videotestsrc ! video/x-raw, format=NV12 ! vaapisink
>
> Signed-off-by: Julien Isorce <j.isorce at samsung.com>
> Tested-by: Víctor Manuel Jáquez Leal <vjaquez at igalia.com>

Reviewed-by: Christian König <christian.koenig at amd.com>.

But somebody should double check if that doesn't break transcoding for 
AMD GPUs.

We had some problems with that in the past.

Regards,
Christian.

> ---
>   src/gallium/state_trackers/va/surface.c | 36 +++++++++++++++++----------------
>   1 file changed, 19 insertions(+), 17 deletions(-)
>
> diff --git a/src/gallium/state_trackers/va/surface.c b/src/gallium/state_trackers/va/surface.c
> index 3ee1cdd..00df69d 100644
> --- a/src/gallium/state_trackers/va/surface.c
> +++ b/src/gallium/state_trackers/va/surface.c
> @@ -632,24 +632,26 @@ vlVaCreateSurfaces2(VADriverContextP ctx, unsigned int format,
>   
>      memset(&templat, 0, sizeof(templat));
>   
> +   templat.buffer_format = pscreen->get_video_param(
> +      pscreen,
> +      PIPE_VIDEO_PROFILE_UNKNOWN,
> +      PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
> +      PIPE_VIDEO_CAP_PREFERED_FORMAT
> +   );
> +   templat.interlaced = pscreen->get_video_param(
> +      pscreen,
> +      PIPE_VIDEO_PROFILE_UNKNOWN,
> +      PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
> +      PIPE_VIDEO_CAP_PREFERS_INTERLACED
> +   );
> +
>      if (expected_fourcc) {
> -      templat.buffer_format = VaFourccToPipeFormat(expected_fourcc);
> -      templat.interlaced = 0;
> -   } else {
> -      templat.buffer_format = pscreen->get_video_param
> -            (
> -               pscreen,
> -               PIPE_VIDEO_PROFILE_UNKNOWN,
> -               PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
> -               PIPE_VIDEO_CAP_PREFERED_FORMAT
> -               );
> -      templat.interlaced = pscreen->get_video_param
> -            (
> -               pscreen,
> -               PIPE_VIDEO_PROFILE_UNKNOWN,
> -               PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
> -               PIPE_VIDEO_CAP_PREFERS_INTERLACED
> -               );
> +      enum pipe_format expected_format = VaFourccToPipeFormat(expected_fourcc);
> +
> +      if (expected_format != templat.buffer_format || memory_attibute)
> +        templat.interlaced = 0;
> +
> +      templat.buffer_format = expected_format;
>      }
>   
>      templat.chroma_format = ChromaToPipe(format);




More information about the mesa-dev mailing list