[libcamera-devel] [PATCH 3/3] cros: Support the new cros camera API with set_up and tear_down
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Feb 25 19:12:22 CET 2021
Hi Paul,
Thank you for the patch.
On Thu, Feb 25, 2021 at 06:19:17PM +0100, Jacopo Mondi wrote:
> On Thu, Feb 25, 2021 at 07:42:17PM +0900, Paul Elder wrote:
> > Implement and expose the symbol and functions that the new cros camera
> > API requires. Since we don't actually need them, leave them empty.
> >
> > Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
> > ---
> > src/cros/camera3_hal.cpp | 21 +++++++++++++++++++++
I'd store this in src/android/ and call it cros_camera3_hal.cpp.
> > src/cros/meson.build | 16 ++++++++++++++++
> > src/libcamera/meson.build | 6 ++++++
> > src/meson.build | 4 ++++
> > 4 files changed, 47 insertions(+)
> > create mode 100644 src/cros/camera3_hal.cpp
> > create mode 100644 src/cros/meson.build
> >
> > diff --git a/src/cros/camera3_hal.cpp b/src/cros/camera3_hal.cpp
> > new file mode 100644
> > index 00000000..31ad36ac
> > --- /dev/null
> > +++ b/src/cros/camera3_hal.cpp
> > @@ -0,0 +1,21 @@
> > +/* SPDX-License-Identifier: LGPL-2.1-or-later */
> > +/*
> > + * Copyright (C) 2021, Google Inc.
> > + *
> > + * camera3_hal.cpp - cros-specific components of Android Camera HALv3 module
s/cros/Chrome OS/ (or, if you have to abbreviate it, CrOS.
> > + */
> > +
> > +#include <cros-camera/cros_camera_hal.h>
> > +
> > +static void set_up(cros::CameraMojoChannelManagerToken *token)
> > +{
> > +}
> > +
> > +static void tear_down()
> > +{
> > +}
> > +
> > +cros::cros_camera_hal_t CROS_CAMERA_EXPORT CROS_CAMERA_HAL_INFO_SYM = {
>
> I'm debated... AFAICT this is just a temporary workaround as the
> dependency on the CROS_CAMERA_HAL_INFO_SYM symbol should not be made
> mandatory in future.
>
> If that's the case, should we really import all these headers instead
> of defining the two symbols we need and drop this file once the
> requirement is dropped ?
I don't really like importing the headers much. Could we instead include
them from their location in the system ? CrOS uses BUILD.gn files for
its build system, and and it integrates with pkg-config. See the
BUILD.gn in src/platform2/camera/common/. If you define a meson
dependency using the right package, its include directories should be
useable to access headers without importing anything.
> > + .set_up = set_up,
> > + .tear_down = tear_down
> > +};
> > diff --git a/src/cros/meson.build b/src/cros/meson.build
> > new file mode 100644
> > index 00000000..31aa58c9
> > --- /dev/null
> > +++ b/src/cros/meson.build
> > @@ -0,0 +1,16 @@
> > +# SPDX-License-Identifier: CC0-1.0
> > +
> > +cros_hal_include_dir = '/mnt/host/source/src/aosp/external/libchrome'
See above, we should use pkg-config and meson dependencies.
> > +
> > +cros_hal_info_sources = files([
> > + 'camera3_hal.cpp',
> > +])
> > +
> > +cros_hal_info = static_library('cros_hal_info',
> > + cros_hal_info_sources,
> > + c_args : '-Wno-shadow',
> > + include_directories : [cros_includes,
> > + cros_hal_include_dir,
> > + android_includes])
> > +
> > +cros_hal_info_obj = cros_hal_info.extract_objects('camera3_hal.cpp')
> > diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
> > index 4b5e33ce..c40eb41f 100644
> > --- a/src/libcamera/meson.build
> > +++ b/src/libcamera/meson.build
> > @@ -139,6 +139,11 @@ if android_enabled
> > libcamera_deps += android_deps
> > endif
> >
> > +libcamera_objects = []
> > +if cros_enabled
> > + libcamera_objects += cros_hal_info_obj
> > +endif
> > +
>
> Can't we create a static library object and link against it as we do
> for android_camera_metadata ?
I'm not entirely sure, but in that case I think the linker will only
pull the symbols that are referenced.
> Basically you can define the static library in src/android/meson.build
> and instruct libcamera to link against it conditionally to 'if cros'
> in src/libcamera/meson.build.
>
> But maybe I'm overlooking something
>
> > # We add '/' to the build_rpath as a 'safe' path to act as a boolean flag.
> > # The build_rpath is stripped at install time by meson, so we determine at
> > # runtime if the library is running from an installed location by checking
> > @@ -149,6 +154,7 @@ libcamera = shared_library('camera',
> > install : true,
> > link_with : libcamera_link_with,
> > include_directories : includes,
> > + objects : libcamera_objects,
> > build_rpath : '/',
> > dependencies : libcamera_deps)
> >
> > diff --git a/src/meson.build b/src/meson.build
> > index 0b26ca70..ec85cc47 100644
> > --- a/src/meson.build
> > +++ b/src/meson.build
> > @@ -15,6 +15,10 @@ endif
> > # are included directly into the libcamera library when this is enabled.
> > subdir('android')
> >
> > +if cros_enabled
> > + subdir('cros')
> > +endif
> > +
> > subdir('libcamera')
> > subdir('ipa')
> >
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list