mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-13 23:39:44 +03:00
tests: Add CameraSensor class test
Add a test to verify media bus codes, sizes and resolution retrieval through the CameraSensor API 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 <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
parent
846d4c7d3e
commit
b2b3599b5b
2 changed files with 113 additions and 0 deletions
112
test/camera-sensor.cpp
Normal file
112
test/camera-sensor.cpp
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2019, Google Inc.
|
||||||
|
*
|
||||||
|
* camera-sensor.cpp - Camera sensor tests
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <linux/media-bus-format.h>
|
||||||
|
|
||||||
|
#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<unsigned int> &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<Size> &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<DeviceEnumerator> enumerator_;
|
||||||
|
std::shared_ptr<MediaDevice> media_;
|
||||||
|
CameraSensor *sensor_;
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST_REGISTER(CameraSensorTest)
|
|
@ -17,6 +17,7 @@ public_tests = [
|
||||||
]
|
]
|
||||||
|
|
||||||
internal_tests = [
|
internal_tests = [
|
||||||
|
['camera-sensor', 'camera-sensor.cpp'],
|
||||||
]
|
]
|
||||||
|
|
||||||
foreach t : public_tests
|
foreach t : public_tests
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue