summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/android/camera_device.cpp13
-rw-r--r--src/android/camera_hal_manager.cpp17
2 files changed, 29 insertions, 1 deletions
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 692d0a5b..2466122d 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -330,7 +330,18 @@ int CameraDevice::initialize(const CameraConfigData *cameraConfigData)
facing_ = CAMERA_FACING_BACK;
break;
case properties::CameraLocationExternal:
- facing_ = CAMERA_FACING_EXTERNAL;
+ /*
+ * If the camera is reported as external, but the
+ * CameraHalManager has overriden it, use what is
+ * reported in the configuration file. This typically
+ * happens for UVC cameras reported as 'External' by
+ * libcamera but installed in fixed position on the
+ * device.
+ */
+ if (cameraConfigData && cameraConfigData->facing != -1)
+ facing_ = cameraConfigData->facing;
+ else
+ facing_ = CAMERA_FACING_EXTERNAL;
break;
}
diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp
index b364f62a..5f7bfe26 100644
--- a/src/android/camera_hal_manager.cpp
+++ b/src/android/camera_hal_manager.cpp
@@ -145,6 +145,23 @@ void CameraHalManager::cameraAdded(std::shared_ptr<Camera> cam)
}
const CameraConfigData *cameraConfigData = halConfig_.cameraConfigData(cam->id());
+
+ /*
+ * Some cameras whose location is reported by libcamera as external may
+ * actually be internal to the device. This is common with UVC cameras
+ * that are integrated in a laptop. In that case the real location
+ * should be specified in the configuration file.
+ *
+ * If the camera location is external and a configuration entry exists
+ * for it, override its location.
+ */
+ if (isCameraNew && isCameraExternal) {
+ if (cameraConfigData && cameraConfigData->facing != -1) {
+ isCameraExternal = false;
+ id = numInternalCameras_;
+ }
+ }
+
if (!isCameraExternal && !cameraConfigData) {
LOG(HAL, Error)
<< "HAL configuration entry for internal camera "