libcamera/test/v4l2_device/v4l2_device_test.cpp
Niklas Söderlund 44937caa3d test: v4l2_device: Reset media links and set a resolution
When initializing the test reset any media links and set a know
resolutions. This is needed to put the device under test into known
state and not have the v4l2 device tests depend on that no one have
touched the device before the test is executed.

The resolution is picked purely at random and could possibly be moved to
each test case if there is a need for different resolutions for a
specific one.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-05-17 20:39:03 +02:00

87 lines
1.5 KiB
C++

/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright (C) 2019, Google Inc.
*
* libcamera V4L2 API tests
*/
#include <iostream>
#include <sys/stat.h>
#include "v4l2_device_test.h"
#include "device_enumerator.h"
#include "media_device.h"
using namespace std;
using namespace libcamera;
bool exists(const std::string &path)
{
struct stat sb;
if (stat(path.c_str(), &sb) == 0)
return true;
return false;
}
int V4L2DeviceTest::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(driver_);
dm.add(entity_);
media_ = enumerator_->search(dm);
if (!media_)
return TestSkip;
MediaEntity *entity = media_->getEntityByName(entity_);
if (!entity)
return TestSkip;
capture_ = new V4L2Device(entity);
if (!capture_)
return TestFail;
if (!media_->acquire())
return TestFail;
int ret = media_->disableLinks();
media_->release();
if (ret)
return TestFail;
if (capture_->open())
return TestFail;
V4L2DeviceFormat format = {};
if (capture_->getFormat(&format))
return TestFail;
format.size.width = 640;
format.size.height = 480;
if (capture_->setFormat(&format))
return TestFail;
return TestPass;
}
void V4L2DeviceTest::cleanup()
{
capture_->streamOff();
capture_->releaseBuffers();
capture_->close();
delete capture_;
};