Summary: | YUV I420 SHM broken with GStreamer/Weston | ||
---|---|---|---|
Product: | Wayland | Reporter: | Fabien Lahoudere <fabien.lahoudere> |
Component: | weston | Assignee: | Wayland bug list <wayland-bugs> |
Status: | RESOLVED FIXED | QA Contact: | |
Severity: | normal | ||
Priority: | medium | CC: | daniel, fabien.lahoudere |
Version: | unspecified | ||
Hardware: | All | ||
OS: | Linux (All) | ||
Whiteboard: | |||
i915 platform: | i915 features: |
Description
Fabien Lahoudere
2017-10-02 15:36:44 UTC
Something's wrong with either Weston's I420/SHM import path (wouldn't be surprised if it was that), or GStreamer's usage of the same. This works around it, with obvious performance consequences: gst-launch-1.0 videotestsrc ! videoconvert ! video/x-raw,format=(string)RGB ! waylandsink First, it would be interesting to validate how GStreamer is rendering the buffer. It should be laid out, in order: Y plane: offset == 0, stride == (width * 1), i.e. 1bpp, size == (stride * height), i.e. full height U plane: offset == size[Y], stride == (width/2 * 1), i.e. 1bpp but half width, size == (stride * height/2), i.e. half height V plane: offset == offset[U] + size[U], stride == (width/2 * 1), size == (stride * height/2), i.e. half width/height If GStreamer is rendering correctly, this comes in to Weston at libweston/gl-renderer.c's gl_renderer_attach_shm(). In the YUV420 case (aka GStreamer's I420), this sets up the textures as described above. It then uploads the content in gl_renderer_flush_damage(), where it uploads according to the parameters set in attach_shm. It looks from a quick inspection of the code that this is done correctly (i.e. dividing by hsub/vsub to halve the dimensions of the U/V planes), but it would be good to validate the parameters passed to glTex(Sub)Image2D() for the upload, after validating GStreamer's buffer layout. Weston fix: https://patchwork.freedesktop.org/patch/180767/ I test the patch and everything works fine now. This landed in the tree a while ago. |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.