From 0cd7602e9cfc7db28138d5962563a77366a977f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20S=C3=B6derlund?= Date: Thu, 21 Feb 2019 00:12:27 +0100 Subject: libcamera: pipeline: vimc: enforce stream configuration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Laurent Pinchart --- src/libcamera/pipeline/vimc.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp index a93a7589..812777cf 100644 --- a/src/libcamera/pipeline/vimc.cpp +++ b/src/libcamera/pipeline/vimc.cpp @@ -83,6 +83,7 @@ int PipelineHandlerVimc::configureStreams(Camera *camera, std::map &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) -- cgit v1.2.1