[libcamera-devel,v2,3/4] libcamera: pipeline: vimc: enforce stream configuration

Message ID 20190224173701.8587-4-niklas.soderlund@ragnatech.se
State Accepted
Commit 0cd7602e9cfc7db28138d5962563a77366a977f9
Headers show
Series
  • libcamera: enforce stream configuration
Related show

Commit Message

Niklas Söderlund Feb. 24, 2019, 5:37 p.m. UTC
The format requested by configureStreams() should exactly match what is
programmed on the video device. If they do not match the call should
fail as the application in that case will not know what configuration
was actually programmed.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 src/libcamera/pipeline/vimc.cpp | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

Patch

diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
index a93a7589643834c6..812777cffbb3e618 100644
--- a/src/libcamera/pipeline/vimc.cpp
+++ b/src/libcamera/pipeline/vimc.cpp
@@ -83,6 +83,7 @@  int PipelineHandlerVimc::configureStreams(Camera *camera,
 				      std::map<Stream *, StreamConfiguration> &config)
 {
 	StreamConfiguration *cfg = &config[&stream_];
+	int ret;
 
 	LOG(VIMC, Debug) << "Configure the camera for resolution "
 			 << cfg->width << "x" << cfg->height;
@@ -92,7 +93,16 @@  int PipelineHandlerVimc::configureStreams(Camera *camera,
 	format.height = cfg->height;
 	format.fourcc = cfg->pixelFormat;
 
-	return video_->setFormat(&format);
+	ret = video_->setFormat(&format);
+	if (ret)
+		return ret;
+
+	if (format.width != cfg->width ||
+	    format.height != cfg->height ||
+	    format.fourcc != cfg->pixelFormat)
+		return -EINVAL;
+
+	return 0;
 }
 
 int PipelineHandlerVimc::allocateBuffers(Camera *camera, Stream *stream)