libcamera: include/libcamera/internal/delayed_controls.h Source File

libcamera v0.5.1 Supporting cameras in Linux since 2019 |

Loading...
Searching...
No Matches
delayed_controls.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: LGPL-2.1-or-later */
2/*
3 * Copyright (C) 2020, Raspberry Pi Ltd
4 *
5 * Helper to deal with controls that take effect with a delay
6 */
7
8#pragma once
9
10#include <stdint.h>
11#include <unordered_map>
12
13#include <libcamera/controls.h>
14
15namespace libcamera {
16
17class V4L2Device;
18
19 class DelayedControls
20{
21public:
22 struct ControlParams {
23 unsigned int delay;
24 bool priorityWrite;
25 };
26
27 DelayedControls(V4L2Device *device,
28 const std::unordered_map<uint32_t, ControlParams> &controlParams);
29
30 void reset();
31
32 bool push(const ControlList &controls);
33 ControlList get(uint32_t sequence);
34
35 void applyControls(uint32_t sequence);
36
37private:
38 class Info : public ControlValue
39 {
40 public:
41 Info()
42 : updated(false)
43 {
44 }
45
46 Info(const ControlValue &v, bool updated_ = true)
47 : ControlValue(v), updated(updated_)
48 {
49 }
50
51 bool updated;
52 };
53
54 /* \todo Make the listSize configurable at instance creation time. */
55 static constexpr int listSize = 16;
56 class ControlRingBuffer : public std::array<Info, listSize>
57 {
58 public:
59 Info &operator[](unsigned int index)
60 {
61 return std::array<Info, listSize>::operator[](index % listSize);
62 }
63
64 const Info &operator[](unsigned int index) const
65 {
66 return std::array<Info, listSize>::operator[](index % listSize);
67 }
68 };
69
70 V4L2Device *device_;
71 /* \todo Evaluate if we should index on ControlId * or unsigned int */
72 std::unordered_map<const ControlId *, ControlParams> controlParams_;
73 unsigned int maxDelay_;
74
75 uint32_t queueCount_;
76 uint32_t writeCount_;
77 /* \todo Evaluate if we should index on ControlId * or unsigned int */
78 std::unordered_map<const ControlId *, ControlRingBuffer> values_;
79};
80
81} /* namespace libcamera */
libcamera::ControlList
Associate a list of ControlId with their values for an object.
Definition controls.h:411
libcamera::ControlValue
Abstract type representing the value of a control.
Definition controls.h:134
libcamera::DelayedControls::DelayedControls
DelayedControls(V4L2Device *device, const std::unordered_map< uint32_t, ControlParams > &controlParams)
Construct a DelayedControls instance.
Definition delayed_controls.cpp:74
libcamera::DelayedControls::get
ControlList get(uint32_t sequence)
Read back controls in effect at a sequence number.
Definition delayed_controls.cpp:203
libcamera::DelayedControls::push
bool push(const ControlList &controls)
Push a set of controls on the queue.
Definition delayed_controls.cpp:149
libcamera::DelayedControls::reset
void reset()
Reset state machine.
Definition delayed_controls.cpp:116
libcamera::DelayedControls::applyControls
void applyControls(uint32_t sequence)
Inform DelayedControls of the start of a new frame.
Definition delayed_controls.cpp:232
libcamera::V4L2Device
Base class for V4L2VideoDevice and V4L2Subdevice.
Definition v4l2_device.h:33
controls.h
Framework to manage controls related to an object.
libcamera::controls
Namespace for libcamera controls.
Definition control_ids.h:21
libcamera
Top-level libcamera namespace.
Definition backtrace.h:17
libcamera::DelayedControls::ControlParams
Parameters associated with controls handled by the DelayedControls helper class.
Definition delayed_controls.h:22
libcamera::DelayedControls::ControlParams::delay
unsigned int delay
Frame delay from setting the control on a sensor device to when it is consumed during framing.
Definition delayed_controls.h:23
libcamera::DelayedControls::ControlParams::priorityWrite
bool priorityWrite
Flag to indicate that this control must be applied ahead of, and separately from the other controls.
Definition delayed_controls.h:24