On 17.04.2018 15:44, Pekka Paalanen wrote:
On Mon, 9 Apr 2018 09:56:43 -0400
Ilia Mirkin <imir...@alum.mit.edu> wrote:

On Mon, Apr 9, 2018 at 6:57 AM, Volker Vogelhuber
<v.vogelhu...@digitalendoscopy.de> wrote:
I would have guessed, that the use case would be quite common, as having a
Live video source rendered via OpenGL shouldn't be a very special topic and
having a zero copy approach should be better than having to copy the data

Having a live video source is a pretty special topic. (Esp having one
that you ever use.)

FWIW, in Wayland architecture this would be the preferred path to play
back video. A hardware decoder or a camera provides frames via V4L2
API, which the player app sends to a Wayland compositor as dmabuf fds,
which then imports them via EGL to GL for GPU compositing or directly to
KMS for hardware overlay plane.

Weston the compositor does the EGL import, and should "soon" do the KMS
import as well automatically when possible. It also has a test app
weston-simple-dmabuf-v4l which uses a V4L device to provide dmabuf and
send them to the compositor for importing. It has instructions on how
to set up vivid for testing.
Interesting, if I find the time I will have a look at this test app. Unfortunately I doubt this will be the case very soon.

Volker, did you try querying V4L2 for the right pitch, ensure you got
bytes vs. pixels correct, and feed that into
EGL_DMA_BUF_PLANE0_PITCH_EXT?
I played around with the pitch values. Although the value (400) itself seems to be correct, as the i915 implementations handles it correctly, it seems like changing the pitch value does not have any effect until I change it to 16. Then it suddenly has an effect, but one that seems to be too much. So instead of having a distortion to the right I have one to the left. That brought me to the conclusion that there might be some alignment restrictions anywhere in the code, but I couldn't find any check or change of the pitch or width value. I still wonder where the information of 163840bytes for the whole buffer size comes from when calling drmCommandWriteRead(drm->fd, DRM_NOUVEAU_GEM_INFO, &req, sizeof(req)); Maybe it's just that the kernel driver always calculates it's size from page blocks, but even then the readout of the buffer should be correct with the given stride and pitch.

If Nouveau cannot handle that correctly, it would hopefully refuse the
import.
Although it would not solve my problem, it would be at least a proper handling of the API calls. I still doubt the implementations is not supported, as I got the image data rendered. It's just it is not rendered correctly. So it seems like data transfer is successfully done in general, but only not with the right parameters.

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to