Message ID | 20241008153031.429906-6-stefan.klug@ideasonboard.com |
---|---|
State | Accepted |
Headers | show |
Series |
|
Related | show |
Quoting Stefan Klug (2024-10-08 16:29:43) > Add a DebugMetadata helper to the context and add the corresponding > plumbing. This is all that is needed to support debug metadata in an > IPA. > > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > --- > Changes in v3: > - Whitespace changes > > Changes in v2: > - Replace DebugMetadata::assignList by DebugMetadata::moveEntries > --- > src/ipa/rkisp1/ipa_context.h | 5 +++++ > src/ipa/rkisp1/rkisp1.cpp | 3 +++ > 2 files changed, 8 insertions(+) > > diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h > index d52e73ad2503..7b93a9e9461d 100644 > --- a/src/ipa/rkisp1/ipa_context.h > +++ b/src/ipa/rkisp1/ipa_context.h > @@ -17,8 +17,11 @@ > #include <libcamera/control_ids.h> > #include <libcamera/controls.h> > #include <libcamera/geometry.h> > + > #include <libcamera/ipa/core_ipa_interface.h> > > +#include "libcamera/internal/debug_controls.h" > + > #include <libipa/camera_sensor_helper.h> > #include <libipa/fc_queue.h> > #include <libipa/matrix.h> > @@ -194,6 +197,8 @@ struct IPAContext { > > ControlInfoMap::Map ctrlMap; > > + DebugMetadata debugMetadata; > + > /* Interface to the Camera Helper */ > std::unique_ptr<CameraSensorHelper> camHelper; > }; > diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp > index a579f21de56f..03eae01baf54 100644 > --- a/src/ipa/rkisp1/rkisp1.cpp > +++ b/src/ipa/rkisp1/rkisp1.cpp > @@ -117,6 +117,7 @@ const IPAHwSettings ipaHwSettingsV12{ > const ControlInfoMap::Map rkisp1Controls{ > { &controls::AwbEnable, ControlInfo(false, true) }, > { &controls::ColourGains, ControlInfo(0.0f, 3.996f, 1.0f) }, > + { &controls::DebugMetadataEnable, ControlInfo(false, true, false) }, Ack. This is definitely a top level control... Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> > { &controls::Sharpness, ControlInfo(0.0f, 10.0f, 1.0f) }, > { &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) }, > }; > @@ -326,6 +327,7 @@ void IPARkISP1::unmapBuffers(const std::vector<unsigned int> &ids) > void IPARkISP1::queueRequest(const uint32_t frame, const ControlList &controls) > { > IPAFrameContext &frameContext = context_.frameContexts.alloc(frame); > + context_.debugMetadata.enableByControl(controls); > > for (auto const &a : algorithms()) { > Algorithm *algo = static_cast<Algorithm *>(a.get()); > @@ -378,6 +380,7 @@ void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId > > setControls(frame); > > + context_.debugMetadata.moveEntries(metadata); > metadataReady.emit(frame, metadata); > } > > -- > 2.43.0 >
diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h index d52e73ad2503..7b93a9e9461d 100644 --- a/src/ipa/rkisp1/ipa_context.h +++ b/src/ipa/rkisp1/ipa_context.h @@ -17,8 +17,11 @@ #include <libcamera/control_ids.h> #include <libcamera/controls.h> #include <libcamera/geometry.h> + #include <libcamera/ipa/core_ipa_interface.h> +#include "libcamera/internal/debug_controls.h" + #include <libipa/camera_sensor_helper.h> #include <libipa/fc_queue.h> #include <libipa/matrix.h> @@ -194,6 +197,8 @@ struct IPAContext { ControlInfoMap::Map ctrlMap; + DebugMetadata debugMetadata; + /* Interface to the Camera Helper */ std::unique_ptr<CameraSensorHelper> camHelper; }; diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp index a579f21de56f..03eae01baf54 100644 --- a/src/ipa/rkisp1/rkisp1.cpp +++ b/src/ipa/rkisp1/rkisp1.cpp @@ -117,6 +117,7 @@ const IPAHwSettings ipaHwSettingsV12{ const ControlInfoMap::Map rkisp1Controls{ { &controls::AwbEnable, ControlInfo(false, true) }, { &controls::ColourGains, ControlInfo(0.0f, 3.996f, 1.0f) }, + { &controls::DebugMetadataEnable, ControlInfo(false, true, false) }, { &controls::Sharpness, ControlInfo(0.0f, 10.0f, 1.0f) }, { &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) }, }; @@ -326,6 +327,7 @@ void IPARkISP1::unmapBuffers(const std::vector<unsigned int> &ids) void IPARkISP1::queueRequest(const uint32_t frame, const ControlList &controls) { IPAFrameContext &frameContext = context_.frameContexts.alloc(frame); + context_.debugMetadata.enableByControl(controls); for (auto const &a : algorithms()) { Algorithm *algo = static_cast<Algorithm *>(a.get()); @@ -378,6 +380,7 @@ void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId setControls(frame); + context_.debugMetadata.moveEntries(metadata); metadataReady.emit(frame, metadata); }