controls: rpi: Add a vendor rpi::ScalerCrops control

Add a vendor control rpi::ScalerCrops that is analogous to the current
core::ScalerCrop, but can apply a different crop to each configured
stream.

This control takes a span of Rectangle structures - the order of
rectangles must match the order of streams configured by the application.

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.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 2024-10-31 09:49:51 +00:00 committed by Laurent Pinchart
parent ff069d87e2
commit dbcf6123a0
2 changed files with 37 additions and 0 deletions

View file

@ -96,6 +96,13 @@ const ControlInfoMap::Map ipaAfControls{
{ &controls::LensPosition, ControlInfo(0.0f, 32.0f, 1.0f) } { &controls::LensPosition, ControlInfo(0.0f, 32.0f, 1.0f) }
}; };
/* Platform specific controls */
const std::map<const std::string, ControlInfoMap::Map> platformControls {
{ "pisp", {
{ &controls::rpi::ScalerCrops, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), Rectangle{}) }
} },
};
} /* namespace */ } /* namespace */
LOG_DEFINE_CATEGORY(IPARPI) LOG_DEFINE_CATEGORY(IPARPI)
@ -159,6 +166,10 @@ int32_t IpaBase::init(const IPASettings &settings, const InitParams &params, Ini
if (lensPresent_) if (lensPresent_)
ctrlMap.merge(ControlInfoMap::Map(ipaAfControls)); ctrlMap.merge(ControlInfoMap::Map(ipaAfControls));
auto platformCtrlsIt = platformControls.find(controller_.getTarget());
if (platformCtrlsIt != platformControls.end())
ctrlMap.merge(ControlInfoMap::Map(platformCtrlsIt->second));
monoSensor_ = params.sensorInfo.cfaPattern == properties::draft::ColorFilterArrangementEnum::MONO; monoSensor_ = params.sensorInfo.cfaPattern == properties::draft::ColorFilterArrangementEnum::MONO;
if (!monoSensor_) if (!monoSensor_)
ctrlMap.merge(ControlInfoMap::Map(ipaColourControls)); ctrlMap.merge(ControlInfoMap::Map(ipaColourControls));
@ -1070,6 +1081,7 @@ void IpaBase::applyControls(const ControlList &controls)
break; break;
} }
case controls::rpi::SCALER_CROPS:
case controls::SCALER_CROP: { case controls::SCALER_CROP: {
/* We do nothing with this, but should avoid the warning below. */ /* We do nothing with this, but should avoid the warning below. */
break; break;

View file

@ -30,4 +30,29 @@ controls:
\sa StatsOutputEnable \sa StatsOutputEnable
- ScalerCrops:
type: Rectangle
size: [n]
description: |
An array of rectangles, where each singular value has identical
functionality to the ScalerCrop control. This control allows the
Raspberry Pi pipeline handler to control individual scaler crops per
output stream.
The order of rectangles passed into the control must match the order of
streams configured by the application. The pipeline handler will only
configure crop retangles up-to the number of output streams configured.
All subsequent rectangles passed into this control are ignored by the
pipeline handler.
If both rpi::ScalerCrops and ScalerCrop controls are present in a
ControlList, the latter is discarded, and crops are obtained from this
control.
Note that using different crop rectangles for each output stream with
this control is only applicable on the Pi5/PiSP platform. This control
should also be considered temporary/draft and will be replaced with
official libcamera API support for per-stream controls in the future.
\sa ScalerCrop
... ...