[Mesa-dev] [PATCH kmscube v2] Detect gst_bo_map/_unmap and use it (or avoid it)

Daniel Díaz daniel.diaz at linaro.org
Fri Jul 14 16:29:51 UTC 2017


Those functions are not available on libMali, thus breaking
builds and creating havoc.

Removing the specific parts of the code that deal with
gbm_bo_map() and gbm_bo_unmap() renders the kmscube utility
a little less useful, but still valuable.

Signed-off-by: Daniel Díaz <daniel.diaz at linaro.org>
Cc: Rob Clark <robdclark at gmail.com>
Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com>

---
v2: Formatting, add informational message.

 Makefile.am   | 5 ++++-
 configure.ac  | 3 +++
 gst-decoder.c | 7 ++++++-
 kmscube.c     | 4 ++++
 4 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index a36087d..ab4adbf 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -43,7 +43,6 @@ kmscube_SOURCES = \
 	common.c \
 	common.h \
 	cube-smooth.c \
-	cube-tex.c \
 	drm-atomic.c \
 	drm-common.c \
 	drm-common.h \
@@ -59,3 +58,7 @@ kmscube_LDADD += $(GST_LIBS)
 kmscube_CFLAGS += $(GST_CFLAGS)
 kmscube_SOURCES += cube-video.c gst-decoder.c
 endif
+
+if ENABLE_GBM_MAP
+kmscube_SOURCES += cube-tex.c
+endif
diff --git a/configure.ac b/configure.ac
index 8397f7b..c7f1f4d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -65,5 +65,8 @@ if test "x$enable_gbm_modifiers" = xyes; then
 	AC_DEFINE(HAVE_GBM_MODIFIERS, 1, [Define if you can use GBM properties.])
 fi
 
+AC_CHECK_LIB([gbm], [gbm_bo_map], [HAVE_GBM_BO_MAP=yes], [])
+AM_CONDITIONAL(ENABLE_GBM_MAP, [test "x$HAVE_GBM_BO_MAP" = "xyes"])
+
 AC_CONFIG_FILES([Makefile])
 AC_OUTPUT
diff --git a/gst-decoder.c b/gst-decoder.c
index 2d6d581..b84980e 100644
--- a/gst-decoder.c
+++ b/gst-decoder.c
@@ -332,6 +332,7 @@ set_last_frame(struct decoder *dec, EGLImage frame, GstSample *samp)
 	dec->last_samp = samp;
 }
 
+#if HAVE_GBM_BO_MAP
 // TODO this could probably be a helper re-used by cube-tex:
 static int
 buf_to_fd(const struct gbm *gbm, int size, void *ptr)
@@ -357,6 +358,7 @@ buf_to_fd(const struct gbm *gbm, int size, void *ptr)
 
 	return fd;
 }
+#endif
 
 static EGLImage
 buffer_to_image(struct decoder *dec, GstBuffer *buf)
@@ -410,12 +412,15 @@ buffer_to_image(struct decoder *dec, GstBuffer *buf)
 
 	if (is_dmabuf_mem) {
 		dmabuf_fd = dup(gst_dmabuf_memory_get_fd(mem));
-	} else {
+	}
+#if HAVE_GBM_BO_MAP
+	else {
 		GstMapInfo map_info;
 		gst_buffer_map(buf, &map_info, GST_MAP_READ);
 		dmabuf_fd = buf_to_fd(dec->gbm, map_info.size, map_info.data);
 		gst_buffer_unmap(buf, &map_info);
 	}
+#endif
 
 	if (dmabuf_fd < 0) {
 		GST_ERROR("could not obtain DMABUF FD");
diff --git a/kmscube.c b/kmscube.c
index 3a2c4dd..276dc55 100644
--- a/kmscube.c
+++ b/kmscube.c
@@ -142,7 +142,11 @@ int main(int argc, char *argv[])
 	else if (mode == VIDEO)
 		egl = init_cube_video(gbm, video);
 	else
+#if HAVE_GBM_BO_MAP
 		egl = init_cube_tex(gbm, mode);
+#else
+		printf("gbm_bo_map() support missing\n");
+#endif
 
 	if (!egl) {
 		printf("failed to initialize EGL\n");
-- 
2.7.4



More information about the mesa-dev mailing list