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();
