Message ID | 20240930141415.8857-2-naush@raspberrypi.com |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
Hi Naush On Mon, Sep 30, 2024 at 03:14:09PM GMT, Naushir Patuck wrote: > 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> > --- > src/ipa/rpi/common/ipa_base.cpp | 14 ++++++++++++++ > src/libcamera/control_ids_rpi.yaml | 21 +++++++++++++++++++++ > 2 files changed, 35 insertions(+) > > diff --git a/src/ipa/rpi/common/ipa_base.cpp b/src/ipa/rpi/common/ipa_base.cpp > index ee3848b54f21..d408cdb74255 100644 > --- a/src/ipa/rpi/common/ipa_base.cpp > +++ b/src/ipa/rpi/common/ipa_base.cpp > @@ -96,6 +96,15 @@ const ControlInfoMap::Map ipaAfControls{ > { &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{}) } > + } > + }, > +}; I wonder if this won't be better placed in the forthcoming pisp.c but I don't see a ControlInfoMap in vc4.cpp, so maybe you plan to place platform specific controls on ipa_base.cpp ? > + > } /* namespace */ > > LOG_DEFINE_CATEGORY(IPARPI) > @@ -159,6 +168,10 @@ int32_t IpaBase::init(const IPASettings &settings, const InitParams ¶ms, Ini > if (lensPresent_) > 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; > if (!monoSensor_) > ctrlMap.merge(ControlInfoMap::Map(ipaColourControls)); > @@ -1070,6 +1083,7 @@ void IpaBase::applyControls(const ControlList &controls) > break; > } > > + case controls::rpi::SCALER_CROPS: > case controls::SCALER_CROP: { > /* We do nothing with this, but should avoid the warning below. */ > break; > diff --git a/src/libcamera/control_ids_rpi.yaml b/src/libcamera/control_ids_rpi.yaml > index cb097f887e16..a0fc1cd897b5 100644 > --- a/src/libcamera/control_ids_rpi.yaml > +++ b/src/libcamera/control_ids_rpi.yaml > @@ -26,4 +26,25 @@ controls: > > \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. > + > + 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 Fine to have a vendor control for this Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Thanks j > ... > -- > 2.34.1 >
Hi Jacopo, Thanks for the feedback. On Tue, 1 Oct 2024 at 07:13, Jacopo Mondi <jacopo.mondi@ideasonboard.com> wrote: > > Hi Naush > > On Mon, Sep 30, 2024 at 03:14:09PM GMT, Naushir Patuck wrote: > > 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> > > --- > > src/ipa/rpi/common/ipa_base.cpp | 14 ++++++++++++++ > > src/libcamera/control_ids_rpi.yaml | 21 +++++++++++++++++++++ > > 2 files changed, 35 insertions(+) > > > > diff --git a/src/ipa/rpi/common/ipa_base.cpp b/src/ipa/rpi/common/ipa_base.cpp > > index ee3848b54f21..d408cdb74255 100644 > > --- a/src/ipa/rpi/common/ipa_base.cpp > > +++ b/src/ipa/rpi/common/ipa_base.cpp > > @@ -96,6 +96,15 @@ const ControlInfoMap::Map ipaAfControls{ > > { &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{}) } > > + } > > + }, > > +}; > > I wonder if this won't be better placed in the forthcoming pisp.c but > I don't see a ControlInfoMap in vc4.cpp, so maybe you plan to place > platform specific controls on ipa_base.cpp ? Good question - I can do it if you think it's more appropriate? The reason I did it in ipa_base.cpp was because I liked that all general/hw specific controls were listed in the same place. Regards, Naush > > > + > > } /* namespace */ > > > > LOG_DEFINE_CATEGORY(IPARPI) > > @@ -159,6 +168,10 @@ int32_t IpaBase::init(const IPASettings &settings, const InitParams ¶ms, Ini > > if (lensPresent_) > > 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; > > if (!monoSensor_) > > ctrlMap.merge(ControlInfoMap::Map(ipaColourControls)); > > @@ -1070,6 +1083,7 @@ void IpaBase::applyControls(const ControlList &controls) > > break; > > } > > > > + case controls::rpi::SCALER_CROPS: > > case controls::SCALER_CROP: { > > /* We do nothing with this, but should avoid the warning below. */ > > break; > > diff --git a/src/libcamera/control_ids_rpi.yaml b/src/libcamera/control_ids_rpi.yaml > > index cb097f887e16..a0fc1cd897b5 100644 > > --- a/src/libcamera/control_ids_rpi.yaml > > +++ b/src/libcamera/control_ids_rpi.yaml > > @@ -26,4 +26,25 @@ controls: > > > > \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. > > + > > + 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 > > Fine to have a vendor control for this > Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > > Thanks > j > > > ... > > -- > > 2.34.1 > >
Hi Naush On Tue, Oct 01, 2024 at 12:05:45PM GMT, Naushir Patuck wrote: > Hi Jacopo, > > Thanks for the feedback. > > On Tue, 1 Oct 2024 at 07:13, Jacopo Mondi <jacopo.mondi@ideasonboard.com> wrote: > > > > Hi Naush > > > > On Mon, Sep 30, 2024 at 03:14:09PM GMT, Naushir Patuck wrote: > > > 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> > > > --- > > > src/ipa/rpi/common/ipa_base.cpp | 14 ++++++++++++++ > > > src/libcamera/control_ids_rpi.yaml | 21 +++++++++++++++++++++ > > > 2 files changed, 35 insertions(+) > > > > > > diff --git a/src/ipa/rpi/common/ipa_base.cpp b/src/ipa/rpi/common/ipa_base.cpp > > > index ee3848b54f21..d408cdb74255 100644 > > > --- a/src/ipa/rpi/common/ipa_base.cpp > > > +++ b/src/ipa/rpi/common/ipa_base.cpp > > > @@ -96,6 +96,15 @@ const ControlInfoMap::Map ipaAfControls{ > > > { &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{}) } > > > + } > > > + }, > > > +}; > > > > I wonder if this won't be better placed in the forthcoming pisp.c but > > I don't see a ControlInfoMap in vc4.cpp, so maybe you plan to place > > platform specific controls on ipa_base.cpp ? > > Good question - I can do it if you think it's more appropriate? > It's up to you to decide whatever makes maintaining the two IPAs simpler. > The reason I did it in ipa_base.cpp was because I liked that all > general/hw specific controls were listed in the same place. > That's fine then ;) > Regards, > Naush > > > > > > + > > > } /* namespace */ > > > > > > LOG_DEFINE_CATEGORY(IPARPI) > > > @@ -159,6 +168,10 @@ int32_t IpaBase::init(const IPASettings &settings, const InitParams ¶ms, Ini > > > if (lensPresent_) > > > 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; > > > if (!monoSensor_) > > > ctrlMap.merge(ControlInfoMap::Map(ipaColourControls)); > > > @@ -1070,6 +1083,7 @@ void IpaBase::applyControls(const ControlList &controls) > > > break; > > > } > > > > > > + case controls::rpi::SCALER_CROPS: > > > case controls::SCALER_CROP: { > > > /* We do nothing with this, but should avoid the warning below. */ > > > break; > > > diff --git a/src/libcamera/control_ids_rpi.yaml b/src/libcamera/control_ids_rpi.yaml > > > index cb097f887e16..a0fc1cd897b5 100644 > > > --- a/src/libcamera/control_ids_rpi.yaml > > > +++ b/src/libcamera/control_ids_rpi.yaml > > > @@ -26,4 +26,25 @@ controls: > > > > > > \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. > > > + > > > + 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 > > > > Fine to have a vendor control for this > > Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > > > > Thanks > > j > > > > > ... > > > -- > > > 2.34.1 > > >
diff --git a/src/ipa/rpi/common/ipa_base.cpp b/src/ipa/rpi/common/ipa_base.cpp index ee3848b54f21..d408cdb74255 100644 --- a/src/ipa/rpi/common/ipa_base.cpp +++ b/src/ipa/rpi/common/ipa_base.cpp @@ -96,6 +96,15 @@ const ControlInfoMap::Map ipaAfControls{ { &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 */ LOG_DEFINE_CATEGORY(IPARPI) @@ -159,6 +168,10 @@ int32_t IpaBase::init(const IPASettings &settings, const InitParams ¶ms, Ini if (lensPresent_) 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; if (!monoSensor_) ctrlMap.merge(ControlInfoMap::Map(ipaColourControls)); @@ -1070,6 +1083,7 @@ void IpaBase::applyControls(const ControlList &controls) break; } + case controls::rpi::SCALER_CROPS: case controls::SCALER_CROP: { /* We do nothing with this, but should avoid the warning below. */ break; diff --git a/src/libcamera/control_ids_rpi.yaml b/src/libcamera/control_ids_rpi.yaml index cb097f887e16..a0fc1cd897b5 100644 --- a/src/libcamera/control_ids_rpi.yaml +++ b/src/libcamera/control_ids_rpi.yaml @@ -26,4 +26,25 @@ controls: \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. + + 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 ...
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> --- src/ipa/rpi/common/ipa_base.cpp | 14 ++++++++++++++ src/libcamera/control_ids_rpi.yaml | 21 +++++++++++++++++++++ 2 files changed, 35 insertions(+)