[libcamera-devel] [PATCH 2/2] pipeline raspberrypi: Move adding of ScalerCrop to the Request metadata
Kieran Bingham
kieran.bingham at ideasonboard.com
Mon May 17 14:43:14 CEST 2021
Hi Naush,
On 12/05/2021 09:47, Naushir Patuck 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.
That sounds nicer!
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> ---
> .../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()
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list