summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-05-01 19:41:10 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-05-02 01:11:46 +0300
commit4d50cc9404353810ecc890cca969cbd7dad000df (patch)
treef7ffdaa2e5c848c77cab42382e0846a57b17508a
parent554cbc0fa8984ce7109c3b85d13900a890e8563e (diff)
libcamera: pipeline: vimc: Store media device pointer in camera data
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@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
-rw-r--r--src/libcamera/pipeline/vimc/vimc.cpp30
1 files changed, 16 insertions, 14 deletions
diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
index 7019ac32..d9f53adb 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_;
@@ -380,7 +382,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) {
@@ -391,7 +393,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. */
@@ -403,15 +405,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;
@@ -420,26 +422,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;