[Mesa-dev] [PATCH] st/va: also honors interlaced preference when providing a video format
Zhang, Boyuan
Boyuan.Zhang at amd.com
Thu Sep 8 20:49:42 UTC 2016
Hi Leo, Christian and Julien,
I tested the patch with Vaapi Encoding and Transcoding, it seems working fine. We are using "VAAPI_DISABLE_INTERLACE" env, so interlaced is always disabled.
Regards,
Boyuan
-----Original Message-----
From: Liu, Leo
Sent: September-08-16 9:50 AM
To: Koenig, Christian; Julien Isorce; mesa-dev at lists.freedesktop.org
Cc: mesa-stable at lists.freedesktop.org; Zhang, Boyuan; Julien Isorce
Subject: Re: [PATCH] st/va: also honors interlaced preference when providing a video format
On 09/08/2016 03:50 AM, Christian König wrote:
> 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.
VA-API encode use "VAAPI_DISABLE_INTERLACE" env for making sure not interlaced, but better to double check.
Boyuan, can you test on this patch?
Regards,
Leo
>
> 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