android: camera_device: Add missing static metadata
Add all the static metadata keys part of the BC (backward compatible) metadata group, which represent the minimum requirement for devices supporting the LIMITED hardware level. Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
parent
808a7fc04e
commit
b4893fce68
1 changed files with 254 additions and 30 deletions
|
@ -134,6 +134,149 @@ camera_metadata_t *CameraDevice::getStaticMetadata()
|
||||||
staticMetadata_ = allocate_camera_metadata(STATIC_ENTRY_CAP,
|
staticMetadata_ = allocate_camera_metadata(STATIC_ENTRY_CAP,
|
||||||
STATIC_DATA_CAP);
|
STATIC_DATA_CAP);
|
||||||
|
|
||||||
|
/* Color correction static metadata. */
|
||||||
|
std::vector<uint8_t> aberrationModes = {
|
||||||
|
ANDROID_COLOR_CORRECTION_ABERRATION_MODE_OFF,
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES,
|
||||||
|
aberrationModes.data(), aberrationModes.size());
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
/* Control static metadata. */
|
||||||
|
std::vector<uint8_t> aeAvailableAntiBandingModes = {
|
||||||
|
ANDROID_CONTROL_AE_ANTIBANDING_MODE_OFF,
|
||||||
|
ANDROID_CONTROL_AE_ANTIBANDING_MODE_50HZ,
|
||||||
|
ANDROID_CONTROL_AE_ANTIBANDING_MODE_60HZ,
|
||||||
|
ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO,
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES,
|
||||||
|
aeAvailableAntiBandingModes.data(),
|
||||||
|
aeAvailableAntiBandingModes.size());
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
std::vector<uint8_t> aeAvailableModes = {
|
||||||
|
ANDROID_CONTROL_AE_MODE_ON,
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_CONTROL_AE_AVAILABLE_MODES,
|
||||||
|
aeAvailableModes.data(), aeAvailableModes.size());
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
std::vector<int32_t> availableAeFpsTarget = {
|
||||||
|
15, 30,
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES,
|
||||||
|
availableAeFpsTarget.data(),
|
||||||
|
availableAeFpsTarget.size());
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
std::vector<int32_t> aeCompensationRange = {
|
||||||
|
0, 0,
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_CONTROL_AE_COMPENSATION_RANGE,
|
||||||
|
aeCompensationRange.data(),
|
||||||
|
aeCompensationRange.size());
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
const camera_metadata_rational_t aeCompensationStep[] = {
|
||||||
|
{ 0, 1 }
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_CONTROL_AE_COMPENSATION_STEP,
|
||||||
|
aeCompensationStep, 1);
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
std::vector<uint8_t> availableAfModes = {
|
||||||
|
ANDROID_CONTROL_AF_MODE_OFF,
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_CONTROL_AF_AVAILABLE_MODES,
|
||||||
|
availableAfModes.data(), availableAfModes.size());
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
std::vector<uint8_t> availableEffects = {
|
||||||
|
ANDROID_CONTROL_EFFECT_MODE_OFF,
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_CONTROL_AVAILABLE_EFFECTS,
|
||||||
|
availableEffects.data(), availableEffects.size());
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
std::vector<uint8_t> availableSceneModes = {
|
||||||
|
ANDROID_CONTROL_SCENE_MODE_DISABLED,
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_CONTROL_AVAILABLE_SCENE_MODES,
|
||||||
|
availableSceneModes.data(), availableSceneModes.size());
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
std::vector<uint8_t> availableStabilizationModes = {
|
||||||
|
ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF,
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES,
|
||||||
|
availableStabilizationModes.data(),
|
||||||
|
availableStabilizationModes.size());
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
std::vector<uint8_t> availableAwbModes = {
|
||||||
|
ANDROID_CONTROL_AWB_MODE_OFF,
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_CONTROL_AWB_AVAILABLE_MODES,
|
||||||
|
availableAwbModes.data(), availableAwbModes.size());
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
std::vector<int32_t> availableMaxRegions = {
|
||||||
|
0, 0, 0,
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_CONTROL_MAX_REGIONS,
|
||||||
|
availableMaxRegions.data(), availableMaxRegions.size());
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
std::vector<uint8_t> sceneModesOverride = {
|
||||||
|
ANDROID_CONTROL_AE_MODE_ON,
|
||||||
|
ANDROID_CONTROL_AWB_MODE_AUTO,
|
||||||
|
ANDROID_CONTROL_AF_MODE_AUTO,
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_CONTROL_SCENE_MODE_OVERRIDES,
|
||||||
|
sceneModesOverride.data(), sceneModesOverride.size());
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
uint8_t aeLockAvailable = ANDROID_CONTROL_AE_LOCK_AVAILABLE_FALSE;
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_CONTROL_AE_LOCK_AVAILABLE,
|
||||||
|
&aeLockAvailable, 1);
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
uint8_t awbLockAvailable = ANDROID_CONTROL_AWB_LOCK_AVAILABLE_FALSE;
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_CONTROL_AWB_LOCK_AVAILABLE,
|
||||||
|
&awbLockAvailable, 1);
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
char availableControlModes = ANDROID_CONTROL_MODE_AUTO;
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_CONTROL_AVAILABLE_MODES,
|
||||||
|
&availableControlModes, 1);
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
/* JPEG static metadata. */
|
||||||
|
std::vector<int32_t> availableThumbnailSizes = {
|
||||||
|
0, 0,
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES,
|
||||||
|
availableThumbnailSizes.data(),
|
||||||
|
availableThumbnailSizes.size());
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
/* Sensor static metadata. */
|
/* Sensor static metadata. */
|
||||||
int32_t pixelArraySize[] = {
|
int32_t pixelArraySize[] = {
|
||||||
2592, 1944,
|
2592, 1944,
|
||||||
|
@ -179,6 +322,47 @@ camera_metadata_t *CameraDevice::getStaticMetadata()
|
||||||
&orientation, 1);
|
&orientation, 1);
|
||||||
METADATA_ASSERT(ret);
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
std::vector<int32_t> testPatterModes = {
|
||||||
|
ANDROID_SENSOR_TEST_PATTERN_MODE_OFF,
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES,
|
||||||
|
testPatterModes.data(), testPatterModes.size());
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
std::vector<float> physicalSize = {
|
||||||
|
2592, 1944,
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_SENSOR_INFO_PHYSICAL_SIZE,
|
||||||
|
physicalSize.data(), physicalSize.size());
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
uint8_t timestampSource = ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN;
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE,
|
||||||
|
×tampSource, 1);
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
/* Statistics static metadata. */
|
||||||
|
uint8_t faceDetectMode = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF;
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES,
|
||||||
|
&faceDetectMode, 1);
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
int32_t maxFaceCount = 0;
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_STATISTICS_INFO_MAX_FACE_COUNT,
|
||||||
|
&maxFaceCount, 1);
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
/* Sync static metadata. */
|
||||||
|
int32_t maxLatency = ANDROID_SYNC_MAX_LATENCY_UNKNOWN;
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_SYNC_MAX_LATENCY, &maxLatency, 1);
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
/* Flash static metadata. */
|
/* Flash static metadata. */
|
||||||
char flashAvailable = ANDROID_FLASH_INFO_AVAILABLE_FALSE;
|
char flashAvailable = ANDROID_FLASH_INFO_AVAILABLE_FALSE;
|
||||||
ret = add_camera_metadata_entry(staticMetadata_,
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
@ -187,50 +371,63 @@ camera_metadata_t *CameraDevice::getStaticMetadata()
|
||||||
METADATA_ASSERT(ret);
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
/* Lens static metadata. */
|
/* Lens static metadata. */
|
||||||
float fn = 2.53 / 100;
|
std::vector<float> lensApertures = {
|
||||||
ret = add_camera_metadata_entry(staticMetadata_,
|
2.53 / 100,
|
||||||
ANDROID_LENS_INFO_AVAILABLE_APERTURES, &fn, 1);
|
|
||||||
METADATA_ASSERT(ret);
|
|
||||||
|
|
||||||
/* Control metadata. */
|
|
||||||
char controlMetadata = ANDROID_CONTROL_MODE_AUTO;
|
|
||||||
ret = add_camera_metadata_entry(staticMetadata_,
|
|
||||||
ANDROID_CONTROL_AVAILABLE_MODES,
|
|
||||||
&controlMetadata, 1);
|
|
||||||
METADATA_ASSERT(ret);
|
|
||||||
|
|
||||||
char availableAntiBandingModes[] = {
|
|
||||||
ANDROID_CONTROL_AE_ANTIBANDING_MODE_OFF,
|
|
||||||
ANDROID_CONTROL_AE_ANTIBANDING_MODE_50HZ,
|
|
||||||
ANDROID_CONTROL_AE_ANTIBANDING_MODE_60HZ,
|
|
||||||
ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO,
|
|
||||||
};
|
};
|
||||||
ret = add_camera_metadata_entry(staticMetadata_,
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES,
|
ANDROID_LENS_INFO_AVAILABLE_APERTURES,
|
||||||
availableAntiBandingModes, 4);
|
lensApertures.data(), lensApertures.size());
|
||||||
METADATA_ASSERT(ret);
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
char aeAvailableModes[] = {
|
uint8_t lensFacing = ANDROID_LENS_FACING_FRONT;
|
||||||
ANDROID_CONTROL_AE_MODE_ON,
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
ANDROID_CONTROL_AE_MODE_OFF,
|
ANDROID_LENS_FACING, &lensFacing, 1);
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
std::vector<float> lensFocalLenghts = {
|
||||||
|
1,
|
||||||
};
|
};
|
||||||
ret = add_camera_metadata_entry(staticMetadata_,
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
ANDROID_CONTROL_AE_AVAILABLE_MODES,
|
ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS,
|
||||||
aeAvailableModes, 2);
|
lensFocalLenghts.data(),
|
||||||
|
lensFocalLenghts.size());
|
||||||
METADATA_ASSERT(ret);
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
controlMetadata = ANDROID_CONTROL_AE_LOCK_AVAILABLE_TRUE;
|
std::vector<uint8_t> opticalStabilizations = {
|
||||||
|
ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF,
|
||||||
|
};
|
||||||
ret = add_camera_metadata_entry(staticMetadata_,
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
ANDROID_CONTROL_AE_LOCK_AVAILABLE,
|
ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION,
|
||||||
&controlMetadata, 1);
|
opticalStabilizations.data(),
|
||||||
|
opticalStabilizations.size());
|
||||||
METADATA_ASSERT(ret);
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
uint8_t awbLockAvailable = ANDROID_CONTROL_AWB_LOCK_AVAILABLE_FALSE;
|
float hypeFocalDistance = 0;
|
||||||
ret = add_camera_metadata_entry(staticMetadata_,
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
ANDROID_CONTROL_AWB_LOCK_AVAILABLE,
|
ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE,
|
||||||
&awbLockAvailable, 1);
|
&hypeFocalDistance, 1);
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
float minFocusDistance = 0;
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE,
|
||||||
|
&minFocusDistance, 1);
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
/* Noise reduction modes. */
|
||||||
|
uint8_t noiseReductionModes = ANDROID_NOISE_REDUCTION_MODE_OFF;
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES,
|
||||||
|
&noiseReductionModes, 1);
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
/* Scaler static metadata. */
|
/* Scaler static metadata. */
|
||||||
|
float maxDigitalZoom = 1;
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
|
||||||
|
&maxDigitalZoom, 1);
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
std::vector<uint32_t> availableStreamFormats = {
|
std::vector<uint32_t> availableStreamFormats = {
|
||||||
ANDROID_SCALER_AVAILABLE_FORMATS_BLOB,
|
ANDROID_SCALER_AVAILABLE_FORMATS_BLOB,
|
||||||
ANDROID_SCALER_AVAILABLE_FORMATS_YCbCr_420_888,
|
ANDROID_SCALER_AVAILABLE_FORMATS_YCbCr_420_888,
|
||||||
|
@ -275,12 +472,39 @@ camera_metadata_t *CameraDevice::getStaticMetadata()
|
||||||
minFrameDurations.data(), minFrameDurations.size());
|
minFrameDurations.data(), minFrameDurations.size());
|
||||||
METADATA_ASSERT(ret);
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
uint8_t croppingType = ANDROID_SCALER_CROPPING_TYPE_CENTER_ONLY;
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_SCALER_CROPPING_TYPE, &croppingType, 1);
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
/* Info static metadata. */
|
/* Info static metadata. */
|
||||||
uint8_t supportedHWLevel = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED;
|
uint8_t supportedHWLevel = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED;
|
||||||
ret = add_camera_metadata_entry(staticMetadata_,
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL,
|
ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL,
|
||||||
&supportedHWLevel, 1);
|
&supportedHWLevel, 1);
|
||||||
|
|
||||||
|
/* Request static metadata. */
|
||||||
|
int32_t partialResultCount = 1;
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_REQUEST_PARTIAL_RESULT_COUNT,
|
||||||
|
&partialResultCount, 1);
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
uint8_t maxPipelineDepth = 2;
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_REQUEST_PIPELINE_MAX_DEPTH,
|
||||||
|
&maxPipelineDepth, 1);
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
|
std::vector<uint8_t> availableCapabilities = {
|
||||||
|
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE,
|
||||||
|
};
|
||||||
|
ret = add_camera_metadata_entry(staticMetadata_,
|
||||||
|
ANDROID_REQUEST_AVAILABLE_CAPABILITIES,
|
||||||
|
availableCapabilities.data(),
|
||||||
|
availableCapabilities.size());
|
||||||
|
METADATA_ASSERT(ret);
|
||||||
|
|
||||||
return staticMetadata_;
|
return staticMetadata_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue