@@ -377,6 +377,7 @@ int CameraDevice::initialize(const CameraConfigData *cameraConfigData)
orientation_ = 0;
}
+ mirrored_ = cameraConfigData && cameraConfigData->mirrored;
return capabilities_.initialize(camera_, orientation_, facing_);
}
@@ -547,6 +548,11 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
return -EINVAL;
}
+ // Rotation is unsupported, so if mirrored just set orientation.
+ if (mirrored_) {
+ config->orientation = Orientation::Rotate0Mirror;
+ }
+
/*
* Clear and remove any existing configuration from previous calls, and
* ensure the required entries are available without further
@@ -126,6 +126,7 @@ private:
int facing_;
int orientation_;
+ int mirrored_;
CameraMetadata lastSettings_;
};
@@ -33,6 +33,7 @@ private:
int parseCameraConfigData(const std::string &cameraId, const YamlObject &);
int parseLocation(const YamlObject &, CameraConfigData &cameraConfigData);
int parseRotation(const YamlObject &, CameraConfigData &cameraConfigData);
+ int parseMirrored(const YamlObject &, CameraConfigData &cameraConfigData);
std::map<std::string, CameraConfigData> *cameras_;
};
@@ -106,6 +107,9 @@ int CameraHalConfig::Private::parseCameraConfigData(const std::string &cameraId,
if (parseRotation(cameraObject, cameraConfigData))
return -EINVAL;
+ /* Parse optional property "mirrored" */
+ parseMirrored(cameraObject, cameraConfigData);
+
return 0;
}
@@ -145,6 +149,16 @@ int CameraHalConfig::Private::parseRotation(const YamlObject &cameraObject,
return 0;
}
+int CameraHalConfig::Private::parseMirrored(const YamlObject &cameraObject,
+ CameraConfigData &cameraConfigData)
+{
+ if (!cameraObject.contains("mirrored"))
+ return -EINVAL;
+
+ cameraConfigData.mirrored = cameraObject["mirrored"].get<bool>(false);
+ return 0;
+}
+
CameraHalConfig::CameraHalConfig()
: Extensible(std::make_unique<Private>()), exists_(false), valid_(false)
{
@@ -15,6 +15,7 @@
struct CameraConfigData {
int facing = -1;
int rotation = -1;
+ bool mirrored = false;
};
class CameraHalConfig final : public libcamera::Extensible
Adds an optional `mirrored` value to the HAL config, which is used to modify the `orientation` of the camera config. No rotation is used, so it can only set the orientation to `Orientation::Rotate0Mirror`. This enables sensors which are incorrectly mirrored to be corrected. Signed-off-by: Allen Ballway <ballway@chromium.org> --- src/android/camera_device.cpp | 6 ++++++ src/android/camera_device.h | 1 + src/android/camera_hal_config.cpp | 14 ++++++++++++++ src/android/camera_hal_config.h | 1 + 4 files changed, 22 insertions(+) -- 2.50.0.727.gbf7dc18ff4-goog