libcamera: Switch to CameraConfiguration
Implement the camera configuration thru out the library, tests, cam and qcam tools. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
+12
-13
@@ -543,21 +543,21 @@ const std::set<Stream *> &Camera::streams() const
|
||||
* list of stream usages and the camera returns a map of suitable streams and
|
||||
* their suggested default configurations.
|
||||
*
|
||||
* \return A map of streams to configurations if the requested usages can be
|
||||
* satisfied, or an empty map otherwise
|
||||
* \return A valid CameraConfiguration if the requested usages can be satisfied,
|
||||
* or a invalid one otherwise
|
||||
*/
|
||||
std::map<Stream *, StreamConfiguration>
|
||||
CameraConfiguration
|
||||
Camera::streamConfiguration(const std::vector<StreamUsage> &usages)
|
||||
{
|
||||
if (disconnected_ || !usages.size() || usages.size() > streams_.size())
|
||||
return std::map<Stream *, StreamConfiguration>{};
|
||||
return CameraConfiguration();
|
||||
|
||||
return pipe_->streamConfiguration(this, usages);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Configure the camera's streams prior to capture
|
||||
* \param[in] config A map of stream IDs and configurations to setup
|
||||
* \param[in] config The camera configurations to setup
|
||||
*
|
||||
* Prior to starting capture, the camera must be configured to select a
|
||||
* group of streams to be involved in the capture and their configuration.
|
||||
@@ -579,7 +579,7 @@ Camera::streamConfiguration(const std::vector<StreamUsage> &usages)
|
||||
* \retval -EACCES The camera is not in a state where it can be configured
|
||||
* \retval -EINVAL The configuration is not valid
|
||||
*/
|
||||
int Camera::configureStreams(std::map<Stream *, StreamConfiguration> &config)
|
||||
int Camera::configureStreams(const CameraConfiguration &config)
|
||||
{
|
||||
int ret;
|
||||
|
||||
@@ -589,14 +589,14 @@ int Camera::configureStreams(std::map<Stream *, StreamConfiguration> &config)
|
||||
if (!stateBetween(CameraAcquired, CameraConfigured))
|
||||
return -EACCES;
|
||||
|
||||
if (!config.size()) {
|
||||
if (!config.isValid()) {
|
||||
LOG(Camera, Error)
|
||||
<< "Can't configure streams without a configuration";
|
||||
<< "Can't configure camera with invalid configuration";
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
for (auto const &iter : config) {
|
||||
if (streams_.find(iter.first) == streams_.end())
|
||||
for (Stream *stream : config) {
|
||||
if (streams_.find(stream) == streams_.end())
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -605,9 +605,8 @@ int Camera::configureStreams(std::map<Stream *, StreamConfiguration> &config)
|
||||
return ret;
|
||||
|
||||
activeStreams_.clear();
|
||||
for (auto const &iter : config) {
|
||||
Stream *stream = iter.first;
|
||||
const StreamConfiguration &cfg = iter.second;
|
||||
for (Stream *stream : config) {
|
||||
const StreamConfiguration &cfg = config[stream];
|
||||
|
||||
stream->configuration_ = cfg;
|
||||
activeStreams_.insert(stream);
|
||||
|
||||
@@ -18,6 +18,7 @@ namespace libcamera {
|
||||
class Buffer;
|
||||
class BufferPool;
|
||||
class Camera;
|
||||
class CameraConfiguration;
|
||||
class CameraManager;
|
||||
class DeviceEnumerator;
|
||||
class MediaDevice;
|
||||
@@ -52,10 +53,9 @@ public:
|
||||
|
||||
virtual bool match(DeviceEnumerator *enumerator) = 0;
|
||||
|
||||
virtual std::map<Stream *, StreamConfiguration>
|
||||
virtual CameraConfiguration
|
||||
streamConfiguration(Camera *camera, const std::vector<StreamUsage> &usages) = 0;
|
||||
virtual int configureStreams(Camera *camera,
|
||||
std::map<Stream *, StreamConfiguration> &config) = 0;
|
||||
virtual int configureStreams(Camera *camera, const CameraConfiguration &config) = 0;
|
||||
|
||||
virtual int allocateBuffers(Camera *camera, Stream *stream) = 0;
|
||||
virtual int freeBuffers(Camera *camera, Stream *stream) = 0;
|
||||
|
||||
@@ -139,11 +139,11 @@ public:
|
||||
PipelineHandlerIPU3(CameraManager *manager);
|
||||
~PipelineHandlerIPU3();
|
||||
|
||||
std::map<Stream *, StreamConfiguration>
|
||||
CameraConfiguration
|
||||
streamConfiguration(Camera *camera,
|
||||
const std::vector<StreamUsage> &usages) override;
|
||||
int configureStreams(Camera *camera,
|
||||
std::map<Stream *, StreamConfiguration> &config) override;
|
||||
const CameraConfiguration &config) override;
|
||||
|
||||
int allocateBuffers(Camera *camera, Stream *stream) override;
|
||||
int freeBuffers(Camera *camera, Stream *stream) override;
|
||||
@@ -204,11 +204,11 @@ PipelineHandlerIPU3::~PipelineHandlerIPU3()
|
||||
imguMediaDev_->release();
|
||||
}
|
||||
|
||||
std::map<Stream *, StreamConfiguration>
|
||||
CameraConfiguration
|
||||
PipelineHandlerIPU3::streamConfiguration(Camera *camera,
|
||||
const std::vector<StreamUsage> &usages)
|
||||
{
|
||||
std::map<Stream *, StreamConfiguration> configs;
|
||||
CameraConfiguration configs;
|
||||
IPU3CameraData *data = cameraData(camera);
|
||||
StreamConfiguration *config = &configs[&data->stream_];
|
||||
|
||||
@@ -234,7 +234,7 @@ PipelineHandlerIPU3::streamConfiguration(Camera *camera,
|
||||
}
|
||||
|
||||
int PipelineHandlerIPU3::configureStreams(Camera *camera,
|
||||
std::map<Stream *, StreamConfiguration> &config)
|
||||
const CameraConfiguration &config)
|
||||
{
|
||||
IPU3CameraData *data = cameraData(camera);
|
||||
const StreamConfiguration &cfg = config[&data->stream_];
|
||||
|
||||
@@ -26,11 +26,11 @@ public:
|
||||
PipelineHandlerUVC(CameraManager *manager);
|
||||
~PipelineHandlerUVC();
|
||||
|
||||
std::map<Stream *, StreamConfiguration>
|
||||
CameraConfiguration
|
||||
streamConfiguration(Camera *camera,
|
||||
const std::vector<StreamUsage> &usages) override;
|
||||
int configureStreams(Camera *camera,
|
||||
std::map<Stream *, StreamConfiguration> &config) override;
|
||||
const CameraConfiguration &config) override;
|
||||
|
||||
int allocateBuffers(Camera *camera, Stream *stream) override;
|
||||
int freeBuffers(Camera *camera, Stream *stream) override;
|
||||
@@ -82,12 +82,12 @@ PipelineHandlerUVC::~PipelineHandlerUVC()
|
||||
media_->release();
|
||||
}
|
||||
|
||||
std::map<Stream *, StreamConfiguration>
|
||||
CameraConfiguration
|
||||
PipelineHandlerUVC::streamConfiguration(Camera *camera,
|
||||
const std::vector<StreamUsage> &usages)
|
||||
{
|
||||
UVCCameraData *data = cameraData(camera);
|
||||
std::map<Stream *, StreamConfiguration> configs;
|
||||
CameraConfiguration configs;
|
||||
StreamConfiguration config{};
|
||||
|
||||
config.width = 640;
|
||||
@@ -101,10 +101,10 @@ PipelineHandlerUVC::streamConfiguration(Camera *camera,
|
||||
}
|
||||
|
||||
int PipelineHandlerUVC::configureStreams(Camera *camera,
|
||||
std::map<Stream *, StreamConfiguration> &config)
|
||||
const CameraConfiguration &config)
|
||||
{
|
||||
UVCCameraData *data = cameraData(camera);
|
||||
StreamConfiguration *cfg = &config[&data->stream_];
|
||||
const StreamConfiguration *cfg = &config[&data->stream_];
|
||||
int ret;
|
||||
|
||||
LOG(UVC, Debug) << "Configure the camera for resolution "
|
||||
|
||||
@@ -26,11 +26,11 @@ public:
|
||||
PipelineHandlerVimc(CameraManager *manager);
|
||||
~PipelineHandlerVimc();
|
||||
|
||||
std::map<Stream *, StreamConfiguration>
|
||||
CameraConfiguration
|
||||
streamConfiguration(Camera *camera,
|
||||
const std::vector<StreamUsage> &usages) override;
|
||||
int configureStreams(Camera *camera,
|
||||
std::map<Stream *, StreamConfiguration> &config) override;
|
||||
const CameraConfiguration &config) override;
|
||||
|
||||
int allocateBuffers(Camera *camera, Stream *stream) override;
|
||||
int freeBuffers(Camera *camera, Stream *stream) override;
|
||||
@@ -82,12 +82,12 @@ PipelineHandlerVimc::~PipelineHandlerVimc()
|
||||
media_->release();
|
||||
}
|
||||
|
||||
std::map<Stream *, StreamConfiguration>
|
||||
CameraConfiguration
|
||||
PipelineHandlerVimc::streamConfiguration(Camera *camera,
|
||||
const std::vector<StreamUsage> &usages)
|
||||
{
|
||||
VimcCameraData *data = cameraData(camera);
|
||||
std::map<Stream *, StreamConfiguration> configs;
|
||||
CameraConfiguration configs;
|
||||
StreamConfiguration config{};
|
||||
|
||||
config.width = 640;
|
||||
@@ -101,10 +101,10 @@ PipelineHandlerVimc::streamConfiguration(Camera *camera,
|
||||
}
|
||||
|
||||
int PipelineHandlerVimc::configureStreams(Camera *camera,
|
||||
std::map<Stream *, StreamConfiguration> &config)
|
||||
const CameraConfiguration &config)
|
||||
{
|
||||
VimcCameraData *data = cameraData(camera);
|
||||
StreamConfiguration *cfg = &config[&data->stream_];
|
||||
const StreamConfiguration *cfg = &config[&data->stream_];
|
||||
int ret;
|
||||
|
||||
LOG(VIMC, Debug) << "Configure the camera for resolution "
|
||||
|
||||
@@ -163,15 +163,15 @@ PipelineHandler::~PipelineHandler()
|
||||
* The intended companion to this is \a configureStreams() which can be used to
|
||||
* change the group of streams parameters.
|
||||
*
|
||||
* \return A map of successfully retrieved streams and configurations or an
|
||||
* empty map on error.
|
||||
* \return A valid CameraConfiguration if the requested usages can be satisfied,
|
||||
* or a invalid configuration otherwise
|
||||
*/
|
||||
|
||||
/**
|
||||
* \fn PipelineHandler::configureStreams()
|
||||
* \brief Configure a group of streams for capture
|
||||
* \param[in] camera The camera to configure
|
||||
* \param[in] config A map of stream configurations to apply
|
||||
* \param[in] config The camera configurations to setup
|
||||
*
|
||||
* Configure the specified group of streams for \a camera according to the
|
||||
* configuration specified in \a configs. The intended caller of this interface
|
||||
|
||||
Reference in New Issue
Block a user