# SPDX-License-Identifier: CC0-1.0 project('libcamera', 'c', 'cpp', meson_version : '>= 0.56', version : '0.0.0', default_options : [ 'werror=true', 'warning_level=2', 'cpp_std=c++17', ], license : 'LGPL 2.1+') # Generate version information. The libcamera_git_version variable contains the # full version with git patch count and SHA1 (e.g. 1.2.3+211-c94a24f4), while # the libcamera_version variable contains the major.minor.patch (e.g. 1.2.3) # only. If the source tree isn't under git control, or if it matches the last # git version tag, the build metadata (e.g. +211-c94a24f4) is omitted from # libcamera_git_version. libcamera_git_version = run_command('utils/gen-version.sh', meson.project_build_root(), meson.project_source_root(), check: false).stdout().strip() if libcamera_git_version == '' libcamera_git_version = meson.project_version() endif libcamera_version = libcamera_git_version.split('+')[0] # This script gererates the .tarball-version file on a 'meson dist' command. meson.add_dist_script('utils/run-dist.sh') # Configure the build environment. cc = meson.get_compiler('c') cxx = meson.get_compiler('cpp') config_h = configuration_data() if cc.has_header_symbol('unistd.h', 'issetugid') config_h.set('HAVE_ISSETUGID', 1) endif if cc.has_header_symbol('stdlib.h', 'secure_getenv', prefix : '#define _GNU_SOURCE') config_h.set('HAVE_SECURE_GETENV', 1) endif common_arguments = [ '-Wshadow', '-include', meson.current_build_dir() / 'config.h', ] c_arguments = [] cpp_arguments = [] if cc.get_id() == 'clang' if cc.version().version_compare('<9') error('clang version is too old, libcamera requires 9.0 or newer') endif # Turn _FORTIFY_SOURCE by default on optimised builds (as it requires -O1 # or higher). This is needed on clang only as gcc enables it by default. if get_option('optimization') != '0' common_arguments += [ '-D_FORTIFY_SOURCE=2', ] endif # Use libc++ by default if available instead of libstdc++ when compiling # with clang. if cc.find_library('libc++', required: false).found() cpp_arguments += [ '-stdlib=libc++', ] endif cpp_arguments += [ '-Wextra-semi', '-Wthread-safety', ] endif if cc.get_id() == 'gcc' if cc.version().version_compare('<8') error('gcc version is too old, libcamera requires 8.0 or newer') endif # On gcc 8, the file system library is provided in a separate static # library. if cc.version().version_compare('<9') cpp_arguments += [ '-lstdc++fs', ] endif # gcc 7.1 introduced processor-specific ABI breakages related to parameter # passing on ARM platforms. This generates a large number of messages # during compilation. Silence them. if host_machine.cpu_family() == 'arm' cpp_arguments += [ '-Wno-psabi', ] endif endif # We use C99 designated initializers for arrays as C++ has no equivalent # feature. Both gcc and clang support this extension, but recent # versions of clang generate a warning that needs to be disabled. if cc.has_argument('-Wno-c99-designator') common_arguments += [ '-Wno-c99-designator', ] endif c_arguments += common_arguments cpp_arguments += common_arguments add_project_arguments(c_arguments, language : 'c') add_project_arguments(cpp_arguments, language : 'cpp') add_project_link_arguments(cpp_arguments, language : 'cpp') libcamera_includes = include_directories('include') # Sub-directories fill py_modules with their dependencies. py_modules = [] # Libraries used by multiple components liblttng = cc.find_library('lttng-ust', required : get_option('tracing')) # Pipeline handlers # # Tests require the vimc pipeline handler, incl/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright (C) 2019, Google Inc. * * viewfinder.h - qcam - Viewfinder base class */ #pragma once #include <QImage> #include <QList> #include <QSize> #include <libcamera/formats.h> #include <libcamera/framebuffer.h> class Image; class ViewFinder { public: virtual ~ViewFinder() = default; virtual const QList<libcamera::PixelFormat> &nativeFormats() const = 0; virtual int setFormat(const libcamera::PixelFormat &format, const QSize &size, unsigned int stride) = 0; virtual void render(libcamera::FrameBuffer *buffer, Image *image) = 0; virtual void stop() = 0; virtual QImage getCurrentImage() = 0; };