summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaushir Patuck <naush@raspberrypi.com>2021-02-08 15:07:33 +0000
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-02-09 13:23:39 +0200
commit64e3aa23ffc9ae76683f159a39b19984587a840d (patch)
tree57359e99deb75c897eee9ed31fb7b8e0275d0425
parent03def6e9479b6a7385dfc68965a3e2782c319b18 (diff)
pipeline: raspberrypi: Refactor stream configuration routine
Refactor the high/low resolution stream format and output selection routine. This change is in preparation of adding 1/4 resolution output for fast colour denoise. Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r--src/libcamera/pipeline/raspberrypi/raspberrypi.cpp57
1 files changed, 16 insertions, 41 deletions
diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index 0804a439..0363e242 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -623,52 +623,27 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)
continue;
}
- if (i == maxIndex) {
- /* ISP main output format. */
- V4L2VideoDevice *dev = data->isp_[Isp::Output0].dev();
- V4L2PixelFormat fourcc = dev->toV4L2PixelFormat(cfg.pixelFormat);
- format.size = cfg.size;
- format.fourcc = fourcc;
-
- ret = dev->setFormat(&format);
- if (ret)
- return -EINVAL;
-
- if (format.size != cfg.size || format.fourcc != fourcc) {
- LOG(RPI, Error)
- << "Failed to set format on ISP capture0 device: "
- << format.toString();
- return -EINVAL;
- }
-
- cfg.setStream(&data->isp_[Isp::Output0]);
- data->isp_[Isp::Output0].setExternal(true);
- }
+ /* The largest resolution gets routed to the ISP Output 0 node. */
+ RPi::Stream *stream = i == maxIndex ? &data->isp_[Isp::Output0]
+ : &data->isp_[Isp::Output1];
- /*
- * ISP second output format. This fallthrough means that if a
- * second output stream has not been configured, we simply use
- * the Output0 configuration.
- */
- V4L2VideoDevice *dev = data->isp_[Isp::Output1].dev();
- format.fourcc = dev->toV4L2PixelFormat(cfg.pixelFormat);
+ V4L2PixelFormat fourcc = stream->dev()->toV4L2PixelFormat(cfg.pixelFormat);
format.size = cfg.size;
+ format.fourcc = fourcc;
- ret = dev->setFormat(&format);
- if (ret) {
+ ret = stream->dev()->setFormat(&format);
+ if (ret)
+ return -EINVAL;
+
+ if (format.size != cfg.size || format.fourcc != fourcc) {
LOG(RPI, Error)
- << "Failed to set format on ISP capture1 device: "
- << format.toString();
- return ret;
- }
- /*
- * If we have not yet provided a stream for this config, it
- * means this is to be routed from Output1.
- */
- if (!cfg.stream()) {
- cfg.setStream(&data->isp_[Isp::Output1]);
- data->isp_[Isp::Output1].setExternal(true);
+ << "Failed to set requested format on " << stream->name()
+ << ", returned " << format.toString();
+ return -EINVAL;
}
+
+ cfg.setStream(stream);
+ stream->setExternal(true);
}
/* ISP statistics output format. */