From patchwork Tue Jun 11 13:26:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1394 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 3C41762F96 for ; Tue, 11 Jun 2019 15:27:16 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (81-175-216-236.bb.dnainternet.fi [81.175.216.236]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id A923AFA0; Tue, 11 Jun 2019 15:27:15 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1560259635; bh=DS0Sm+7xoEgTq5N2DufpHsPB685bG8WRa58eqSc4Pm0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fpqRQHyxMOrKbqMaRe4BBPj23R0MRVW0hYkIRK8QyE56kmL5HvasUmY6kouMLHxSZ eIW/1VDfZmbvtVP4ZsHYFZRHMROBTcB6jEtFPyB90Dw6NfRo2EaRv4gKtzWPwA/fsz LDvsKVWUXwFdizip0tWLuZcfIXMUbazQhB4ErKcw= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Cc: Mickael Guene , Jacopo Mondi Date: Tue, 11 Jun 2019 16:26:57 +0300 Message-Id: <20190611132657.22133-1-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <1560253031-98823-1-git-send-email-mickael.guene@st.com> References: <1560253031-98823-1-git-send-email-mickael.guene@st.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH] tests: Add CameraSensor class test X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Jun 2019 13:27:16 -0000 Add a test to verify media bus codes, sizes and resolution retrieval through the CameraSensor APÏ based on the Sensor A in the vimc pipeline. Also check that the getFormat() method returns the expected media bus code and size. Signed-off-by: Laurent Pinchart Reviewed-by: Niklas Söderlund --- test/camera-sensor.cpp | 112 +++++++++++++++++++++++++++++++++++++++++ test/meson.build | 1 + 2 files changed, 113 insertions(+) create mode 100644 test/camera-sensor.cpp diff --git a/test/camera-sensor.cpp b/test/camera-sensor.cpp new file mode 100644 index 000000000000..5f128906ce0e --- /dev/null +++ b/test/camera-sensor.cpp @@ -0,0 +1,112 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * camera-sensor.cpp - Camera sensor tests + */ + +#include +#include + +#include + +#include "camera_sensor.h" +#include "device_enumerator.h" +#include "media_device.h" +#include "v4l2_subdevice.h" + +#include "test.h" + +using namespace std; +using namespace libcamera; + +class CameraSensorTest : public Test +{ +protected: + int init() + { + 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; + } + + DeviceMatch dm("vimc"); + media_ = enumerator_->search(dm); + if (!media_) { + cerr << "Unable to find \'vimc\' media device node" << endl; + return TestSkip; + } + + MediaEntity *entity = media_->getEntityByName("Sensor A"); + if (!entity) { + cerr << "Unable to find media entity 'Sensor A'" << endl; + return TestFail; + } + + sensor_ = new CameraSensor(entity); + if (sensor_->init() < 0) { + cerr << "Unable to initialise camera sensor" << endl; + return TestFail; + } + + return TestPass; + } + + int run() + { + const std::vector &codes = sensor_->mbusCodes(); + auto iter = std::find(codes.begin(), codes.end(), + MEDIA_BUS_FMT_ARGB8888_1X32); + if (iter == codes.end()) { + cerr << "Sensor doesn't support ARGB8888_1X32" << endl; + return TestFail; + } + + const std::vector &sizes = sensor_->sizes(); + auto iter2 = std::find(sizes.begin(), sizes.end(), + Size(4096, 2160)); + if (iter2 == sizes.end()) { + cerr << "Sensor doesn't support 4096x2160" << endl; + return TestFail; + } + + const Size &resolution = sensor_->resolution(); + if (resolution != Size(4096, 2160)) { + cerr << "Incorrect sensor resolution " + << resolution.toString() << endl; + return TestFail; + } + + V4L2SubdeviceFormat format = sensor_->getFormat({MEDIA_BUS_FMT_UYVY8_2X8, + MEDIA_BUS_FMT_SBGGR10_1X10, + MEDIA_BUS_FMT_BGR888_1X24}, + Size(1024, 768)); + if (format.mbus_code != MEDIA_BUS_FMT_SBGGR10_1X10 || + format.size != Size(4096, 2160)) { + cerr << "Failed to get a suitable format, expected 4096x2160-0x" + << std::hex << MEDIA_BUS_FMT_SBGGR10_1X10 + << ", got " << format.toString() << endl; + return TestFail; + } + + return TestPass; + } + + void cleanup() + { + delete sensor_; + } + +private: + std::unique_ptr enumerator_; + std::shared_ptr media_; + CameraSensor *sensor_; +}; + +TEST_REGISTER(CameraSensorTest) diff --git a/test/meson.build b/test/meson.build index 609aeab80e7d..25f181c20308 100644 --- a/test/meson.build +++ b/test/meson.build @@ -17,6 +17,7 @@ public_tests = [ ] internal_tests = [ + ['camera-sensor', 'camera-sensor.cpp'], ] foreach t : public_tests