diff options
-rw-r--r-- | test/camera/buffer_import.cpp | 95 | ||||
-rw-r--r-- | test/libtest/buffer_source.cpp | 98 | ||||
-rw-r--r-- | test/libtest/buffer_source.h | 32 | ||||
-rw-r--r-- | test/libtest/meson.build | 11 |
4 files changed, 138 insertions, 98 deletions
diff --git a/test/camera/buffer_import.cpp b/test/camera/buffer_import.cpp index 6997ea78..3f392cdc 100644 --- a/test/camera/buffer_import.cpp +++ b/test/camera/buffer_import.cpp @@ -16,6 +16,7 @@ #include "media_device.h" #include "v4l2_videodevice.h" +#include "buffer_source.h" #include "camera_test.h" #include "test.h" @@ -23,100 +24,6 @@ using namespace libcamera; namespace { -/* A provider of external buffers, suitable for import by a Camera. */ -class BufferSource -{ -public: - BufferSource() - : video_(nullptr) - { - } - - ~BufferSource() - { - if (video_) { - video_->releaseBuffers(); - video_->close(); - } - - delete video_; - video_ = nullptr; - - if (media_) - media_->release(); - } - - int allocate(const StreamConfiguration &config) - { - /* Locate and open the video device. */ - std::string videoDeviceName = "vivid-000-vid-out"; - - std::unique_ptr<DeviceEnumerator> enumerator = - DeviceEnumerator::create(); - if (!enumerator) { - std::cout << "Failed to create device enumerator" << std::endl; - return TestFail; - } - - if (enumerator->enumerate()) { - std::cout << "Failed to enumerate media devices" << std::endl; - return TestFail; - } - - DeviceMatch dm("vivid"); - dm.add(videoDeviceName); - - media_ = enumerator->search(dm); - if (!media_) { - std::cout << "No vivid output device available" << std::endl; - return TestSkip; - } - - video_ = V4L2VideoDevice::fromEntityName(media_.get(), videoDeviceName); - if (!video_) { - std::cout << "Failed to get video device from entity " - << videoDeviceName << std::endl; - return TestFail; - } - - if (video_->open()) { - std::cout << "Unable to open " << videoDeviceName << std::endl; - return TestFail; - } - - /* Configure the format. */ - V4L2DeviceFormat format; - if (video_->getFormat(&format)) { - std::cout << "Failed to get format on output device" << std::endl; - return TestFail; - } - - format.size = config.size; - format.fourcc = V4L2VideoDevice::toV4L2Fourcc(config.pixelFormat, false); - if (video_->setFormat(&format)) { - std::cout << "Failed to set format on output device" << std::endl; - return TestFail; - } - - if (video_->exportBuffers(config.bufferCount, &buffers_) < 0) { - std::cout << "Failed to export buffers" << std::endl; - return TestFail; - } - - return TestPass; - } - - const std::vector<std::unique_ptr<FrameBuffer>> &buffers() - { - return buffers_; - } - -private: - std::shared_ptr<MediaDevice> media_; - V4L2VideoDevice *video_; - std::vector<std::unique_ptr<FrameBuffer>> buffers_; -}; - class BufferImportTest : public CameraTest, public Test { public: diff --git a/test/libtest/buffer_source.cpp b/test/libtest/buffer_source.cpp new file mode 100644 index 00000000..066049d3 --- /dev/null +++ b/test/libtest/buffer_source.cpp @@ -0,0 +1,98 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2020, Google Inc. + * + * A provider of external buffers, suitable for use in tests. + */ + +#include "buffer_source.h" + +#include <iostream> + +#include "device_enumerator.h" + +#include "test.h" + +BufferSource::BufferSource() + : video_(nullptr) +{ +} + +BufferSource::~BufferSource() +{ + if (video_) { + video_->releaseBuffers(); + video_->close(); + } + + delete video_; + video_ = nullptr; + + if (media_) + media_->release(); +} + +int BufferSource::allocate(const StreamConfiguration &config) +{ + /* Locate and open the video device. */ + std::string videoDeviceName = "vivid-000-vid-out"; + + std::unique_ptr<DeviceEnumerator> enumerator = + DeviceEnumerator::create(); + if (!enumerator) { + std::cout << "Failed to create device enumerator" << std::endl; + return TestFail; + } + + if (enumerator->enumerate()) { + std::cout << "Failed to enumerate media devices" << std::endl; + return TestFail; + } + + DeviceMatch dm("vivid"); + dm.add(videoDeviceName); + + media_ = enumerator->search(dm); + if (!media_) { + std::cout << "No vivid output device available" << std::endl; + return TestSkip; + } + + video_ = V4L2VideoDevice::fromEntityName(media_.get(), videoDeviceName); + if (!video_) { + std::cout << "Failed to get video device from entity " + << videoDeviceName << std::endl; + return TestFail; + } + + if (video_->open()) { + std::cout << "Unable to open " << videoDeviceName << std::endl; + return TestFail; + } + + /* Configure the format. */ + V4L2DeviceFormat format; + if (video_->getFormat(&format)) { + std::cout << "Failed to get format on output device" << std::endl; + return TestFail; + } + + format.size = config.size; + format.fourcc = V4L2VideoDevice::toV4L2Fourcc(config.pixelFormat, false); + if (video_->setFormat(&format)) { + std::cout << "Failed to set format on output device" << std::endl; + return TestFail; + } + + if (video_->exportBuffers(config.bufferCount, &buffers_) < 0) { + std::cout << "Failed to export buffers" << std::endl; + return TestFail; + } + + return TestPass; +} + +const std::vector<std::unique_ptr<FrameBuffer>> &BufferSource::buffers() +{ + return buffers_; +} diff --git a/test/libtest/buffer_source.h b/test/libtest/buffer_source.h new file mode 100644 index 00000000..2d8fc5ac --- /dev/null +++ b/test/libtest/buffer_source.h @@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2020, Google Inc. + * + * buffer_source.h - libcamera camera test helper to create FrameBuffers + */ +#ifndef __LIBCAMERA_BUFFER_SOURCE_TEST_H__ +#define __LIBCAMERA_BUFFER_SOURCE_TEST_H__ + +#include <libcamera/libcamera.h> + +#include "media_device.h" +#include "v4l2_videodevice.h" + +using namespace libcamera; + +class BufferSource +{ +public: + BufferSource(); + ~BufferSource(); + + int allocate(const StreamConfiguration &config); + const std::vector<std::unique_ptr<FrameBuffer>> &buffers(); + +private: + std::shared_ptr<MediaDevice> media_; + V4L2VideoDevice *video_; + std::vector<std::unique_ptr<FrameBuffer>> buffers_; +}; + +#endif /* __LIBCAMERA_BUFFER_SOURCE_TEST_H__ */ diff --git a/test/libtest/meson.build b/test/libtest/meson.build index 3e798ef3..33565e0e 100644 --- a/test/libtest/meson.build +++ b/test/libtest/meson.build @@ -1,14 +1,11 @@ libtest_sources = files([ + 'buffer_source.cpp', 'camera_test.cpp', 'test.cpp', ]) -libtest = static_library('libtest', libtest_sources, - dependencies : libcamera_dep) - libtest_includes = include_directories('.') -test_libraries = [libtest] test_includes_public = [ libtest_includes, @@ -18,3 +15,9 @@ test_includes_internal = [ test_includes_public, libcamera_internal_includes, ] + +libtest = static_library('libtest', libtest_sources, + dependencies : libcamera_dep, + include_directories : test_includes_internal) + +test_libraries = [libtest] |