[libcamera-devel] [PATCH] android: Split HAL to it's own shared library

Kieran Bingham kieran.bingham at ideasonboard.com
Sun May 2 22:02:45 CEST 2021


Hi Laurent,

On 01/05/2021 21:54, Laurent Pinchart wrote:
> Hi Kieran,
> 
> Thank you for the patch.
> 
> On Fri, Apr 30, 2021 at 04:02:19PM +0100, Kieran Bingham wrote:
>> The libcamera Android HAL implementation should not be an integral part
>> of libcamera, but a support library that utilises the libcamera public
>> API.
>>
>> Move the implementation to it's own distinct library.
>>
>> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>> ---
>>
>> Please note that this no longer requires ChromeOS to manually symlink
>> into the camera_hal directory.
>>
>> A modification similar to the following should be applied to the Chrome
>> ebuilds if this is applied:
>>
>> diff --git a/media-libs/libcamera/libcamera-9999.ebuild b/media-libs/libcamera/libcamera-9999.ebuild
>> index 433357f1ef74..cf90e438cfb3 100644
>> --- a/media-libs/libcamera/libcamera-9999.ebuild
>> +++ b/media-libs/libcamera/libcamera-9999.ebuild
>> @@ -57,6 +57,4 @@ src_compile() {
>>  
>>  src_install() {
>>         meson_src_install
>> -
>> -       dosym ../libcamera.so "/usr/$(get_libdir)/camera_hal/libcamera.so"
>>  }
> 
> Could you submit a patch to CrOS ?
> 
>>  src/android/meson.build   | 10 ++++++++++
>>  src/libcamera/meson.build | 11 -----------
>>  src/meson.build           |  7 +++----
>>  3 files changed, 13 insertions(+), 15 deletions(-)
>>
>> diff --git a/src/android/meson.build b/src/android/meson.build
>> index 2be20c97e118..6170448a73ce 100644
>> --- a/src/android/meson.build
>> +++ b/src/android/meson.build
>> @@ -3,6 +3,7 @@
>>  android_deps = [
>>      dependency('libexif', required : get_option('android')),
>>      dependency('libjpeg', required : get_option('android')),
>> +    libcamera_dep,
>>  ]
>>  
>>  android_enabled = true
>> @@ -66,3 +67,12 @@ android_camera_metadata = static_library('camera_metadata',
>>                                           android_camera_metadata_sources,
>>                                           c_args : '-Wno-shadow',
>>                                           include_directories : android_includes)
>> +
>> +android_hal = shared_library('android-hal',
> 
> android-hal.so won't be a very descriptive name. Maybe libcamera-hal.so

I started out with libcamera-hal, but then I decided I didn't like it so
I updated to android-hal ...

Given that this is an android-hal implementation I thought that was
/more/ descriptive ...

otherwise libcamera-hal sounds like it's an abstraction layer of libcamera.

If you prefer libcamera-hal I'll change it back.

> ?
> 
>> +                             android_hal_sources,
>> +                             name_prefix : '',
>> +                             link_with : android_camera_metadata,
>> +                             install : true,
>> +                             cpp_args : libcamera_cpp_args,
>> +                             include_directories : android_includes,
>> +                             dependencies : android_deps)
> 
> Without install_dir, this will get installed in /usr/lib/, which isn't
> where the CrOS camera service will look for it. We probably need a
> configuration option to set the path, as it will differ between CrOS and
> Android.

But I have install_dir ... uhm ... Ok so I forgot to save out the
updated patch before sending ...

It's there in the next version already ;-) ...

> +android_installdir = get_option('libdir')
> +
>  if get_option('android_platform') == 'cros'
>     libcamera_cpp_args += [ '-DOS_CHROMEOS']
> +   android_installdir = get_option('libdir') / 'camera_hal'
>  endif

Will install it to camera_hal directly when the platform is set.


>> diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
>> index e0a48aa23ea5..f77b80b878d8 100644
>> --- a/src/libcamera/meson.build
>> +++ b/src/libcamera/meson.build
>> @@ -129,16 +129,6 @@ libcamera_deps = [
>>      dependency('threads'),
>>  ]
>>  
>> -libcamera_link_with = []
>> -
>> -if android_enabled
>> -    libcamera_sources += android_hal_sources
>> -    includes += android_includes
>> -    libcamera_link_with += android_camera_metadata
>> -
>> -    libcamera_deps += android_deps
>> -endif
>> -
>>  # 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
>> @@ -147,7 +137,6 @@ endif
>>  libcamera = shared_library('camera',
>>                             libcamera_sources,
>>                             install : true,
>> -                           link_with : libcamera_link_with,
>>                             cpp_args : libcamera_cpp_args,
>>                             include_directories : includes,
>>                             objects : libcamera_objects,
>> diff --git a/src/meson.build b/src/meson.build
>> index 64d22b9ce5b6..9dc32751bbb1 100644
>> --- a/src/meson.build
>> +++ b/src/meson.build
>> @@ -31,11 +31,10 @@ endif
>>  libcamera_cpp_args = []
>>  libcamera_objects = []
>>  
>> -# The 'android' subdir must be processed first, and the build targets
>> -# are included directly into the libcamera library when this is enabled.
>> -subdir('android')
>> -
>> +# libcamera must be built first as a dependency to the other components.
>>  subdir('libcamera')
> 
> This is really nice, having android first has been bugging me for a
> while.

Me to, I somehow assumed last time I looked at this that there were
deeper reasons for integrating into the libcamera.so - but there wasn't
anything preventing the split really.

Anyway, v2 to come anyway with the correct install paths, and if desired
- a rename.

--
Kieran


> 
>> +
>> +subdir('android')
>>  subdir('ipa')
>>  
>>  subdir('lc-compliance')
> 

-- 
Regards
--
Kieran


More information about the libcamera-devel mailing list