From 0aa292fb84299fb76a8054c83565e11472f71d03 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Tue, 5 Apr 2022 14:37:48 +0200 Subject: [PATCH] Improve MMAP handling --- hw/buffer.c | 2 +- hw/buffer_list.c | 2 ++ hw/buffer_queue.c | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/hw/buffer.c b/hw/buffer.c index d091414..2340194 100644 --- a/hw/buffer.c +++ b/hw/buffer.c @@ -54,7 +54,7 @@ buffer_t *buffer_open(const char *name, buffer_list_t *buf_list, int index) { buf->dma_fd = v4l2_exp.fd; } - if (buf_list->do_capture) { + if (buf_list->do_capture && buf_list->do_mmap) { buf->used = 0; buffer_consumed(buf); } diff --git a/hw/buffer_list.c b/hw/buffer_list.c index c2851ec..480d1a3 100644 --- a/hw/buffer_list.c +++ b/hw/buffer_list.c @@ -13,10 +13,12 @@ buffer_list_t *buffer_list_open(const char *name, struct device_s *dev, unsigned switch(type) { case V4L2_BUF_TYPE_VIDEO_OUTPUT: buf_list->do_mmap = do_mmap; + buf_list->do_dma = do_mmap; break; case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: buf_list->do_mmap = do_mmap; + buf_list->do_dma = do_mmap; buf_list->do_mplanes = true; break; diff --git a/hw/buffer_queue.c b/hw/buffer_queue.c index 464e6ab..eaa0658 100644 --- a/hw/buffer_queue.c +++ b/hw/buffer_queue.c @@ -74,7 +74,7 @@ buffer_t *buffer_list_find_slot(buffer_list_t *buf_list) buffer_t *buf = NULL; for (int i = 0; i < buf_list->nbufs; i++) { - if (!buf_list->bufs[i]->enqueued) { + if (!buf_list->bufs[i]->enqueued && buf_list->bufs[i]->mmap_reflinks == 1) { buf = buf_list->bufs[i]; break; }