[Mesa-dev] 10bit HEVC decoding for RadeonSI

Peter Frühberger peter.fruehberger at gmail.com
Thu Jan 26 11:16:24 UTC 2017


Hi Christian,

2017-01-26 12:00 GMT+01:00 Christian König <deathsimple at vodafone.de>:

> Hi Peter,
>
> Am 25.01.2017 um 19:45 schrieb Peter Frühberger:
>
>>
>>
>>     Peter, Rainer any idea what I'm missing here? Do you guys use some
>>     modified ffmpeg for Kodi or how does that work for you?
>>
>>
>> do you set the format correctly, e.g.: https://github.com/FernetMenta
>> /kodi-agile/blob/master/xbmc/cores/VideoPlayer/DVDCodecs/
>> Video/VAAPI.cpp#L2697 to create the surfaces?
>>
>
> Well the problem here is that the VA-API interface is not consistent and
> I'm not sure how to implement it correctly.
>
> See your code for example:
>
>> VASurfaceAttrib attribs[1], *attrib;
>>
>> attrib = attribs;
>>
>> attrib->flags = VA_SURFACE_ATTRIB_SETTABLE;
>>
>> attrib->type = VASurfaceAttribPixelFormat;
>>
>> attrib->value.type = VAGenericValueTypeInteger;
>>
>> attrib->value.value.i = VA_FOURCC_NV12;
>>
>>
>>
> First Kodi specifies that NV12 should be used which implies that this is a
> 8bit surface.
>
> // create surfaces
>>
>> VASurfaceID surfaces[32];
>>
>> unsigned int format = VA_RT_FORMAT_YUV420;
>>
>> if (m_config.profile == VAProfileHEVCMain10)
>>
>> format = VA_RT_FORMAT_YUV420_10BPP;
>>
> But then Kodi requests a 10bit surface. Now what is the correct thing to
> do here?
>
> I can either create an NV12 surface, which would be 8bit but would result
> in either an error message or only 8bit dithering during decode.
>
> Or I can promote the surface to 10bit, which would result in a P010 or
> rather P016 format.
>
> Or and that is actually what I think would be best the VA-API driver
> should trow an error indicating that the application requested something
> impossible.


Yes you are right. Looks like a driver specific:
https://cgit.freedesktop.org/vaapi/intel-driver/tree/src/i965_drv_video.c#n1338

seems they use it as a hint to the subsampling: SUBSAMPLE_YUV420 and then
later compare with with the format again to choose.

>From code pov we should set the attribute to: VA_FOURCC_P010, right?

Regards
Peter




>
>
>> afterwards we just do drm / egl interop, via:
>> https://github.com/FernetMenta/kodi-agile/blob/master/xbmc/
>> cores/VideoPlayer/DVDCodecs/Video/VAAPI.cpp#L1374
>>
>
> I'm not sure if that will ever work correctly. The problem is that VA-API
> leaks to the application what the data layout in the surface is. As soon as
> we turn on tilling that will only work with rather crude hacks.
>
> I will try to get it working, but probably need help from you guys as well.
>
> Regards,
> Christian.
>
> You need ffmpeg 3.2.
>>
>> If you use vaPutSurface it will end up as RGBA32 or something, which is
>> why we use the above way.
>>
>> Best regards
>> Peter
>>
>>
>>     Cheers,
>>     Christian.
>>
>>
>>
>>
>>
>> --
>>                    Key-ID: 0x1A995A9B
>>                    keyserver: pgp.mit.edu <http://pgp.mit.edu>
>> ==============================================================
>> Fingerprint: 4606 DA19 EC2E 9A0B 0157  C81B DA07 CF63 1A99 5A9B
>>
>
>
>


-- 
                   Key-ID:     0x1A995A9B
                   keyserver: pgp.mit.edu
==============================================================
Fingerprint: 4606 DA19 EC2E 9A0B 0157  C81B DA07 CF63 1A99 5A9B
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170126/45dc479c/attachment-0001.html>


More information about the mesa-dev mailing list