pipeline: raspberrypi: Use a default format for ISP::Output0

If the ISP::Output0 stream has not been configured, we must enable it
with a default format and resolution for internal use. This is to allow
the pipeline handler data flow to be consistent, and allow the IPA to
receive statistics for the frame.

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Naushir Patuck
2021-03-13 10:27:41 +00:00
committed by Laurent Pinchart
parent cd3f70a14c
commit 4f4f8bb8bc

View File

@@ -625,7 +625,7 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)
* StreamConfiguration appropriately.
*/
V4L2DeviceFormat format;
bool output1Set = false;
bool output0Set = false, output1Set = false;
for (unsigned i = 0; i < config->size(); i++) {
StreamConfiguration &cfg = config->at(i);
@@ -662,6 +662,35 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)
if (i != maxIndex)
output1Set = true;
else
output0Set = true;
}
/*
* If ISP::Output0 stream has not been configured by the application,
* we must allow the hardware to generate an output so that the data
* flow in the pipeline handler remains consistent, and we still generate
* statistics for the IPA to use. So enable the output at a very low
* resolution for internal use.
*
* \todo Allow the pipeline to work correctly without Output0 and only
* statistics coming from the hardware.
*/
if (!output0Set) {
maxSize = Size(320, 240);
format = {};
format.size = maxSize;
format.fourcc = V4L2PixelFormat::fromPixelFormat(formats::YUV420, false);
ret = data->isp_[Isp::Output0].dev()->setFormat(&format);
if (ret) {
LOG(RPI, Error)
<< "Failed to set default format on ISP Output0: "
<< ret;
return -EINVAL;
}
LOG(RPI, Debug) << "Defaulting ISP Output0 format to "
<< format.toString();
}
/*