summaryrefslogtreecommitdiff
path: root/src/v4l2/v4l2_camera_proxy.cpp
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-08-02 22:47:05 +0300
committerJacopo Mondi <jacopo@jmondi.org>2022-08-03 15:07:20 +0200
commit29c09e3ab6c18c649d8510a1faee6c5a2b52c04a (patch)
tree1bc45a2900b1c539f4a2b0b116e0896407b05325 /src/v4l2/v4l2_camera_proxy.cpp
parentb7ca378b65e8ba936bf3c5631e16534a3376aec9 (diff)
libcamera: v4l2_pixelformat: Implement std::hash specialization
Inject a specialization of std::hash<> for the V4L2PixelFormat class in the std namespace to make it possible to store instances of the class in the std::unordered_map and std::unordered_set containers. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Tested-by: Paul Elder <paul.elder@ideasonboard.com>
Diffstat (limited to 'src/v4l2/v4l2_camera_proxy.cpp')
0 files changed, 0 insertions, 0 deletions
as on Board Oy. * * libcamera V4L2 dequeue watchdog test */ #include <iostream> #include <libcamera/base/event_dispatcher.h> #include <libcamera/base/thread.h> #include <libcamera/base/timer.h> #include <libcamera/framebuffer.h> #include "v4l2_videodevice_test.h" using namespace libcamera; using namespace std::chrono_literals; class DequeueWatchdogTest : public V4L2VideoDeviceTest { public: DequeueWatchdogTest() : V4L2VideoDeviceTest("vimc", "Raw Capture 0"), frames_(0), barks_(0) {} protected: int run() { constexpr unsigned int bufferCount = 8; EventDispatcher *dispatcher = Thread::current()->eventDispatcher(); Timer timeout; int ret = capture_->allocateBuffers(bufferCount, &buffers_); if (ret < 0) return TestFail; capture_->dequeueTimeout.connect(this, &DequeueWatchdogTest::barkCounter); capture_->setDequeueTimeout(5ms); capture_->bufferReady.connect(this, &DequeueWatchdogTest::receiveBuffer); for (const std::unique_ptr<FrameBuffer> &buffer : buffers_) { if (capture_->queueBuffer(buffer.get())) { std::cout << "Failed to queue buffer" << std::endl; return TestFail; } } capture_->streamOn(); timeout.start(5s); while (timeout.isRunning()) { dispatcher->processEvents(); if (frames_ > 5) break; } std::cout << "Processed " << frames_ << " frames_ and heard " << barks_ << " barks_" << std::endl; if (!barks_) { std::cout << "Failed to hear any barks_." << std::endl; return TestFail; } capture_->streamOff(); return TestPass; } private: void receiveBuffer(FrameBuffer *buffer) { if (buffer->metadata().status == FrameMetadata::FrameCancelled) return; std::cout << "Buffer received" << std::endl; frames_++; /* Requeue the buffer for further use. */ capture_->queueBuffer(buffer); } void barkCounter() { std::cout << "Watchdog is barking" << std::endl; barks_++; } unsigned int frames_; unsigned int barks_; }; TEST_REGISTER(DequeueWatchdogTest)