summaryrefslogtreecommitdiff
path: root/src/android/meson.build
blob: 68646120a9781dc101f413445aecb3c25cc53bda (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# SPDX-License-Identifier: CC0-1.0

android_deps = [
    dependency('libexif', required : get_option('android')),
    dependency('libjpeg', required : get_option('android')),
    libcamera_private,
]

android_enabled = true

foreach dep : android_deps
    if not dep.found()
        android_enabled = false
        subdir_done()
    endif
endforeach

libyuv_dep = dependency('libyuv', required : false)

# Fallback to a subproject if libyuv isn't found, as it's typically not
# provided by distributions.
if not libyuv_dep.found()
    cmake = import('cmake')

    libyuv_vars = cmake.subproject_options()
    libyuv_vars.add_cmake_defines({'CMAKE_POSITION_INDEPENDENT_CODE': 'ON'})
    libyuv_vars.set_override_option('cpp_std', 'c++17')
    libyuv_vars.append_compile_args('cpp',
         '-Wno-sign-compare',
         '-Wno-unused-variable',
         '-Wno-unused-parameter')
    libyuv_vars.append_link_args('-ljpeg')
    libyuv = cmake.subproject('libyuv', options : libyuv_vars)
    libyuv_dep = libyuv.dependency('yuv')
endif

android_deps += [libyuv_dep]

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',
    'camera_request.cpp',
    'camera_stream.cpp',
    'hal_framebuffer.cpp',
    'yuv/post_processor_yuv.cpp'
])

android_cpp_args = []

subdir('cros')
subdir('jpeg')
subdir('mm')

android_camera_metadata_sources = files([
    'metadata/camera_metadata.c',
])

android_camera_metadata = static_library('camera_metadata',
                                         android_camera_metadata_sources,
                                         c_args : '-Wno-shadow',
                                         include_directories : android_includes)

libcamera_hal = shared_library('libcamera-hal',
                               android_hal_sources,
                               name_prefix : '',
                               link_with : android_camera_metadata,
                               install : true,
                               cpp_args : android_cpp_args,
                               include_directories : android_includes,
                               dependencies : android_deps)
gt; #include <sys/mman.h> #include <sys/types.h> #include <vector> #include <libcamera/camera_manager.h> #include "v4l2_camera_proxy.h" using namespace libcamera; class V4L2CompatManager { public: struct FileOperations { using openat_func_t = int (*)(int dirfd, const char *path, int oflag, ...); using dup_func_t = int (*)(int oldfd); using close_func_t = int (*)(int fd); using ioctl_func_t = int (*)(int fd, unsigned long request, ...); using mmap_func_t = void *(*)(void *addr, size_t length, int prot, int flags, int fd, off64_t offset); using munmap_func_t = int (*)(void *addr, size_t length); openat_func_t openat; dup_func_t dup; close_func_t close; ioctl_func_t ioctl; mmap_func_t mmap; munmap_func_t munmap; }; static V4L2CompatManager *instance(); const FileOperations &fops() const { return fops_; } int openat(int dirfd, const char *path, int oflag, mode_t mode); int dup(int oldfd); int close(int fd); void *mmap(void *addr, size_t length, int prot, int flags, int fd, off64_t offset); int munmap(void *addr, size_t length); int ioctl(int fd, unsigned long request, void *arg); private: V4L2CompatManager(); ~V4L2CompatManager(); int start(); int getCameraIndex(int fd); std::shared_ptr<V4L2CameraFile> cameraFile(int fd); FileOperations fops_; CameraManager *cm_; std::vector<std::unique_ptr<V4L2CameraProxy>> proxies_; std::map<int, std::shared_ptr<V4L2CameraFile>> files_; std::map<void *, V4L2CameraProxy *> mmaps_; }; #endif /* __V4L2_COMPAT_MANAGER_H__ */