From f6309fa3b364f8c10f0a13e0f0f00343382806b6 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Sun, 10 Apr 2022 16:05:58 +0200 Subject: [PATCH] Add `buffer_v4l2_t` --- device/buffer.h | 6 +++--- device/buffer_queue.c | 5 ++--- device/v4l2/buffer.c | 7 ++++++- device/v4l2/v4l2.h | 4 ++++ 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/device/buffer.h b/device/buffer.h index f4585f1..f1ab6a9 100644 --- a/device/buffer.h +++ b/device/buffer.h @@ -22,9 +22,9 @@ typedef struct buffer_s { bool is_keyframe : 1; } flags; - struct { - unsigned flags; - } v4l2; + union { + struct buffer_v4l2_s *v4l2; + }; // State int mmap_reflinks; diff --git a/device/buffer_queue.c b/device/buffer_queue.c index a245d5f..f30a18f 100644 --- a/device/buffer_queue.c +++ b/device/buffer_queue.c @@ -151,13 +151,12 @@ buffer_t *buffer_list_dequeue(buffer_list_t *buf_list) buf->enqueued = false; buf->mmap_reflinks = 1; - E_LOG_DEBUG(buf_list, "Grabbed mmap buffer=%u, bytes=%d, used=%d, frame=%d, linked=%s, flags=%08x", + E_LOG_DEBUG(buf_list, "Grabbed mmap buffer=%u, bytes=%d, used=%d, frame=%d, linked=%s", buf->index, buf->length, buf->used, buf_list->frames, - buf->dma_source ? buf->dma_source->name : NULL, - buf->v4l2.flags); + buf->dma_source ? buf->dma_source->name : NULL); if (buf->dma_source) { buf->dma_source->used = 0; diff --git a/device/v4l2/buffer.c b/device/v4l2/buffer.c index 8a6f7db..9250a46 100644 --- a/device/v4l2/buffer.c +++ b/device/v4l2/buffer.c @@ -12,6 +12,8 @@ int v4l2_buffer_open(buffer_t *buf) buffer_list_t *buf_list = buf->buf_list; device_t *dev = buf_list->device; + buf->v4l2 = calloc(1, sizeof(buffer_v4l2_t)); + v4l2_buf.type = buf_list->v4l2->type; v4l2_buf.index = buf->index; @@ -70,6 +72,9 @@ void v4l2_buffer_close(buffer_t *buf) close(buf->dma_fd); buf->dma_fd = -1; } + + free(buf->v4l2); + buf->v4l2 = NULL; } int v4l2_buffer_enqueue(buffer_t *buf, const char *who) @@ -156,7 +161,7 @@ int v4l2_buffer_list_dequeue(buffer_list_t *buf_list, buffer_t **bufp) buf->used = v4l2_buf.bytesused; } - buf->v4l2.flags = v4l2_buf.flags; + buf->v4l2->flags = v4l2_buf.flags; buf->flags.is_keyframe = (v4l2_buf.flags & V4L2_BUF_FLAG_KEYFRAME) != 0; buf->captured_time_us = get_time_us(CLOCK_FROM_PARAMS, NULL, &v4l2_buf.timestamp, 0); return 0; diff --git a/device/v4l2/v4l2.h b/device/v4l2/v4l2.h index 7d45253..ba06640 100644 --- a/device/v4l2/v4l2.h +++ b/device/v4l2/v4l2.h @@ -20,6 +20,10 @@ typedef struct buffer_list_v4l2_s { int type; } buffer_list_v4l2_t; +typedef struct buffer_v4l2_s { + unsigned flags; +} buffer_v4l2_t; + int v4l2_device_open(device_t *dev); void v4l2_device_close(device_t *dev); int v4l2_device_set_decoder_start(device_t *dev, bool do_on);