libcamera: ipu3: Validate the stream combination

The IPU3 pipeline handler supports 2 processed RGB/YUV streams
and one RAW stream. Validate that the requested stream combination is
supported in the pipeline handler validate() implementation and return
an error in case it's not.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
Jacopo Mondi 2020-07-07 14:50:08 +02:00
parent 320757897c
commit 117e65cef2

View file

@ -241,20 +241,35 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()
}
/*
* Select the sensor format by collecting the maximum width and height
* and picking the closest larger match, as the IPU3 can downscale
* only. If no resolution is requested for any stream, or if no sensor
* resolution is large enough, pick the largest one.
* Validate the requested stream configuration and select the sensor
* format by collecting the maximum width and height and picking the
* closest larger match, as the IPU3 can downscale only. If no
* resolution is requested for any stream, or if no sensor resolution is
* large enough, pick the largest one.
*/
unsigned int rawCount = 0;
unsigned int yuvCount = 0;
Size size;
for (const StreamConfiguration &cfg : config_) {
const PixelFormatInfo &info = PixelFormatInfo::info(cfg.pixelFormat);
if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW)
rawCount++;
else
yuvCount++;
if (cfg.size.width > size.width)
size.width = cfg.size.width;
if (cfg.size.height > size.height)
size.height = cfg.size.height;
}
if (rawCount > 1 || yuvCount > 2) {
LOG(IPU3, Debug) << "Camera configuration not supported";
return Invalid;
}
/* Generate raw configuration from CIO2. */
cio2Configuration_ = data_->cio2_.generateConfiguration(size);
if (!cio2Configuration_.pixelFormat.isValid())