[libcamera-devel] [PATCH 2/5] src: raspberrypi: Pass the drop frame count in start, not configure
Naushir Patuck
naush at raspberrypi.com
Fri Dec 4 16:53:24 CET 2020
Hi David,
Thank you for the patch.
On Wed, 2 Dec 2020 at 11:53, David Plowman <david.plowman at raspberrypi.com>
wrote:
> The number of frames to drop (not display) is passed back now from the
> start method, not configure. This means applications have a chance to
> set fixed exposure/gain before starting the camera and this can affect
> the frame drop count that is returned.
>
> Both the IPA implementation file and the pipeline handler need
> matching modifications.
>
> Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
>
Reviewed-by: Naushir Patuck <naush at raspberrypi.com>
> ---
> src/ipa/raspberrypi/raspberrypi.cpp | 38 +++++++++----------
> .../pipeline/raspberrypi/raspberrypi.cpp | 25 ++++++------
> 2 files changed, 32 insertions(+), 31 deletions(-)
>
> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp
> b/src/ipa/raspberrypi/raspberrypi.cpp
> index b8298768..0300b8d9 100644
> --- a/src/ipa/raspberrypi/raspberrypi.cpp
> +++ b/src/ipa/raspberrypi/raspberrypi.cpp
> @@ -182,6 +182,25 @@ int IPARPi::start(const IPAOperationData &ipaConfig,
> IPAOperationData *result)
> result->operation |= RPi::IPA_CONFIG_SENSOR;
> }
>
> + /*
> + * Initialise frame counts, and decide how many frames must be
> hidden or
> + *"mistrusted", which depends on whether this is a startup from
> cold,
> + * or merely a mode switch in a running system.
> + */
> + frameCount_ = 0;
> + checkCount_ = 0;
> + unsigned int dropFrame = 0;
> + if (firstStart_) {
> + dropFrame = helper_->HideFramesStartup();
> + mistrustCount_ = helper_->MistrustFramesStartup();
> + } else {
> + dropFrame = helper_->HideFramesModeSwitch();
> + mistrustCount_ = helper_->MistrustFramesModeSwitch();
> + }
> +
> + result->data.push_back(dropFrame);
> + result->operation |= RPi::IPA_CONFIG_DROP_FRAMES;
> +
> firstStart_ = false;
>
> return 0;
> @@ -298,25 +317,6 @@ void IPARPi::configure(const CameraSensorInfo
> &sensorInfo,
> /* Pass the camera mode to the CamHelper to setup algorithms. */
> helper_->SetCameraMode(mode_);
>
> - /*
> - * Initialise frame counts, and decide how many frames must be
> hidden or
> - *"mistrusted", which depends on whether this is a startup from
> cold,
> - * or merely a mode switch in a running system.
> - */
> - frameCount_ = 0;
> - checkCount_ = 0;
> - unsigned int dropFrame = 0;
> - if (controllerInit_) {
> - dropFrame = helper_->HideFramesModeSwitch();
> - mistrustCount_ = helper_->MistrustFramesModeSwitch();
> - } else {
> - dropFrame = helper_->HideFramesStartup();
> - mistrustCount_ = helper_->MistrustFramesStartup();
> - }
> -
> - result->data.push_back(dropFrame);
> - result->operation |= RPi::IPA_CONFIG_DROP_FRAMES;
> -
> if (!controllerInit_) {
> /* Load the tuning file for this sensor. */
> controller_.Read(tuningFile_.c_str());
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index 89a44763..5ae56628 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -745,13 +745,6 @@ int PipelineHandlerRPi::start(Camera *camera,
> [[maybe_unused]] ControlList *cont
> return ret;
> }
>
> - ret = queueAllBuffers(camera);
> - if (ret) {
> - LOG(RPI, Error) << "Failed to queue buffers";
> - stop(camera);
> - return ret;
> - }
> -
> /* Check if a ScalerCrop control was specified. */
> if (controls)
> data->applyScalerCrop(*controls);
> @@ -778,6 +771,19 @@ int PipelineHandlerRPi::start(Camera *camera,
> [[maybe_unused]] ControlList *cont
> LOG(RPI, Error) << "V4L2 staggered set failed";
> }
>
> + if (result.operation & RPi::IPA_CONFIG_DROP_FRAMES) {
> + /* Configure the number of dropped frames required on
> startup. */
> + data->dropFrameCount_ = result.data[0];
> + }
> +
> + /* We need to set the dropFrameCount_ before queueing buffers. */
> + ret = queueAllBuffers(camera);
> + if (ret) {
> + LOG(RPI, Error) << "Failed to queue buffers";
> + stop(camera);
> + return ret;
> + }
> +
> /*
> * IPA configure may have changed the sensor flips - hence the
> bayer
> * order. Get the sensor format and set the ISP input now.
> @@ -1231,11 +1237,6 @@ int RPiCameraData::configureIPA(const
> CameraConfiguration *config)
> LOG(RPI, Error) << "V4L2 staggered set failed";
> }
>
> - if (result.operation & RPi::IPA_CONFIG_DROP_FRAMES) {
> - /* Configure the number of dropped frames required on
> startup. */
> - dropFrameCount_ = result.data[resultIdx++];
> - }
> -
> /*
> * Configure the H/V flip controls based on the combination of
> * the sensor and user transform.
> --
> 2.20.1
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20201204/a26d5f70/attachment-0001.htm>
More information about the libcamera-devel
mailing list