[Libva] problem when tiling is disabled on decoded surfaces

Julien Isorce julien.isorce at gmail.com
Wed Oct 26 08:42:56 UTC 2016


Hi,

Thx for the detailed.

If I understand correctly, the intel HW video decoder can only output a
tiled layout. But if I export the surface as a dmabuf and I use mmap on it,
I will still be able to access pixels using width/pitch like if it was
linear.
If I need to share it with a non-intel gpu I would need VPP since this unit
can output a linear layout (I can configure it by clearing the flag
VA_SURFACE_EXTBUF_DESC_ENABLE_TILING when calling vaCreateSurfaces)

Is it correct ?

Cheers
Julien


On 8 October 2016 at 04:09, Xiang, Haihao <haihao.xiang at intel.com> wrote:

>
> Hi Julien,
>
> Please do not set obj_surface->user_disable_tiling to true unless you
> know the usage, e.g. your applicate allocates a VA surface via libva
> and shares this surface between libva and camera, some cameras only
> support linear memory.
>
> In your case, it is the right behavior if you saw garbage because all
> surfaces are linear however HW requires a tiled surface for decoding.
>
> Thanks
> Haihao
>
>
> > On 10/08/2016 02:13 AM, Sean V Kelley wrote:
> > > On Fri, Oct 7, 2016 at 11:00 AM, Sean V Kelley<sean.v.kelley at intel.
> > > com>  wrote:
> > > > On Thu, Oct 6, 2016 at 1:20 AM, Julien Isorce<julien.isorce at gmail
> > > > .com>  wrote:
> > > > > Hi,
> > > > >
> > > > > In intel vaapi driver I tried disabling tiling with:
> > > > >
> > > > > ---   a/src/i965_drv_video.c
> > > > > +++ b/src/i965_drv_video.c
> > > > > @@ -1534,7 +1534,7 @@ i965_CreateSurfaces2(
> > > > >           obj_surface->orig_height = height;
> > > > > -        obj_surface->user_disable_tiling = false;
> > > > > +       obj_surface->user_disable_tiling = true;
> > > > >           obj_surface->user_h_stride_set = false;
> > > > >
> > > > > But then gst-launch-1.0 filesrc
> > > > > location=~/Downloads/simpson.mp4 ! qtdemux !
> > > > > vaapih264dec ! xvimagesink shows garbage, like if the memory
> > > > > was still
> > > > > tiled.
> > > > >
> > > >
> > > > We implemented disable tiling for a very specific purpose.  We
> > > > were
> > > > sharing surfaces decoded via Imagination Tech driver on a
> > > > Baytrail,
> > > > and wrapped that for the X11 backend rendering.  I was using two
> > > > drivers (IMG and GEN).
> > > > At the time, the driver assumed that all surfaces were
> > > > tiled.  Since
> > > > IMG was not tiled, we needed a way to pass through.  I'll look at
> > > > this
> > > > more closely.
> > > >
> > > > But for hardware GEN decoding we assume the surface to be
> > > > tiled.  The
> > > > intent was never to allow disabling tilint for purposes of actual
> > > > h264
> > > > decode.
> > >
> > > The GEN hardware really only uses the tiling format for
> > > decoding/encoding.  The flag
> > > is historical and used with other drivers (remember VA-API can be
> > > used
> > > with IMG).  In my
> > > case I triggered it by our having added a new VA memory type for
> > > when
> > > I needed to share surfaces.
> > >
> > > But again, we don't decode non-tiled.  We simply give you the
> > > flexibility to create those surfaces non-tiled
> > > for historical and conversion reasons as the one above I gave you.
> >
> > Hi, Julien
> >
> >      What Sean said is correct. When the surface is used for the
> > decoding, it should be tiled, which is the hardware requirement. If
> > it
> > is non-tiled, the hardware can't work as expected.
> >      The non-tiled surface can be used for the other purpose. For
> > example: buffer sharing (Some other componenets/driver wants to share
> > the NV12 buffer with libva driver. And it requires that it is non-
> > tiled.
> > The default buffer for NV12 format is tiled. So one option is added
> > so
> > that the non-tiled NV12 buffer is created).
> >
> >      BTW: the tiling or non-tiling surface is transparent to the
> > upper
> > middleware. Although one tiling buffer is created internally, the
> > upper
> > middleware can map it and then access it based on width/pitch.
> >
> >      Not sure whether it helps to clarify your concerns.
> >
> > Thanks
> >     Yakui
> >
> > >
> > > Sean
> > >
> > >
> > > >
> > > > I'll have to refresh my memory a bit.  I'll let Haihao chime in.
> > > >
> > > > Sean
> > > >
> > > >
> > > > > I tried to debug it and but all calls to dri_bo_get_tiling
> > > > > returns
> > > > > I915_TILING_NONE as expected.
> > > > >
> > > > > Also see vainfo output below.
> > > > >
> > > > > Thx
> > > > > Julien
> > > > >
> > > > > libva info: VA-API version 0.39.4
> > > > > libva info: va_getDriverName() returns 0
> > > > > libva info: Trying to open
> > > > > /home/julien/gst/master/prefix/lib/dri/i965_drv_video.so
> > > > > libva info: Found init function __vaDriverInit_0_39
> > > > > libva info: va_openDriver() returns 0
> > > > > vainfo: VA-API version: 0.39 (libva 1.7.3.pre1)
> > > > > vainfo: Driver version: Intel i965 driver for Intel(R) Haswell
> > > > > Mobile -
> > > > > 1.7.3.pre1 (1.7.2-115-gfa3d1c3)
> > > > > vainfo: Supported profile and entrypoints
> > > > >        VAProfileMPEG2Simple            :    VAEntrypointVLD
> > > > >        VAProfileMPEG2Simple            :    VAEntrypointEncSlic
> > > > > e
> > > > >        VAProfileMPEG2Main              :    VAEntrypointVLD
> > > > >        VAProfileMPEG2Main              :    VAEntrypointEncSlic
> > > > > e
> > > > >        VAProfileH264ConstrainedBaseline:    VAEntrypointVLD
> > > > >        VAProfileH264ConstrainedBaseline:    VAEntrypointEncSlic
> > > > > e
> > > > >        VAProfileH264Main               :    VAEntrypointVLD
> > > > >        VAProfileH264Main               :    VAEntrypointEncSlic
> > > > > e
> > > > >        VAProfileH264High               :    VAEntrypointVLD
> > > > >        VAProfileH264High               :    VAEntrypointEncSlic
> > > > > e
> > > > >        VAProfileH264MultiviewHigh      :    VAEntrypointVLD
> > > > >        VAProfileH264MultiviewHigh      :    VAEntrypointEncSlic
> > > > > e
> > > > >        VAProfileH264StereoHigh         :    VAEntrypointVLD
> > > > >        VAProfileH264StereoHigh         :    VAEntrypointEncSlic
> > > > > e
> > > > >        VAProfileVC1Simple              :    VAEntrypointVLD
> > > > >        VAProfileVC1Main                :    VAEntrypointVLD
> > > > >        VAProfileVC1Advanced            :    VAEntrypointVLD
> > > > >        VAProfileNone                   :    VAEntrypointVideoPr
> > > > > oc
> > > > >        VAProfileJPEGBaseline           :    VAEntrypointVLD
> > > > >        VAProfileVP9Profile0            :    VAEntrypointVLD
> > > > >
> > > > > _______________________________________________
> > > > > Libva mailing list
> > > > > Libva at lists.freedesktop.org
> > > > > https://lists.freedesktop.org/mailman/listinfo/libva
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Sean V. Kelley<sean.v.kelley at intel.com>
> > > > Open Source Technology Center / SSG
> > > > Intel Corp.
> > >
> > >
> > >
> >
> > _______________________________________________
> > Libva mailing list
> > Libva at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/libva
> _______________________________________________
> Libva mailing list
> Libva at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/libva
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/libva/attachments/20161026/837c915d/attachment-0001.html>


More information about the Libva mailing list