[libcamera-devel] [PATCH 2/4] libcamera: pipeline: uvcvideo: enforce stream configuration
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Fri Feb 22 11:48:53 CET 2019
Hi Niklas,
Thank you for the patch.
On Thu, Feb 21, 2019 at 12:59:37AM +0100, Niklas Söderlund wrote:
> The format requested by configureStreams() should exactly match what
s/what$/what is/
> programmed on the video device it self. If they do not match the call
s/it self/itself/ or simply s/ it self//
> should fail as the application in that case will not know what
> configuration actually was programmed.
s/actually was/was actually/
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> src/libcamera/pipeline/uvcvideo.cpp | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
> index 37a3477c2c56f3ea..b7b8ff109109e9c5 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;
This is fine for now, but I wonder if longer term we should enumerate
the available formats and resolutions, and avoiding calling setFormat()
is the requested format can't be achieved. The documentation in patch
1/4 explains that no configuration should be applied if an exact match
is impossible, and calling setFormat() modifies the hardware
configuration. On the other hand this change in hardware configuration
isn't visible from the application, so it won't matter much.
> +
> + return 0;
> }
>
> int PipelineHandlerUVC::allocateBuffers(Camera *camera, Stream *stream)
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list