diff options
-rw-r--r-- | src/libcamera/pipeline/rkisp1/rkisp1.cpp | 65 |
1 files changed, 36 insertions, 29 deletions
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp index 0b3dd975..403c85e6 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp @@ -207,8 +207,8 @@ private: int freeBuffers(Camera *camera); MediaDevice *media_; - V4L2Subdevice *dphy_; V4L2Subdevice *isp_; + V4L2Subdevice *resizer_; V4L2VideoDevice *video_; V4L2VideoDevice *param_; V4L2VideoDevice *stat_; @@ -513,7 +513,7 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate() } PipelineHandlerRkISP1::PipelineHandlerRkISP1(CameraManager *manager) - : PipelineHandler(manager), dphy_(nullptr), isp_(nullptr), + : PipelineHandler(manager), isp_(nullptr), resizer_(nullptr), video_(nullptr), param_(nullptr), stat_(nullptr) { } @@ -523,8 +523,8 @@ PipelineHandlerRkISP1::~PipelineHandlerRkISP1() delete param_; delete stat_; delete video_; + delete resizer_; delete isp_; - delete dphy_; } /* ----------------------------------------------------------------------------- @@ -564,7 +564,7 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c) * Configure the sensor links: enable the link corresponding to this * camera and disable all the other sensor links. */ - const MediaPad *pad = dphy_->entity()->getPadByIndex(0); + const MediaPad *pad = isp_->entity()->getPadByIndex(0); for (MediaLink *link : pad->links()) { bool enable = link->source()->entity() == sensor->entity(); @@ -576,7 +576,7 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c) << (enable ? "Enabling" : "Disabling") << " link from sensor '" << link->source()->entity()->name() - << "' to CSI-2 receiver"; + << "' to ISP"; ret = link->setEnabled(enable); if (ret < 0) @@ -596,16 +596,6 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c) LOG(RkISP1, Debug) << "Sensor configured with " << format.toString(); - ret = dphy_->setFormat(0, &format); - if (ret < 0) - return ret; - - LOG(RkISP1, Debug) << "Configuring ISP input pad with " << format.toString(); - - ret = dphy_->getFormat(1, &format); - if (ret < 0) - return ret; - ret = isp_->setFormat(0, &format); if (ret < 0) return ret; @@ -622,6 +612,22 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c) LOG(RkISP1, Debug) << "ISP output pad configured with " << format.toString(); + ret = resizer_->setFormat(0, &format); + if (ret < 0) + return ret; + + LOG(RkISP1, Debug) << "Resizer input pad configured with " << format.toString(); + + format.size = cfg.size; + + LOG(RkISP1, Debug) << "Configuring resizer output pad with " << format.toString(); + + ret = resizer_->setFormat(1, &format); + if (ret < 0) + return ret; + + LOG(RkISP1, Debug) << "Resizer output pad configured with " << format.toString(); + V4L2DeviceFormat outputFormat = {}; outputFormat.fourcc = video_->toV4L2Fourcc(cfg.pixelFormat); outputFormat.size = cfg.size; @@ -868,7 +874,7 @@ int PipelineHandlerRkISP1::initLinks() if (ret < 0) return ret; - link = media_->link("rockchip-sy-mipi-dphy", 1, "rkisp1-isp-subdev", 0); + link = media_->link("rkisp1_isp", 2, "rkisp1_resizer_mainpath", 0); if (!link) return -ENODEV; @@ -876,7 +882,7 @@ int PipelineHandlerRkISP1::initLinks() if (ret < 0) return ret; - link = media_->link("rkisp1-isp-subdev", 2, "rkisp1_mainpath", 0); + link = media_->link("rkisp1_resizer_mainpath", 1, "rkisp1_mainpath", 0); if (!link) return -ENODEV; @@ -923,24 +929,25 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator) const MediaPad *pad; DeviceMatch dm("rkisp1"); - dm.add("rkisp1-isp-subdev"); + dm.add("rkisp1_isp"); + dm.add("rkisp1_resizer_selfpath"); + dm.add("rkisp1_resizer_mainpath"); dm.add("rkisp1_selfpath"); dm.add("rkisp1_mainpath"); - dm.add("rkisp1-statistics"); - dm.add("rkisp1-input-params"); - dm.add("rockchip-sy-mipi-dphy"); + dm.add("rkisp1_stats"); + dm.add("rkisp1_params"); media_ = acquireMediaDevice(enumerator, dm); if (!media_) return false; /* Create the V4L2 subdevices we will need. */ - dphy_ = V4L2Subdevice::fromEntityName(media_, "rockchip-sy-mipi-dphy"); - if (dphy_->open() < 0) + isp_ = V4L2Subdevice::fromEntityName(media_, "rkisp1_isp"); + if (isp_->open() < 0) return false; - isp_ = V4L2Subdevice::fromEntityName(media_, "rkisp1-isp-subdev"); - if (isp_->open() < 0) + resizer_ = V4L2Subdevice::fromEntityName(media_, "rkisp1_resizer_mainpath"); + if (resizer_->open() < 0) return false; /* Locate and open the capture video node. */ @@ -948,11 +955,11 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator) if (video_->open() < 0) return false; - stat_ = V4L2VideoDevice::fromEntityName(media_, "rkisp1-statistics"); + stat_ = V4L2VideoDevice::fromEntityName(media_, "rkisp1_stats"); if (stat_->open() < 0) return false; - param_ = V4L2VideoDevice::fromEntityName(media_, "rkisp1-input-params"); + param_ = V4L2VideoDevice::fromEntityName(media_, "rkisp1_params"); if (param_->open() < 0) return false; @@ -967,10 +974,10 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator) } /* - * Enumerate all sensors connected to the CSI-2 receiver and create one + * Enumerate all sensors connected to the ISP and create one * camera instance for each of them. */ - pad = dphy_->entity()->getPadByIndex(0); + pad = isp_->entity()->getPadByIndex(0); if (!pad) return false; |