From dfc6df83cf311989caadcceecc729f74f9e3676a Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Sun, 10 Apr 2022 09:46:05 +0200 Subject: [PATCH] Move `device/hw/links.h` to `device/links.h` --- cmd/camera_stream.c | 2 +- device/camera.c | 2 +- device/camera.h | 2 +- device/camera_decoder.c | 2 +- device/camera_direct.c | 2 +- device/camera_isp.c | 2 +- device/camera_legacy_isp.c | 2 +- device/hw/buffer_list.c | 4 ++-- device/hw/buffer_list.h | 8 ++++---- device/hw/buffer_queue.c | 16 ++++++++++++++++ device/hw/device.c | 6 +++--- device/{hw => }/links.c | 36 +++++++++++++++--------------------- device/{hw => }/links.h | 0 13 files changed, 47 insertions(+), 37 deletions(-) rename device/{hw => }/links.c (92%) rename device/{hw => }/links.h (100%) diff --git a/cmd/camera_stream.c b/cmd/camera_stream.c index e771b6b..997a120 100644 --- a/cmd/camera_stream.c +++ b/cmd/camera_stream.c @@ -1,7 +1,7 @@ #include "device/hw/buffer.h" #include "device/hw/buffer_list.h" #include "device/hw/device.h" -#include "device/hw/links.h" +#include "device/links.h" #include "device/hw/v4l2.h" #include "http/http.h" #include "opts/opts.h" diff --git a/device/camera.c b/device/camera.c index 00dd9e0..b05aaae 100644 --- a/device/camera.c +++ b/device/camera.c @@ -2,7 +2,7 @@ #include "device/hw/device.h" #include "device/hw/buffer_list.h" -#include "device/hw/links.h" +#include "device/links.h" #include "device/hw/v4l2.h" void camera_init(camera_t *camera) diff --git a/device/camera.h b/device/camera.h index 7e89c6a..684d0bb 100644 --- a/device/camera.h +++ b/device/camera.h @@ -1,6 +1,6 @@ #pragma once -#include "device/hw/links.h" +#include "device/links.h" #include "device/hw/device.h" #define MAX_DEVICES 20 diff --git a/device/camera_decoder.c b/device/camera_decoder.c index ae8d4f2..dc101f3 100644 --- a/device/camera_decoder.c +++ b/device/camera_decoder.c @@ -3,7 +3,7 @@ #include "device/hw/buffer.h" #include "device/hw/buffer_list.h" #include "device/hw/device.h" -#include "device/hw/links.h" +#include "device/links.h" #include "device/hw/v4l2.h" #include "device/hw/buffer_list.h" #include "http/http.h" diff --git a/device/camera_direct.c b/device/camera_direct.c index a6731b5..dfcdf3a 100644 --- a/device/camera_direct.c +++ b/device/camera_direct.c @@ -3,7 +3,7 @@ #include "device/hw/buffer.h" #include "device/hw/buffer_list.h" #include "device/hw/device.h" -#include "device/hw/links.h" +#include "device/links.h" #include "device/hw/v4l2.h" #include "device/hw/buffer_list.h" #include "http/http.h" diff --git a/device/camera_isp.c b/device/camera_isp.c index 718fa9b..c256888 100644 --- a/device/camera_isp.c +++ b/device/camera_isp.c @@ -3,7 +3,7 @@ #include "device/hw/buffer.h" #include "device/hw/buffer_list.h" #include "device/hw/device.h" -#include "device/hw/links.h" +#include "device/links.h" #include "device/hw/v4l2.h" #include "device/hw/buffer_list.h" #include "http/http.h" diff --git a/device/camera_legacy_isp.c b/device/camera_legacy_isp.c index eabf80b..b5f9844 100644 --- a/device/camera_legacy_isp.c +++ b/device/camera_legacy_isp.c @@ -3,7 +3,7 @@ #include "device/hw/buffer.h" #include "device/hw/buffer_list.h" #include "device/hw/device.h" -#include "device/hw/links.h" +#include "device/links.h" #include "device/hw/v4l2.h" #include "device/hw/buffer_list.h" #include "http/http.h" diff --git a/device/hw/buffer_list.c b/device/hw/buffer_list.c index 2f97deb..fff99fa 100644 --- a/device/hw/buffer_list.c +++ b/device/hw/buffer_list.c @@ -169,7 +169,7 @@ error: return -1; } -int buffer_list_request(buffer_list_t *buf_list, int nbufs) +int buffer_list_set_buffers(buffer_list_t *buf_list, int nbufs) { struct v4l2_requestbuffers v4l2_req = {0}; v4l2_req.count = nbufs; @@ -206,7 +206,7 @@ error: return -1; } -int buffer_list_stream(buffer_list_t *buf_list, bool do_on) +int buffer_list_set_stream(buffer_list_t *buf_list, bool do_on) { if (!buf_list) { return -1; diff --git a/device/hw/buffer_list.h b/device/hw/buffer_list.h index ee6de95..109c9af 100644 --- a/device/hw/buffer_list.h +++ b/device/hw/buffer_list.h @@ -6,6 +6,7 @@ typedef struct buffer_s buffer_t; typedef struct device_s device_t; +struct pollfd; typedef struct buffer_list_s { char *name; @@ -33,14 +34,13 @@ typedef struct buffer_list_s { buffer_list_t *buffer_list_open(const char *name, struct device_s *dev, unsigned type, bool do_mmap); void buffer_list_close(buffer_list_t *buf_list); +int buffer_list_set_stream(buffer_list_t *buf_list, bool do_on); int buffer_list_set_format(buffer_list_t *buffer_list, unsigned width, unsigned height, unsigned format, unsigned bytesperline); -int buffer_list_request(buffer_list_t *buf_list, int nbufs); - -int buffer_list_stream(buffer_list_t *buf_list, bool do_on); +int buffer_list_set_buffers(buffer_list_t *buf_list, int nbufs); +int buffer_list_pollfd(buffer_list_t *buf_list, struct pollfd *pollfd, bool can_dequeue); buffer_t *buffer_list_find_slot(buffer_list_t *buf_list); buffer_t *buffer_list_dequeue(buffer_list_t *buf_list); int buffer_list_count_enqueued(buffer_list_t *buf_list); - int buffer_list_enqueue(buffer_list_t *buf_list, buffer_t *dma_buf); int buffer_list_refresh_states(buffer_list_t *buf_list); diff --git a/device/hw/buffer_queue.c b/device/hw/buffer_queue.c index 6429e47..d43d74b 100644 --- a/device/hw/buffer_queue.c +++ b/device/hw/buffer_queue.c @@ -210,3 +210,19 @@ buffer_t *buffer_list_dequeue(buffer_list_t *buf_list) error: return NULL; } + +int buffer_list_pollfd(buffer_list_t *buf_list, struct pollfd *pollfd, bool can_dequeue) +{ + int count_enqueued = buffer_list_count_enqueued(buf_list); + + // Can something be dequeued? + pollfd->fd = buf_list->device->fd; + pollfd->events = POLLHUP; + if (count_enqueued > 0 && can_dequeue) + if (buf_list->do_capture) + pollfd->events |= POLLIN; + else + pollfd->events |= POLLOUT; + pollfd->revents = 0; + return 0; +} diff --git a/device/hw/device.c b/device/hw/device.c index 5ebe905..959e24a 100644 --- a/device/hw/device.c +++ b/device/hw/device.c @@ -116,7 +116,7 @@ int device_open_buffer_list(device_t *dev, bool do_capture, unsigned width, unsi goto error; } - if (buffer_list_request(*buf_list, nbufs) < 0) { + if (buffer_list_set_buffers(*buf_list, nbufs) < 0) { goto error; } @@ -160,13 +160,13 @@ int device_set_stream(device_t *dev, bool do_on) xioctl(dev_name(dev), dev->fd, do_on ? VIDIOC_SUBSCRIBE_EVENT : VIDIOC_UNSUBSCRIBE_EVENT, &sub); if (dev->capture_list) { - if (buffer_list_stream(dev->capture_list, do_on) < 0) { + if (buffer_list_set_stream(dev->capture_list, do_on) < 0) { return -1; } } if (dev->output_list) { - if (buffer_list_stream(dev->output_list, do_on) < 0) { + if (buffer_list_set_stream(dev->output_list, do_on) < 0) { return -1; } } diff --git a/device/hw/links.c b/device/links.c similarity index 92% rename from device/hw/links.c rename to device/links.c index 389131c..3a75c23 100644 --- a/device/hw/links.c +++ b/device/links.c @@ -1,4 +1,4 @@ -#include "device/hw/links.h" +#include "device/links.h" #include "device/hw/device.h" #include "device/hw/buffer.h" #include "device/hw/buffer_list.h" @@ -44,19 +44,15 @@ int _build_fds(link_t *all_links, struct pollfd *fds, link_t **links, buffer_lis continue; } - int count_enqueued = buffer_list_count_enqueued(sink); - // Can something be dequeued? - fds[n].fd = sink->device->fd; - fds[n].events = POLLHUP; - if (count_enqueued > 0) - fds[n].events |= POLLOUT; - fds[n].revents = 0; - buf_lists[n] = sink; - links[n] = NULL; - n++; + if (buffer_list_pollfd(sink, &fds[n], true) == 0) { + buf_lists[n] = sink; + links[n] = NULL; + n++; + } // Can this chain pauses + int count_enqueued = buffer_list_count_enqueued(sink); if (!sink->device->paused && count_enqueued < sink->nbufs) { paused = false; } @@ -67,7 +63,7 @@ int _build_fds(link_t *all_links, struct pollfd *fds, link_t **links, buffer_lis if (source->device->output_device) { source->device->output_device->paused = paused; } - + int count_enqueued = buffer_list_count_enqueued(source); bool can_dequeue = count_enqueued > 0; @@ -78,13 +74,11 @@ int _build_fds(link_t *all_links, struct pollfd *fds, link_t **links, buffer_lis } #endif - fds[n].fd = source->device->fd; - fds[n].events = POLLHUP; - if (can_dequeue) - fds[n].events |= POLLIN; - fds[n].revents = 0; - buf_lists[n] = source; - links[n] = link; + if (buffer_list_pollfd(source, &fds[n], can_dequeue) == 0) { + buf_lists[n] = source; + links[n] = link; + n++; + } n++; } @@ -244,12 +238,12 @@ int links_stream(link_t *all_links, bool do_stream) bool streaming = true; link_t *link = &all_links[i]; - if (buffer_list_stream(link->source, streaming) < 0) { + if (buffer_list_set_stream(link->source, streaming) < 0) { E_LOG_ERROR(link->source, "Failed to start streaming"); } for (int j = 0; link->sinks[j]; j++) { - if (buffer_list_stream(link->sinks[j], streaming) < 0) { + if (buffer_list_set_stream(link->sinks[j], streaming) < 0) { E_LOG_ERROR(link->sinks[j], "Failed to start streaming"); } } diff --git a/device/hw/links.h b/device/links.h similarity index 100% rename from device/hw/links.h rename to device/links.h