summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo@jmondi.org>2021-06-30 14:11:13 +0200
committerJacopo Mondi <jacopo@jmondi.org>2021-07-27 17:36:20 +0200
commit804c52fce4250f6300cdefa4f31077fc7f8d048d (patch)
treeba6a6b913dd590bb7a31581b0a0868f98f788406
parent18d61deb3c0aebcf99c9b085f7031cd2f12b4d66 (diff)
android: capabilities: Centralize RAW support check
The validation of RAW stream support is performed in two different places: - At initializeStreamConfigurations() time, by verifying that the libcamera format associated with HAL_PIXEL_FORMAT_BLOB is a Raw format and ensuring the Camera successfully validates it - As initializeStaticMetadata() time by generating a CameraConfiguration for the Raw stream role and ensuring it is a Raw format with a 16 bit depth The first check is used to build the list of supported Raw stream resolutions. The latter is used to register the ANDROID_REQUEST_AVAILABLE_CAPABILITIES_RAW capability. As building the list of supported Raw streams doesn't serve any purpose if the RAW capability is not registered, centralize the Raw format support verification at initializeStreamConfigurations() time by ensuring the supported format is a Raw one with a 16 bit depth. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r--src/android/camera_capabilities.cpp36
-rw-r--r--src/android/camera_capabilities.h1
2 files changed, 21 insertions, 16 deletions
diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp
index 15e54192..3596b136 100644
--- a/src/android/camera_capabilities.cpp
+++ b/src/android/camera_capabilities.cpp
@@ -122,6 +122,7 @@ int CameraCapabilities::initialize(std::shared_ptr<libcamera::Camera> camera,
camera_ = camera;
orientation_ = orientation;
facing_ = facing;
+ rawStreamAvailable_ = false;
/* Acquire the camera and initialize available stream configurations. */
int ret = camera_->acquire();
@@ -324,11 +325,25 @@ int CameraCapabilities::initializeStreamConfigurations()
std::vector<Size> resolutions;
const PixelFormatInfo &info = PixelFormatInfo::info(mappedFormat);
- if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW)
+ switch (info.colourEncoding) {
+ case PixelFormatInfo::ColourEncodingRAW:
+ if (info.bitsPerPixel != 16)
+ continue;
+
+ rawStreamAvailable_ = true;
resolutions = initializeRawResolutions(mappedFormat);
- else
+ break;
+
+ case PixelFormatInfo::ColourEncodingYUV:
+ case PixelFormatInfo::ColourEncodingRGB:
+ /*
+ * We support enumerating RGB streams here to allow
+ * mapping IMPLEMENTATION_DEFINED format to RGB.
+ */
resolutions = initializeYUVResolutions(mappedFormat,
cameraResolutions);
+ break;
+ }
for (const Size &res : resolutions) {
streamConfigurations_.push_back({ res, androidFormat });
@@ -866,22 +881,11 @@ int CameraCapabilities::initializeStaticMetadata()
};
/* Report if camera supports RAW. */
- bool rawStreamAvailable = false;
- std::unique_ptr<CameraConfiguration> cameraConfig =
- camera_->generateConfiguration({ StreamRole::Raw });
- if (cameraConfig && !cameraConfig->empty()) {
- const PixelFormatInfo &info =
- PixelFormatInfo::info(cameraConfig->at(0).pixelFormat);
- /* Only advertise RAW support if RAW16 is possible. */
- if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW &&
- info.bitsPerPixel == 16) {
- rawStreamAvailable = true;
- availableCapabilities.push_back(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_RAW);
- }
- }
+ if (rawStreamAvailable_)
+ availableCapabilities.push_back(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_RAW);
/* Number of { RAW, YUV, JPEG } supported output streams */
- int32_t numOutStreams[] = { rawStreamAvailable, 2, 1 };
+ int32_t numOutStreams[] = { rawStreamAvailable_, 2, 1 };
staticMetadata_->addEntry(ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS,
numOutStreams);
diff --git a/src/android/camera_capabilities.h b/src/android/camera_capabilities.h
index e7aa46c0..42a976d3 100644
--- a/src/android/camera_capabilities.h
+++ b/src/android/camera_capabilities.h
@@ -55,6 +55,7 @@ private:
int facing_;
int orientation_;
+ bool rawStreamAvailable_;
std::vector<Camera3StreamConfiguration> streamConfigurations_;
std::map<int, libcamera::PixelFormat> formatsMap_;