libcamera: pipeline_handler: Add Camera properties

Associate to each Camera a ControlList which contains the Camera
properties as created by pipeline handlers in the pipeline handler's
CameraData and provide an operation to retrieve them.

Collect properties from the camera sensor in all pipeline handlers that
support one (IPU3, RKISP1 and VIMC).

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
Jacopo Mondi
2019-11-20 16:35:29 +01:00
parent 2523771d79
commit 025149b050
5 changed files with 31 additions and 0 deletions

View File

@@ -45,6 +45,7 @@ public:
PipelineHandler *pipe_;
std::list<Request *> queuedRequests_;
ControlInfoMap controlInfo_;
ControlList properties_;
std::unique_ptr<IPAInterface> ipa_;
private:
@@ -67,6 +68,7 @@ public:
void unlock();
const ControlInfoMap &controls(Camera *camera);
const ControlList &properties(Camera *camera);
virtual CameraConfiguration *generateConfiguration(Camera *camera,
const StreamRoles &roles) = 0;

View File

@@ -887,6 +887,9 @@ int PipelineHandlerIPU3::registerCameras()
if (ret)
continue;
/* Initialize the camera properties. */
data->properties_ = cio2->sensor_->properties();
/**
* \todo Dynamically assign ImgU and output devices to each
* stream and camera; as of now, limit support to two cameras

View File

@@ -912,6 +912,9 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)
if (ret)
return ret;
/* Initialize the camera properties. */
data->properties_ = data->sensor_->properties();
ret = data->loadIPA();
if (ret)
return ret;

View File

@@ -452,6 +452,10 @@ int VimcCameraData::init(MediaDevice *media)
}
controlInfo_ = std::move(ctrls);
/* Initialize the camera properties. */
properties_ = sensor_->properties();
return 0;
}

View File

@@ -98,6 +98,14 @@ LOG_DEFINE_CATEGORY(Pipeline)
* creating the camera, and shall not be modified afterwards.
*/
/**
* \var CameraData::properties_
* \brief The list of properties supported by the camera
*
* The list of camera properties shall be initialised by the pipeline handler
* when creating the camera, and shall not be modified afterwards.
*/
/**
* \var CameraData::ipa_
* \brief The IPA module used by the camera
@@ -255,6 +263,17 @@ const ControlInfoMap &PipelineHandler::controls(Camera *camera)
return data->controlInfo_;
}
/**
* \brief Retrieve the list of properties for a camera
* \param[in] camera The camera
* \return A ControlList of properties supported by \a camera
*/
const ControlList &PipelineHandler::properties(Camera *camera)
{
CameraData *data = cameraData(camera);
return data->properties_;
}
/**
* \fn PipelineHandler::generateConfiguration()
* \brief Generate a camera configuration for a specified camera