From 1aab95de7ce3e60d723a91707e5c7b926cfad4eb Mon Sep 17 00:00:00 2001 From: Kamil Debski Date: Wed, 2 Jul 2014 17:54:34 +0200 Subject: v4l2-mfc-example: Add support for DMABUF buffer sharing This patch adds support for buffer sharing with DMABUF. Now FIMC can take DMABUF buffers from MFC and DRM. Signed-off-by: Kamil Debski --- v4l2-mfc-example/drm.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'v4l2-mfc-example/drm.c') diff --git a/v4l2-mfc-example/drm.c b/v4l2-mfc-example/drm.c index 188d394..d53a0b4 100644 --- a/v4l2-mfc-example/drm.c +++ b/v4l2-mfc-example/drm.c @@ -78,13 +78,25 @@ int drm_open(struct instance *i, char *name) return -1; } args.handle = i->drm.gem[n].handle; - i->drm.mmap[n].handle = i->drm.gem[n].handle; - i->drm.mmap[n].size = i->drm.gem[n].size; - ret = ioctl(i->drm.fd, DRM_IOCTL_EXYNOS_GEM_MMAP, &i->drm.mmap[n]); - if (ret < 0) { - ioctl(i->drm.fd, DRM_IOCTL_GEM_CLOSE, &args); - err("Failed to mmap gem"); - return -1; + + if (i->fimc.dmabuf) { + ret = drmPrimeHandleToFD(i->drm.fd, i->drm.gem[n].handle, DRM_CLOEXEC, &i->fimc.dbuf[n]); + if (ret < 0) { + ioctl(i->drm.fd, DRM_IOCTL_GEM_CLOSE, &args); + err("Failed to expbuf a gem object"); + return -1; + } + } else { + i->drm.mmap[n].handle = i->drm.gem[n].handle; + i->drm.mmap[n].size = i->drm.gem[n].size; + ret = ioctl(i->drm.fd, DRM_IOCTL_EXYNOS_GEM_MMAP, &i->drm.mmap[n]); + if (ret < 0) { + ioctl(i->drm.fd, DRM_IOCTL_GEM_CLOSE, &args); + err("Failed to mmap gem"); + return -1; + } + i->drm.p[n] = (char *)(unsigned int)i->drm.mmap[n].mapped; + i->fimc.p[n] = (char *)(unsigned int)i->drm.mmap[n].mapped; } ret = drmModeAddFB(i->drm.fd, i->drm.width, i->drm.height, 32, 32, 4 * i->drm.width, i->drm.gem[n].handle, &fb_id); @@ -96,8 +108,6 @@ int drm_open(struct instance *i, char *name) return -1; } i->drm.fb[n] = fb_id; - i->drm.p[n] = (char *)(unsigned int)i->drm.mmap[n].mapped; - i->fimc.p[n] = (char *)(unsigned int)i->drm.mmap[n].mapped; } snprintf(mode, 32, "%dx%d", crtc->width, crtc->height); -- cgit v1.2.3