1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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
|