[libcamera-devel] [PATCH v4 6/6] android: CameraDevice: Report queried test pattern modes
Jacopo Mondi
jacopo at jmondi.org
Tue May 18 14:41:52 CEST 2021
Hi Hiro,
On Thu, May 06, 2021 at 04:54:49PM +0900, Hirokazu Honda wrote:
> Report test pattern modes obtained by Camera::controls().
Report to the Android camera stack the list of supported test
pattern modes constructed by inspecting the values reported
by libcamera through the controls::draft::TestPatternMode control.
>
> Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
> ---
> src/android/camera_device.cpp | 46 ++++++++++++++++++++++++++++++++---
> 1 file changed, 42 insertions(+), 4 deletions(-)
>
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index 3d5b5f24..a96bc09b 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -1090,12 +1090,50 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
>
> staticMetadata_->addEntry(ANDROID_SENSOR_ORIENTATION, &orientation_, 1);
>
> - std::vector<int32_t> testPatterModes = {
> - ANDROID_SENSOR_TEST_PATTERN_MODE_OFF,
> + const auto &testPatternsInfo =
> + controlsInfo.find(&controls::draft::TestPatternMode);
> + std::vector<int32_t> testPatternModes = {
> + ANDROID_SENSOR_TEST_PATTERN_MODE_OFF
> };
Should we report OFF if testPatternsInfo == controlsInfo.end() ? Or
should it be reported unconditionally, as if a driver reports any
test pattern mode, it supports disabling it as well...
> + if (testPatternsInfo != controlsInfo.end()) {
> + const auto &values = testPatternsInfo->second.values();
> + if (!values.empty()) {
Do we need this ? If the control is reported, it should be populated,
right ?
> + testPatternModes.clear();
> + for (const auto &value : values) {
> + int aValue = -1;
> + switch (value.get<int32_t>()) {
> + case controls::draft::TestPatternModeOff:
> + aValue = ANDROID_SENSOR_TEST_PATTERN_MODE_OFF;
> + break;
> + case controls::draft::TestPatternModeSolidColor:
> + aValue = ANDROID_SENSOR_TEST_PATTERN_MODE_SOLID_COLOR;
> + break;
> + case controls::draft::TestPatternModeColorBars:
> + aValue = ANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS;
> + break;
> + case controls::draft::TestPatternModeColorBarsFadeToGray:
> + aValue = ANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY;
> + break;
> + case controls::draft::TestPatternModePn9:
> + aValue = ANDROID_SENSOR_TEST_PATTERN_MODE_PN9;
> + break;
> + case controls::draft::TestPatternModeCustom1:
> + aValue = ANDROID_SENSOR_TEST_PATTERN_MODE_CUSTOM1;
> + break;
> + default:
> + LOG(HAL, Error)
> + << "Unknown test pattern mode: "
> + << value.get<int32_t>();
> + continue;
> + }
> +
> + testPatternModes.push_back(aValue);
> + }
> + }
> + }
What about:
std::vector<int32_t> testPatternModes = {
ANDROID_SENSOR_TEST_PATTERN_MODE_OFF,
};
const auto &testPatternsInfo = controlsInfo.find(&controls::draft::TestPatternMode);
if (testPatternInfo == controlsInfo.end()) {
const auto &values = testPatternsInfo->second.values();
for (const auto &value : values) {
switch (value.get<int32_t>()) {
case controls::draft::TestPatternModeSolidColor:
testPatternModes.push_back(
ANDROID_SENSOR_TEST_PATTERN_MODE_SOLID_COLOR);
break;
case controls::draft::TestPatternModeColorBars:
testPatternModes.push_back(
ANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS);
break;
case controls::draft::TestPatternModeColorBarsFadeToGray:
testPatternModes.push_back(
ANDROID_SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY);
break;
case controls::draft::TestPatternModePn9:
testPatternModes.push_back(
ANDROID_SENSOR_TEST_PATTERN_MODE_PN9);
break;
case controls::draft::TestPatternModeCustom1:
testPatternModes.push_back(
ANDROID_SENSOR_TEST_PATTERN_MODE_CUSTOM1);
break;
default:
LOG(HAL, Error) << "Unknown test pattern mode: "
<< value.get<int32_t>();
continue;
}
}
}
> staticMetadata_->addEntry(ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES,
> - testPatterModes.data(),
> - testPatterModes.size());
> + testPatternModes.data(),
> + testPatternModes.size());
You should enlarge the byteSize in calculateStaticMetadataSize() to
reserve space for all the available test pattern modes. Although
Paul's "android: camera_metadata: Auto-resize CameraMetadata" went in
already, so probably this should just be rebased and that's it.
Thanks
j
>
> uint8_t timestampSource = ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN;
> staticMetadata_->addEntry(ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE,
> --
> 2.31.1.607.g51e8a6a459-goog
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
More information about the libcamera-devel
mailing list