From 429be98e4cbf4aae889675568abbd108cf7f4691 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Thu, 24 Oct 2019 04:53:19 +0300 Subject: libcamera: pipeline: vimc: Support format enumeration Fill the StreamConfiguration with all supported formats. The list of supported formats is currently hardcoded based on the limits of the vimc driver. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/libcamera/pipeline/vimc.cpp | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp index dcdaef12..c16ae4cb 100644 --- a/src/libcamera/pipeline/vimc.cpp +++ b/src/libcamera/pipeline/vimc.cpp @@ -103,6 +103,16 @@ private: } }; +namespace { + +constexpr std::array pixelformats{ + V4L2_PIX_FMT_BGR24, + V4L2_PIX_FMT_RGB24, + V4L2_PIX_FMT_ARGB32, +}; + +} /* namespace */ + VimcCameraConfiguration::VimcCameraConfiguration() : CameraConfiguration() { @@ -110,12 +120,6 @@ VimcCameraConfiguration::VimcCameraConfiguration() CameraConfiguration::Status VimcCameraConfiguration::validate() { - static const std::array formats{ - V4L2_PIX_FMT_BGR24, - V4L2_PIX_FMT_RGB24, - V4L2_PIX_FMT_ARGB32, - }; - Status status = Valid; if (config_.empty()) @@ -130,8 +134,8 @@ CameraConfiguration::Status VimcCameraConfiguration::validate() StreamConfiguration &cfg = config_[0]; /* Adjust the pixel format. */ - if (std::find(formats.begin(), formats.end(), cfg.pixelFormat) == - formats.end()) { + if (std::find(pixelformats.begin(), pixelformats.end(), cfg.pixelFormat) == + pixelformats.end()) { LOG(VIMC, Debug) << "Adjusting format to RGB24"; cfg.pixelFormat = V4L2_PIX_FMT_RGB24; status = Adjusted; @@ -170,7 +174,18 @@ CameraConfiguration *PipelineHandlerVimc::generateConfiguration(Camera *camera, if (roles.empty()) return config; - StreamConfiguration cfg{}; + ImageFormats formats; + + for (unsigned int pixelformat : pixelformats) { + /* The scaler hardcodes a x3 scale-up ratio. */ + std::vector sizes{ + SizeRange{ 48, 48, 4096, 2160 } + }; + formats.addFormat(pixelformat, sizes); + } + + StreamConfiguration cfg(formats.data()); + cfg.pixelFormat = V4L2_PIX_FMT_RGB24; cfg.size = { 1920, 1080 }; cfg.bufferCount = 4; -- cgit v1.2.1