diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2019-10-24 04:53:19 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2019-10-25 18:45:30 +0300 |
commit | 429be98e4cbf4aae889675568abbd108cf7f4691 (patch) | |
tree | 74f6e85d3c3a65bbb0ddd6a45f572b34d287ae19 /src | |
parent | 74208ea5d110530cb1fea6e724d85bb8685a896b (diff) |
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 <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/libcamera/pipeline/vimc.cpp | 33 |
1 files changed, 24 insertions, 9 deletions
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<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; |