@@ -740,6 +740,16 @@ public:
return cfe_[Cfe::Output0].dev();
}
+ int bindDevice(V4L2VideoDevice *dev)
+ {
+ return mediaContext_->bindDevice(dev);
+ }
+
+ int bindDevice(V4L2Subdevice *dev)
+ {
+ return mediaContext_->bindDevice(dev);
+ }
+
CameraConfiguration::Status
platformValidate(RPi::RPiCameraConfiguration *rpiConfig) const override;
@@ -776,6 +786,8 @@ public:
unsigned int tdnInputIndex_;
unsigned int stitchInputIndex_;
+ std::unique_ptr<MediaContext> mediaContext_;
+
struct Config {
/*
* Number of CFE config and stats buffers to allocate and use. A
@@ -935,6 +947,7 @@ bool PipelineHandlerPiSP::match(DeviceEnumerator *enumerator)
("pisp_frontend", true, pisp->pispVariant_);
pisp->be_ = SharedMemObject<BackEnd>
("pisp_backend", BackEnd::Config({}), pisp->pispVariant_);
+ pisp->mediaContext_ = ispDevice->createContext();
if (!pisp->fe_.fd().isValid() || !pisp->be_.fd().isValid()) {
LOG(RPI, Error) << "Failed to create ISP shared objects";
@@ -1155,6 +1168,16 @@ int PipelineHandlerPiSP::platformRegister(std::unique_ptr<RPi::CameraData> &came
return ret;
}
+ /* Bind devices to the media device. */
+ data->bindDevice(data->isp_[Isp::Input].dev());
+ data->bindDevice(data->isp_[Isp::Output0].dev());
+ data->bindDevice(data->isp_[Isp::Output1].dev());
+ data->bindDevice(data->isp_[Isp::Config].dev());
+ data->bindDevice(data->isp_[Isp::TdnInput].dev());
+ data->bindDevice(data->isp_[Isp::TdnOutput].dev());
+ data->bindDevice(data->isp_[Isp::StitchInput].dev());
+ data->bindDevice(data->isp_[Isp::StitchOutput].dev());
+
/* Write up all the IPA connections. */
data->ipa_->prepareIspComplete.connect(data, &PiSPCameraData::prepareIspComplete);
data->ipa_->processStatsComplete.connect(data, &PiSPCameraData::processStatsComplete);
Create a MediaContext for each detected camera sensor and bind the ISP video devices to it. This allows multi-camera operations with a single, multiplexed, ISP device. Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> --- src/libcamera/pipeline/rpi/pisp/pisp.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)