From 2b1a8f48f3a414e565cefb809f3e6a7c6aa5f8a7 Mon Sep 17 00:00:00 2001 From: Tomi Valkeinen Date: Wed, 6 Oct 2021 10:26:00 +0300 Subject: Split V4L2 code into separate libs Create v4l2++ library and pyv4l2, which are independent from the rest of the kms++. Signed-off-by: Tomi Valkeinen --- utils/omap-wbcap.cpp | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) (limited to 'utils/omap-wbcap.cpp') diff --git a/utils/omap-wbcap.cpp b/utils/omap-wbcap.cpp index 8033869..5080159 100644 --- a/utils/omap-wbcap.cpp +++ b/utils/omap-wbcap.cpp @@ -6,7 +6,7 @@ #include #include -#include +#include #define CAMERA_BUF_QUEUE_SIZE 5 @@ -21,17 +21,21 @@ static vector s_ready_fbs; class WBStreamer { public: - WBStreamer(VideoStreamer* streamer, Crtc* crtc, PixelFormat pixfmt) + WBStreamer(v4l2::VideoStreamer* streamer, Crtc* crtc, PixelFormat pixfmt) : m_capdev(*streamer) { Videomode m = crtc->mode(); m_capdev.set_port(crtc->idx()); - m_capdev.set_format(pixfmt, m.hdisplay, m.vdisplay / (m.interlace() ? 2 : 1)); - m_capdev.set_queue_size(s_fbs.size()); + m_capdev.set_format((v4l2::PixelFormat)pixfmt, m.hdisplay, m.vdisplay / (m.interlace() ? 2 : 1)); + m_capdev.set_queue_size(s_fbs.size(), v4l2::VideoMemoryType::DMABUF); for (auto fb : s_free_fbs) { - m_capdev.queue(fb); + v4l2::VideoBuffer vbuf {}; + vbuf.m_mem_type = v4l2::VideoMemoryType::DMABUF; + vbuf.m_fd = fb->prime_fd(0); + + m_capdev.queue(vbuf); s_wb_fbs.push_back(fb); } @@ -59,9 +63,10 @@ public: DumbFramebuffer* Dequeue() { - auto fb = m_capdev.dequeue(); + auto vbuf = m_capdev.dequeue(); - auto iter = find(s_wb_fbs.begin(), s_wb_fbs.end(), fb); + auto iter = find_if(s_wb_fbs.begin(), s_wb_fbs.end(), [fd=vbuf.m_fd](auto& fb) { return fb->prime_fd(0) == fd; }); + auto fb = *iter; s_wb_fbs.erase(iter); s_ready_fbs.insert(s_ready_fbs.begin(), fb); @@ -77,13 +82,17 @@ public: auto fb = s_free_fbs.back(); s_free_fbs.pop_back(); - m_capdev.queue(fb); + v4l2::VideoBuffer vbuf {}; + vbuf.m_mem_type = v4l2::VideoMemoryType::DMABUF; + vbuf.m_fd = fb->prime_fd(0); + + m_capdev.queue(vbuf); s_wb_fbs.insert(s_wb_fbs.begin(), fb); } private: - VideoStreamer& m_capdev; + v4l2::VideoStreamer& m_capdev; }; class WBFlipState : private PageFlipHandlerBase @@ -304,7 +313,7 @@ int main(int argc, char** argv) if (dst_conn_name.empty()) EXIT("No destination connector defined"); - VideoDevice vid("/dev/video11"); + v4l2::VideoDevice vid("/dev/video11"); Card card; ResourceManager resman(card); -- cgit v1.2.3