[libcamera-devel] [PATCH 2/2] pipeline raspberrypi: Move adding of ScalerCrop to the Request metadata

David Plowman david.plowman at raspberrypi.com
Wed May 12 18:07:13 CEST 2021


Hi Naush

Thanks for this patch too. I have no particular comments - it seems
like a sensible little tidy-up.

On Wed, 12 May 2021 at 09:47, Naushir Patuck <naush at raspberrypi.com> wrote:
>
> With the recent change to merge existing Request metadata with the
> ControlList provided by the IPA in commit fcfb1dc02a6b ("libcamera:
> raspberry: Report sensor timestamp"), we can now write the
> controls::ScalerCrop value at the start of the pipeline instead of at
> the end.
>
> This change simplifies the logic slightly, and allows us to write all
> metadata items to the Request in one place.
>
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>

I've been testing this patch too along with the previous one, so:

Reviewed-by: David Plowman <david.plowman at raspberrypi.com>
Tested-by: David Plowman <david.plowman at raspberrypi.com>

Thanks!
David

> ---
>  .../pipeline/raspberrypi/raspberrypi.cpp      | 32 +++++++------------
>  1 file changed, 12 insertions(+), 20 deletions(-)
>
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index eb6d31670567..0a71325ad7c0 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -140,7 +140,7 @@ public:
>         RPiCameraData(PipelineHandler *pipe)
>                 : CameraData(pipe), state_(State::Stopped),
>                   supportsFlips_(false), flipsAlterBayerOrder_(false),
> -                 updateScalerCrop_(true), dropFrameCount_(0), ispOutputCount_(0)
> +                 dropFrameCount_(0), ispOutputCount_(0)
>         {
>         }
>
> @@ -214,7 +214,6 @@ public:
>         CameraSensorInfo sensorInfo_;
>         Rectangle ispCrop_; /* crop in ISP (camera mode) pixels */
>         Rectangle scalerCrop_; /* crop in sensor native pixels */
> -       bool updateScalerCrop_;
>         Size ispMinCropSize_;
>
>         unsigned int dropFrameCount_;
> @@ -1325,23 +1324,7 @@ void RPiCameraData::statsMetadataComplete(uint32_t bufferId, const ControlList &
>         Request *request = requestQueue_.front();
>         request->metadata().merge(controls);
>
> -       /*
> -        * Also update the ScalerCrop in the metadata with what we actually
> -        * used. But we must first rescale that from ISP (camera mode) pixels
> -        * back into sensor native pixels.
> -        *
> -        * Sending this information on every frame may be helpful.
> -        */
> -       if (updateScalerCrop_) {
> -               updateScalerCrop_ = false;
> -               scalerCrop_ = ispCrop_.scaledBy(sensorInfo_.analogCrop.size(),
> -                                               sensorInfo_.outputSize);
> -               scalerCrop_.translateBy(sensorInfo_.analogCrop.topLeft());
> -       }
> -       request->metadata().set(controls::ScalerCrop, scalerCrop_);
> -
>         state_ = State::IpaComplete;
> -
>         handleState();
>  }
>
> @@ -1673,8 +1656,15 @@ void RPiCameraData::applyScalerCrop(const ControlList &controls)
>                 if (ispCrop != ispCrop_) {
>                         isp_[Isp::Input].dev()->setSelection(V4L2_SEL_TGT_CROP, &ispCrop);
>                         ispCrop_ = ispCrop;
> -                       /* queueFrameAction will have to update its scalerCrop_ */
> -                       updateScalerCrop_ = true;
> +
> +                       /*
> +                        * Also update the ScalerCrop in the metadata with what we actually
> +                        * used. But we must first rescale that from ISP (camera mode) pixels
> +                        * back into sensor native pixels.
> +                        */
> +                       scalerCrop_ = ispCrop_.scaledBy(sensorInfo_.analogCrop.size(),
> +                                                       sensorInfo_.outputSize);
> +                       scalerCrop_.translateBy(sensorInfo_.analogCrop.topLeft());
>                 }
>         }
>  }
> @@ -1684,6 +1674,8 @@ void RPiCameraData::fillRequestMetadata(const ControlList &bufferControls,
>  {
>         request->metadata().set(controls::SensorTimestamp,
>                                 bufferControls.get(controls::SensorTimestamp));
> +
> +       request->metadata().set(controls::ScalerCrop, scalerCrop_);
>  }
>
>  void RPiCameraData::tryRunPipeline()
> --
> 2.25.1
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel


More information about the libcamera-devel mailing list