From 1112be661e06d25dd44f4db7ed61eaf11cafe078 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Tue, 5 Apr 2022 15:03:47 +0200 Subject: [PATCH] Fix reflinks --- cmd/main.c | 20 ++++++++++++++++++-- hw/buffer_queue.c | 9 ++++++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/cmd/main.c b/cmd/main.c index 387785c..0ac58b9 100644 --- a/cmd/main.c +++ b/cmd/main.c @@ -33,15 +33,31 @@ int main(int argc, char *argv[]) //camera.width = 4656; camera.height = 3496; //camera.width = 3840; camera.height = 2160; //camera.width = 1280; camera.height = 720; - camera.nbufs = 4; + camera.nbufs = 1; + +#if 1 camera.format = V4L2_PIX_FMT_SRGGB10P; - //camera.format = V4L2_PIX_FMT_YUYV; camera.allow_dma = false; if (camera_open(&camera, "/dev/video2") < 0) { goto error; } +#else + //camera.width = 1920; camera.height = 1080; + camera.width = 1280; camera.height = 720; + // camera.format = V4L2_PIX_FMT_YUYV; + camera.format = V4L2_PIX_FMT_MJPEG; + camera.allow_dma = false; + + if (camera_open(&camera, "/dev/video0") < 0) { + goto error; + } +#endif #if 0 + if (camera_configure_decoder(&camera) < 0) { + goto error; + } +#elif 0 if (camera_configure_direct(&camera) < 0) { goto error; } diff --git a/hw/buffer_queue.c b/hw/buffer_queue.c index 32f3f03..d991b4e 100644 --- a/hw/buffer_queue.c +++ b/hw/buffer_queue.c @@ -30,7 +30,11 @@ bool buffer_consumed(buffer_t *buf) } pthread_mutex_lock(&buffer_lock); - if (!buf->enqueued && buf->mmap_reflinks == 1) { + if (buf->mmap_reflinks > 0) { + buf->mmap_reflinks--; + } + + if (!buf->enqueued && buf->mmap_reflinks == 0) { // update used bytes if (buf->buf_list->do_mplanes) { buf->v4l2_plane.bytesused = buf->used; @@ -44,17 +48,16 @@ bool buffer_consumed(buffer_t *buf) buf->enqueued_time_us = get_monotonic_time_us(NULL, &buf->v4l2_buffer.timestamp); E_XIOCTL(buf, buf->buf_list->device->fd, VIDIOC_QBUF, &buf->v4l2_buffer, "Can't queue buffer."); buf->enqueued = true; - buf->mmap_reflinks--; } pthread_mutex_unlock(&buffer_lock); return true; - error: { buffer_t *mmap_source = buf->mmap_source; buf->mmap_source = NULL; + buf->mmap_reflinks--; pthread_mutex_unlock(&buffer_lock); if (mmap_source) {