[FFmpeg-devel] [PATCH, 4/7] lavu/hwcontext_vaapi: add vaapi_format_map support for 0YUV/Y210/Y410
Fu, Linjie
linjie.fu at intel.com
Sat Dec 28 04:10:49 EET 2019
> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of
> Mark Thompson
> Sent: Saturday, December 28, 2019 06:41
> To: ffmpeg-devel at ffmpeg.org
> Subject: Re: [FFmpeg-devel] [PATCH, 4/7] lavu/hwcontext_vaapi: add
> vaapi_format_map support for 0YUV/Y210/Y410
>
> On 04/12/2019 14:44, Linjie Fu wrote:
> > VA_RT_FORMAT describes the desired sampling format for surface.
> >
> > When creating surface, VA_RT_FORMAT will be used firstly to choose
> > the expected fourcc/media_format for the surface. And the fourcc
> > will be revised by the value of VASurfaceAttribPixelFormat.
> >
> > Add vaapi_format_map support for new pixel_format.
> > This is fundamental for both VA-API and QSV.
> >
> > Signed-off-by: Linjie Fu <linjie.fu at intel.com>
> > ---
> > libavutil/hwcontext_vaapi.c | 7 +++++++
> > 1 file changed, 7 insertions(+)
> >
> > diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c
> > index cf11764..296234b 100644
> > --- a/libavutil/hwcontext_vaapi.c
> > +++ b/libavutil/hwcontext_vaapi.c
> > @@ -116,6 +116,13 @@ static const VAAPIFormatDescriptor
> vaapi_format_map[] = {
> > #endif
> > MAP(UYVY, YUV422, UYVY422, 0),
> > MAP(YUY2, YUV422, YUYV422, 0),
> > +#ifdef VA_FOURCC_Y210
> > + MAP(Y210, YUV422_10, Y210, 0),
> > +#endif
> > + MAP(AYUV, YUV444, 0YUV, 0),
> > +#ifdef VA_FOURCC_Y410
> > + MAP(Y410, YUV444_10, Y410, 0),
> > +#endif
> > MAP(411P, YUV411, YUV411P, 0),
> > MAP(422V, YUV422, YUV440P, 0),
> > MAP(444P, YUV444, YUV444P, 0),
>
> (I've now bought an Ice Lake machine so that I can actually investigate what's
> going on here properly.)
Appreciated it.
> The real problem is that the formats advertised by the driver for H.265/VP9
> YUV 4:4:4 (AYUV and Y410) are incorrect. There isn't any alpha support
> anywhere in the hardware (none of the multilayer stuff), so using formats
> with alpha in them is wrong and makes all of the attempts to use it extremely
> confusing.
>
> To fix that we need to change the driver to use formats which actually reflect
> reality. This is mostly straightforward, because the inner code in the driver
> mainly cares about layout rather than what is actually in each channel.
>
> Some patches which kindof work (not particularly well tested):
>
> libva: <http://ixia.jkqxz.net/~mrt/4b8a1bb668ce23702f993f9ae7a8f96c/0001-
> Add-fourcc-values-for-YUV-4-4-4-formats.patch>
> iHD: <http://ixia.jkqxz.net/~mrt/4b8a1bb668ce23702f993f9ae7a8f96c/0001-
> Do-not-advertise-support-for-nonexistent-alpha-chann.patch>
I got some concerns for the modifications:
1. RT FORMAT YUV444 would not be bind with VA_FOURCC_444P any more
@@ -2136,10 +2151,13 @@ DdiMedia_CreateSurfaces2(
expected_fourcc = VA_FOURCC_Y216;
break;
case VA_RT_FORMAT_YUV444:
- expected_fourcc = VA_FOURCC_444P;
+ expected_fourcc = VA_FOURCC_XYUV;
break;
VAAPI decode of jpeg requires VA_RT_FORMAT_YUV444 with expected_fourcc = VA_FOURCC_444P.
(Though it's not used frequently), changing the expected fourcc into XYUV may cause a change for
media_format from Media_Format_444P to Media_Format_XYUV.
2. The changes in MediaLibvaCaps::QuerySurfaceAttributes which eliminate AYUV/Y410/Y416 may
affect the pipelines already implemented in MSDK and GStreamer. (If so, there is a lot to be done/rework)
> I've called the non-alpha formats XYUV and XV30 to match libdrm (see
> <https://cgit.freedesktop.org/mesa/drm/tree/include/drm/drm_fourcc.h#n
> 164>). The 12-bit case also needs some correction - it's currently using Y216
> and I think assuming that the user knows they need to ignore the alpha
> channel and the lower bits elsewhere, but we might need to have distinct
> formats to make it work properly outside the driver.
>
> - Mark
>
> PS: It might help to split out the 4:2:2 case (which doesn't have these
> problems because the formats there don't have fake alpha channels or
> unknown depth) to go forward, and look separately at fixing the driver for
> the others.
Thanks, I'll split and get 4:2:2 stuffs done firstly.
- linjie
BTW, what's the plan for submit these modifications in libva/media-driver?
More information about the ffmpeg-devel
mailing list