Message ID | 20191205204350.28196-8-jacopo@jmondi.org |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
Hi Jacopo, Thanks for your work. On 2019-12-05 21:43:47 +0100, Jacopo Mondi wrote: > 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> > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> > --- > src/libcamera/include/pipeline_handler.h | 2 ++ > src/libcamera/pipeline/ipu3/ipu3.cpp | 3 +++ > src/libcamera/pipeline/rkisp1/rkisp1.cpp | 3 +++ > src/libcamera/pipeline/vimc.cpp | 4 ++++ > src/libcamera/pipeline_handler.cpp | 19 +++++++++++++++++++ > 5 files changed, 31 insertions(+) > > diff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h > index a02e6e77dc9c..68761cc473c4 100644 > --- a/src/libcamera/include/pipeline_handler.h > +++ b/src/libcamera/include/pipeline_handler.h > @@ -43,6 +43,7 @@ public: > PipelineHandler *pipe_; > std::list<Request *> queuedRequests_; > ControlInfoMap controlInfo_; > + ControlList properties_; > std::unique_ptr<IPAInterface> ipa_; > > private: > @@ -64,6 +65,7 @@ public: > void unlock(); > > const ControlInfoMap &controls(Camera *camera); > + const ControlList &properties(Camera *camera); > > virtual CameraConfiguration *generateConfiguration(Camera *camera, > const StreamRoles &roles) = 0; > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp > index 1c5fccf69428..536a63a30018 100644 > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp > @@ -867,6 +867,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 > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp > index 4a583a7a1d7e..e9a70755f4c5 100644 > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp > @@ -888,6 +888,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; > diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp > index 06664fed42e7..f043cf55889e 100644 > --- a/src/libcamera/pipeline/vimc.cpp > +++ b/src/libcamera/pipeline/vimc.cpp > @@ -454,6 +454,10 @@ int VimcCameraData::init(MediaDevice *media) > } > > controlInfo_ = std::move(ctrls); > + > + /* Initialize the camera properties. */ > + properties_ = sensor_->properties(); > + > return 0; > } > > diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp > index 4349ca8957e4..a023fa1001f5 100644 > --- a/src/libcamera/pipeline_handler.cpp > +++ b/src/libcamera/pipeline_handler.cpp > @@ -96,6 +96,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 > @@ -244,6 +252,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 > -- > 2.23.0 > > _______________________________________________ > libcamera-devel mailing list > libcamera-devel@lists.libcamera.org > https://lists.libcamera.org/listinfo/libcamera-devel
diff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h index a02e6e77dc9c..68761cc473c4 100644 --- a/src/libcamera/include/pipeline_handler.h +++ b/src/libcamera/include/pipeline_handler.h @@ -43,6 +43,7 @@ public: PipelineHandler *pipe_; std::list<Request *> queuedRequests_; ControlInfoMap controlInfo_; + ControlList properties_; std::unique_ptr<IPAInterface> ipa_; private: @@ -64,6 +65,7 @@ public: void unlock(); const ControlInfoMap &controls(Camera *camera); + const ControlList &properties(Camera *camera); virtual CameraConfiguration *generateConfiguration(Camera *camera, const StreamRoles &roles) = 0; diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp index 1c5fccf69428..536a63a30018 100644 --- a/src/libcamera/pipeline/ipu3/ipu3.cpp +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp @@ -867,6 +867,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 diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp index 4a583a7a1d7e..e9a70755f4c5 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp @@ -888,6 +888,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; diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp index 06664fed42e7..f043cf55889e 100644 --- a/src/libcamera/pipeline/vimc.cpp +++ b/src/libcamera/pipeline/vimc.cpp @@ -454,6 +454,10 @@ int VimcCameraData::init(MediaDevice *media) } controlInfo_ = std::move(ctrls); + + /* Initialize the camera properties. */ + properties_ = sensor_->properties(); + return 0; } diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp index 4349ca8957e4..a023fa1001f5 100644 --- a/src/libcamera/pipeline_handler.cpp +++ b/src/libcamera/pipeline_handler.cpp @@ -96,6 +96,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 @@ -244,6 +252,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