summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Elder <paul.elder@ideasonboard.com>2021-05-24 18:37:14 +0900
committerPaul Elder <paul.elder@ideasonboard.com>2021-05-27 17:05:25 +0900
commit19772ffe102ab2e72d0f9f1403e0c02fcca4424d (patch)
tree4245aef0383ef4fc2ef36e82da3accd36e1dd71a
parentc0a9768a9bfb8f61e9d21d2f150daa5336537e80 (diff)
controls: Split FrameDurations into FrameDuration and FrameDurationLimits
We need a separate control to report the nominal frame duration, but it's also useful to report the min/max frame duration values that will be used. Split the FrameDurations control into FrameDuration and FrameDurationLimits respectively to support both of these. Signed-off-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Hirokazu Honda <hiroh@chromium.org> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
-rw-r--r--include/libcamera/ipa/raspberrypi.h2
-rw-r--r--src/android/camera_device.cpp2
-rw-r--r--src/ipa/raspberrypi/raspberrypi.cpp4
-rw-r--r--src/libcamera/control_ids.yaml9
-rw-r--r--src/libcamera/pipeline/ipu3/ipu3.cpp7
5 files changed, 16 insertions, 8 deletions
diff --git a/include/libcamera/ipa/raspberrypi.h b/include/libcamera/ipa/raspberrypi.h
index d10c1733..a8790000 100644
--- a/include/libcamera/ipa/raspberrypi.h
+++ b/include/libcamera/ipa/raspberrypi.h
@@ -44,7 +44,7 @@ static const ControlInfoMap Controls = {
{ &controls::Sharpness, ControlInfo(0.0f, 16.0f, 1.0f) },
{ &controls::ColourCorrectionMatrix, ControlInfo(-16.0f, 16.0f) },
{ &controls::ScalerCrop, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), Rectangle{}) },
- { &controls::FrameDurations, ControlInfo(INT64_C(1000), INT64_C(1000000000)) },
+ { &controls::FrameDurationLimits, ControlInfo(INT64_C(1000), INT64_C(1000000000)) },
{ &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) },
};
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 7fc4ddb0..ee6ba28a 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -864,7 +864,7 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
int64_t minFrameDurationNsec = -1;
int64_t maxFrameDurationNsec = -1;
- const auto frameDurationsInfo = controlsInfo.find(&controls::FrameDurations);
+ const auto frameDurationsInfo = controlsInfo.find(&controls::FrameDurationLimits);
if (frameDurationsInfo != controlsInfo.end()) {
minFrameDurationNsec = frameDurationsInfo->second.min().get<int64_t>() * 1000;
maxFrameDurationNsec = frameDurationsInfo->second.max().get<int64_t>() * 1000;
diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
index e5bb8159..0c4752ec 100644
--- a/src/ipa/raspberrypi/raspberrypi.cpp
+++ b/src/ipa/raspberrypi/raspberrypi.cpp
@@ -859,7 +859,7 @@ void IPARPi::queueRequest(const ControlList &controls)
break;
}
- case controls::FRAME_DURATIONS: {
+ case controls::FRAME_DURATION_LIMITS: {
auto frameDurations = ctrl.second.get<Span<const int64_t>>();
applyFrameDurations(frameDurations[0], frameDurations[1]);
break;
@@ -1074,7 +1074,7 @@ void IPARPi::applyFrameDurations(double minFrameDuration, double maxFrameDuratio
maxFrameDuration_ = std::max(maxFrameDuration_, minFrameDuration_);
/* Return the validated limits via metadata. */
- libcameraMetadata_.set(controls::FrameDurations,
+ libcameraMetadata_.set(controls::FrameDurationLimits,
{ static_cast<int64_t>(minFrameDuration_),
static_cast<int64_t>(maxFrameDuration_) });
diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml
index 88d81ac4..f62ade48 100644
--- a/src/libcamera/control_ids.yaml
+++ b/src/libcamera/control_ids.yaml
@@ -323,7 +323,14 @@ controls:
step to respect the received gain factor and shall report
their total value in the request metadata.
- - FrameDurations:
+ - FrameDuration:
+ type: int64_t
+ description: |
+ The instantaneous frame duration from start of frame exposure to start
+ of next exposure, expressed in microseconds. This control is meant to
+ be returned in metadata.
+
+ - FrameDurationLimits:
type: int64_t
description: |
The minimum and maximum (in that order) frame duration,
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 58923bc7..b986bb70 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -983,9 +983,10 @@ int PipelineHandlerIPU3::initControls(IPU3CameraData *data)
frameDurations[i] = frameSize / (sensorInfo.pixelRate / 1000000U);
}
- controls[&controls::FrameDurations] = ControlInfo(frameDurations[0],
- frameDurations[1],
- frameDurations[2]);
+ controls[&controls::FrameDurationLimits] =
+ ControlInfo(frameDurations[0],
+ frameDurations[1],
+ frameDurations[2]);
/*
* Compute the scaler crop limits.