mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-19 10:25:05 +03:00
ipa: raspberrypi: Add autofocus algorithm interface headers
Add a new AfAlgorithm class that defines the interface for the Raspberry Pi autofocus algorithm. Add an AfStatus structure that returns the results of the autofocus algorithm back to the IPA. Add a structure for PDAF statistics provided by supported sensors for use with an autofocus algorithm. This structure is currently based on the IMX708's PDAF "Type 1" statistics. Signed-off-by: Nick Hollinghurst <nick.hollinghurst@raspberrypi.com> Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: David Plowman <david.plowman@raspberrypi.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
6290deea02
commit
23aefee337
3 changed files with 132 additions and 0 deletions
76
src/ipa/raspberrypi/controller/af_algorithm.h
Normal file
76
src/ipa/raspberrypi/controller/af_algorithm.h
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2022, Raspberry Pi Ltd
|
||||||
|
*
|
||||||
|
* af_algorithm.hpp - auto focus algorithm interface
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
|
#include <libcamera/base/span.h>
|
||||||
|
|
||||||
|
#include "algorithm.h"
|
||||||
|
|
||||||
|
namespace RPiController {
|
||||||
|
|
||||||
|
class AfAlgorithm : public Algorithm
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
AfAlgorithm(Controller *controller)
|
||||||
|
: Algorithm(controller) {}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* An autofocus algorithm should provide the following calls.
|
||||||
|
*
|
||||||
|
* Where a ControlList combines a change of AfMode with other AF
|
||||||
|
* controls, setMode() should be called first, to ensure the
|
||||||
|
* algorithm will be in the correct state to handle controls.
|
||||||
|
*
|
||||||
|
* setLensPosition() returns true if the mode was AfModeManual and
|
||||||
|
* the lens position has changed, otherwise returns false. When it
|
||||||
|
* returns true, hwpos should be sent immediately to the lens driver.
|
||||||
|
*
|
||||||
|
* getMode() is provided mainly for validating controls.
|
||||||
|
* getLensPosition() is provided for populating DeviceStatus.
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum AfRange { AfRangeNormal = 0,
|
||||||
|
AfRangeMacro,
|
||||||
|
AfRangeFull,
|
||||||
|
AfRangeMax };
|
||||||
|
|
||||||
|
enum AfSpeed { AfSpeedNormal = 0,
|
||||||
|
AfSpeedFast,
|
||||||
|
AfSpeedMax };
|
||||||
|
|
||||||
|
enum AfMode { AfModeManual = 0,
|
||||||
|
AfModeAuto,
|
||||||
|
AfModeContinuous };
|
||||||
|
|
||||||
|
enum AfPause { AfPauseImmediate = 0,
|
||||||
|
AfPauseDeferred,
|
||||||
|
AfPauseResume };
|
||||||
|
|
||||||
|
virtual void setRange([[maybe_unused]] AfRange range)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
virtual void setSpeed([[maybe_unused]] AfSpeed speed)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
virtual void setMetering([[maybe_unused]] bool use_windows)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
virtual void setWindows([[maybe_unused]] libcamera::Span<libcamera::Rectangle const> const &wins)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
virtual void setMode(AfMode mode) = 0;
|
||||||
|
virtual AfMode getMode() const = 0;
|
||||||
|
virtual bool setLensPosition(double dioptres, int32_t *hwpos) = 0;
|
||||||
|
virtual std::optional<double> getLensPosition() const = 0;
|
||||||
|
virtual void triggerScan() = 0;
|
||||||
|
virtual void cancelScan() = 0;
|
||||||
|
virtual void pause(AfPause pause) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace RPiController
|
35
src/ipa/raspberrypi/controller/af_status.h
Normal file
35
src/ipa/raspberrypi/controller/af_status.h
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2022, Raspberry Pi Ltd
|
||||||
|
*
|
||||||
|
* af_status.h - AF control algorithm status
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The AF algorithm should post the following structure into the image's
|
||||||
|
* "af.status" metadata. lensSetting should control the lens.
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum class AfState {
|
||||||
|
Idle = 0,
|
||||||
|
Scanning,
|
||||||
|
Focused,
|
||||||
|
Failed
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class AfPauseState {
|
||||||
|
Running = 0,
|
||||||
|
Pausing,
|
||||||
|
Paused
|
||||||
|
};
|
||||||
|
|
||||||
|
struct AfStatus {
|
||||||
|
/* state for reporting */
|
||||||
|
AfState state;
|
||||||
|
AfPauseState pauseState;
|
||||||
|
/* lensSetting should be sent to the lens driver, when valid */
|
||||||
|
std::optional<int> lensSetting;
|
||||||
|
};
|
21
src/ipa/raspberrypi/controller/pdaf_data.h
Normal file
21
src/ipa/raspberrypi/controller/pdaf_data.h
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2022, Raspberry Pi Ltd
|
||||||
|
*
|
||||||
|
* pdaf_data.h - PDAF Metadata; for now this is
|
||||||
|
* largely based on IMX708's PDAF "Type 1" output.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define PDAF_DATA_ROWS 12
|
||||||
|
#define PDAF_DATA_COLS 16
|
||||||
|
|
||||||
|
struct PdafData {
|
||||||
|
/* Confidence values, in raster order, in arbitrary units */
|
||||||
|
uint16_t conf[PDAF_DATA_ROWS][PDAF_DATA_COLS];
|
||||||
|
|
||||||
|
/* Phase error, in raster order, in s11 Q4 format (S.6.4) */
|
||||||
|
int16_t phase[PDAF_DATA_ROWS][PDAF_DATA_COLS];
|
||||||
|
};
|
Loading…
Add table
Add a link
Reference in a new issue