[libcamera-devel] [PATCH 2/2] libcamera: pipeline: vimc: Store media device pointer in camera data
Niklas Söderlund
niklas.soderlund at ragnatech.se
Fri May 1 19:05:23 CEST 2020
Hi Laurent,
Thanks for your patch.
On 2020-05-01 19:43:32 +0300, Laurent Pinchart wrote:
> Store the MediaDevice for the VIMC instance in the VimcCameraData class.
> This will be used to check the media device version at runtime.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> src/libcamera/pipeline/vimc/vimc.cpp | 30 +++++++++++++++-------------
> 1 file changed, 16 insertions(+), 14 deletions(-)
>
> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
> index 339d1cf653fb..0b8a0a0c6890 100644
> --- a/src/libcamera/pipeline/vimc/vimc.cpp
> +++ b/src/libcamera/pipeline/vimc/vimc.cpp
> @@ -39,9 +39,10 @@ LOG_DEFINE_CATEGORY(VIMC)
> class VimcCameraData : public CameraData
> {
> public:
> - VimcCameraData(PipelineHandler *pipe)
> - : CameraData(pipe), sensor_(nullptr), debayer_(nullptr),
> - scaler_(nullptr), video_(nullptr), raw_(nullptr)
> + VimcCameraData(PipelineHandler *pipe, MediaDevice *media)
> + : CameraData(pipe), media_(media), sensor_(nullptr),
> + debayer_(nullptr), scaler_(nullptr), video_(nullptr),
> + raw_(nullptr)
> {
> }
>
> @@ -54,9 +55,10 @@ public:
> delete raw_;
> }
>
> - int init(MediaDevice *media);
> + int init();
> void bufferReady(FrameBuffer *buffer);
>
> + MediaDevice *media_;
> CameraSensor *sensor_;
> V4L2Subdevice *debayer_;
> V4L2Subdevice *scaler_;
> @@ -389,7 +391,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
> if (!media)
> return false;
>
> - std::unique_ptr<VimcCameraData> data = std::make_unique<VimcCameraData>(this);
> + std::unique_ptr<VimcCameraData> data = std::make_unique<VimcCameraData>(this, media);
>
> data->ipa_ = IPAManager::instance()->createIPA(this, 0, 0);
> if (data->ipa_ != nullptr) {
> @@ -400,7 +402,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
> }
>
> /* Locate and open the capture video node. */
> - if (data->init(media))
> + if (data->init())
> return false;
>
> /* Create and register the camera. */
> @@ -412,15 +414,15 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
> return true;
> }
>
> -int VimcCameraData::init(MediaDevice *media)
> +int VimcCameraData::init()
> {
> int ret;
>
> - ret = media->disableLinks();
> + ret = media_->disableLinks();
> if (ret < 0)
> return ret;
>
> - MediaLink *link = media->link("Debayer B", 1, "Scaler", 0);
> + MediaLink *link = media_->link("Debayer B", 1, "Scaler", 0);
> if (!link)
> return -ENODEV;
>
> @@ -429,26 +431,26 @@ int VimcCameraData::init(MediaDevice *media)
> return ret;
>
> /* Create and open the camera sensor, debayer, scaler and video device. */
> - sensor_ = new CameraSensor(media->getEntityByName("Sensor B"));
> + sensor_ = new CameraSensor(media_->getEntityByName("Sensor B"));
> ret = sensor_->init();
> if (ret)
> return ret;
>
> - debayer_ = new V4L2Subdevice(media->getEntityByName("Debayer B"));
> + debayer_ = new V4L2Subdevice(media_->getEntityByName("Debayer B"));
> if (debayer_->open())
> return -ENODEV;
>
> - scaler_ = new V4L2Subdevice(media->getEntityByName("Scaler"));
> + scaler_ = new V4L2Subdevice(media_->getEntityByName("Scaler"));
> if (scaler_->open())
> return -ENODEV;
>
> - video_ = new V4L2VideoDevice(media->getEntityByName("RGB/YUV Capture"));
> + video_ = new V4L2VideoDevice(media_->getEntityByName("RGB/YUV Capture"));
> if (video_->open())
> return -ENODEV;
>
> video_->bufferReady.connect(this, &VimcCameraData::bufferReady);
>
> - raw_ = new V4L2VideoDevice(media->getEntityByName("Raw Capture 1"));
> + raw_ = new V4L2VideoDevice(media_->getEntityByName("Raw Capture 1"));
> if (raw_->open())
> return -ENODEV;
>
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list