diff options
author | Jacopo Mondi <jacopo@jmondi.org> | 2019-11-20 17:00:49 +0100 |
---|---|---|
committer | Jacopo Mondi <jacopo@jmondi.org> | 2020-02-14 16:27:42 +0100 |
commit | 857a216fd5b32f2a275262a03a16317d689eca7c (patch) | |
tree | 2d3904aab47c349cf4f46075305ce6a8e9b4ba01 | |
parent | f8951ee720a817c4802189ee3a5bc26a2fc5794d (diff) |
android: camera_device: Use Camera properties for static Metadata
Construct two example static metadata to be reported to the Android
framework using the properties reported by the Camera.
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
-rw-r--r-- | src/android/camera_device.cpp | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index b460d499..76af70eb 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -8,6 +8,9 @@ #include "camera_device.h" #include "camera_ops.h" +#include <libcamera/controls.h> +#include <libcamera/property_ids.h> + #include "log.h" #include "utils.h" @@ -109,6 +112,8 @@ const camera_metadata_t *CameraDevice::getStaticMetadata() if (staticMetadata_) return staticMetadata_->get(); + const ControlList &properties = camera_->properties(); + /* * The here reported metadata are enough to implement a basic capture * example application, but a real camera implementation will require @@ -273,9 +278,15 @@ const camera_metadata_t *CameraDevice::getStaticMetadata() staticMetadata_->addEntry(ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE, &exposureTimeRange, 2); + /* + * The Android orientation metadata and libcamera rotation property are + * defined differently but have identical numerical values for Android + * devices such as phones and tablets. + */ int32_t orientation = 0; - staticMetadata_->addEntry(ANDROID_SENSOR_ORIENTATION, - &orientation, 1); + if (properties.contains(properties::Rotation)) + orientation = properties.get(properties::Rotation); + staticMetadata_->addEntry(ANDROID_SENSOR_ORIENTATION, &orientation, 1); std::vector<int32_t> testPatterModes = { ANDROID_SENSOR_TEST_PATTERN_MODE_OFF, @@ -322,6 +333,20 @@ const camera_metadata_t *CameraDevice::getStaticMetadata() lensApertures.size()); uint8_t lensFacing = ANDROID_LENS_FACING_FRONT; + if (properties.contains(properties::Location)) { + int32_t location = properties.get(properties::Location); + switch (location) { + case properties::CameraLocationFront: + lensFacing = ANDROID_LENS_FACING_FRONT; + break; + case properties::CameraLocationBack: + lensFacing = ANDROID_LENS_FACING_BACK; + break; + case properties::CameraLocationExternal: + lensFacing = ANDROID_LENS_FACING_EXTERNAL; + break; + } + } staticMetadata_->addEntry(ANDROID_LENS_FACING, &lensFacing, 1); std::vector<float> lensFocalLenghts = { |