From 70894c0c46855955442284aba9dedb66d8d4bfbf Mon Sep 17 00:00:00 2001 From: Naushir Patuck Date: Tue, 26 Mar 2024 09:05:32 +0000 Subject: [PATCH] core: Use CompletedRequestPtr in the FrameInfo constructor This allows the constructor to set fps and sequence directly rather than having to do it outside of the class. Fixes the annotate stage where we don't set the fps field. Signed-off-by: Naushir Patuck --- apps/rpicam_still.cpp | 2 +- core/frame_info.hpp | 11 +++++++++-- core/rpicam_app.cpp | 4 +--- post_processing_stages/annotate_cv_stage.cpp | 3 +-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/apps/rpicam_still.cpp b/apps/rpicam_still.cpp index 5721edcd..11a186d0 100644 --- a/apps/rpicam_still.cpp +++ b/apps/rpicam_still.cpp @@ -252,7 +252,7 @@ static void event_loop(RPiCamStillApp &app) if (af_wait_state != AF_WAIT_NONE) { - FrameInfo fi(completed_request->metadata); + FrameInfo fi(completed_request); bool scanning = fi.af_state == libcamera::controls::AfStateScanning; if (scanning || (af_wait_state == AF_WAIT_SCANNING && ++af_wait_timeout >= 16)) af_wait_state = AF_WAIT_FINISHED; diff --git a/core/frame_info.hpp b/core/frame_info.hpp index 11293f9a..f98fcb21 100644 --- a/core/frame_info.hpp +++ b/core/frame_info.hpp @@ -12,12 +12,19 @@ #include #include +#include "completed_request.hpp" + struct FrameInfo { - FrameInfo(libcamera::ControlList &ctrls) + FrameInfo(const CompletedRequestPtr &completed_request) : exposure_time(0.0), digital_gain(0.0), colour_gains({ { 0.0f, 0.0f } }), focus(0.0), aelock(false), lens_position(-1.0), af_state(0) { + const libcamera::ControlList &ctrls = completed_request->metadata; + + sequence = completed_request->sequence; + fps = completed_request->framerate; + auto exp = ctrls.get(libcamera::controls::ExposureTime); if (exp) exposure_time = *exp; @@ -53,7 +60,7 @@ struct FrameInfo af_state = *afs; } - std::string ToString(std::string &info_string) const + std::string ToString(const std::string &info_string) const { std::string parsed(info_string); diff --git a/core/rpicam_app.cpp b/core/rpicam_app.cpp index 02063c0a..cc0cbb55 100644 --- a/core/rpicam_app.cpp +++ b/core/rpicam_app.cpp @@ -1154,9 +1154,7 @@ void RPiCamApp::previewThread() libcamera::Span span = r.Get()[0]; // Fill the frame info with the ControlList items and ancillary bits. - FrameInfo frame_info(item.completed_request->metadata); - frame_info.fps = item.completed_request->framerate; - frame_info.sequence = item.completed_request->sequence; + FrameInfo frame_info(item.completed_request); int fd = buffer->planes()[0].fd.get(); { diff --git a/post_processing_stages/annotate_cv_stage.cpp b/post_processing_stages/annotate_cv_stage.cpp index 24b585bd..56ce4f4f 100644 --- a/post_processing_stages/annotate_cv_stage.cpp +++ b/post_processing_stages/annotate_cv_stage.cpp @@ -84,8 +84,7 @@ bool AnnotateCvStage::Process(CompletedRequestPtr &completed_request) { BufferWriteSync w(app_, completed_request->buffers[stream_]); libcamera::Span buffer = w.Get()[0]; - FrameInfo info(completed_request->metadata); - info.sequence = completed_request->sequence; + FrameInfo info(completed_request); // Other post-processing stages can supply metadata to update the text. completed_request->post_process_metadata.Get("annotate.text", text_);