diff options
author | Niels De Graef <Niels.DeGraef@barco.com> | 2018-11-14 12:22:02 +0100 |
---|---|---|
committer | Niels De Graef <niels.degraef@barco.com> | 2019-06-03 16:06:23 +0200 |
commit | a3fb239344b9455e94c5489be40a98ac53de5468 (patch) | |
tree | 555d1f6ce305dd2442f5b03150109121698d16d1 /cogl/cogl/driver/gl/cogl-texture-2d-gl.c | |
parent | d3ed857ebc346727c2ce12c3fa2ecfa1bd10a37d (diff) | |
download | mutter-a3fb239344b9455e94c5489be40a98ac53de5468.tar.gz |
WIP: wayland: add basic support for non-RGBA textureswip/nielsdg/add-yuv-support-gnome-3-32
Up until now, we didn't support sending YUV textures to the Wayland
server. This was for several reasons:
* We draw onto an RGBA framebuffer, so any other color format needs to
be converted to that color space. Since we don't want to lose a lot of
performance, this is ideally done on the GPU (using shaders).
* YUV formats can consist of several planes (for example NV12, a common
format in decoded video frames consists of a Y-plane and a subsampled
UV-plane). Mutter always assumed that any texture it got was
representable by a `CoglTexture`, which does not have this kind of
concept.
To deal with this, we introduce a new "texture": a
`CoglMultiPlaneTexture` which consists of multiple CoglTextures, each
representing a plane in the texture we got. It also provides support
for CoglSnippets which can convert the colorspace if necessary.
What changes are in this commit:
* Introduce a new CoglMultiPlaneTexture object. Right now it is not
implemented as a CoglTexture to prevent any confusion (but it is
somewhat related to CoglMetaTexture)
* Added some extra values to the CoglPixelFormat enum that deal with YUV
* Make the necessary changes in MetaWaylandBuffer, so that it knows how
to deal with incoming buffers (for example EGLImages and shm buffers)
* This also introduces some changes in MetaDmaBuf, as that is also a
different kind of buffer we can receive from wayland.
Acknowledgements
* There was a lot of prior art already done by the authors of Weston,
CoglGstVideoSink and ClutterGstSink
* My employer Barco for allowing me to work on this
Diffstat (limited to 'cogl/cogl/driver/gl/cogl-texture-2d-gl.c')
-rw-r--r-- | cogl/cogl/driver/gl/cogl-texture-2d-gl.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/cogl/cogl/driver/gl/cogl-texture-2d-gl.c b/cogl/cogl/driver/gl/cogl-texture-2d-gl.c index e36c3523e..cc23f1161 100644 --- a/cogl/cogl/driver/gl/cogl-texture-2d-gl.c +++ b/cogl/cogl/driver/gl/cogl-texture-2d-gl.c @@ -209,6 +209,8 @@ allocate_from_bitmap (CoglTexture2D *tex_2d, GLenum gl_format; GLenum gl_type; + g_warning ("allocate_from_bitmap()"); + internal_format = _cogl_texture_determine_internal_format (tex, cogl_bitmap_get_format (bmp)); @@ -349,6 +351,8 @@ allocate_from_gl_foreign (CoglTexture2D *tex_2d, GLint gl_compressed = GL_FALSE; GLenum gl_int_format = 0; + g_warning ("allocate_from_egl_image_foreign()"); + if (!ctx->texture_driver->allows_foreign_gl_target (ctx, GL_TEXTURE_2D)) { _cogl_set_error (error, |