From 93ec63b8673b786065df815ab7035891cfc3a56c Mon Sep 17 00:00:00 2001 From: Kieran Bingham Date: Tue, 29 Jan 2019 15:01:18 +0000 Subject: test: v4l2_device: Use DeviceEnumerator to find a UVCVideo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Utilise the existing DeviceEnumerator system to identify a suitable V4L2Device for testing. Specifically target these tests at a uvcvideo driver based device as a known supported target. Signed-off-by: Kieran Bingham Signed-off-by: Jacopo Mondi Signed-off-by: Laurent Pinchart Signed-off-by: Niklas Söderlund --- test/v4l2_device/v4l2_device_test.cpp | 34 +++++++++++++++++++++++++++++----- test/v4l2_device/v4l2_device_test.h | 7 +++++++ 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/test/v4l2_device/v4l2_device_test.cpp b/test/v4l2_device/v4l2_device_test.cpp index 36255371..18d014ca 100644 --- a/test/v4l2_device/v4l2_device_test.cpp +++ b/test/v4l2_device/v4l2_device_test.cpp @@ -10,6 +10,10 @@ #include "v4l2_device_test.h" +#include "device_enumerator.h" +#include "media_device.h" + +using namespace std; using namespace libcamera; bool exists(const std::string &path) @@ -24,20 +28,40 @@ bool exists(const std::string &path) int V4L2DeviceTest::init() { - const std::string device("/dev/video0"); + enumerator_ = DeviceEnumerator::create(); + if (!enumerator_) { + cerr << "Failed to create device enumerator" << endl; + return TestFail; + } + + if (enumerator_->enumerate()) { + cerr << "Failed to enumerate media devices" << endl; + return TestFail; + } - /* Validate the device node exists. */ - if (!exists(device)) { - std::cout << "No video device available" << std::endl; + DeviceMatch dm("uvcvideo"); + media_ = std::move(enumerator_->search(dm)); + if (!media_) return TestSkip; + + media_->acquire(); + + for (MediaEntity *entity : media_->entities()) { + if (entity->flags() & MEDIA_ENT_FL_DEFAULT) { + dev_ = new V4L2Device(entity); + break; + } } - dev_ = new V4L2Device(device); + if (!dev_) + return TestSkip; return dev_->open(); } void V4L2DeviceTest::cleanup() { + media_->release(); + delete dev_; }; diff --git a/test/v4l2_device/v4l2_device_test.h b/test/v4l2_device/v4l2_device_test.h index 405cb7d6..ca231ab4 100644 --- a/test/v4l2_device/v4l2_device_test.h +++ b/test/v4l2_device/v4l2_device_test.h @@ -7,7 +7,12 @@ #ifndef __LIBCAMERA_V4L2_DEVICE_TEST_H_ #define __LIBCAMERA_V4L2_DEVICE_TEST_H_ +#include + #include "test.h" + +#include "device_enumerator.h" +#include "media_device.h" #include "v4l2_device.h" using namespace libcamera; @@ -21,6 +26,8 @@ protected: int init(); void cleanup(); + std::unique_ptr enumerator_; + std::shared_ptr media_; V4L2Device *dev_; }; -- cgit v1.2.1