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:
parent
320757897c
commit
117e65cef2
1 changed files with 19 additions and 4 deletions
|
@ -241,20 +241,35 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Select the sensor format by collecting the maximum width and height
|
* Validate the requested stream configuration and select the sensor
|
||||||
* and picking the closest larger match, as the IPU3 can downscale
|
* format by collecting the maximum width and height and picking the
|
||||||
* only. If no resolution is requested for any stream, or if no sensor
|
* closest larger match, as the IPU3 can downscale only. If no
|
||||||
* resolution is large enough, pick the largest one.
|
* 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;
|
Size size;
|
||||||
|
|
||||||
for (const StreamConfiguration &cfg : config_) {
|
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)
|
if (cfg.size.width > size.width)
|
||||||
size.width = cfg.size.width;
|
size.width = cfg.size.width;
|
||||||
if (cfg.size.height > size.height)
|
if (cfg.size.height > size.height)
|
||||||
size.height = cfg.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. */
|
/* Generate raw configuration from CIO2. */
|
||||||
cio2Configuration_ = data_->cio2_.generateConfiguration(size);
|
cio2Configuration_ = data_->cio2_.generateConfiguration(size);
|
||||||
if (!cio2Configuration_.pixelFormat.isValid())
|
if (!cio2Configuration_.pixelFormat.isValid())
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue