libcamera v0.6.0 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/base/object.h>
14
15#include <libcamera/controls.h>
16
17 namespace libcamera {
18
19 class V4L2Device;
20
21 class DelayedControls : public Object
22{
23 public:
24 struct ControlParams {
25 unsigned int delay;
26 bool priorityWrite;
27 };
28
29 DelayedControls(V4L2Device *device,
30 const std::unordered_map<uint32_t, ControlParams> &controlParams);
31
32 void reset();
33
34 bool push(const ControlList &controls);
35 ControlList get(uint32_t sequence);
36
37 void applyControls(uint32_t sequence);
38
39 private:
40 class Info : public ControlValue
41 {
42 public:
43 Info()
44 : updated(false)
45 {
46 }
47
48 Info(const ControlValue &v, bool updated_ = true)
49 : ControlValue(v), updated(updated_)
50 {
51 }
52
53 bool updated;
54 };
55
56 /* \todo Make the listSize configurable at instance creation time. */
57 static constexpr int listSize = 16;
58 class ControlRingBuffer : public std::array<Info, listSize>
59 {
60 public:
61 Info &operator[](unsigned int index)
62 {
63 return std::array<Info, listSize>::operator[](index % listSize);
64 }
65
66 const Info &operator[](unsigned int index) const
67 {
68 return std::array<Info, listSize>::operator[](index % listSize);
69 }
70 };
71
72 V4L2Device *device_;
73 /* \todo Evaluate if we should index on ControlId * or unsigned int */
74 std::unordered_map<const ControlId *, ControlParams> controlParams_;
75 unsigned int maxDelay_;
76
77 uint32_t queueCount_;
78 uint32_t writeCount_;
79 /* \todo Evaluate if we should index on ControlId * or unsigned int */
80 std::unordered_map<const ControlId *, ControlRingBuffer> values_;
81};
82
83} /* namespace libcamera */
libcamera::ControlList
Associate a list of ControlId with their values for an object.
Definition controls.h:409
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::Object::Object
Object(Object *parent=nullptr)
Construct an Object instance.
Definition object.cpp:69
libcamera::V4L2Device
Base class for V4L2VideoDevice and V4L2Subdevice.
Definition v4l2_device.h:34
controls.h
Framework to manage controls related to an object.
libcamera::controls
Namespace for libcamera controls.
Definition control_ids.h:22
libcamera
Top-level libcamera namespace.
Definition backtrace.h:17
object.h
Base object to support automatic signal disconnection.
libcamera::DelayedControls::ControlParams
Parameters associated with controls handled by the DelayedControls helper class.
Definition delayed_controls.h:24
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:25
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:26