[libcamera-devel] [PATCH 1/9] test: libtest: buffer_source: Close video device right after allocation
Niklas Söderlund
niklas.soderlund at ragnatech.se
Mon Mar 16 14:25:17 CET 2020
Hi Laurent,
Thanks for your work.
On 2020-03-15 01:57:20 +0200, Laurent Pinchart wrote:
> There's no need to keep the video device open after allocating buffers,
> as V4L2 supports buffer orphaning and the exported buffers will still be
> usable. Close the device right after allocation to avoid the need for
> delayed cleanups.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> test/libtest/buffer_source.cpp | 24 +++++++++---------------
> test/libtest/buffer_source.h | 1 -
> 2 files changed, 9 insertions(+), 16 deletions(-)
>
> diff --git a/test/libtest/buffer_source.cpp b/test/libtest/buffer_source.cpp
> index 066049d342a4..0c33200b47ad 100644
> --- a/test/libtest/buffer_source.cpp
> +++ b/test/libtest/buffer_source.cpp
> @@ -8,26 +8,18 @@
> #include "buffer_source.h"
>
> #include <iostream>
> +#include <memory>
>
> #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();
> }
> @@ -58,37 +50,39 @@ int BufferSource::allocate(const StreamConfiguration &config)
> return TestSkip;
> }
>
> - video_ = V4L2VideoDevice::fromEntityName(media_.get(), videoDeviceName);
> - if (!video_) {
> + std::unique_ptr<V4L2VideoDevice> 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()) {
> + if (video->open()) {
> std::cout << "Unable to open " << videoDeviceName << std::endl;
> return TestFail;
> }
>
> /* Configure the format. */
> V4L2DeviceFormat format;
> - if (video_->getFormat(&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)) {
> + if (video->setFormat(&format)) {
> std::cout << "Failed to set format on output device" << std::endl;
> return TestFail;
> }
>
> - if (video_->exportBuffers(config.bufferCount, &buffers_) < 0) {
> + if (video->exportBuffers(config.bufferCount, &buffers_) < 0) {
> std::cout << "Failed to export buffers" << std::endl;
> return TestFail;
> }
>
> + video->close();
> +
> return TestPass;
> }
>
> diff --git a/test/libtest/buffer_source.h b/test/libtest/buffer_source.h
> index 2d8fc5acf6d7..ae0879c99480 100644
> --- a/test/libtest/buffer_source.h
> +++ b/test/libtest/buffer_source.h
> @@ -25,7 +25,6 @@ public:
>
> private:
> std::shared_ptr<MediaDevice> media_;
> - V4L2VideoDevice *video_;
> std::vector<std::unique_ptr<FrameBuffer>> buffers_;
> };
>
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list