[libcamera-devel] [PATCH] android: Make libyaml dependency optional
Jacopo Mondi
jacopo at jmondi.org
Tue Dec 28 12:05:51 CET 2021
Hi Roman,
cc Hanlin Chen from ChromiumOS as he's planning to extend
configuration file support for the ChromeOS Android HAL.
Before looking into the patch: is there any hope libyaml might become
part of the standard AOSP distribution (or a process in place to request
that).
Thanks
j
On Tue, Dec 28, 2021 at 11:51:53AM +0200, Roman Stratiienko wrote:
> Mainline Android has no libyaml in-tree. Moreover camera_hal_config.cpp
> uses std::filesystem class that is not permitted for AOSP VNDK vendor
> libraries.
>
> External configuration file is no longer mandatory and DTS overlays can
> be used to specify camera location and rotation.
>
> Do not require external configuration file for cases where meson.build
> can't find libyaml. Assume that cameras without location specified
> by V4L2 properties are always external.
>
> Signed-off-by: Roman Stratiienko <roman.o.stratiienko at globallogic.com>
> ---
> src/android/camera_hal_manager.cpp | 13 +++++++++++++
> src/android/camera_hal_manager.h | 2 ++
> src/android/meson.build | 10 ++++++++--
> 3 files changed, 23 insertions(+), 2 deletions(-)
>
> diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp
> index 5f7bfe265c71b..9e575bfa5204a 100644
> --- a/src/android/camera_hal_manager.cpp
> +++ b/src/android/camera_hal_manager.cpp
> @@ -48,6 +48,7 @@ int CameraHalManager::init()
> {
> cameraManager_ = std::make_unique<CameraManager>();
>
> +#ifdef HAVE_LIBYAML
> /*
> * If the configuration file is not available the HAL only supports
> * external cameras. If it exists but it's not valid then error out.
> @@ -56,6 +57,7 @@ int CameraHalManager::init()
> LOG(HAL, Error) << "HAL configuration file is not valid";
> return -EINVAL;
> }
> +#endif
>
> /* Support camera hotplug. */
> cameraManager_->cameraAdded.connect(this, &CameraHalManager::cameraAdded);
> @@ -133,6 +135,7 @@ void CameraHalManager::cameraAdded(std::shared_ptr<Camera> cam)
> }
> }
>
> +#ifdef HAVE_LIBYAML
> /*
> * The configuration file must be valid, and contain a corresponding
> * entry for internal cameras. External cameras can be initialized
> @@ -145,6 +148,16 @@ void CameraHalManager::cameraAdded(std::shared_ptr<Camera> cam)
> }
>
> const CameraConfigData *cameraConfigData = halConfig_.cameraConfigData(cam->id());
> +#else
> + /*
> + * Assume that cameras without properties::Location specified are external.
> + */
> + const CameraConfigData *cameraConfigData = nullptr;
> + if (!isCameraExternal && cameraLocation(cam.get()) < 0) {
> + isCameraExternal = true;
> + id = nextExternalCameraId_;
> + }
> +#endif
>
> /*
> * Some cameras whose location is reported by libcamera as external may
> diff --git a/src/android/camera_hal_manager.h b/src/android/camera_hal_manager.h
> index a5f8b933a7902..056abbb0d4e54 100644
> --- a/src/android/camera_hal_manager.h
> +++ b/src/android/camera_hal_manager.h
> @@ -56,7 +56,9 @@ private:
> CameraDevice *cameraDeviceFromHalId(unsigned int id) LIBCAMERA_TSA_REQUIRES(mutex_);
>
> std::unique_ptr<libcamera::CameraManager> cameraManager_;
> +#ifdef HAVE_LIBYAML
> CameraHalConfig halConfig_;
> +#endif
>
> const camera_module_callbacks_t *callbacks_;
> std::vector<std::unique_ptr<CameraDevice>> cameras_ LIBCAMERA_TSA_GUARDED_BY(mutex_);
> diff --git a/src/android/meson.build b/src/android/meson.build
> index 75b4bf2070851..1e471c291a1e4 100644
> --- a/src/android/meson.build
> +++ b/src/android/meson.build
> @@ -3,7 +3,6 @@
> android_deps = [
> dependency('libexif', required : get_option('android')),
> dependency('libjpeg', required : get_option('android')),
> - dependency('yaml-0.1', required : get_option('android')),
> libcamera_private,
> ]
>
> @@ -41,7 +40,6 @@ android_hal_sources = files([
> 'camera3_hal.cpp',
> 'camera_capabilities.cpp',
> 'camera_device.cpp',
> - 'camera_hal_config.cpp',
> 'camera_hal_manager.cpp',
> 'camera_metadata.cpp',
> 'camera_ops.cpp',
> @@ -56,6 +54,14 @@ android_hal_sources = files([
>
> android_cpp_args = []
>
> +libyaml_dep = dependency('yaml-0.1', required : false)
> +if libyaml_dep.found()
> + config_h.set('HAVE_LIBYAML', 1)
> + android_hal_sources += files([
> + 'camera_hal_config.cpp',
> + ])
> +endif
> +
> subdir('cros')
> subdir('mm')
>
> --
> 2.30.2
>
More information about the libcamera-devel
mailing list