st/va: also honors interlaced preference when providing a video format
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 Cc: <mesa-stable@lists.freedesktop.org> Signed-off-by: Julien Isorce <j.isorce@samsung.com> Tested-by: Víctor Manuel Jáquez Leal <vjaquez@igalia.com> Tested-by: Boyuan Zhang <boyuan.zhang@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com>
This commit is contained in:
@@ -632,24 +632,26 @@ vlVaCreateSurfaces2(VADriverContextP ctx, unsigned int format,
|
|||||||
|
|
||||||
memset(&templat, 0, sizeof(templat));
|
memset(&templat, 0, sizeof(templat));
|
||||||
|
|
||||||
if (expected_fourcc) {
|
templat.buffer_format = pscreen->get_video_param(
|
||||||
templat.buffer_format = VaFourccToPipeFormat(expected_fourcc);
|
|
||||||
templat.interlaced = 0;
|
|
||||||
} else {
|
|
||||||
templat.buffer_format = pscreen->get_video_param
|
|
||||||
(
|
|
||||||
pscreen,
|
pscreen,
|
||||||
PIPE_VIDEO_PROFILE_UNKNOWN,
|
PIPE_VIDEO_PROFILE_UNKNOWN,
|
||||||
PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
|
PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
|
||||||
PIPE_VIDEO_CAP_PREFERED_FORMAT
|
PIPE_VIDEO_CAP_PREFERED_FORMAT
|
||||||
);
|
);
|
||||||
templat.interlaced = pscreen->get_video_param
|
templat.interlaced = pscreen->get_video_param(
|
||||||
(
|
|
||||||
pscreen,
|
pscreen,
|
||||||
PIPE_VIDEO_PROFILE_UNKNOWN,
|
PIPE_VIDEO_PROFILE_UNKNOWN,
|
||||||
PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
|
PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
|
||||||
PIPE_VIDEO_CAP_PREFERS_INTERLACED
|
PIPE_VIDEO_CAP_PREFERS_INTERLACED
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (expected_fourcc) {
|
||||||
|
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);
|
templat.chroma_format = ChromaToPipe(format);
|
||||||
|
Reference in New Issue
Block a user