[Mesa-dev] 10bit HEVC decoding for RadeonSI

Peter Frühberger peter.fruehberger at gmail.com
Thu Jan 26 18:37:37 UTC 2017


Hi Christian,

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

> Am 26.01.2017 um 16:59 schrieb Peter Frühberger:
>
>
>
> 2017-01-26 16:36 GMT+01:00 Christian König <deathsimple at vodafone.de>:
>
>> Am 26.01.2017 um 12:16 schrieb Peter Frühberger:
>>
>> Hi Christian,
>>
>> 2017-01-26 12:00 GMT+01:00 Christian König < <deathsimple at vodafone.de>
>> 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.freedes
>> ktop.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?
>>
>>
>> Yes, I think so.
>>
>> Christian.
>>
>
> Fixed via: https://github.com/FernetMenta/kodi-agile/commit/
> bb73b5535e2f4b65772451c23f75503d04de69ef
> thanks for the heads up
>
>
> Great! Thanks a lot for cleaning that up so quickly.
>
> In that case I will just respond to such nonsense combinations with an
> error result.
>
> Christian.
>

just tell us when we can remove:
https://github.com/FernetMenta/kodi-agile/blob/master/xbmc/cores/VideoPlayer/DVDCodecs/Video/VAAPI.cpp#L534

:-)

Best regards
Peter


>
>
> Peter
>
>
>>
>>
>>
>> Regards
>> Peter
>>
>>
>>
>>
>>>
>>>
>>>> afterwards we just do drm / egl interop, via:
>>>> https://github.com/FernetMenta/kodi-agile/blob/master/xbmc/c
>>>> ores/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
>>
>>
>>
>
>
> --
>                    Key-ID:     0x1A995A9B
>                    keyserver: 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/83927ee6/attachment.html>


More information about the mesa-dev mailing list