IDS peak AFL v1.8.0
Loading...
Searching...
No Matches
peak_afl_generic_auto_white_balance.hpp
Go to the documentation of this file.
1
10
11#pragma once
12
13#include <peak_afl/peak_afl.hpp>
16
18
19#include <functional>
20#include <memory>
21
22namespace peak
23{
24namespace pipeline
25{
26namespace modules
27{
28namespace autofeature
29{
30namespace detail
31{
32
33class GenericWhiteBalance : public IController
34{
35 using ProcessingCallback = std::function<void()>;
36
37public:
38 explicit GenericWhiteBalance(peak::afl::Manager& manager, ProcessingCallback callback)
39 : IController(manager)
40 , m_controller{ peak::afl::Controller::Create(PEAK_AFL_CONTROLLER_TYPE_WHITE_BALANCE) }
41 , m_processingCallback{ std::move(callback) }
42 , m_skipFrames{ std::make_unique<features::SkipFrames>(m_controller) }
43 , m_roi{ std::make_unique<features::Roi>(m_controller) }
44 {
45 GetManager().AddController(m_controller);
46
47 m_controller->RegisterFinishedCallback([this]() { m_FinishedCallbackManager.TriggerCallbacks(); });
48
49 m_controller->RegisterProcessingCallback([this](peak_afl_process_data* data) {
50 auto* whitebalance = reinterpret_cast<peak_afl_process_data_whitebalance*>(data);
51 if (whitebalance->controller_component != PEAK_AFL_CONTROLLER_WHITEBALANCE_COMPONENT_HOST_GAIN)
52 {
53 return;
54 }
55
56 if (m_processingCallback)
57 {
58 m_processingCallback();
59 }
60 });
61 }
62
63 PEAK_COMMON_NO_DISCARD std::string GetName() const override
64 {
65 return "GenericWhitebalance";
66 }
67
68 void Serialize(peak::common::serialization::IArchive& archive) const override
69 {
70 for (const auto& feature :
71 std::initializer_list<const peak::common::serialization::ISerializable*>{ m_skipFrames.get(), m_roi.get() })
72 {
73 feature->Serialize(archive);
74 }
75
76 archive.SetString("Mode", ToString(GetMode()));
77 }
78
79 void Deserialize(const peak::common::serialization::IArchive& archive) override
80 {
81 for (const auto& feature :
82 std::initializer_list<peak::common::serialization::ISerializable*>{ m_skipFrames.get(), m_roi.get() })
83 {
84 feature->Deserialize(archive);
85 }
86
87 SetMode(detail::ToControllerMode(archive.GetString("Mode")));
88 }
89
90 void SetMode(ControllerMode mode) override
91 {
92 m_controller->SetMode(detail::ToCType(mode));
93 }
94
95 PEAK_COMMON_NO_DISCARD ControllerMode GetMode() const override
96 {
97 return detail::ToControllerMode(m_controller->GetMode());
98 }
99
100 PEAK_COMMON_NO_DISCARD bool IsRunning() const override
101 {
102 return GetMode() != ControllerMode::Off;
103 }
104
105 void ResetToDefault() override
106 {
107 SetMode(ControllerMode::Off);
108 SkipFrames().Set(2);
109 Roi().Set({});
110 }
111
112 PEAK_COMMON_NO_DISCARD features::SkipFrames& SkipFrames() const
113 {
114 return *m_skipFrames;
115 }
116
117 PEAK_COMMON_NO_DISCARD features::Roi& Roi() const
118 {
119 return *m_roi;
120 }
121
122 PEAK_COMMON_NO_DISCARD ControllerType GetType() const override
123 {
125 }
126
127 IController::FinishedCallbackHandle RegisterFinishedCallback(const IController::FinishedCallback& callback)
128 {
129 return m_FinishedCallbackManager.RegisterCallback(callback);
130 }
131
132 void UnregisterFinishedCallback(IController::FinishedCallbackHandle callbackHandle)
133 {
134 m_FinishedCallbackManager.UnregisterCallback(callbackHandle);
135 }
136
137private:
138 std::shared_ptr<peak::afl::Controller> m_controller;
139
140 peak::core::TTriggerCallbackManager<IController::FinishedCallbackHandle, IController::FinishedCallback>
141 m_FinishedCallbackManager;
142 ProcessingCallback m_processingCallback{};
143
144 std::unique_ptr<features::SkipFrames> m_skipFrames{};
145 std::unique_ptr<features::Roi> m_roi{};
146};
147
148} // namespace detail
149} // namespace autofeature
150} // namespace modules
151} // namespace pipeline
152} // namespace peak
void AddController(const std::shared_ptr< Controller > &controller)
Add a controller to an automanager.
Definition peak_afl.hpp:1798
virtual PEAK_COMMON_NO_DISCARD std::string GetString(const std::string &key) const =0
Retrieves a string value by key.
virtual void SetString(const std::string &key, const std::string &value)=0
Stores a UTF-8 string.
Abstract base interface for all automatic controllers.
Definition peak_afl_icontroller.hpp:228
std::function< void()> FinishedCallback
Callback function type for operation completion notifications.
Definition peak_afl_icontroller.hpp:234
PEAK_COMMON_NO_DISCARD peak::afl::Manager & GetManager()
Gets a reference to the API manager.
Definition peak_afl_icontroller.hpp:369
FinishedCallback * FinishedCallbackHandle
Handle type for managing callback registrations.
Definition peak_afl_icontroller.hpp:239
@ PEAK_AFL_CONTROLLER_TYPE_WHITE_BALANCE
Automatic white balance controller.
Definition peak_afl.h:252
ControllerMode
Controller operation mode enumeration.
Definition peak_afl_icontroller.hpp:60
PEAK_COMMON_NO_DISCARD std::string ToString(ControllerType mode)
Converts ControllerType enumeration to string representation.
Definition peak_afl_icontroller.hpp:79
ControllerType
Controller type enumeration.
Definition peak_afl_icontroller.hpp:41
@ Off
Controller is disabled - no automatic processing.
Definition peak_afl_icontroller.hpp:62
@ WhiteBalance
Automatic white balance controller - manages color correction.
Definition peak_afl_icontroller.hpp:47
#define PEAK_COMMON_NO_DISCARD
Compatability macro for the nodiscard attribute.
Definition peak_common_defines.hpp:91
@ PEAK_AFL_CONTROLLER_WHITEBALANCE_COMPONENT_HOST_GAIN
Host-based software white balance.
Definition peak_afl.h:754
Interface definitions and implementations for individual module types used within a pipeline.
Definition peak_afl_generic_auto_brightness.hpp:39
Interfaces and implementations for defining and controlling data processing pipelines.
Definition peak_afl_generic_auto_brightness.hpp:37