summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo@jmondi.org>2019-11-20 17:00:49 +0100
committerJacopo Mondi <jacopo@jmondi.org>2020-02-14 16:27:42 +0100
commit857a216fd5b32f2a275262a03a16317d689eca7c (patch)
tree2d3904aab47c349cf4f46075305ce6a8e9b4ba01
parentf8951ee720a817c4802189ee3a5bc26a2fc5794d (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.cpp29
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 = {