@@ -1087,12 +1087,18 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
{
std::vector<uint8_t> data;
data.reserve(5);
+ /*
+ * \todo if this doesn't have OFF and FAST and HIGH_QUALITY
+ * then this camera does not support FULL
+ */
const auto &infoMap = controlsInfo.find(&controls::draft::NoiseReductionMode);
if (infoMap != controlsInfo.end()) {
for (const auto &value : infoMap->second.values())
data.push_back(value.get<int32_t>());
} else {
data.push_back(ANDROID_NOISE_REDUCTION_MODE_OFF);
+ data.push_back(ANDROID_NOISE_REDUCTION_MODE_FAST);
+ data.push_back(ANDROID_NOISE_REDUCTION_MODE_HIGH_QUALITY);
}
staticMetadata_->addEntry(ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES,
data.data(), data.size());
@@ -1431,7 +1437,8 @@ std::unique_ptr<CameraMetadata> CameraDevice::requestTemplatePreview()
requestTemplate->addEntry(ANDROID_STATISTICS_FACE_DETECT_MODE,
&faceDetectMode, 1);
- uint8_t noiseReduction = ANDROID_NOISE_REDUCTION_MODE_OFF;
+ /* \todo FULL expects this to be FAST, not OFF*/
+ uint8_t noiseReduction = ANDROID_NOISE_REDUCTION_MODE_FAST;
requestTemplate->addEntry(ANDROID_NOISE_REDUCTION_MODE,
&noiseReduction, 1);
@@ -2197,7 +2204,9 @@ CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor,
&value, 1);
value = ANDROID_NOISE_REDUCTION_MODE_OFF;
- resultMetadata->addEntry(ANDROID_NOISE_REDUCTION_MODE, &value, 1);
+ found = settings.getEntry(ANDROID_NOISE_REDUCTION_MODE, &entry);
+ resultMetadata->addEntry(ANDROID_NOISE_REDUCTION_MODE,
+ found ? entry.data.u8 : &value, 1);
/*
* \todo Use sliding window average
Set the appropriate values for noise reduction to satisfy the requirements for hardware level FULL. These are: - OFF and FAST and HIGH_QUALITY must be supported - the preview template should have noise reduction set to FAST - the capture result metadata should have the noise reduction mode set to the same mode as what was in the request metadata This, along with "android: camera_device: Add separate template for still capture" and "android: camera_device: Set proper frame duration", allows the following CTS tests to pass: - android.hardware.camera2.cts.CameraDeviceTest#testCameraDevicePreviewTemplate - android.hardware.camera2.cts.CameraDeviceTest#testCameraDeviceRecordingTemplate - android.hardware.camera2.cts.CameraDeviceTest#testCameraDeviceStillTemplate - android.hardware.camera2.cts.CaptureRequestTest#testNoiseReductionModeControl - android.hardware.camera2.cts.CaptureRequestTest#testNoiseReductionModeControlFastFps Signed-off-by: Paul Elder <paul.elder@ideasonboard.com> --- src/android/camera_device.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)