[libcamera-devel] [PATCH v3 07/22] v4l2: v4l2_camera: Add validateConfiguration
Paul Elder
paul.elder at ideasonboard.com
Sat Jul 4 15:31:25 CEST 2020
In V4L2CameraProxy, we need a way to validate formats and sizes, to
implement try_fmt. Instead of manually checking it against the cached
list of formats and sizes, add V4L2Camera::validateConfiguration that we
can use to implement try_fmt.
Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
New in v3
---
src/v4l2/v4l2_camera.cpp | 29 +++++++++++++++++++++++++++++
src/v4l2/v4l2_camera.h | 3 +++
2 files changed, 32 insertions(+)
diff --git a/src/v4l2/v4l2_camera.cpp b/src/v4l2/v4l2_camera.cpp
index ffc1230..326e1c2 100644
--- a/src/v4l2/v4l2_camera.cpp
+++ b/src/v4l2/v4l2_camera.cpp
@@ -138,6 +138,35 @@ int V4L2Camera::configure(StreamConfiguration *streamConfigOut,
return 0;
}
+int V4L2Camera::validateConfiguration(StreamConfiguration *streamConfigOut,
+ const Size &size,
+ const PixelFormat &pixelFormat)
+{
+ if (!streamConfigOut)
+ return -EINVAL;
+
+ std::unique_ptr<CameraConfiguration> config =
+ camera_->generateConfiguration({ StreamRole::Viewfinder });
+ StreamConfiguration &cfg = config->at(0);
+ cfg.size.width = size.width;
+ cfg.size.height = size.height;
+ cfg.pixelFormat = pixelFormat;
+ cfg.bufferCount = 1;
+
+ CameraConfiguration::Status validation = config->validate();
+ if (validation == CameraConfiguration::Invalid)
+ return -EINVAL;
+
+ streamConfigOut->pixelFormat = cfg.pixelFormat;
+ streamConfigOut->size.width = cfg.size.width;
+ streamConfigOut->size.height = cfg.size.height;
+ streamConfigOut->bufferCount = cfg.bufferCount;
+ streamConfigOut->stride = cfg.stride;
+ streamConfigOut->frameSize = cfg.frameSize;
+
+ return 0;
+}
+
int V4L2Camera::allocBuffers(unsigned int count)
{
Stream *stream = *camera_->streams().begin();
diff --git a/src/v4l2/v4l2_camera.h b/src/v4l2/v4l2_camera.h
index 515e906..15a9363 100644
--- a/src/v4l2/v4l2_camera.h
+++ b/src/v4l2/v4l2_camera.h
@@ -47,6 +47,9 @@ public:
int configure(StreamConfiguration *streamConfigOut,
const Size &size, const PixelFormat &pixelformat,
unsigned int bufferCount);
+ int validateConfiguration(StreamConfiguration *streamConfigOut,
+ const Size &size,
+ const PixelFormat &pixelformat);
int allocBuffers(unsigned int count);
void freeBuffers();
--
2.27.0
More information about the libcamera-devel
mailing list