summaryrefslogtreecommitdiff
path: root/src/ipa/ipu3/ipa_context.h
diff options
context:
space:
mode:
authorUmang Jain <umang.jain@ideasonboard.com>2022-05-17 23:42:13 +0530
committerKieran Bingham <kieran.bingham@ideasonboard.com>2022-05-18 15:27:33 +0100
commitf4783e689918abf6f470f4bcaaadaf3c2400dff4 (patch)
tree5fefd11654b09050dac8274a70607c7f107ee8af /src/ipa/ipu3/ipa_context.h
parent8b291bce82f7cc8307e8ef55ff20e3f41462fa3f (diff)
ipa: ipu3: Put IPAFrameContext(s) in a ring buffer
Instead of having one frame context constantly being updated, this patch aims to introduce per-frame IPAFrameContext which are stored in a ring buffer. Whenever a request is queued, a new IPAFrameContext is created and inserted into the ring buffer. The IPAFrameContext structure itself has been slightly extended to store a frame id and a ControlList for incoming frame controls (sent in by the application). The next step would be to read and set these controls whenever the request is actually queued to the hardware. Since now we are working in multiples of IPAFrameContext, the Algorithm::process() will actually take in a IPAFrameContext pointer (as opposed to a nullptr while preparing for this change). Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/ipa/ipu3/ipa_context.h')
-rw-r--r--src/ipa/ipu3/ipa_context.h14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/ipa/ipu3/ipa_context.h b/src/ipa/ipu3/ipa_context.h
index 8d681131..42e11141 100644
--- a/src/ipa/ipu3/ipa_context.h
+++ b/src/ipa/ipu3/ipa_context.h
@@ -8,16 +8,22 @@
#pragma once
+#include <array>
+
#include <linux/intel-ipu3.h>
#include <libcamera/base/utils.h>
+#include <libcamera/controls.h>
#include <libcamera/geometry.h>
namespace libcamera {
namespace ipa::ipu3 {
+/* Maximum number of frame contexts to be held */
+static constexpr uint32_t kMaxFrameContexts = 16;
+
struct IPASessionConfiguration {
struct {
ipu3_uapi_grid_config bdsGrid;
@@ -71,17 +77,23 @@ struct IPAActiveState {
};
struct IPAFrameContext {
+ IPAFrameContext();
+ IPAFrameContext(uint32_t id, const ControlList &reqControls);
+
struct {
uint32_t exposure;
double gain;
} sensor;
+
+ uint32_t frame;
+ ControlList frameControls;
};
struct IPAContext {
IPASessionConfiguration configuration;
IPAActiveState activeState;
- IPAFrameContext frameContext;
+ std::array<IPAFrameContext, kMaxFrameContexts> frameContexts;
};
} /* namespace ipa::ipu3 */