# SPDX-License-Identifier: CC0-1.0
ipa_includes = [
libcamera_includes,
]
ipa_install_dir = libcamera_libdir
ipa_data_dir = libcamera_datadir / 'ipa'
ipa_sysconf_dir = libcamera_sysconfdir / 'ipa'
config_h.set('IPA_CONFIG_DIR',
'"' + get_option('prefix') / ipa_sysconf_dir +
':' + get_option('prefix') / ipa_data_dir + '"')
config_h.set('IPA_MODULE_DIR',
'"' + get_option('prefix') / ipa_install_dir + '"')
summary({
'IPA_CONFIG_DIR' : config_h.get('IPA_CONFIG_DIR'),
'IPA_MODULE_DIR' : config_h.get('IPA_MODULE_DIR'),
}, section : 'Paths')
subdir('libipa')
ipa_sign = files('ipa-sign.sh')
ipa_names = []
ipa_modules = get_option('ipas')
# Tests require the vimc IPA, similar to vimc pipline-handler for their
# execution. Include it automatically when tests are enabled.
if get_option('test') and 'vimc' not in ipa_modules
message('Enabling vimc IPA to support tests')
ipa_modules += ['vimc']
endif
enabled_ipa_modules = []
enabled_ipa_names = []
ipa_names = []
subdirs = []
foreach pipeline : pipelines
if not ipa_modules.contains(pipeline)
continue
endif
enabled_ipa_names += pipeline
# Allow multi-level directory structuring for the IPAs if needed.
pipeline = pipeline.split('/')[0]
if pipeline in subdirs
continue
endif
subdirs += pipeline
subdir(pipeline)
# Don't reuse the pipeline variable below, the subdirectory may have
# overwritten it.
endforeach
# The ipa-sign-install.sh script which uses the enabled_ipa_modules variable
# will itself prepend MESON_INSTALL_DESTDIR_PREFIX to each ipa module name,
# therefore we must not include the prefix string here.
foreach ipa_name : ipa_names
enabled_ipa_modules += ipa_install_dir / ipa_name + '.so'
endforeach
if ipa_sign_module
# Regenerate the signatures for all IPA modules. We can't simply install the
# .sign files, as meson strips the DT_RPATH and DT_RUNPATH from binaries at
# install time, which invalidates the signatures.
meson.add_install_script('ipa-sign-install.sh',
ipa_priv_key.full_path(),
enabled_ipa_modules)
endif
tter'>committer
/* SPDX-License-Identifier: LGPL-2.1-or-later *//* * Copyright (C) 2018, Google Inc. * * pipeline_handler.cpp - Pipeline handler infrastructure */#include"device_enumerator.h"#include"log.h"#include"pipeline_handler.h"/** * \file pipeline_handler.h * \brief Create pipelines and cameras from one or more media devices * * Each pipeline supported by libcamera needs to be backed by a pipeline * handler implementation which describes the one or many media devices * needed for a pipeline to function properly. * * The pipeline handler is responsible for providing a description of the * media devices it requires to operate. Once all media devices can be * provided the pipeline handler can acquire them and create camera * devices that utilize the acquired media devices. * * To make it a bit less bit complicated to write pipe line handlers a * macro REGISTER_PIPELINE_HANDLER() is provided which allows a pipeline * handler implementation to register itself with the library with ease. */namespace libcamera {/** * \class PipelineHandler * \brief Find a set of media devices and provide cameras * * The responsibility of a PipelineHandler is to describe all media * devices it would need in order to provide cameras to the system. *//** * \class PipelineHandlerFactory * \brief Keep a registry and create instances of available pipeline handlers * * The responsibility of the PipelineHandlerFactory is to keep a list * of all pipelines in the system. Each pipeline handler should register * it self with the factory using the REGISTER_PIPELINE_HANDLER() macro. *//** * \brief Add a pipeline handler to the global list * * \param[in] name Name of the pipeline handler to add * \param[in] factory Factory to use to construct the pipeline * * The caller is responsible to guarantee the uniqueness of the pipeline name. */voidPipelineHandlerFactory::registerType(conststd::string &name,
PipelineHandlerFactory *factory){std::map<std::string, PipelineHandlerFactory *> &factories =registry();if(factories.count(name)) {LOG(Error) <<"Registering '"<< name <<"' pipeline twice";return;}
factories[name] = factory;}/**