summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: ca60ce0)
raw | patch | inline | side by side (parent: ca60ce0)
author | Nikhil Devshatwar <nikhil.nd@ti.com> | |
Thu, 5 Dec 2013 22:15:30 +0000 (03:45 +0530) | ||
committer | Amarinder Bindra <a-bindra@ti.com> | |
Wed, 11 Dec 2013 06:27:05 +0000 (11:57 +0530) |
Each call to omap_bo_dmabuf returns a duplicated dmabuf fd
Therefore, fd from reqbuf (exported first time) will not match with
fd of the same buffer while queueing due to dup(fd)
Using buffer->fd array for saving dmabuf fds
Signed-off-by: Nikhil Devshatwar <nikhil.nd@ti.com>
Therefore, fd from reqbuf (exported first time) will not match with
fd of the same buffer while queueing due to dup(fd)
Using buffer->fd array for saving dmabuf fds
Signed-off-by: Nikhil Devshatwar <nikhil.nd@ti.com>
util/v4l2.c | patch | blob | history |
diff --git a/util/v4l2.c b/util/v4l2.c
index b161448a35105b0239818f2fb10b023575a58677..1a5c905186a0a8d9e71a76704c3353800d591261 100644 (file)
--- a/util/v4l2.c
+++ b/util/v4l2.c
bool mcf = false;
v4l2 = calloc(1, sizeof(*v4l2));
- v4l2->fd = open("/dev/video0", O_RDWR);
+ v4l2->fd = open("/dev/video1", O_RDWR);
ret = ioctl(v4l2->fd, VIDIOC_G_FMT, &format);
if (ret < 0) {
.count = n,
};
uint32_t i;
- int ret;
+ int ret,dmafd;
if (v4l2->v4l2bufs) {
// maybe eventually need to support this?
for (i = 0; i < reqbuf.count; i++) {
assert(bufs[i]->nbo == 1); /* TODO add multi-planar support */
+ /* Call omap_bo_dmabuf only once, to export only once
+ * Otherwise, each call will return duplicated fds
+ * This way, every call to omap_bo_dmabuf will return a new fd
+ * Which won't match with any previously exported fds
+ * Instead, store dma fd in buf->fd[] */
+ dmafd = omap_bo_dmabuf(bufs[i]->bo[0]);
+ bufs[i]->fd[0] = dmafd;
v4l2->v4l2bufs[i] = (struct v4l2_buffer){
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
.memory = V4L2_MEMORY_DMABUF,
.index = i,
- .m.fd = omap_bo_dmabuf(bufs[i]->bo[0]),
+ .m.fd = dmafd,
};
+ MSG("Exported buffer fd = %d\n", dmafd);
ret = ioctl(v4l2->fd, VIDIOC_QUERYBUF, &v4l2->v4l2bufs[i]);
- v4l2->v4l2bufs[i].m.fd = omap_bo_dmabuf(bufs[i]->bo[0]);
+ v4l2->v4l2bufs[i].m.fd = dmafd;
if (ret) {
ERROR("VIDIOC_QUERYBUF failed: %s (%d)", strerror(errno), ret);
return ret;
assert(buf->nbo == 1); /* TODO add multi-planar support */
- fd = omap_bo_dmabuf(buf->bo[0]);
+ fd = buf->fd[0];
for (i = 0; i < v4l2->nbufs; i++) {
if (v4l2->v4l2bufs[i].m.fd == fd) {
MSG("QBUF: idx=%d, fd=%d", v4l2buf->index, v4l2buf->m.fd);
ret = ioctl(v4l2->fd, VIDIOC_QBUF, v4l2buf);
- v4l2buf->m.fd = omap_bo_dmabuf(buf->bo[0]);
+ v4l2buf->m.fd = buf->fd[0];
if (ret) {
ERROR("VIDIOC_QBUF failed: %s (%d)", strerror(errno), ret);
}
assert(buf->nbo == 1); /* TODO add multi-planar support */
- MSG("DQBUF: idx=%d, fd=%d", v4l2buf.index, omap_bo_dmabuf(buf->bo[0]));
+ MSG("DQBUF: idx=%d, fd=%d", v4l2buf.index, buf->fd[0]);
return buf;
}