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
|
||||
* 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())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue