[libcamera-devel] [RFC PATCH 3/8] android: camera_device: Add separate template for still capture
Paul Elder
paul.elder at ideasonboard.com
Thu Apr 1 12:13:35 CEST 2021
Add a separate template for still capture, so that we can set the noise
reduction mode to high quality, as hardware level FULL requires this.
This is part of a fix to allow the following CTS test to pass:
- android.hardware.camera2.cts.CameraDeviceTest#testCameraDeviceStillTemplate
Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
src/android/camera_device.cpp | 23 ++++++++++++++++++-----
src/android/camera_device.h | 1 +
2 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 30ea3ade..ded57649 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -1479,6 +1479,23 @@ std::unique_ptr<CameraMetadata> CameraDevice::requestTemplateVideo()
return previewTemplate;
}
+std::unique_ptr<CameraMetadata> CameraDevice::requestTemplateStill()
+{
+ std::unique_ptr<CameraMetadata> previewTemplate = requestTemplatePreview();
+ if (!previewTemplate)
+ return nullptr;
+
+ /*
+ * The still template with FULL requires the noise reduction mode to be
+ * HIGH_QUALITY.
+ */
+ uint8_t noiseReduction = ANDROID_NOISE_REDUCTION_MODE_HIGH_QUALITY;
+ previewTemplate->updateEntry(ANDROID_NOISE_REDUCTION_MODE,
+ &noiseReduction, 1);
+
+ return previewTemplate;
+}
+
/*
* Produce a metadata pack to be used as template for a capture request.
*/
@@ -1497,12 +1514,8 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type)
requestTemplate = requestTemplatePreview();
break;
case CAMERA3_TEMPLATE_STILL_CAPTURE:
- /*
- * Use the preview template for still capture, they only differ
- * for the torch mode we currently do not support.
- */
captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE;
- requestTemplate = requestTemplatePreview();
+ requestTemplate = requestTemplateStill();
break;
case CAMERA3_TEMPLATE_VIDEO_RECORD:
captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_RECORD;
diff --git a/src/android/camera_device.h b/src/android/camera_device.h
index 11bdfec8..388acf51 100644
--- a/src/android/camera_device.h
+++ b/src/android/camera_device.h
@@ -99,6 +99,7 @@ private:
void notifyError(uint32_t frameNumber, camera3_stream_t *stream);
std::unique_ptr<CameraMetadata> requestTemplatePreview();
std::unique_ptr<CameraMetadata> requestTemplateVideo();
+ std::unique_ptr<CameraMetadata> requestTemplateStill();
libcamera::PixelFormat toPixelFormat(int format) const;
int processControls(Camera3RequestDescriptor *descriptor);
std::unique_ptr<CameraMetadata> getResultMetadata(
--
2.27.0
More information about the libcamera-devel
mailing list