summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaushir Patuck <naush@raspberrypi.com>2023-06-27 14:05:53 +0100
committerKieran Bingham <kieran.bingham@ideasonboard.com>2023-07-10 14:20:15 +0100
commitf516141574b022e4c386e376f4aa210733d66547 (patch)
tree21352e6e9cdce6dfcccf3c184029299ae4c07e77
parent7802471a3badb561f1e017c3ecdafc95a0a43d61 (diff)
ipa: rpi: imx708: Fix mode switch drop frame count
The imx708 must drop a single frame on startup - but only when in HDR mode. Non-HDR modes do not need to drop frames. Fix the logic in hideFramesModeSwitch() which currently unconditionally advertises to drop one frame. Unfortunately there is no clear way to tell if the sensor is in the HDR mode. So for now, look the resolution and framerate to deduce this. Additionally ensure we override hideFramesStartup() and return the same number as hideFramesModeSwitch(). Bug: https://github.com/raspberrypi/libcamera-apps/issues/524 Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
-rw-r--r--src/ipa/rpi/cam_helper/cam_helper_imx708.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp
index 641ba18f..dce39cd5 100644
--- a/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp
+++ b/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp
@@ -21,6 +21,8 @@ using namespace RPiController;
using namespace libcamera;
using libcamera::utils::Duration;
+using namespace std::literals::chrono_literals;
+
namespace libcamera {
LOG_DECLARE_CATEGORY(IPARPI)
}
@@ -56,7 +58,8 @@ public:
int &vblankDelay, int &hblankDelay) const override;
bool sensorEmbeddedDataPresent() const override;
double getModeSensitivity(const CameraMode &mode) const override;
- unsigned int hideFramesModeSwitch() const override { return 1; } // seems to be required for HDR
+ unsigned int hideFramesModeSwitch() const override;
+ unsigned int hideFramesStartup() const override;
private:
/*
@@ -225,6 +228,26 @@ double CamHelperImx708::getModeSensitivity(const CameraMode &mode) const
return (mode.width > 2304) ? 1.0 : 2.0;
}
+unsigned int CamHelperImx708::hideFramesModeSwitch() const
+{
+ /*
+ * We need to drop the first startup frame in HDR mode.
+ * Unfortunately the only way to currently determine if the sensor is in
+ * the HDR mode is to match with the resolution and framerate - the HDR
+ * mode only runs upto 30fps.
+ */
+ if (mode_.width == 2304 && mode_.height == 1296 &&
+ mode_.minFrameDuration > 1.0s / 32)
+ return 1;
+ else
+ return 0;
+}
+
+unsigned int CamHelperImx708::hideFramesStartup() const
+{
+ return hideFramesModeSwitch();
+}
+
void CamHelperImx708::populateMetadata(const MdParser::RegisterMap &registers,
Metadata &metadata) const
{