[libcamera-devel] [PATCH 1/3] android: capabilities: Use a throw-away config for YUV stream building

Umang Jain umang.jain at ideasonboard.com
Fri Jul 23 15:36:58 CEST 2021


Hi Jacopo,

Thanks for the patch

On 7/15/21 9:02 PM, Jacopo Mondi wrote:
> When building the list of supported YUV streams in getYUVResolutions()
> the CameraConfiguration provided by the caller as first parameters is used.
>
> As the CameraConfiguration will be later actually applied to the Camera,
> avoid any possible overlap of the configuration parameters by using a
> throw-away CameraConfiguration generated for the Viewfinder stream role
> in getYUVResolutions().
>
> It's also nicer to avoid having two functions with a similar purpose
> such as getYUVResolutions() and getRawResolutions() with different
> parameter lists, as the presence of a CameraConfiguration as first
> parameter might be confusing to the reader.
>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>
> ---
>   src/android/camera_capabilities.cpp | 10 +++++-----
>   src/android/camera_capabilities.h   |  3 +--
>   2 files changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp
> index 6b5edb66fad2..6543c2bbc6c3 100644
> --- a/src/android/camera_capabilities.cpp
> +++ b/src/android/camera_capabilities.cpp
> @@ -138,13 +138,14 @@ int CameraCapabilities::initialize(std::shared_ptr<libcamera::Camera> camera,
>   	return initializeStaticMetadata();
>   }
>   
> -std::vector<Size> CameraCapabilities::getYUVResolutions(CameraConfiguration *cameraConfig,
> -							const PixelFormat &pixelFormat,
> +std::vector<Size> CameraCapabilities::getYUVResolutions(const PixelFormat &pixelFormat,
>   							const std::vector<Size> &resolutions)
>   {
>   	std::vector<Size> supportedResolutions;
> -
> +	std::unique_ptr<CameraConfiguration> cameraConfig =
> +		camera_->generateConfiguration({ StreamRole::Viewfinder });
>   	StreamConfiguration &cfg = cameraConfig->at(0);
> +
>   	for (const Size &res : resolutions) {
>   		cfg.pixelFormat = pixelFormat;
>   		cfg.size = res;
> @@ -324,8 +325,7 @@ int CameraCapabilities::initializeStreamConfigurations()
>   		if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW)
>   			resolutions = getRawResolutions(mappedFormat);
>   		else
> -			resolutions = getYUVResolutions(cameraConfig.get(),
> -							mappedFormat,
> +			resolutions = getYUVResolutions(mappedFormat,
>   							cameraResolutions);
>   
>   		for (const Size &res : resolutions) {
> diff --git a/src/android/camera_capabilities.h b/src/android/camera_capabilities.h
> index 4f5be82595d6..e72bf084cd65 100644
> --- a/src/android/camera_capabilities.h
> +++ b/src/android/camera_capabilities.h
> @@ -43,8 +43,7 @@ private:
>   	};
>   
>   	std::vector<libcamera::Size>
> -	getYUVResolutions(libcamera::CameraConfiguration *cameraConfig,
> -			  const libcamera::PixelFormat &pixelFormat,
> +	getYUVResolutions(const libcamera::PixelFormat &pixelFormat,
>   			  const std::vector<libcamera::Size> &resolutions);
>   	std::vector<libcamera::Size>
>   	getRawResolutions(const libcamera::PixelFormat &pixelFormat);


More information about the libcamera-devel mailing list