[libcamera-devel] [PATCH v5 09/19] libcamera: ipu3: Set stream configuration from sensor
Jacopo Mondi
jacopo at jmondi.org
Tue Mar 26 09:38:52 CET 2019
Inspect all image sizes provided by the sensor and select the
biggest of them, associated with an image format code supported by the
CIO2 unit.
Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
src/libcamera/pipeline/ipu3/ipu3.cpp | 35 +++++++++++++---------------
1 file changed, 16 insertions(+), 19 deletions(-)
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index d42c81273cc6..04cd02653711 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -5,6 +5,7 @@
* ipu3.cpp - Pipeline handler for Intel IPU3
*/
+#include <iomanip>
#include <memory>
#include <vector>
@@ -94,6 +95,8 @@ private:
std::pair<unsigned int, SizeRange> maxSizes_;
};
+ static constexpr unsigned int IPU3_BUFFER_COUNT = 4;
+
IPU3CameraData *cameraData(const Camera *camera)
{
return static_cast<IPU3CameraData *>(
@@ -124,26 +127,20 @@ std::map<Stream *, StreamConfiguration>
PipelineHandlerIPU3::streamConfiguration(Camera *camera,
std::set<Stream *> &streams)
{
- IPU3CameraData *data = cameraData(camera);
std::map<Stream *, StreamConfiguration> configs;
- V4L2SubdeviceFormat format = {};
-
- /*
- * FIXME: As of now, return the image format reported by the sensor.
- * In future good defaults should be provided for each stream.
- */
- if (data->sensor_->getFormat(0, &format)) {
- LOG(IPU3, Error) << "Failed to create stream configurations";
- return configs;
- }
-
- StreamConfiguration config = {};
- config.width = format.width;
- config.height = format.height;
- config.pixelFormat = V4L2_PIX_FMT_IPU3_SGRBG10;
- config.bufferCount = 4;
-
- configs[&data->stream_] = config;
+ IPU3CameraData *data = cameraData(camera);
+ StreamConfiguration *config = &configs[&data->stream_];
+ SizeRange &maxRange = data->maxSizes_.second;
+
+ config->width = maxRange.maxWidth;
+ config->height = maxRange.maxHeight;
+ config->pixelFormat = data->maxSizes_.first;
+ config->bufferCount = IPU3_BUFFER_COUNT;
+
+ LOG(IPU3, Debug)
+ << "Stream format set to: " << config->width << "x"
+ << config->height << "-0x" << std::hex << std::setfill('0')
+ << std::setw(4) << config->pixelFormat;
return configs;
}
--
2.21.0
More information about the libcamera-devel
mailing list