[libcamera-devel] [PATCH] libcamera: camera_sensor: Cache pixel rate

Paul Elder paul.elder at ideasonboard.com
Fri Jan 19 12:07:08 CET 2024


Cache the pixel rate at initialization time instead of fetching it from
the v4l2 subdev every time it's needed.

Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
 include/libcamera/internal/camera_sensor.h | 2 ++
 src/libcamera/camera_sensor.cpp            | 5 ++++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
index 60a8b106d..da3bf12b3 100644
--- a/include/libcamera/internal/camera_sensor.h
+++ b/include/libcamera/internal/camera_sensor.h
@@ -105,6 +105,8 @@ private:
 	std::string model_;
 	std::string id_;
 
+	uint64_t pixelRate_;
+
 	V4L2Subdevice::Formats formats_;
 	std::vector<unsigned int> mbusCodes_;
 	std::vector<Size> sizes_;
diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
index 0ef78d9c8..33fdb4c8e 100644
--- a/src/libcamera/camera_sensor.cpp
+++ b/src/libcamera/camera_sensor.cpp
@@ -515,6 +515,9 @@ int CameraSensor::initProperties()
 		properties_.set(properties::draft::ColorFilterArrangement, cfa);
 	}
 
+	ControlList ctrls = subdev_->getControls({ V4L2_CID_PIXEL_RATE });
+	pixelRate_ = ctrls.get(V4L2_CID_PIXEL_RATE).get<int64_t>();
+
 	return 0;
 }
 
@@ -1080,7 +1083,7 @@ int CameraSensor::sensorInfo(IPACameraSensorInfo *info) const
 		return -EINVAL;
 	}
 
-	info->pixelRate = ctrls.get(V4L2_CID_PIXEL_RATE).get<int64_t>();
+	info->pixelRate = pixelRate_;
 
 	const ControlInfo hblank = ctrls.infoMap()->at(V4L2_CID_HBLANK);
 	info->minLineLength = info->outputSize.width + hblank.min().get<int32_t>();
-- 
2.39.2



More information about the libcamera-devel mailing list