summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-02-21 00:07:05 +0100
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-02-25 23:12:57 +0100
commitfacb80bc5cd0e4f6e4e71ba915c1befa6e3fd73a (patch)
treef79112f62544e771fe36cdf83dd88bf86ba59499
parent9a37b4c5a8452afd3cf19dc915c5460408171e5f (diff)
libcamera: pipeline: uvcvideo: enforce stream configuration
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>
-rw-r--r--src/libcamera/pipeline/uvcvideo.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
index 37a3477c..b7b8ff10 100644
--- a/src/libcamera/pipeline/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo.cpp
@@ -84,6 +84,7 @@ int PipelineHandlerUVC::configureStreams(Camera *camera,
std::map<Stream *, StreamConfiguration> &config)
{
StreamConfiguration *cfg = &config[&stream_];
+ int ret;
LOG(UVC, Debug) << "Configure the camera for resolution "
<< cfg->width << "x" << cfg->height;
@@ -93,7 +94,16 @@ int PipelineHandlerUVC::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 PipelineHandlerUVC::allocateBuffers(Camera *camera, Stream *stream)