[libcamera-devel] [PATCH] libcamera: pipeline: vimc: Support format enumeration
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Fri Oct 25 05:20:16 CEST 2019
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 <laurent.pinchart at ideasonboard.com>
---
src/libcamera/pipeline/vimc.cpp | 33 ++++++++++++++++++++++++---------
1 file changed, 24 insertions(+), 9 deletions(-)
diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
index dcdaef120ad1..c16ae4cb76b5 100644
--- a/src/libcamera/pipeline/vimc.cpp
+++ b/src/libcamera/pipeline/vimc.cpp
@@ -103,6 +103,16 @@ private:
}
};
+namespace {
+
+constexpr std::array<unsigned int, 3> 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<unsigned int, 3> 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<SizeRange> 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;
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list