libcamera: pipeline: vimc: 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>
This commit is contained in:
Niklas Söderlund 2019-02-21 00:12:27 +01:00
parent facb80bc5c
commit 0cd7602e9c

View file

@ -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)