[libcamera-devel] [PATCH v1 9/9] ipa: raspberrypi: Extract line length from the embedded data parser
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Oct 4 19:13:37 CEST 2022
Hi Naush,
Thank you for the patch.
On Mon, Oct 03, 2022 at 09:39:35AM +0100, Naushir Patuck via libcamera-devel wrote:
> Update the imx219, imx477 and imx519 parsers to extract the line length values
> from the embedded data stream and use these values in the deviceStatus metadata,
> replacing the DelayedControls provided values.
>
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> src/ipa/raspberrypi/cam_helper.cpp | 3 ++-
> src/ipa/raspberrypi/cam_helper_imx219.cpp | 9 +++++++--
> src/ipa/raspberrypi/cam_helper_imx477.cpp | 9 +++++++--
> src/ipa/raspberrypi/cam_helper_imx519.cpp | 9 +++++++--
> 4 files changed, 23 insertions(+), 7 deletions(-)
>
> diff --git a/src/ipa/raspberrypi/cam_helper.cpp b/src/ipa/raspberrypi/cam_helper.cpp
> index f5f034ece711..1811d231ad40 100644
> --- a/src/ipa/raspberrypi/cam_helper.cpp
> +++ b/src/ipa/raspberrypi/cam_helper.cpp
> @@ -228,7 +228,7 @@ void CamHelper::parseEmbeddedData(Span<const uint8_t> buffer,
> metadata.merge(parsedMetadata);
>
> /*
> - * Overwrite the exposure/gain, frame length and sensor temperature values
> + * Overwrite the exposure/gain, line/frame length and sensor temperature values
> * in the existing DeviceStatus with values from the parsed embedded buffer.
> * Fetch it first in case any other fields were set meaningfully.
> */
> @@ -242,6 +242,7 @@ void CamHelper::parseEmbeddedData(Span<const uint8_t> buffer,
> deviceStatus.shutterSpeed = parsedDeviceStatus.shutterSpeed;
> deviceStatus.analogueGain = parsedDeviceStatus.analogueGain;
> deviceStatus.frameLength = parsedDeviceStatus.frameLength;
> + deviceStatus.lineLength = parsedDeviceStatus.lineLength;
> if (parsedDeviceStatus.sensorTemperature)
> deviceStatus.sensorTemperature = parsedDeviceStatus.sensorTemperature;
>
> diff --git a/src/ipa/raspberrypi/cam_helper_imx219.cpp b/src/ipa/raspberrypi/cam_helper_imx219.cpp
> index 98a3b31956ec..c3337ed08466 100644
> --- a/src/ipa/raspberrypi/cam_helper_imx219.cpp
> +++ b/src/ipa/raspberrypi/cam_helper_imx219.cpp
> @@ -32,8 +32,11 @@ constexpr uint32_t expHiReg = 0x15a;
> constexpr uint32_t expLoReg = 0x15b;
> constexpr uint32_t frameLengthHiReg = 0x160;
> constexpr uint32_t frameLengthLoReg = 0x161;
> +constexpr uint32_t lineLengthHiReg = 0x162;
> +constexpr uint32_t lineLengthLoReg = 0x163;
> constexpr std::initializer_list<uint32_t> registerList [[maybe_unused]]
> - = { expHiReg, expLoReg, gainReg, frameLengthHiReg, frameLengthLoReg };
> + = { expHiReg, expLoReg, gainReg, frameLengthHiReg, frameLengthLoReg,
> + lineLengthHiReg, lineLengthLoReg };
>
> class CamHelperImx219 : public CamHelper
> {
> @@ -94,8 +97,10 @@ void CamHelperImx219::populateMetadata(const MdParser::RegisterMap ®isters,
> {
> DeviceStatus deviceStatus;
>
> + deviceStatus.lineLength = lineLengthPckToDuration(registers.at(lineLengthHiReg) * 256 +
> + registers.at(lineLengthLoReg));
> deviceStatus.shutterSpeed = exposure(registers.at(expHiReg) * 256 + registers.at(expLoReg),
> - mode_.minLineLength);
> + deviceStatus.lineLength);
> deviceStatus.analogueGain = gain(registers.at(gainReg));
> deviceStatus.frameLength = registers.at(frameLengthHiReg) * 256 + registers.at(frameLengthLoReg);
>
> diff --git a/src/ipa/raspberrypi/cam_helper_imx477.cpp b/src/ipa/raspberrypi/cam_helper_imx477.cpp
> index 19a5e471c27e..bc769ca75baa 100644
> --- a/src/ipa/raspberrypi/cam_helper_imx477.cpp
> +++ b/src/ipa/raspberrypi/cam_helper_imx477.cpp
> @@ -35,9 +35,12 @@ constexpr uint32_t gainHiReg = 0x0204;
> constexpr uint32_t gainLoReg = 0x0205;
> constexpr uint32_t frameLengthHiReg = 0x0340;
> constexpr uint32_t frameLengthLoReg = 0x0341;
> +constexpr uint32_t lineLengthHiReg = 0x0342;
> +constexpr uint32_t lineLengthLoReg = 0x0343;
> constexpr uint32_t temperatureReg = 0x013a;
> constexpr std::initializer_list<uint32_t> registerList =
> - { expHiReg, expLoReg, gainHiReg, gainLoReg, frameLengthHiReg, frameLengthLoReg, temperatureReg };
> + { expHiReg, expLoReg, gainHiReg, gainLoReg, frameLengthHiReg, frameLengthLoReg,
> + lineLengthHiReg, lineLengthLoReg, temperatureReg };
>
> class CamHelperImx477 : public CamHelper
> {
> @@ -175,8 +178,10 @@ void CamHelperImx477::populateMetadata(const MdParser::RegisterMap ®isters,
> {
> DeviceStatus deviceStatus;
>
> + deviceStatus.lineLength = lineLengthPckToDuration(registers.at(lineLengthHiReg) * 256 +
> + registers.at(lineLengthLoReg));
> deviceStatus.shutterSpeed = exposure(registers.at(expHiReg) * 256 + registers.at(expLoReg),
> - mode_.minLineLength);
> + deviceStatus.lineLength);
> deviceStatus.analogueGain = gain(registers.at(gainHiReg) * 256 + registers.at(gainLoReg));
> deviceStatus.frameLength = registers.at(frameLengthHiReg) * 256 + registers.at(frameLengthLoReg);
> deviceStatus.sensorTemperature = std::clamp<int8_t>(registers.at(temperatureReg), -20, 80);
> diff --git a/src/ipa/raspberrypi/cam_helper_imx519.cpp b/src/ipa/raspberrypi/cam_helper_imx519.cpp
> index d2eb171912da..c7262aa0b6e6 100644
> --- a/src/ipa/raspberrypi/cam_helper_imx519.cpp
> +++ b/src/ipa/raspberrypi/cam_helper_imx519.cpp
> @@ -36,8 +36,11 @@ constexpr uint32_t gainHiReg = 0x0204;
> constexpr uint32_t gainLoReg = 0x0205;
> constexpr uint32_t frameLengthHiReg = 0x0340;
> constexpr uint32_t frameLengthLoReg = 0x0341;
> +constexpr uint32_t lineLengthHiReg = 0x0342;
> +constexpr uint32_t lineLengthLoReg = 0x0343;
> constexpr std::initializer_list<uint32_t> registerList =
> - { expHiReg, expLoReg, gainHiReg, gainLoReg, frameLengthHiReg, frameLengthLoReg };
> + { expHiReg, expLoReg, gainHiReg, gainLoReg, frameLengthHiReg, frameLengthLoReg,
> + lineLengthHiReg, lineLengthLoReg };
>
> class CamHelperImx519 : public CamHelper
> {
> @@ -175,8 +178,10 @@ void CamHelperImx519::populateMetadata(const MdParser::RegisterMap ®isters,
> {
> DeviceStatus deviceStatus;
>
> + deviceStatus.lineLength = lineLengthPckToDuration(registers.at(lineLengthHiReg) * 256 +
> + registers.at(lineLengthLoReg));
> deviceStatus.shutterSpeed = exposure(registers.at(expHiReg) * 256 + registers.at(expLoReg),
> - mode_.minLineLength);
> + deviceStatus.lineLength);
> deviceStatus.analogueGain = gain(registers.at(gainHiReg) * 256 + registers.at(gainLoReg));
> deviceStatus.frameLength = registers.at(frameLengthHiReg) * 256 + registers.at(frameLengthLoReg);
>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list