diff options
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | src/wfdsource.c | 17 |
2 files changed, 14 insertions, 5 deletions
diff --git a/configure.ac b/configure.ac index 695899d..3db6bd4 100644 --- a/configure.ac +++ b/configure.ac @@ -19,7 +19,7 @@ LT_INIT PKG_PROG_PKG_CONFIG() -PKG_CHECK_MODULES(OWFDRM, [libudev libdrm egl]) +PKG_CHECK_MODULES(OWFDRM, [libudev libdrm egl gbm]) PKG_CHECK_MODULES(TEST, [egl gl]) if test "x$GCC" = "xyes"; then diff --git a/src/wfdsource.c b/src/wfdsource.c index 5756179..7e7a251 100644 --- a/src/wfdsource.c +++ b/src/wfdsource.c @@ -28,6 +28,7 @@ #include "wfddevice.h" #include "wfdsource.h" +#include <gbm.h> #define EGL_EGLEXT_PROTOTYPES #include <EGL/egl.h> #include <EGL/eglext.h> @@ -37,21 +38,29 @@ struct wfd_source { uint32_t pitch; }; +/* provided by mesa, but not part of the public api */ +struct gbm_device * +_gbm_mesa_get_device(int fd); + static int egl_image_export(struct wfd_device *device, EGLImageKHR image, uint32_t *handle, uint32_t *pitch) { int fd = wfd_device_get_attribi(device, WFD_DEVICE_ID); - EGLDisplay dpy = eglGetDRMDisplayMESA(fd); + struct gbm_device *gbm = _gbm_mesa_get_device(fd); + struct gbm_bo *bo; - eglExportDRMImageMESA(dpy, image, - NULL, (EGLint *) handle, (EGLint *) pitch); + bo = gbm_bo_create_from_egl_image(gbm, eglGetDisplay(gbm), image, + 1, 1, GBM_BO_USE_SCANOUT); + *handle = gbm_bo_get_handle(bo).u32; + *pitch = gbm_bo_get_pitch(bo); + gbm_bo_destroy(bo); + gbm_device_destroy(gbm); return 0; } - void wfd_source_destroy(struct wfd_device *device, struct wfd_source *source) |