android: camera_device: Propagate the requested test pattern mode

Propagate the requested test pattern mode to libcamera::Camera
through libcamera::Request and also set the android metadata to
the test pattern mode contained by the complete Request.

Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Hirokazu Honda 2021-06-29 01:36:44 +09:00 committed by Kieran Bingham
parent abaa45d627
commit 4c61c5d223

View file

@ -782,16 +782,54 @@ int CameraDevice::processControls(Camera3RequestDescriptor *descriptor)
return 0;
/* Translate the Android request settings to libcamera controls. */
ControlList &controls = descriptor->request_->controls();
camera_metadata_ro_entry_t entry;
if (settings.getEntry(ANDROID_SCALER_CROP_REGION, &entry)) {
const int32_t *data = entry.data.i32;
Rectangle cropRegion{ data[0], data[1],
static_cast<unsigned int>(data[2]),
static_cast<unsigned int>(data[3]) };
ControlList &controls = descriptor->request_->controls();
controls.set(controls::ScalerCrop, cropRegion);
}
if (settings.getEntry(ANDROID_SENSOR_TEST_PATTERN_MODE, &entry)) {
const int32_t data = *entry.data.i32;
int32_t testPatternMode = controls::draft::TestPatternModeOff;
switch (data) {
case ANDROID_SENSOR_TEST_PATTERN_MODE_OFF:
testPatternMode = controls::draft::TestPatternModeOff;
break;
case ANDROID_SENSOR_TEST_PATTERN_MODE_SOLID_COLOR:
testPatternMode = controls::draft::TestPatternModeSolidColor;
break;
case ANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS:
testPatternMode = controls::draft::TestPatternModeColorBars;
break;
case ANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY:
testPatternMode = controls::draft::TestPatternModeColorBarsFadeToGray;
break;
case ANDROID_SENSOR_TEST_PATTERN_MODE_PN9:
testPatternMode = controls::draft::TestPatternModePn9;
break;
case ANDROID_SENSOR_TEST_PATTERN_MODE_CUSTOM1:
testPatternMode = controls::draft::TestPatternModeCustom1;
break;
default:
LOG(HAL, Error)
<< "Unknown test pattern mode: " << data;
return -EINVAL;
}
controls.set(controls::draft::TestPatternMode, testPatternMode);
}
return 0;
}
@ -1343,6 +1381,13 @@ CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor) cons
resultMetadata->addEntry(ANDROID_SCALER_CROP_REGION, cropRect);
}
if (metadata.contains(controls::draft::TestPatternMode)) {
const int32_t testPatternMode =
metadata.get(controls::draft::TestPatternMode);
resultMetadata->addEntry(ANDROID_SENSOR_TEST_PATTERN_MODE,
testPatternMode);
}
/*
* Return the result metadata pack even is not valid: get() will return
* nullptr.