@@ -35,22 +35,6 @@ namespace libcamera::ipa::ipu3 {
* most recently computed by the IPA algorithms.
*/
-/**
- * \struct IPAFrameContext
- * \brief Context for a frame
- *
- * The frame context stores data specific to a single frame processed by the
- * IPA. Each frame processed by the IPA has a context associated with it,
- * accessible through the IPAContext structure.
- *
- * Fields in the frame context should reflect values and controls
- * associated with the specific frame as requested by the application, and
- * as configured by the hardware. Fields can be read by algorithms to
- * determine if they should update any specific action for this frame, and
- * finally to update the metadata control lists when the frame is fully
- * completed.
- */
-
/**
* \struct IPAContext
* \brief Global IPA context data shared between all algorithms
@@ -188,15 +172,15 @@ IPAFrameContext::IPAFrameContext() = default;
/**
* \brief Construct a IPAFrameContext instance
*/
-IPAFrameContext::IPAFrameContext(uint32_t id, const ControlList &reqControls)
- : frame(id), frameControls(reqControls)
+IPAFrameContext::IPAFrameContext(const ControlList &reqControls)
+ : frameControls(reqControls)
{
sensor = {};
}
/**
- * \var IPAFrameContext::frame
- * \brief The frame number
+ * \struct IPAFrameContext
+ * \brief IPU3-specific FrameContext
*
* \var IPAFrameContext::frameControls
* \brief Controls sent in by the application while queuing the request
@@ -17,6 +17,8 @@
#include <libcamera/controls.h>
#include <libcamera/geometry.h>
+#include <libipa/fc_queue.h>
+
namespace libcamera {
namespace ipa::ipu3 {
@@ -76,16 +78,15 @@ struct IPAActiveState {
} toneMapping;
};
-struct IPAFrameContext {
+struct IPAFrameContext : public FrameContext {
IPAFrameContext();
- IPAFrameContext(uint32_t id, const ControlList &reqControls);
+ IPAFrameContext(const ControlList &reqControls);
struct {
uint32_t exposure;
double gain;
} sensor;
- uint32_t frame;
ControlList frameControls;
};
@@ -607,9 +607,6 @@ void IPAIPU3::processStatsBuffer(const uint32_t frame,
IPAFrameContext &frameContext = context_.frameContexts[frame % kMaxFrameContexts];
- if (frameContext.frame != frame)
- LOG(IPAIPU3, Warning) << "Frame " << frame << " does not match its frame context";
-
frameContext.sensor.exposure = sensorControls.get(V4L2_CID_EXPOSURE).get<int32_t>();
frameContext.sensor.gain = camHelper_->gain(sensorControls.get(V4L2_CID_ANALOGUE_GAIN).get<int32_t>());
@@ -654,7 +651,7 @@ void IPAIPU3::processStatsBuffer(const uint32_t frame,
void IPAIPU3::queueRequest(const uint32_t frame, const ControlList &controls)
{
/* \todo Start processing for 'frame' based on 'controls'. */
- context_.frameContexts[frame % kMaxFrameContexts] = { frame, controls };
+ context_.frameContexts[frame % kMaxFrameContexts] = { controls };
}
/**