[libcamera-devel] [PATCH v2 3/4] tests: v4l2_videodevice: Set media bus and pixel formats for vimc
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Wed Aug 7 23:20:37 CEST 2019
Hi Niklas,
Thank you for the patch.
On Wed, Aug 07, 2019 at 10:49:14PM +0200, Niklas Söderlund wrote:
> Most of the video device tests are based on vimc and Linux commit
> 85ab1aa1fac17bcd ("media: vimc: deb: fix default sink bayer format")
> changes the default media bus format for the debayer subdevices. This
> leads to a -EPIPE error when trying to use the raw capture video device
> nodes.
>
> Fix this by explicitly setting media bus and pixel formats to known good
> values which works before and after the upstream change.
>
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> .../v4l2_videodevice_test.cpp | 26 +++++++++++++++++++
> test/v4l2_videodevice/v4l2_videodevice_test.h | 7 ++++-
> 2 files changed, 32 insertions(+), 1 deletion(-)
>
> diff --git a/test/v4l2_videodevice/v4l2_videodevice_test.cpp b/test/v4l2_videodevice/v4l2_videodevice_test.cpp
> index b26d06ad45197c8f..a0d269fef7f43895 100644
> --- a/test/v4l2_videodevice/v4l2_videodevice_test.cpp
> +++ b/test/v4l2_videodevice/v4l2_videodevice_test.cpp
> @@ -8,6 +8,8 @@
> #include <iostream>
> #include <sys/stat.h>
>
> +#include <linux/media-bus-format.h>
> +
> #include "v4l2_videodevice_test.h"
>
> #include "device_enumerator.h"
> @@ -69,6 +71,28 @@ int V4L2VideoDeviceTest::init()
> if (capture_->getFormat(&format))
> return TestFail;
>
> + if (driver_ == "vimc") {
> + sensor_ = new CameraSensor(media_->getEntityByName("Sensor A"));
> + if (sensor_->init())
> + return TestFail;
> +
> + debayer_ = new V4L2Subdevice(media_->getEntityByName("Debayer A"));
> + if (debayer_->open())
> + return TestFail;
Could sensor_ and debayer_ be local variables ? Apart from that,
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> +
> + format.fourcc = V4L2_PIX_FMT_SBGGR8;
> +
> + V4L2SubdeviceFormat subformat = {};
> + subformat.mbus_code = MEDIA_BUS_FMT_SBGGR8_1X8;
> + subformat.size = format.size;
> +
> + if (sensor_->setFormat(&subformat))
> + return TestFail;
> +
> + if (debayer_->setFormat(0, &subformat))
> + return TestFail;
> + }
> +
> format.size.width = 640;
> format.size.height = 480;
> if (capture_->setFormat(&format))
> @@ -83,5 +107,7 @@ void V4L2VideoDeviceTest::cleanup()
> capture_->releaseBuffers();
> capture_->close();
>
> + delete debayer_;
> + delete sensor_;
> delete capture_;
> };
> diff --git a/test/v4l2_videodevice/v4l2_videodevice_test.h b/test/v4l2_videodevice/v4l2_videodevice_test.h
> index 3321b5a4f98fdb1d..34dd231c6d9d108d 100644
> --- a/test/v4l2_videodevice/v4l2_videodevice_test.h
> +++ b/test/v4l2_videodevice/v4l2_videodevice_test.h
> @@ -13,8 +13,10 @@
>
> #include "test.h"
>
> +#include "camera_sensor.h"
> #include "device_enumerator.h"
> #include "media_device.h"
> +#include "v4l2_subdevice.h"
> #include "v4l2_videodevice.h"
>
> using namespace libcamera;
> @@ -23,7 +25,8 @@ class V4L2VideoDeviceTest : public Test
> {
> public:
> V4L2VideoDeviceTest(const char *driver, const char *entity)
> - : driver_(driver), entity_(entity), capture_(nullptr)
> + : driver_(driver), entity_(entity), sensor_(nullptr),
> + debayer_(nullptr), capture_(nullptr)
> {
> }
>
> @@ -35,6 +38,8 @@ protected:
> std::string entity_;
> std::unique_ptr<DeviceEnumerator> enumerator_;
> std::shared_ptr<MediaDevice> media_;
> + CameraSensor *sensor_;
> + V4L2Subdevice *debayer_;
> V4L2VideoDevice *capture_;
> BufferPool pool_;
> };
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list