[libcamera-devel] [PATCH v6 10/15] pipeline: raspberrypi: Add a parameter to disable startup drop frames
Naushir Patuck
naush at raspberrypi.com
Fri Jan 27 16:43:17 CET 2023
Add a new pipeline config parameter "disable_startup_frame_drops" to
disable any startup drop frames, overriding the IPA request.
When this parameter is set, it allows the pipeline handler to run with
no internally allocated Unicam buffers ("min_unicam_buffers").
Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
Reviewed-by: David Plowman <david.plowman at raspberrypi.com>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
src/libcamera/pipeline/raspberrypi/data/example.yaml | 7 ++++++-
src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 11 ++++++++++-
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/src/libcamera/pipeline/raspberrypi/data/example.yaml b/src/libcamera/pipeline/raspberrypi/data/example.yaml
index 4662136e0be0..ad5f2344384f 100644
--- a/src/libcamera/pipeline/raspberrypi/data/example.yaml
+++ b/src/libcamera/pipeline/raspberrypi/data/example.yaml
@@ -27,6 +27,11 @@
# internal buffer count = max(min_unicam_buffers,
# min_total_unicam_buffers - external buffer count)
#
- # "min_total_unicam_buffers": 4
+ # "min_total_unicam_buffers": 4,
+
+ # Override any request from the IPA to drop a number of startup
+ # frames.
+ #
+ # "disable_startup_frame_drops": false
}
}
diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index 7c6db070dfc0..9920f6bb01a7 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -313,6 +313,11 @@ public:
* minTotalUnicamBuffers >= minUnicamBuffers
*/
unsigned int minTotalUnicamBuffers;
+ /*
+ * Override any request from the IPA to drop a number of startup
+ * frames.
+ */
+ bool disableStartupFrameDrops;
};
Config config_;
@@ -1057,7 +1062,8 @@ int PipelineHandlerRPi::start(Camera *camera, const ControlList *controls)
data->setSensorControls(startConfig.controls);
/* Configure the number of dropped frames required on startup. */
- data->dropFrameCount_ = startConfig.dropFrameCount;
+ data->dropFrameCount_ = data->config_.disableStartupFrameDrops
+ ? 0 : startConfig.dropFrameCount;
for (auto const stream : data->streams_)
stream->resetBuffers();
@@ -1703,6 +1709,7 @@ int RPiCameraData::loadPipelineConfiguration()
config_ = {
.minUnicamBuffers = 2,
.minTotalUnicamBuffers = 4,
+ .disableStartupFrameDrops = false,
};
char const *configFromEnv = utils::secure_getenv("LIBCAMERA_RPI_CONFIG_FILE");
@@ -1736,6 +1743,8 @@ int RPiCameraData::loadPipelineConfiguration()
phConfig["min_unicam_buffers"].get<unsigned int>(config_.minUnicamBuffers);
config_.minTotalUnicamBuffers =
phConfig["min_total_unicam_buffers"].get<unsigned int>(config_.minTotalUnicamBuffers);
+ config_.disableStartupFrameDrops =
+ phConfig["disable_startup_frame_drops"].get<bool>(config_.disableStartupFrameDrops);
if (config_.minTotalUnicamBuffers < config_.minUnicamBuffers) {
LOG(RPI, Error) << "Invalid configuration: min_total_unicam_buffers must be >= min_unicam_buffers";
--
2.25.1
More information about the libcamera-devel
mailing list