/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * Copyright (C) 2021, Google Inc. * * camera_capabilities.h - Camera static properties manager */ #ifndef __ANDROID_CAMERA_CAPABILITIES_H__ #define __ANDROID_CAMERA_CAPABILITIES_H__ #include #include #include #include #include #include #include #include #include "camera_metadata.h" class CameraCapabilities { public: CameraCapabilities() = default; int initialize(std::shared_ptr camera, int orientation, int facing); CameraMetadata *staticMetadata() const { return staticMetadata_.get(); } libcamera::PixelFormat toPixelFormat(int format) const; unsigned int maxJpegBufferSize() const { return maxJpegBufferSize_; } std::unique_ptr requestTemplateManual() const; std::unique_ptr requestTemplatePreview() const; std::unique_ptr requestTemplateStill() const; std::unique_ptr requestTemplateVideo() const; private: LIBCAMERA_DISABLE_COPY_AND_MOVE(CameraCapabilities) struct Camera3StreamConfiguration { libcamera::Size resolution; int androidFormat; }; bool validateManualSensorCapability(); bool validateManualPostProcessingCapability(); bool validateBurstCaptureCapability(); std::set computeCapabilities(); void computeHwLevel( const std::set &caps); std::vector initializeYUVResolutions(const libcamera::PixelFormat &pixelFormat, const std::vector &resolutions); std::vector initializeRawResolutions(const libcamera::PixelFormat &pixelFormat); int initializeStreamConfigurations(); int initializeStaticMetadata(); std::shared_ptr camera_; int facing_; int orientation_; bool rawStreamAvailable_; camera_metadata_enum_android_info_supported_hardware_level hwLevel_; std::vector streamConfigurations_; std::map formatsMap_; std::unique_ptr staticMetadata_; unsigned int maxJpegBufferSize_; std::set availableCharacteristicsKeys_; std::set availableRequestKeys_; std::set availableResultKeys_; }; #endif /* __ANDROID_CAMERA_CAPABILITIES_H__ */