summaryrefslogtreecommitdiff
path: root/utils/omap-wbcap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utils/omap-wbcap.cpp')
-rw-r--r--utils/omap-wbcap.cpp29
1 files changed, 19 insertions, 10 deletions
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 <kms++/kms++.h>
#include <kms++util/kms++util.h>
-#include <kms++util/videodevice.h>
+#include <v4l2++/videodevice.h>
#define CAMERA_BUF_QUEUE_SIZE 5
@@ -21,17 +21,21 @@ static vector<DumbFramebuffer*> 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);