[{"id":13623,"web_url":"https://patchwork.libcamera.org/comment/13623/","msgid":"<807413b1-ce83-3337-88ee-2a518ebd581e@ideasonboard.com>","date":"2020-11-06T11:12:23","subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Paul,\n\nOn 06/11/2020 10:37, Paul Elder wrote:\n> As every pipeline and have its own proxy, IPAInterfaceWrapper is no\n> longer necessary. Since it's the only member of libipa, remove libipa\n> completely.\n\nAh, I think I foresee the (imminent?) addition of items to libipa to be\nable to share some common features across open-source IPA modules.\n(closed source ones won't share of course).\n\nCould we have this patch strip out the dead code, but /keep/ the libipa\nitself as a skeleton at least?\n\n\n\n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> \n> ---\n> No change in v4\n> \n> No change in v3\n> \n> No change in v2\n> ---\n>  Documentation/Doxyfile.in                |   1 -\n>  Documentation/meson.build                |   2 -\n>  src/ipa/libipa/ipa_interface_wrapper.cpp | 285 -----------------------\n>  src/ipa/libipa/ipa_interface_wrapper.h   |  61 -----\n>  src/ipa/libipa/meson.build               |  15 --\n>  src/ipa/meson.build                      |   2 -\n>  src/ipa/raspberrypi/meson.build          |   2 -\n>  src/ipa/raspberrypi/raspberrypi.cpp      |   2 -\n>  src/ipa/rkisp1/meson.build               |   3 +-\n>  src/ipa/rkisp1/rkisp1.cpp                |   2 -\n>  src/ipa/vimc/meson.build                 |   3 +-\n>  src/ipa/vimc/vimc.cpp                    |   2 -\n>  test/ipa/ipa_wrappers_test.cpp           |   1 -\n>  test/ipa/meson.build                     |   4 +-\n>  14 files changed, 4 insertions(+), 381 deletions(-)\n>  delete mode 100644 src/ipa/libipa/ipa_interface_wrapper.cpp\n>  delete mode 100644 src/ipa/libipa/ipa_interface_wrapper.h\n>  delete mode 100644 src/ipa/libipa/meson.build\n> \n> diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\n> index 20fa1349..9a7a3fb4 100644\n> --- a/Documentation/Doxyfile.in\n> +++ b/Documentation/Doxyfile.in\n> @@ -789,7 +789,6 @@ WARN_LOGFILE           =\n>  # Note: If this tag is empty the current directory is searched.\n>  \n>  INPUT                  = \"@TOP_SRCDIR@/include/libcamera\" \\\n> -\t\t\t \"@TOP_SRCDIR@/src/ipa/libipa\" \\\n>  \t\t\t \"@TOP_SRCDIR@/src/libcamera\" \\\n>  \t\t\t \"@TOP_BUILDDIR@/include/libcamera\" \\\n>  \t\t\t \"@TOP_BUILDDIR@/src/libcamera\"\n> diff --git a/Documentation/meson.build b/Documentation/meson.build\n> index 26a12fcd..59107151 100644\n> --- a/Documentation/meson.build\n> +++ b/Documentation/meson.build\n> @@ -27,8 +27,6 @@ if doxygen.found() and dot.found()\n>                        libcamera_ipa_headers,\n>                        libcamera_public_headers,\n>                        libcamera_sources,\n> -                      libipa_headers,\n> -                      libipa_sources,\n>                    ],\n>                    output : 'api-html',\n>                    command : [doxygen, doxyfile],\n> diff --git a/src/ipa/libipa/ipa_interface_wrapper.cpp b/src/ipa/libipa/ipa_interface_wrapper.cpp\n> deleted file mode 100644\n> index cee532e3..00000000\n> --- a/src/ipa/libipa/ipa_interface_wrapper.cpp\n> +++ /dev/null\n> @@ -1,285 +0,0 @@\n> -/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> -/*\n> - * Copyright (C) 2019, Google Inc.\n> - *\n> - * ipa_interface_wrapper.cpp - Image Processing Algorithm interface wrapper\n> - */\n> -\n> -#include \"ipa_interface_wrapper.h\"\n> -\n> -#include <map>\n> -#include <string.h>\n> -#include <unistd.h>\n> -#include <vector>\n> -\n> -#include <libcamera/ipa/ipa_interface.h>\n> -\n> -#include \"libcamera/internal/byte_stream_buffer.h\"\n> -#include \"libcamera/internal/camera_sensor.h\"\n> -\n> -/**\n> - * \\file ipa_interface_wrapper.h\n> - * \\brief Image Processing Algorithm interface wrapper\n> - */\n> -\n> -namespace libcamera {\n> -\n> -/**\n> - * \\class IPAInterfaceWrapper\n> - * \\brief Wrap an IPAInterface and expose it as an ipa_context\n> - *\n> - * This class implements the ipa_context API based on a provided IPAInterface.\n> - * It helps IPAs that implement the IPAInterface API to provide the external\n> - * ipa_context API.\n> - *\n> - * To use the wrapper, an IPA module simple creates a new instance of its\n> - * IPAInterface implementation, and passes it to the constructor of the\n> - * IPAInterfaceWrapper. As IPAInterfaceWrapper inherits from ipa_context, the\n> - * constructed wrapper can then be directly returned from the IPA module's\n> - * ipaCreate() function.\n> - *\n> - * \\code{.cpp}\n> - * class MyIPA : public IPAInterface\n> - * {\n> - * \t...\n> - * };\n> - *\n> - * struct ipa_context *ipaCreate()\n> - * {\n> - * \treturn new IPAInterfaceWrapper(std::make_unique<MyIPA>());\n> - * }\n> - * \\endcode\n> - *\n> - * The wrapper takes ownership of the IPAInterface and will automatically\n> - * delete it when the wrapper is destroyed.\n> - */\n> -\n> -/**\n> - * \\brief Construct an IPAInterfaceWrapper wrapping \\a interface\n> - * \\param[in] interface The interface to wrap\n> - */\n> -IPAInterfaceWrapper::IPAInterfaceWrapper(std::unique_ptr<IPAInterface> interface)\n> -\t: ipa_(std::move(interface)), callbacks_(nullptr), cb_ctx_(nullptr)\n> -{\n> -\tops = &operations_;\n> -\n> -\tipa_->queueFrameAction.connect(this, &IPAInterfaceWrapper::queueFrameAction);\n> -}\n> -\n> -void IPAInterfaceWrapper::destroy(struct ipa_context *_ctx)\n> -{\n> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> -\n> -\tdelete ctx;\n> -}\n> -\n> -void *IPAInterfaceWrapper::get_interface(struct ipa_context *_ctx)\n> -{\n> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> -\n> -\treturn ctx->ipa_.get();\n> -}\n> -\n> -void IPAInterfaceWrapper::init(struct ipa_context *_ctx,\n> -\t\t\t       const struct ipa_settings *settings)\n> -{\n> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> -\n> -\tIPASettings ipaSettings{\n> -\t\t.configurationFile = settings->configuration_file\n> -\t};\n> -\tctx->ipa_->init(ipaSettings);\n> -}\n> -\n> -int IPAInterfaceWrapper::start(struct ipa_context *_ctx)\n> -{\n> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> -\n> -\treturn ctx->ipa_->start();\n> -}\n> -\n> -void IPAInterfaceWrapper::stop(struct ipa_context *_ctx)\n> -{\n> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> -\n> -\tctx->ipa_->stop();\n> -}\n> -\n> -void IPAInterfaceWrapper::register_callbacks(struct ipa_context *_ctx,\n> -\t\t\t\t\t     const struct ipa_callback_ops *callbacks,\n> -\t\t\t\t\t     void *cb_ctx)\n> -{\n> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> -\n> -\tctx->callbacks_ = callbacks;\n> -\tctx->cb_ctx_ = cb_ctx;\n> -}\n> -\n> -void IPAInterfaceWrapper::configure(struct ipa_context *_ctx,\n> -\t\t\t\t    const struct ipa_sensor_info *sensor_info,\n> -\t\t\t\t    const struct ipa_stream *streams,\n> -\t\t\t\t    unsigned int num_streams,\n> -\t\t\t\t    const struct ipa_control_info_map *maps,\n> -\t\t\t\t    unsigned int num_maps)\n> -{\n> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> -\n> -\tctx->serializer_.reset();\n> -\n> -\t/* Translate the IPA sensor info. */\n> -\tCameraSensorInfo sensorInfo{};\n> -\tsensorInfo.model = sensor_info->model;\n> -\tsensorInfo.bitsPerPixel = sensor_info->bits_per_pixel;\n> -\tsensorInfo.activeAreaSize = { sensor_info->active_area.width,\n> -\t\t\t\t      sensor_info->active_area.height };\n> -\tsensorInfo.analogCrop = { sensor_info->analog_crop.left,\n> -\t\t\t\t  sensor_info->analog_crop.top,\n> -\t\t\t\t  sensor_info->analog_crop.width,\n> -\t\t\t\t  sensor_info->analog_crop.height };\n> -\tsensorInfo.outputSize = { sensor_info->output_size.width,\n> -\t\t\t\t  sensor_info->output_size.height };\n> -\tsensorInfo.pixelRate = sensor_info->pixel_rate;\n> -\tsensorInfo.lineLength = sensor_info->line_length;\n> -\n> -\t/* Translate the IPA stream configurations map. */\n> -\tstd::map<unsigned int, IPAStream> ipaStreams;\n> -\n> -\tfor (unsigned int i = 0; i < num_streams; ++i) {\n> -\t\tconst struct ipa_stream &stream = streams[i];\n> -\n> -\t\tipaStreams[stream.id] = {\n> -\t\t\tstream.pixel_format,\n> -\t\t\tSize(stream.width, stream.height),\n> -\t\t};\n> -\t}\n> -\n> -\t/* Translate the IPA entity controls map. */\n> -\tstd::map<unsigned int, const ControlInfoMap &> entityControls;\n> -\tstd::map<unsigned int, ControlInfoMap> infoMaps;\n> -\n> -\tfor (unsigned int i = 0; i < num_maps; ++i) {\n> -\t\tconst struct ipa_control_info_map &ipa_map = maps[i];\n> -\t\tByteStreamBuffer byteStream(ipa_map.data, ipa_map.size);\n> -\t\tunsigned int id = ipa_map.id;\n> -\n> -\t\tinfoMaps[id] = ctx->serializer_.deserialize<ControlInfoMap>(byteStream);\n> -\t\tentityControls.emplace(id, infoMaps[id]);\n> -\t}\n> -\n> -\t/* \\todo Translate the ipaConfig and result. */\n> -\tIPAOperationData ipaConfig;\n> -\tctx->ipa_->configure(sensorInfo, ipaStreams, entityControls, ipaConfig,\n> -\t\t\t     nullptr);\n> -}\n> -\n> -void IPAInterfaceWrapper::map_buffers(struct ipa_context *_ctx,\n> -\t\t\t\t      const struct ipa_buffer *_buffers,\n> -\t\t\t\t      size_t num_buffers)\n> -{\n> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> -\tstd::vector<IPABuffer> buffers(num_buffers);\n> -\n> -\tfor (unsigned int i = 0; i < num_buffers; ++i) {\n> -\t\tconst struct ipa_buffer &_buffer = _buffers[i];\n> -\t\tIPABuffer &buffer = buffers[i];\n> -\t\tstd::vector<FrameBuffer::Plane> &planes = buffer.planes;\n> -\n> -\t\tbuffer.id = _buffer.id;\n> -\n> -\t\tplanes.resize(_buffer.num_planes);\n> -\t\tfor (unsigned int j = 0; j < _buffer.num_planes; ++j) {\n> -\t\t\tplanes[j].fd = FileDescriptor(_buffer.planes[j].dmabuf);\n> -\t\t\tplanes[j].length = _buffer.planes[j].length;\n> -\t\t}\n> -\t}\n> -\n> -\tctx->ipa_->mapBuffers(buffers);\n> -}\n> -\n> -void IPAInterfaceWrapper::unmap_buffers(struct ipa_context *_ctx,\n> -\t\t\t\t\tconst unsigned int *_ids,\n> -\t\t\t\t\tsize_t num_buffers)\n> -{\n> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> -\tstd::vector<unsigned int> ids(_ids, _ids + num_buffers);\n> -\tctx->ipa_->unmapBuffers(ids);\n> -}\n> -\n> -void IPAInterfaceWrapper::process_event(struct ipa_context *_ctx,\n> -\t\t\t\t\tconst struct ipa_operation_data *data)\n> -{\n> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> -\tIPAOperationData opData;\n> -\n> -\topData.operation = data->operation;\n> -\n> -\topData.data.resize(data->num_data);\n> -\tmemcpy(opData.data.data(), data->data,\n> -\t       data->num_data * sizeof(*data->data));\n> -\n> -\topData.controls.resize(data->num_lists);\n> -\tfor (unsigned int i = 0; i < data->num_lists; ++i) {\n> -\t\tconst struct ipa_control_list *c_list = &data->lists[i];\n> -\t\tByteStreamBuffer byteStream(c_list->data, c_list->size);\n> -\t\topData.controls[i] = ctx->serializer_.deserialize<ControlList>(byteStream);\n> -\t}\n> -\n> -\tctx->ipa_->processEvent(opData);\n> -}\n> -\n> -void IPAInterfaceWrapper::queueFrameAction(unsigned int frame,\n> -\t\t\t\t\t   const IPAOperationData &data)\n> -{\n> -\tif (!callbacks_)\n> -\t\treturn;\n> -\n> -\tstruct ipa_operation_data c_data;\n> -\tc_data.operation = data.operation;\n> -\tc_data.data = data.data.data();\n> -\tc_data.num_data = data.data.size();\n> -\n> -\tstruct ipa_control_list control_lists[data.controls.size()];\n> -\tc_data.lists = control_lists;\n> -\tc_data.num_lists = data.controls.size();\n> -\n> -\tstd::size_t listsSize = 0;\n> -\tfor (const auto &list : data.controls)\n> -\t\tlistsSize += serializer_.binarySize(list);\n> -\n> -\tstd::vector<uint8_t> binaryData(listsSize);\n> -\tByteStreamBuffer byteStreamBuffer(binaryData.data(), listsSize);\n> -\n> -\tunsigned int i = 0;\n> -\tfor (const auto &list : data.controls) {\n> -\t\tstruct ipa_control_list &c_list = control_lists[i];\n> -\t\tc_list.size = serializer_.binarySize(list);\n> -\n> -\t\tByteStreamBuffer b = byteStreamBuffer.carveOut(c_list.size);\n> -\t\tserializer_.serialize(list, b);\n> -\n> -\t\tc_list.data = b.base();\n> -\t}\n> -\n> -\tcallbacks_->queue_frame_action(cb_ctx_, frame, c_data);\n> -}\n> -\n> -#ifndef __DOXYGEN__\n> -/*\n> - * This construct confuses Doygen and makes it believe that all members of the\n> - * operations is a member of IPAInterfaceWrapper. It must thus be hidden.\n> - */\n> -const struct ipa_context_ops IPAInterfaceWrapper::operations_ = {\n> -\t.destroy = &IPAInterfaceWrapper::destroy,\n> -\t.get_interface = &IPAInterfaceWrapper::get_interface,\n> -\t.init = &IPAInterfaceWrapper::init,\n> -\t.start = &IPAInterfaceWrapper::start,\n> -\t.stop = &IPAInterfaceWrapper::stop,\n> -\t.register_callbacks = &IPAInterfaceWrapper::register_callbacks,\n> -\t.configure = &IPAInterfaceWrapper::configure,\n> -\t.map_buffers = &IPAInterfaceWrapper::map_buffers,\n> -\t.unmap_buffers = &IPAInterfaceWrapper::unmap_buffers,\n> -\t.process_event = &IPAInterfaceWrapper::process_event,\n> -};\n> -#endif\n> -\n> -} /* namespace libcamera */\n> diff --git a/src/ipa/libipa/ipa_interface_wrapper.h b/src/ipa/libipa/ipa_interface_wrapper.h\n> deleted file mode 100644\n> index a1c70159..00000000\n> --- a/src/ipa/libipa/ipa_interface_wrapper.h\n> +++ /dev/null\n> @@ -1,61 +0,0 @@\n> -/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> -/*\n> - * Copyright (C) 2019, Google Inc.\n> - *\n> - * ipa_interface_wrapper.h - Image Processing Algorithm interface wrapper\n> - */\n> -#ifndef __LIBCAMERA_IPA_INTERFACE_WRAPPER_H__\n> -#define __LIBCAMERA_IPA_INTERFACE_WRAPPER_H__\n> -\n> -#include <memory>\n> -\n> -#include <libcamera/ipa/ipa_interface.h>\n> -\n> -#include \"libcamera/internal/control_serializer.h\"\n> -\n> -namespace libcamera {\n> -\n> -class IPAInterfaceWrapper : public ipa_context\n> -{\n> -public:\n> -\tIPAInterfaceWrapper(std::unique_ptr<IPAInterface> interface);\n> -\n> -private:\n> -\tstatic void destroy(struct ipa_context *ctx);\n> -\tstatic void *get_interface(struct ipa_context *ctx);\n> -\tstatic void init(struct ipa_context *ctx,\n> -\t\t\t const struct ipa_settings *settings);\n> -\tstatic int start(struct ipa_context *ctx);\n> -\tstatic void stop(struct ipa_context *ctx);\n> -\tstatic void register_callbacks(struct ipa_context *ctx,\n> -\t\t\t\t       const struct ipa_callback_ops *callbacks,\n> -\t\t\t\t       void *cb_ctx);\n> -\tstatic void configure(struct ipa_context *ctx,\n> -\t\t\t      const struct ipa_sensor_info *sensor_info,\n> -\t\t\t      const struct ipa_stream *streams,\n> -\t\t\t      unsigned int num_streams,\n> -\t\t\t      const struct ipa_control_info_map *maps,\n> -\t\t\t      unsigned int num_maps);\n> -\tstatic void map_buffers(struct ipa_context *ctx,\n> -\t\t\t\tconst struct ipa_buffer *c_buffers,\n> -\t\t\t\tsize_t num_buffers);\n> -\tstatic void unmap_buffers(struct ipa_context *ctx,\n> -\t\t\t\t  const unsigned int *ids,\n> -\t\t\t\t  size_t num_buffers);\n> -\tstatic void process_event(struct ipa_context *ctx,\n> -\t\t\t\t  const struct ipa_operation_data *data);\n> -\n> -\tstatic const struct ipa_context_ops operations_;\n> -\n> -\tvoid queueFrameAction(unsigned int frame, const IPAOperationData &data);\n> -\n> -\tstd::unique_ptr<IPAInterface> ipa_;\n> -\tconst struct ipa_callback_ops *callbacks_;\n> -\tvoid *cb_ctx_;\n> -\n> -\tControlSerializer serializer_;\n> -};\n> -\n> -} /* namespace libcamera */\n> -\n> -#endif /* __LIBCAMERA_IPA_INTERFACE_WRAPPER_H__ */\n> diff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build\n> deleted file mode 100644\n> index 22626405..00000000\n> --- a/src/ipa/libipa/meson.build\n> +++ /dev/null\n> @@ -1,15 +0,0 @@\n> -# SPDX-License-Identifier: CC0-1.0\n> -\n> -libipa_headers = files([\n> -    'ipa_interface_wrapper.h',\n> -])\n> -\n> -libipa_sources = files([\n> -    'ipa_interface_wrapper.cpp',\n> -])\n> -\n> -libipa_includes = include_directories('..')\n> -\n> -libipa = static_library('ipa', libipa_sources,\n> -                        include_directories : ipa_includes,\n> -                        dependencies : libcamera_dep)\n> diff --git a/src/ipa/meson.build b/src/ipa/meson.build\n> index 5a5de267..b11e5d23 100644\n> --- a/src/ipa/meson.build\n> +++ b/src/ipa/meson.build\n> @@ -15,8 +15,6 @@ config_h.set('IPA_CONFIG_DIR',\n>  config_h.set('IPA_MODULE_DIR',\n>               '\"' + join_paths(get_option('prefix'), ipa_install_dir) + '\"')\n>  \n> -subdir('libipa')\n> -\n>  ipa_sign = files('ipa-sign.sh')\n>  \n>  ipas = ['raspberrypi', 'rkisp1', 'vimc']\n> diff --git a/src/ipa/raspberrypi/meson.build b/src/ipa/raspberrypi/meson.build\n> index 4331f718..4a0e18cf 100644\n> --- a/src/ipa/raspberrypi/meson.build\n> +++ b/src/ipa/raspberrypi/meson.build\n> @@ -10,7 +10,6 @@ rpi_ipa_deps = [\n>  \n>  rpi_ipa_includes = [\n>      ipa_includes,\n> -    libipa_includes,\n>      include_directories('controller')\n>  ]\n>  \n> @@ -46,7 +45,6 @@ mod = shared_module(ipa_name,\n>                      name_prefix : '',\n>                      include_directories : rpi_ipa_includes,\n>                      dependencies : rpi_ipa_deps,\n> -                    link_with : libipa,\n>                      install : true,\n>                      install_dir : ipa_install_dir)\n>  \n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\n> index 316da7bd..592436f8 100644\n> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> @@ -23,8 +23,6 @@\n>  #include <libcamera/request.h>\n>  #include <libcamera/span.h>\n>  \n> -#include <libipa/ipa_interface_wrapper.h>\n> -\n>  #include \"libcamera/internal/camera_sensor.h\"\n>  #include \"libcamera/internal/log.h\"\n>  #include \"libcamera/internal/utils.h\"\n> diff --git a/src/ipa/rkisp1/meson.build b/src/ipa/rkisp1/meson.build\n> index 3061d53c..bfe8d362 100644\n> --- a/src/ipa/rkisp1/meson.build\n> +++ b/src/ipa/rkisp1/meson.build\n> @@ -5,9 +5,8 @@ ipa_name = 'ipa_rkisp1'\n>  mod = shared_module(ipa_name,\n>                      ['rkisp1.cpp', libcamera_generated_ipa_headers],\n>                      name_prefix : '',\n> -                    include_directories : [ipa_includes, libipa_includes],\n> +                    include_directories : ipa_includes,\n>                      dependencies : libcamera_dep,\n> -                    link_with : libipa,\n>                      install : true,\n>                      install_dir : ipa_install_dir)\n>  \n> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n> index 7bb261c6..c88f1271 100644\n> --- a/src/ipa/rkisp1/rkisp1.cpp\n> +++ b/src/ipa/rkisp1/rkisp1.cpp\n> @@ -23,8 +23,6 @@\n>  #include <libcamera/ipa/rkisp1_ipa_interface.h>\n>  #include <libcamera/request.h>\n>  \n> -#include <libipa/ipa_interface_wrapper.h>\n> -\n>  #include \"libcamera/internal/log.h\"\n>  \n>  namespace libcamera {\n> diff --git a/src/ipa/vimc/meson.build b/src/ipa/vimc/meson.build\n> index e982ebba..67440fd8 100644\n> --- a/src/ipa/vimc/meson.build\n> +++ b/src/ipa/vimc/meson.build\n> @@ -5,9 +5,8 @@ ipa_name = 'ipa_vimc'\n>  mod = shared_module(ipa_name,\n>                      ['vimc.cpp', libcamera_generated_ipa_headers],\n>                      name_prefix : '',\n> -                    include_directories : [ipa_includes, libipa_includes],\n> +                    include_directories : ipa_includes,\n>                      dependencies : libcamera_dep,\n> -                    link_with : libipa,\n>                      install : true,\n>                      install_dir : ipa_install_dir)\n>  \n> diff --git a/src/ipa/vimc/vimc.cpp b/src/ipa/vimc/vimc.cpp\n> index fbf7325e..6b088466 100644\n> --- a/src/ipa/vimc/vimc.cpp\n> +++ b/src/ipa/vimc/vimc.cpp\n> @@ -18,8 +18,6 @@\n>  #include <libcamera/ipa/ipa_interface.h>\n>  #include <libcamera/ipa/ipa_module_info.h>\n>  \n> -#include <libipa/ipa_interface_wrapper.h>\n> -\n>  #include \"libcamera/internal/file.h\"\n>  #include \"libcamera/internal/log.h\"\n>  \n> diff --git a/test/ipa/ipa_wrappers_test.cpp b/test/ipa/ipa_wrappers_test.cpp\n> index 59d991cb..0133d8d2 100644\n> --- a/test/ipa/ipa_wrappers_test.cpp\n> +++ b/test/ipa/ipa_wrappers_test.cpp\n> @@ -13,7 +13,6 @@\n>  #include <unistd.h>\n>  \n>  #include <libcamera/controls.h>\n> -#include <libipa/ipa_interface_wrapper.h>\n>  \n>  #include \"libcamera/internal/camera_sensor.h\"\n>  #include \"libcamera/internal/device_enumerator.h\"\n> diff --git a/test/ipa/meson.build b/test/ipa/meson.build\n> index ba672f3f..b25bfcf4 100644\n> --- a/test/ipa/meson.build\n> +++ b/test/ipa/meson.build\n> @@ -9,8 +9,8 @@ ipa_test = [\n>  foreach t : ipa_test\n>      exe = executable(t[0], t[1],\n>                       dependencies : libcamera_dep,\n> -                     link_with : [libipa, test_libraries],\n> -                     include_directories : [libipa_includes, test_includes_internal])\n> +                     link_with : test_libraries,\n> +                     include_directories : test_includes_internal)\n>  \n>      test(t[0], exe, suite : 'ipa')\n>  endforeach\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 729DABE082\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  6 Nov 2020 11:12:28 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id F112460344;\n\tFri,  6 Nov 2020 12:12:27 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C831060344\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  6 Nov 2020 12:12:26 +0100 (CET)","from [192.168.0.20]\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 1AD01A19;\n\tFri,  6 Nov 2020 12:12:26 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"S1WRj0vG\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1604661146;\n\tbh=in1FYnuza9NgUTWKFaCMNgxzkDQidCsLWI5taspTx0M=;\n\th=Reply-To:Subject:To:References:Cc:From:Date:In-Reply-To:From;\n\tb=S1WRj0vG5YK99yT/2voHUgB1uYDNVH4Mo81HL3bMdClA0Z9axzlH7RNeDi9h99Dpe\n\tJ4qlBYMKnwfGPSWa4r4r3i9Cej9Wil60kpciR12S5ByzHKUemdB+ocrO5MW5V6PDIG\n\t4MaA6yP7RgCBtiHU2FShU6XftH3H6y+CCemRU8aI=","To":"Paul Elder <paul.elder@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20201106103707.49660-1-paul.elder@ideasonboard.com>\n\t<20201106103707.49660-32-paul.elder@ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<807413b1-ce83-3337-88ee-2a518ebd581e@ideasonboard.com>","Date":"Fri, 6 Nov 2020 11:12:23 +0000","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.10.0","MIME-Version":"1.0","In-Reply-To":"<20201106103707.49660-32-paul.elder@ideasonboard.com>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Reply-To":"kieran.bingham@ideasonboard.com","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":13631,"web_url":"https://patchwork.libcamera.org/comment/13631/","msgid":"<20201109022557.GA1791@pyrite.rasen.tech>","date":"2020-11-09T02:25:57","subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"Hi Kieran,\n\nOn Fri, Nov 06, 2020 at 11:12:23AM +0000, Kieran Bingham wrote:\n> Hi Paul,\n> \n> On 06/11/2020 10:37, Paul Elder wrote:\n> > As every pipeline and have its own proxy, IPAInterfaceWrapper is no\n> > longer necessary. Since it's the only member of libipa, remove libipa\n> > completely.\n> \n> Ah, I think I foresee the (imminent?) addition of items to libipa to be\n> able to share some common features across open-source IPA modules.\n> (closed source ones won't share of course).\n\nAh, I see.\n\n> Could we have this patch strip out the dead code, but /keep/ the libipa\n> itself as a skeleton at least?\n\nWell yes, but... then we'd just have a libipa directory and meson file\nbut no files to actually build... is that fine?\n\n\nThanks,\n\nPaul\n\n> \n> > Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> > Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> > \n> > ---\n> > No change in v4\n> > \n> > No change in v3\n> > \n> > No change in v2\n> > ---\n> >  Documentation/Doxyfile.in                |   1 -\n> >  Documentation/meson.build                |   2 -\n> >  src/ipa/libipa/ipa_interface_wrapper.cpp | 285 -----------------------\n> >  src/ipa/libipa/ipa_interface_wrapper.h   |  61 -----\n> >  src/ipa/libipa/meson.build               |  15 --\n> >  src/ipa/meson.build                      |   2 -\n> >  src/ipa/raspberrypi/meson.build          |   2 -\n> >  src/ipa/raspberrypi/raspberrypi.cpp      |   2 -\n> >  src/ipa/rkisp1/meson.build               |   3 +-\n> >  src/ipa/rkisp1/rkisp1.cpp                |   2 -\n> >  src/ipa/vimc/meson.build                 |   3 +-\n> >  src/ipa/vimc/vimc.cpp                    |   2 -\n> >  test/ipa/ipa_wrappers_test.cpp           |   1 -\n> >  test/ipa/meson.build                     |   4 +-\n> >  14 files changed, 4 insertions(+), 381 deletions(-)\n> >  delete mode 100644 src/ipa/libipa/ipa_interface_wrapper.cpp\n> >  delete mode 100644 src/ipa/libipa/ipa_interface_wrapper.h\n> >  delete mode 100644 src/ipa/libipa/meson.build\n> > \n> > diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\n> > index 20fa1349..9a7a3fb4 100644\n> > --- a/Documentation/Doxyfile.in\n> > +++ b/Documentation/Doxyfile.in\n> > @@ -789,7 +789,6 @@ WARN_LOGFILE           =\n> >  # Note: If this tag is empty the current directory is searched.\n> >  \n> >  INPUT                  = \"@TOP_SRCDIR@/include/libcamera\" \\\n> > -\t\t\t \"@TOP_SRCDIR@/src/ipa/libipa\" \\\n> >  \t\t\t \"@TOP_SRCDIR@/src/libcamera\" \\\n> >  \t\t\t \"@TOP_BUILDDIR@/include/libcamera\" \\\n> >  \t\t\t \"@TOP_BUILDDIR@/src/libcamera\"\n> > diff --git a/Documentation/meson.build b/Documentation/meson.build\n> > index 26a12fcd..59107151 100644\n> > --- a/Documentation/meson.build\n> > +++ b/Documentation/meson.build\n> > @@ -27,8 +27,6 @@ if doxygen.found() and dot.found()\n> >                        libcamera_ipa_headers,\n> >                        libcamera_public_headers,\n> >                        libcamera_sources,\n> > -                      libipa_headers,\n> > -                      libipa_sources,\n> >                    ],\n> >                    output : 'api-html',\n> >                    command : [doxygen, doxyfile],\n> > diff --git a/src/ipa/libipa/ipa_interface_wrapper.cpp b/src/ipa/libipa/ipa_interface_wrapper.cpp\n> > deleted file mode 100644\n> > index cee532e3..00000000\n> > --- a/src/ipa/libipa/ipa_interface_wrapper.cpp\n> > +++ /dev/null\n> > @@ -1,285 +0,0 @@\n> > -/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> > -/*\n> > - * Copyright (C) 2019, Google Inc.\n> > - *\n> > - * ipa_interface_wrapper.cpp - Image Processing Algorithm interface wrapper\n> > - */\n> > -\n> > -#include \"ipa_interface_wrapper.h\"\n> > -\n> > -#include <map>\n> > -#include <string.h>\n> > -#include <unistd.h>\n> > -#include <vector>\n> > -\n> > -#include <libcamera/ipa/ipa_interface.h>\n> > -\n> > -#include \"libcamera/internal/byte_stream_buffer.h\"\n> > -#include \"libcamera/internal/camera_sensor.h\"\n> > -\n> > -/**\n> > - * \\file ipa_interface_wrapper.h\n> > - * \\brief Image Processing Algorithm interface wrapper\n> > - */\n> > -\n> > -namespace libcamera {\n> > -\n> > -/**\n> > - * \\class IPAInterfaceWrapper\n> > - * \\brief Wrap an IPAInterface and expose it as an ipa_context\n> > - *\n> > - * This class implements the ipa_context API based on a provided IPAInterface.\n> > - * It helps IPAs that implement the IPAInterface API to provide the external\n> > - * ipa_context API.\n> > - *\n> > - * To use the wrapper, an IPA module simple creates a new instance of its\n> > - * IPAInterface implementation, and passes it to the constructor of the\n> > - * IPAInterfaceWrapper. As IPAInterfaceWrapper inherits from ipa_context, the\n> > - * constructed wrapper can then be directly returned from the IPA module's\n> > - * ipaCreate() function.\n> > - *\n> > - * \\code{.cpp}\n> > - * class MyIPA : public IPAInterface\n> > - * {\n> > - * \t...\n> > - * };\n> > - *\n> > - * struct ipa_context *ipaCreate()\n> > - * {\n> > - * \treturn new IPAInterfaceWrapper(std::make_unique<MyIPA>());\n> > - * }\n> > - * \\endcode\n> > - *\n> > - * The wrapper takes ownership of the IPAInterface and will automatically\n> > - * delete it when the wrapper is destroyed.\n> > - */\n> > -\n> > -/**\n> > - * \\brief Construct an IPAInterfaceWrapper wrapping \\a interface\n> > - * \\param[in] interface The interface to wrap\n> > - */\n> > -IPAInterfaceWrapper::IPAInterfaceWrapper(std::unique_ptr<IPAInterface> interface)\n> > -\t: ipa_(std::move(interface)), callbacks_(nullptr), cb_ctx_(nullptr)\n> > -{\n> > -\tops = &operations_;\n> > -\n> > -\tipa_->queueFrameAction.connect(this, &IPAInterfaceWrapper::queueFrameAction);\n> > -}\n> > -\n> > -void IPAInterfaceWrapper::destroy(struct ipa_context *_ctx)\n> > -{\n> > -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> > -\n> > -\tdelete ctx;\n> > -}\n> > -\n> > -void *IPAInterfaceWrapper::get_interface(struct ipa_context *_ctx)\n> > -{\n> > -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> > -\n> > -\treturn ctx->ipa_.get();\n> > -}\n> > -\n> > -void IPAInterfaceWrapper::init(struct ipa_context *_ctx,\n> > -\t\t\t       const struct ipa_settings *settings)\n> > -{\n> > -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> > -\n> > -\tIPASettings ipaSettings{\n> > -\t\t.configurationFile = settings->configuration_file\n> > -\t};\n> > -\tctx->ipa_->init(ipaSettings);\n> > -}\n> > -\n> > -int IPAInterfaceWrapper::start(struct ipa_context *_ctx)\n> > -{\n> > -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> > -\n> > -\treturn ctx->ipa_->start();\n> > -}\n> > -\n> > -void IPAInterfaceWrapper::stop(struct ipa_context *_ctx)\n> > -{\n> > -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> > -\n> > -\tctx->ipa_->stop();\n> > -}\n> > -\n> > -void IPAInterfaceWrapper::register_callbacks(struct ipa_context *_ctx,\n> > -\t\t\t\t\t     const struct ipa_callback_ops *callbacks,\n> > -\t\t\t\t\t     void *cb_ctx)\n> > -{\n> > -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> > -\n> > -\tctx->callbacks_ = callbacks;\n> > -\tctx->cb_ctx_ = cb_ctx;\n> > -}\n> > -\n> > -void IPAInterfaceWrapper::configure(struct ipa_context *_ctx,\n> > -\t\t\t\t    const struct ipa_sensor_info *sensor_info,\n> > -\t\t\t\t    const struct ipa_stream *streams,\n> > -\t\t\t\t    unsigned int num_streams,\n> > -\t\t\t\t    const struct ipa_control_info_map *maps,\n> > -\t\t\t\t    unsigned int num_maps)\n> > -{\n> > -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> > -\n> > -\tctx->serializer_.reset();\n> > -\n> > -\t/* Translate the IPA sensor info. */\n> > -\tCameraSensorInfo sensorInfo{};\n> > -\tsensorInfo.model = sensor_info->model;\n> > -\tsensorInfo.bitsPerPixel = sensor_info->bits_per_pixel;\n> > -\tsensorInfo.activeAreaSize = { sensor_info->active_area.width,\n> > -\t\t\t\t      sensor_info->active_area.height };\n> > -\tsensorInfo.analogCrop = { sensor_info->analog_crop.left,\n> > -\t\t\t\t  sensor_info->analog_crop.top,\n> > -\t\t\t\t  sensor_info->analog_crop.width,\n> > -\t\t\t\t  sensor_info->analog_crop.height };\n> > -\tsensorInfo.outputSize = { sensor_info->output_size.width,\n> > -\t\t\t\t  sensor_info->output_size.height };\n> > -\tsensorInfo.pixelRate = sensor_info->pixel_rate;\n> > -\tsensorInfo.lineLength = sensor_info->line_length;\n> > -\n> > -\t/* Translate the IPA stream configurations map. */\n> > -\tstd::map<unsigned int, IPAStream> ipaStreams;\n> > -\n> > -\tfor (unsigned int i = 0; i < num_streams; ++i) {\n> > -\t\tconst struct ipa_stream &stream = streams[i];\n> > -\n> > -\t\tipaStreams[stream.id] = {\n> > -\t\t\tstream.pixel_format,\n> > -\t\t\tSize(stream.width, stream.height),\n> > -\t\t};\n> > -\t}\n> > -\n> > -\t/* Translate the IPA entity controls map. */\n> > -\tstd::map<unsigned int, const ControlInfoMap &> entityControls;\n> > -\tstd::map<unsigned int, ControlInfoMap> infoMaps;\n> > -\n> > -\tfor (unsigned int i = 0; i < num_maps; ++i) {\n> > -\t\tconst struct ipa_control_info_map &ipa_map = maps[i];\n> > -\t\tByteStreamBuffer byteStream(ipa_map.data, ipa_map.size);\n> > -\t\tunsigned int id = ipa_map.id;\n> > -\n> > -\t\tinfoMaps[id] = ctx->serializer_.deserialize<ControlInfoMap>(byteStream);\n> > -\t\tentityControls.emplace(id, infoMaps[id]);\n> > -\t}\n> > -\n> > -\t/* \\todo Translate the ipaConfig and result. */\n> > -\tIPAOperationData ipaConfig;\n> > -\tctx->ipa_->configure(sensorInfo, ipaStreams, entityControls, ipaConfig,\n> > -\t\t\t     nullptr);\n> > -}\n> > -\n> > -void IPAInterfaceWrapper::map_buffers(struct ipa_context *_ctx,\n> > -\t\t\t\t      const struct ipa_buffer *_buffers,\n> > -\t\t\t\t      size_t num_buffers)\n> > -{\n> > -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> > -\tstd::vector<IPABuffer> buffers(num_buffers);\n> > -\n> > -\tfor (unsigned int i = 0; i < num_buffers; ++i) {\n> > -\t\tconst struct ipa_buffer &_buffer = _buffers[i];\n> > -\t\tIPABuffer &buffer = buffers[i];\n> > -\t\tstd::vector<FrameBuffer::Plane> &planes = buffer.planes;\n> > -\n> > -\t\tbuffer.id = _buffer.id;\n> > -\n> > -\t\tplanes.resize(_buffer.num_planes);\n> > -\t\tfor (unsigned int j = 0; j < _buffer.num_planes; ++j) {\n> > -\t\t\tplanes[j].fd = FileDescriptor(_buffer.planes[j].dmabuf);\n> > -\t\t\tplanes[j].length = _buffer.planes[j].length;\n> > -\t\t}\n> > -\t}\n> > -\n> > -\tctx->ipa_->mapBuffers(buffers);\n> > -}\n> > -\n> > -void IPAInterfaceWrapper::unmap_buffers(struct ipa_context *_ctx,\n> > -\t\t\t\t\tconst unsigned int *_ids,\n> > -\t\t\t\t\tsize_t num_buffers)\n> > -{\n> > -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> > -\tstd::vector<unsigned int> ids(_ids, _ids + num_buffers);\n> > -\tctx->ipa_->unmapBuffers(ids);\n> > -}\n> > -\n> > -void IPAInterfaceWrapper::process_event(struct ipa_context *_ctx,\n> > -\t\t\t\t\tconst struct ipa_operation_data *data)\n> > -{\n> > -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> > -\tIPAOperationData opData;\n> > -\n> > -\topData.operation = data->operation;\n> > -\n> > -\topData.data.resize(data->num_data);\n> > -\tmemcpy(opData.data.data(), data->data,\n> > -\t       data->num_data * sizeof(*data->data));\n> > -\n> > -\topData.controls.resize(data->num_lists);\n> > -\tfor (unsigned int i = 0; i < data->num_lists; ++i) {\n> > -\t\tconst struct ipa_control_list *c_list = &data->lists[i];\n> > -\t\tByteStreamBuffer byteStream(c_list->data, c_list->size);\n> > -\t\topData.controls[i] = ctx->serializer_.deserialize<ControlList>(byteStream);\n> > -\t}\n> > -\n> > -\tctx->ipa_->processEvent(opData);\n> > -}\n> > -\n> > -void IPAInterfaceWrapper::queueFrameAction(unsigned int frame,\n> > -\t\t\t\t\t   const IPAOperationData &data)\n> > -{\n> > -\tif (!callbacks_)\n> > -\t\treturn;\n> > -\n> > -\tstruct ipa_operation_data c_data;\n> > -\tc_data.operation = data.operation;\n> > -\tc_data.data = data.data.data();\n> > -\tc_data.num_data = data.data.size();\n> > -\n> > -\tstruct ipa_control_list control_lists[data.controls.size()];\n> > -\tc_data.lists = control_lists;\n> > -\tc_data.num_lists = data.controls.size();\n> > -\n> > -\tstd::size_t listsSize = 0;\n> > -\tfor (const auto &list : data.controls)\n> > -\t\tlistsSize += serializer_.binarySize(list);\n> > -\n> > -\tstd::vector<uint8_t> binaryData(listsSize);\n> > -\tByteStreamBuffer byteStreamBuffer(binaryData.data(), listsSize);\n> > -\n> > -\tunsigned int i = 0;\n> > -\tfor (const auto &list : data.controls) {\n> > -\t\tstruct ipa_control_list &c_list = control_lists[i];\n> > -\t\tc_list.size = serializer_.binarySize(list);\n> > -\n> > -\t\tByteStreamBuffer b = byteStreamBuffer.carveOut(c_list.size);\n> > -\t\tserializer_.serialize(list, b);\n> > -\n> > -\t\tc_list.data = b.base();\n> > -\t}\n> > -\n> > -\tcallbacks_->queue_frame_action(cb_ctx_, frame, c_data);\n> > -}\n> > -\n> > -#ifndef __DOXYGEN__\n> > -/*\n> > - * This construct confuses Doygen and makes it believe that all members of the\n> > - * operations is a member of IPAInterfaceWrapper. It must thus be hidden.\n> > - */\n> > -const struct ipa_context_ops IPAInterfaceWrapper::operations_ = {\n> > -\t.destroy = &IPAInterfaceWrapper::destroy,\n> > -\t.get_interface = &IPAInterfaceWrapper::get_interface,\n> > -\t.init = &IPAInterfaceWrapper::init,\n> > -\t.start = &IPAInterfaceWrapper::start,\n> > -\t.stop = &IPAInterfaceWrapper::stop,\n> > -\t.register_callbacks = &IPAInterfaceWrapper::register_callbacks,\n> > -\t.configure = &IPAInterfaceWrapper::configure,\n> > -\t.map_buffers = &IPAInterfaceWrapper::map_buffers,\n> > -\t.unmap_buffers = &IPAInterfaceWrapper::unmap_buffers,\n> > -\t.process_event = &IPAInterfaceWrapper::process_event,\n> > -};\n> > -#endif\n> > -\n> > -} /* namespace libcamera */\n> > diff --git a/src/ipa/libipa/ipa_interface_wrapper.h b/src/ipa/libipa/ipa_interface_wrapper.h\n> > deleted file mode 100644\n> > index a1c70159..00000000\n> > --- a/src/ipa/libipa/ipa_interface_wrapper.h\n> > +++ /dev/null\n> > @@ -1,61 +0,0 @@\n> > -/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> > -/*\n> > - * Copyright (C) 2019, Google Inc.\n> > - *\n> > - * ipa_interface_wrapper.h - Image Processing Algorithm interface wrapper\n> > - */\n> > -#ifndef __LIBCAMERA_IPA_INTERFACE_WRAPPER_H__\n> > -#define __LIBCAMERA_IPA_INTERFACE_WRAPPER_H__\n> > -\n> > -#include <memory>\n> > -\n> > -#include <libcamera/ipa/ipa_interface.h>\n> > -\n> > -#include \"libcamera/internal/control_serializer.h\"\n> > -\n> > -namespace libcamera {\n> > -\n> > -class IPAInterfaceWrapper : public ipa_context\n> > -{\n> > -public:\n> > -\tIPAInterfaceWrapper(std::unique_ptr<IPAInterface> interface);\n> > -\n> > -private:\n> > -\tstatic void destroy(struct ipa_context *ctx);\n> > -\tstatic void *get_interface(struct ipa_context *ctx);\n> > -\tstatic void init(struct ipa_context *ctx,\n> > -\t\t\t const struct ipa_settings *settings);\n> > -\tstatic int start(struct ipa_context *ctx);\n> > -\tstatic void stop(struct ipa_context *ctx);\n> > -\tstatic void register_callbacks(struct ipa_context *ctx,\n> > -\t\t\t\t       const struct ipa_callback_ops *callbacks,\n> > -\t\t\t\t       void *cb_ctx);\n> > -\tstatic void configure(struct ipa_context *ctx,\n> > -\t\t\t      const struct ipa_sensor_info *sensor_info,\n> > -\t\t\t      const struct ipa_stream *streams,\n> > -\t\t\t      unsigned int num_streams,\n> > -\t\t\t      const struct ipa_control_info_map *maps,\n> > -\t\t\t      unsigned int num_maps);\n> > -\tstatic void map_buffers(struct ipa_context *ctx,\n> > -\t\t\t\tconst struct ipa_buffer *c_buffers,\n> > -\t\t\t\tsize_t num_buffers);\n> > -\tstatic void unmap_buffers(struct ipa_context *ctx,\n> > -\t\t\t\t  const unsigned int *ids,\n> > -\t\t\t\t  size_t num_buffers);\n> > -\tstatic void process_event(struct ipa_context *ctx,\n> > -\t\t\t\t  const struct ipa_operation_data *data);\n> > -\n> > -\tstatic const struct ipa_context_ops operations_;\n> > -\n> > -\tvoid queueFrameAction(unsigned int frame, const IPAOperationData &data);\n> > -\n> > -\tstd::unique_ptr<IPAInterface> ipa_;\n> > -\tconst struct ipa_callback_ops *callbacks_;\n> > -\tvoid *cb_ctx_;\n> > -\n> > -\tControlSerializer serializer_;\n> > -};\n> > -\n> > -} /* namespace libcamera */\n> > -\n> > -#endif /* __LIBCAMERA_IPA_INTERFACE_WRAPPER_H__ */\n> > diff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build\n> > deleted file mode 100644\n> > index 22626405..00000000\n> > --- a/src/ipa/libipa/meson.build\n> > +++ /dev/null\n> > @@ -1,15 +0,0 @@\n> > -# SPDX-License-Identifier: CC0-1.0\n> > -\n> > -libipa_headers = files([\n> > -    'ipa_interface_wrapper.h',\n> > -])\n> > -\n> > -libipa_sources = files([\n> > -    'ipa_interface_wrapper.cpp',\n> > -])\n> > -\n> > -libipa_includes = include_directories('..')\n> > -\n> > -libipa = static_library('ipa', libipa_sources,\n> > -                        include_directories : ipa_includes,\n> > -                        dependencies : libcamera_dep)\n> > diff --git a/src/ipa/meson.build b/src/ipa/meson.build\n> > index 5a5de267..b11e5d23 100644\n> > --- a/src/ipa/meson.build\n> > +++ b/src/ipa/meson.build\n> > @@ -15,8 +15,6 @@ config_h.set('IPA_CONFIG_DIR',\n> >  config_h.set('IPA_MODULE_DIR',\n> >               '\"' + join_paths(get_option('prefix'), ipa_install_dir) + '\"')\n> >  \n> > -subdir('libipa')\n> > -\n> >  ipa_sign = files('ipa-sign.sh')\n> >  \n> >  ipas = ['raspberrypi', 'rkisp1', 'vimc']\n> > diff --git a/src/ipa/raspberrypi/meson.build b/src/ipa/raspberrypi/meson.build\n> > index 4331f718..4a0e18cf 100644\n> > --- a/src/ipa/raspberrypi/meson.build\n> > +++ b/src/ipa/raspberrypi/meson.build\n> > @@ -10,7 +10,6 @@ rpi_ipa_deps = [\n> >  \n> >  rpi_ipa_includes = [\n> >      ipa_includes,\n> > -    libipa_includes,\n> >      include_directories('controller')\n> >  ]\n> >  \n> > @@ -46,7 +45,6 @@ mod = shared_module(ipa_name,\n> >                      name_prefix : '',\n> >                      include_directories : rpi_ipa_includes,\n> >                      dependencies : rpi_ipa_deps,\n> > -                    link_with : libipa,\n> >                      install : true,\n> >                      install_dir : ipa_install_dir)\n> >  \n> > diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\n> > index 316da7bd..592436f8 100644\n> > --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> > +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> > @@ -23,8 +23,6 @@\n> >  #include <libcamera/request.h>\n> >  #include <libcamera/span.h>\n> >  \n> > -#include <libipa/ipa_interface_wrapper.h>\n> > -\n> >  #include \"libcamera/internal/camera_sensor.h\"\n> >  #include \"libcamera/internal/log.h\"\n> >  #include \"libcamera/internal/utils.h\"\n> > diff --git a/src/ipa/rkisp1/meson.build b/src/ipa/rkisp1/meson.build\n> > index 3061d53c..bfe8d362 100644\n> > --- a/src/ipa/rkisp1/meson.build\n> > +++ b/src/ipa/rkisp1/meson.build\n> > @@ -5,9 +5,8 @@ ipa_name = 'ipa_rkisp1'\n> >  mod = shared_module(ipa_name,\n> >                      ['rkisp1.cpp', libcamera_generated_ipa_headers],\n> >                      name_prefix : '',\n> > -                    include_directories : [ipa_includes, libipa_includes],\n> > +                    include_directories : ipa_includes,\n> >                      dependencies : libcamera_dep,\n> > -                    link_with : libipa,\n> >                      install : true,\n> >                      install_dir : ipa_install_dir)\n> >  \n> > diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n> > index 7bb261c6..c88f1271 100644\n> > --- a/src/ipa/rkisp1/rkisp1.cpp\n> > +++ b/src/ipa/rkisp1/rkisp1.cpp\n> > @@ -23,8 +23,6 @@\n> >  #include <libcamera/ipa/rkisp1_ipa_interface.h>\n> >  #include <libcamera/request.h>\n> >  \n> > -#include <libipa/ipa_interface_wrapper.h>\n> > -\n> >  #include \"libcamera/internal/log.h\"\n> >  \n> >  namespace libcamera {\n> > diff --git a/src/ipa/vimc/meson.build b/src/ipa/vimc/meson.build\n> > index e982ebba..67440fd8 100644\n> > --- a/src/ipa/vimc/meson.build\n> > +++ b/src/ipa/vimc/meson.build\n> > @@ -5,9 +5,8 @@ ipa_name = 'ipa_vimc'\n> >  mod = shared_module(ipa_name,\n> >                      ['vimc.cpp', libcamera_generated_ipa_headers],\n> >                      name_prefix : '',\n> > -                    include_directories : [ipa_includes, libipa_includes],\n> > +                    include_directories : ipa_includes,\n> >                      dependencies : libcamera_dep,\n> > -                    link_with : libipa,\n> >                      install : true,\n> >                      install_dir : ipa_install_dir)\n> >  \n> > diff --git a/src/ipa/vimc/vimc.cpp b/src/ipa/vimc/vimc.cpp\n> > index fbf7325e..6b088466 100644\n> > --- a/src/ipa/vimc/vimc.cpp\n> > +++ b/src/ipa/vimc/vimc.cpp\n> > @@ -18,8 +18,6 @@\n> >  #include <libcamera/ipa/ipa_interface.h>\n> >  #include <libcamera/ipa/ipa_module_info.h>\n> >  \n> > -#include <libipa/ipa_interface_wrapper.h>\n> > -\n> >  #include \"libcamera/internal/file.h\"\n> >  #include \"libcamera/internal/log.h\"\n> >  \n> > diff --git a/test/ipa/ipa_wrappers_test.cpp b/test/ipa/ipa_wrappers_test.cpp\n> > index 59d991cb..0133d8d2 100644\n> > --- a/test/ipa/ipa_wrappers_test.cpp\n> > +++ b/test/ipa/ipa_wrappers_test.cpp\n> > @@ -13,7 +13,6 @@\n> >  #include <unistd.h>\n> >  \n> >  #include <libcamera/controls.h>\n> > -#include <libipa/ipa_interface_wrapper.h>\n> >  \n> >  #include \"libcamera/internal/camera_sensor.h\"\n> >  #include \"libcamera/internal/device_enumerator.h\"\n> > diff --git a/test/ipa/meson.build b/test/ipa/meson.build\n> > index ba672f3f..b25bfcf4 100644\n> > --- a/test/ipa/meson.build\n> > +++ b/test/ipa/meson.build\n> > @@ -9,8 +9,8 @@ ipa_test = [\n> >  foreach t : ipa_test\n> >      exe = executable(t[0], t[1],\n> >                       dependencies : libcamera_dep,\n> > -                     link_with : [libipa, test_libraries],\n> > -                     include_directories : [libipa_includes, test_includes_internal])\n> > +                     link_with : test_libraries,\n> > +                     include_directories : test_includes_internal)\n> >  \n> >      test(t[0], exe, suite : 'ipa')\n> >  endforeach\n> > \n> \n> -- \n> Regards\n> --\n> Kieran","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 50368BE082\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  9 Nov 2020 02:26:08 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C10616306B;\n\tMon,  9 Nov 2020 03:26:07 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 04C3B6033F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  9 Nov 2020 03:26:06 +0100 (CET)","from pyrite.rasen.tech (unknown\n\t[IPv6:2400:4051:61:600:2c71:1b79:d06d:5032])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id DF49D2FE;\n\tMon,  9 Nov 2020 03:26:03 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"ujihQ1if\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1604888765;\n\tbh=jVUO8pitUD6S52ogIkmOm29HEsWldJCrcmNF5wLUVrQ=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=ujihQ1if1u7AeekfZsRL5WF6drPZ5LEjlpQLRX9OAJWZItjTchJP1k4euNpBU+wq4\n\tMc7n9eTQsykU2bIX4kkyHtgYNkgNjZjVBbHzI/9wZRY6hc7jMBQ+tCuoKYjTau38My\n\tGNnNdA1/2XNC5QFd3SanFnNX3/uTy/UFDc8fO6Ts=","Date":"Mon, 9 Nov 2020 11:25:57 +0900","From":"paul.elder@ideasonboard.com","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20201109022557.GA1791@pyrite.rasen.tech>","References":"<20201106103707.49660-1-paul.elder@ideasonboard.com>\n\t<20201106103707.49660-32-paul.elder@ideasonboard.com>\n\t<807413b1-ce83-3337-88ee-2a518ebd581e@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<807413b1-ce83-3337-88ee-2a518ebd581e@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":13639,"web_url":"https://patchwork.libcamera.org/comment/13639/","msgid":"<b80fb497-e0c3-29fc-2f87-10ec86ebfc5f@ideasonboard.com>","date":"2020-11-09T10:54:56","subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Paul,\n\nOn 09/11/2020 02:25, paul.elder@ideasonboard.com wrote:\n> Hi Kieran,\n> \n> On Fri, Nov 06, 2020 at 11:12:23AM +0000, Kieran Bingham wrote:\n>> Hi Paul,\n>>\n>> On 06/11/2020 10:37, Paul Elder wrote:\n>>> As every pipeline and have its own proxy, IPAInterfaceWrapper is no\n>>> longer necessary. Since it's the only member of libipa, remove libipa\n>>> completely.\n>>\n>> Ah, I think I foresee the (imminent?) addition of items to libipa to be\n>> able to share some common features across open-source IPA modules.\n>> (closed source ones won't share of course).\n> \n> Ah, I see.\n> \n>> Could we have this patch strip out the dead code, but /keep/ the libipa\n>> itself as a skeleton at least?\n> \n> Well yes, but... then we'd just have a libipa directory and meson file\n> but no files to actually build... is that fine?\n\nHrm, well you could keep an empty .cpp file but perhaps it's more than\nneeded.\n\nOtherwise, sure lets just let the files disappear, and we can re-add\nwhen needed. Maybe that's cleaner anyway.\n\nNiklas, I think you're likely working on IPA topics the soonest, do you\nhave a preference?\n\n--\nKieran\n\n\n> \n> \n> Thanks,\n> \n> Paul\n> \n>>\n>>> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n>>> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n>>>\n>>> ---\n>>> No change in v4\n>>>\n>>> No change in v3\n>>>\n>>> No change in v2\n>>> ---\n>>>  Documentation/Doxyfile.in                |   1 -\n>>>  Documentation/meson.build                |   2 -\n>>>  src/ipa/libipa/ipa_interface_wrapper.cpp | 285 -----------------------\n>>>  src/ipa/libipa/ipa_interface_wrapper.h   |  61 -----\n>>>  src/ipa/libipa/meson.build               |  15 --\n>>>  src/ipa/meson.build                      |   2 -\n>>>  src/ipa/raspberrypi/meson.build          |   2 -\n>>>  src/ipa/raspberrypi/raspberrypi.cpp      |   2 -\n>>>  src/ipa/rkisp1/meson.build               |   3 +-\n>>>  src/ipa/rkisp1/rkisp1.cpp                |   2 -\n>>>  src/ipa/vimc/meson.build                 |   3 +-\n>>>  src/ipa/vimc/vimc.cpp                    |   2 -\n>>>  test/ipa/ipa_wrappers_test.cpp           |   1 -\n>>>  test/ipa/meson.build                     |   4 +-\n>>>  14 files changed, 4 insertions(+), 381 deletions(-)\n>>>  delete mode 100644 src/ipa/libipa/ipa_interface_wrapper.cpp\n>>>  delete mode 100644 src/ipa/libipa/ipa_interface_wrapper.h\n>>>  delete mode 100644 src/ipa/libipa/meson.build\n>>>\n>>> diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\n>>> index 20fa1349..9a7a3fb4 100644\n>>> --- a/Documentation/Doxyfile.in\n>>> +++ b/Documentation/Doxyfile.in\n>>> @@ -789,7 +789,6 @@ WARN_LOGFILE           =\n>>>  # Note: If this tag is empty the current directory is searched.\n>>>  \n>>>  INPUT                  = \"@TOP_SRCDIR@/include/libcamera\" \\\n>>> -\t\t\t \"@TOP_SRCDIR@/src/ipa/libipa\" \\\n>>>  \t\t\t \"@TOP_SRCDIR@/src/libcamera\" \\\n>>>  \t\t\t \"@TOP_BUILDDIR@/include/libcamera\" \\\n>>>  \t\t\t \"@TOP_BUILDDIR@/src/libcamera\"\n>>> diff --git a/Documentation/meson.build b/Documentation/meson.build\n>>> index 26a12fcd..59107151 100644\n>>> --- a/Documentation/meson.build\n>>> +++ b/Documentation/meson.build\n>>> @@ -27,8 +27,6 @@ if doxygen.found() and dot.found()\n>>>                        libcamera_ipa_headers,\n>>>                        libcamera_public_headers,\n>>>                        libcamera_sources,\n>>> -                      libipa_headers,\n>>> -                      libipa_sources,\n>>>                    ],\n>>>                    output : 'api-html',\n>>>                    command : [doxygen, doxyfile],\n>>> diff --git a/src/ipa/libipa/ipa_interface_wrapper.cpp b/src/ipa/libipa/ipa_interface_wrapper.cpp\n>>> deleted file mode 100644\n>>> index cee532e3..00000000\n>>> --- a/src/ipa/libipa/ipa_interface_wrapper.cpp\n>>> +++ /dev/null\n>>> @@ -1,285 +0,0 @@\n>>> -/* SPDX-License-Identifier: LGPL-2.1-or-later */\n>>> -/*\n>>> - * Copyright (C) 2019, Google Inc.\n>>> - *\n>>> - * ipa_interface_wrapper.cpp - Image Processing Algorithm interface wrapper\n>>> - */\n>>> -\n>>> -#include \"ipa_interface_wrapper.h\"\n>>> -\n>>> -#include <map>\n>>> -#include <string.h>\n>>> -#include <unistd.h>\n>>> -#include <vector>\n>>> -\n>>> -#include <libcamera/ipa/ipa_interface.h>\n>>> -\n>>> -#include \"libcamera/internal/byte_stream_buffer.h\"\n>>> -#include \"libcamera/internal/camera_sensor.h\"\n>>> -\n>>> -/**\n>>> - * \\file ipa_interface_wrapper.h\n>>> - * \\brief Image Processing Algorithm interface wrapper\n>>> - */\n>>> -\n>>> -namespace libcamera {\n>>> -\n>>> -/**\n>>> - * \\class IPAInterfaceWrapper\n>>> - * \\brief Wrap an IPAInterface and expose it as an ipa_context\n>>> - *\n>>> - * This class implements the ipa_context API based on a provided IPAInterface.\n>>> - * It helps IPAs that implement the IPAInterface API to provide the external\n>>> - * ipa_context API.\n>>> - *\n>>> - * To use the wrapper, an IPA module simple creates a new instance of its\n>>> - * IPAInterface implementation, and passes it to the constructor of the\n>>> - * IPAInterfaceWrapper. As IPAInterfaceWrapper inherits from ipa_context, the\n>>> - * constructed wrapper can then be directly returned from the IPA module's\n>>> - * ipaCreate() function.\n>>> - *\n>>> - * \\code{.cpp}\n>>> - * class MyIPA : public IPAInterface\n>>> - * {\n>>> - * \t...\n>>> - * };\n>>> - *\n>>> - * struct ipa_context *ipaCreate()\n>>> - * {\n>>> - * \treturn new IPAInterfaceWrapper(std::make_unique<MyIPA>());\n>>> - * }\n>>> - * \\endcode\n>>> - *\n>>> - * The wrapper takes ownership of the IPAInterface and will automatically\n>>> - * delete it when the wrapper is destroyed.\n>>> - */\n>>> -\n>>> -/**\n>>> - * \\brief Construct an IPAInterfaceWrapper wrapping \\a interface\n>>> - * \\param[in] interface The interface to wrap\n>>> - */\n>>> -IPAInterfaceWrapper::IPAInterfaceWrapper(std::unique_ptr<IPAInterface> interface)\n>>> -\t: ipa_(std::move(interface)), callbacks_(nullptr), cb_ctx_(nullptr)\n>>> -{\n>>> -\tops = &operations_;\n>>> -\n>>> -\tipa_->queueFrameAction.connect(this, &IPAInterfaceWrapper::queueFrameAction);\n>>> -}\n>>> -\n>>> -void IPAInterfaceWrapper::destroy(struct ipa_context *_ctx)\n>>> -{\n>>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n>>> -\n>>> -\tdelete ctx;\n>>> -}\n>>> -\n>>> -void *IPAInterfaceWrapper::get_interface(struct ipa_context *_ctx)\n>>> -{\n>>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n>>> -\n>>> -\treturn ctx->ipa_.get();\n>>> -}\n>>> -\n>>> -void IPAInterfaceWrapper::init(struct ipa_context *_ctx,\n>>> -\t\t\t       const struct ipa_settings *settings)\n>>> -{\n>>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n>>> -\n>>> -\tIPASettings ipaSettings{\n>>> -\t\t.configurationFile = settings->configuration_file\n>>> -\t};\n>>> -\tctx->ipa_->init(ipaSettings);\n>>> -}\n>>> -\n>>> -int IPAInterfaceWrapper::start(struct ipa_context *_ctx)\n>>> -{\n>>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n>>> -\n>>> -\treturn ctx->ipa_->start();\n>>> -}\n>>> -\n>>> -void IPAInterfaceWrapper::stop(struct ipa_context *_ctx)\n>>> -{\n>>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n>>> -\n>>> -\tctx->ipa_->stop();\n>>> -}\n>>> -\n>>> -void IPAInterfaceWrapper::register_callbacks(struct ipa_context *_ctx,\n>>> -\t\t\t\t\t     const struct ipa_callback_ops *callbacks,\n>>> -\t\t\t\t\t     void *cb_ctx)\n>>> -{\n>>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n>>> -\n>>> -\tctx->callbacks_ = callbacks;\n>>> -\tctx->cb_ctx_ = cb_ctx;\n>>> -}\n>>> -\n>>> -void IPAInterfaceWrapper::configure(struct ipa_context *_ctx,\n>>> -\t\t\t\t    const struct ipa_sensor_info *sensor_info,\n>>> -\t\t\t\t    const struct ipa_stream *streams,\n>>> -\t\t\t\t    unsigned int num_streams,\n>>> -\t\t\t\t    const struct ipa_control_info_map *maps,\n>>> -\t\t\t\t    unsigned int num_maps)\n>>> -{\n>>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n>>> -\n>>> -\tctx->serializer_.reset();\n>>> -\n>>> -\t/* Translate the IPA sensor info. */\n>>> -\tCameraSensorInfo sensorInfo{};\n>>> -\tsensorInfo.model = sensor_info->model;\n>>> -\tsensorInfo.bitsPerPixel = sensor_info->bits_per_pixel;\n>>> -\tsensorInfo.activeAreaSize = { sensor_info->active_area.width,\n>>> -\t\t\t\t      sensor_info->active_area.height };\n>>> -\tsensorInfo.analogCrop = { sensor_info->analog_crop.left,\n>>> -\t\t\t\t  sensor_info->analog_crop.top,\n>>> -\t\t\t\t  sensor_info->analog_crop.width,\n>>> -\t\t\t\t  sensor_info->analog_crop.height };\n>>> -\tsensorInfo.outputSize = { sensor_info->output_size.width,\n>>> -\t\t\t\t  sensor_info->output_size.height };\n>>> -\tsensorInfo.pixelRate = sensor_info->pixel_rate;\n>>> -\tsensorInfo.lineLength = sensor_info->line_length;\n>>> -\n>>> -\t/* Translate the IPA stream configurations map. */\n>>> -\tstd::map<unsigned int, IPAStream> ipaStreams;\n>>> -\n>>> -\tfor (unsigned int i = 0; i < num_streams; ++i) {\n>>> -\t\tconst struct ipa_stream &stream = streams[i];\n>>> -\n>>> -\t\tipaStreams[stream.id] = {\n>>> -\t\t\tstream.pixel_format,\n>>> -\t\t\tSize(stream.width, stream.height),\n>>> -\t\t};\n>>> -\t}\n>>> -\n>>> -\t/* Translate the IPA entity controls map. */\n>>> -\tstd::map<unsigned int, const ControlInfoMap &> entityControls;\n>>> -\tstd::map<unsigned int, ControlInfoMap> infoMaps;\n>>> -\n>>> -\tfor (unsigned int i = 0; i < num_maps; ++i) {\n>>> -\t\tconst struct ipa_control_info_map &ipa_map = maps[i];\n>>> -\t\tByteStreamBuffer byteStream(ipa_map.data, ipa_map.size);\n>>> -\t\tunsigned int id = ipa_map.id;\n>>> -\n>>> -\t\tinfoMaps[id] = ctx->serializer_.deserialize<ControlInfoMap>(byteStream);\n>>> -\t\tentityControls.emplace(id, infoMaps[id]);\n>>> -\t}\n>>> -\n>>> -\t/* \\todo Translate the ipaConfig and result. */\n>>> -\tIPAOperationData ipaConfig;\n>>> -\tctx->ipa_->configure(sensorInfo, ipaStreams, entityControls, ipaConfig,\n>>> -\t\t\t     nullptr);\n>>> -}\n>>> -\n>>> -void IPAInterfaceWrapper::map_buffers(struct ipa_context *_ctx,\n>>> -\t\t\t\t      const struct ipa_buffer *_buffers,\n>>> -\t\t\t\t      size_t num_buffers)\n>>> -{\n>>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n>>> -\tstd::vector<IPABuffer> buffers(num_buffers);\n>>> -\n>>> -\tfor (unsigned int i = 0; i < num_buffers; ++i) {\n>>> -\t\tconst struct ipa_buffer &_buffer = _buffers[i];\n>>> -\t\tIPABuffer &buffer = buffers[i];\n>>> -\t\tstd::vector<FrameBuffer::Plane> &planes = buffer.planes;\n>>> -\n>>> -\t\tbuffer.id = _buffer.id;\n>>> -\n>>> -\t\tplanes.resize(_buffer.num_planes);\n>>> -\t\tfor (unsigned int j = 0; j < _buffer.num_planes; ++j) {\n>>> -\t\t\tplanes[j].fd = FileDescriptor(_buffer.planes[j].dmabuf);\n>>> -\t\t\tplanes[j].length = _buffer.planes[j].length;\n>>> -\t\t}\n>>> -\t}\n>>> -\n>>> -\tctx->ipa_->mapBuffers(buffers);\n>>> -}\n>>> -\n>>> -void IPAInterfaceWrapper::unmap_buffers(struct ipa_context *_ctx,\n>>> -\t\t\t\t\tconst unsigned int *_ids,\n>>> -\t\t\t\t\tsize_t num_buffers)\n>>> -{\n>>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n>>> -\tstd::vector<unsigned int> ids(_ids, _ids + num_buffers);\n>>> -\tctx->ipa_->unmapBuffers(ids);\n>>> -}\n>>> -\n>>> -void IPAInterfaceWrapper::process_event(struct ipa_context *_ctx,\n>>> -\t\t\t\t\tconst struct ipa_operation_data *data)\n>>> -{\n>>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n>>> -\tIPAOperationData opData;\n>>> -\n>>> -\topData.operation = data->operation;\n>>> -\n>>> -\topData.data.resize(data->num_data);\n>>> -\tmemcpy(opData.data.data(), data->data,\n>>> -\t       data->num_data * sizeof(*data->data));\n>>> -\n>>> -\topData.controls.resize(data->num_lists);\n>>> -\tfor (unsigned int i = 0; i < data->num_lists; ++i) {\n>>> -\t\tconst struct ipa_control_list *c_list = &data->lists[i];\n>>> -\t\tByteStreamBuffer byteStream(c_list->data, c_list->size);\n>>> -\t\topData.controls[i] = ctx->serializer_.deserialize<ControlList>(byteStream);\n>>> -\t}\n>>> -\n>>> -\tctx->ipa_->processEvent(opData);\n>>> -}\n>>> -\n>>> -void IPAInterfaceWrapper::queueFrameAction(unsigned int frame,\n>>> -\t\t\t\t\t   const IPAOperationData &data)\n>>> -{\n>>> -\tif (!callbacks_)\n>>> -\t\treturn;\n>>> -\n>>> -\tstruct ipa_operation_data c_data;\n>>> -\tc_data.operation = data.operation;\n>>> -\tc_data.data = data.data.data();\n>>> -\tc_data.num_data = data.data.size();\n>>> -\n>>> -\tstruct ipa_control_list control_lists[data.controls.size()];\n>>> -\tc_data.lists = control_lists;\n>>> -\tc_data.num_lists = data.controls.size();\n>>> -\n>>> -\tstd::size_t listsSize = 0;\n>>> -\tfor (const auto &list : data.controls)\n>>> -\t\tlistsSize += serializer_.binarySize(list);\n>>> -\n>>> -\tstd::vector<uint8_t> binaryData(listsSize);\n>>> -\tByteStreamBuffer byteStreamBuffer(binaryData.data(), listsSize);\n>>> -\n>>> -\tunsigned int i = 0;\n>>> -\tfor (const auto &list : data.controls) {\n>>> -\t\tstruct ipa_control_list &c_list = control_lists[i];\n>>> -\t\tc_list.size = serializer_.binarySize(list);\n>>> -\n>>> -\t\tByteStreamBuffer b = byteStreamBuffer.carveOut(c_list.size);\n>>> -\t\tserializer_.serialize(list, b);\n>>> -\n>>> -\t\tc_list.data = b.base();\n>>> -\t}\n>>> -\n>>> -\tcallbacks_->queue_frame_action(cb_ctx_, frame, c_data);\n>>> -}\n>>> -\n>>> -#ifndef __DOXYGEN__\n>>> -/*\n>>> - * This construct confuses Doygen and makes it believe that all members of the\n>>> - * operations is a member of IPAInterfaceWrapper. It must thus be hidden.\n>>> - */\n>>> -const struct ipa_context_ops IPAInterfaceWrapper::operations_ = {\n>>> -\t.destroy = &IPAInterfaceWrapper::destroy,\n>>> -\t.get_interface = &IPAInterfaceWrapper::get_interface,\n>>> -\t.init = &IPAInterfaceWrapper::init,\n>>> -\t.start = &IPAInterfaceWrapper::start,\n>>> -\t.stop = &IPAInterfaceWrapper::stop,\n>>> -\t.register_callbacks = &IPAInterfaceWrapper::register_callbacks,\n>>> -\t.configure = &IPAInterfaceWrapper::configure,\n>>> -\t.map_buffers = &IPAInterfaceWrapper::map_buffers,\n>>> -\t.unmap_buffers = &IPAInterfaceWrapper::unmap_buffers,\n>>> -\t.process_event = &IPAInterfaceWrapper::process_event,\n>>> -};\n>>> -#endif\n>>> -\n>>> -} /* namespace libcamera */\n>>> diff --git a/src/ipa/libipa/ipa_interface_wrapper.h b/src/ipa/libipa/ipa_interface_wrapper.h\n>>> deleted file mode 100644\n>>> index a1c70159..00000000\n>>> --- a/src/ipa/libipa/ipa_interface_wrapper.h\n>>> +++ /dev/null\n>>> @@ -1,61 +0,0 @@\n>>> -/* SPDX-License-Identifier: LGPL-2.1-or-later */\n>>> -/*\n>>> - * Copyright (C) 2019, Google Inc.\n>>> - *\n>>> - * ipa_interface_wrapper.h - Image Processing Algorithm interface wrapper\n>>> - */\n>>> -#ifndef __LIBCAMERA_IPA_INTERFACE_WRAPPER_H__\n>>> -#define __LIBCAMERA_IPA_INTERFACE_WRAPPER_H__\n>>> -\n>>> -#include <memory>\n>>> -\n>>> -#include <libcamera/ipa/ipa_interface.h>\n>>> -\n>>> -#include \"libcamera/internal/control_serializer.h\"\n>>> -\n>>> -namespace libcamera {\n>>> -\n>>> -class IPAInterfaceWrapper : public ipa_context\n>>> -{\n>>> -public:\n>>> -\tIPAInterfaceWrapper(std::unique_ptr<IPAInterface> interface);\n>>> -\n>>> -private:\n>>> -\tstatic void destroy(struct ipa_context *ctx);\n>>> -\tstatic void *get_interface(struct ipa_context *ctx);\n>>> -\tstatic void init(struct ipa_context *ctx,\n>>> -\t\t\t const struct ipa_settings *settings);\n>>> -\tstatic int start(struct ipa_context *ctx);\n>>> -\tstatic void stop(struct ipa_context *ctx);\n>>> -\tstatic void register_callbacks(struct ipa_context *ctx,\n>>> -\t\t\t\t       const struct ipa_callback_ops *callbacks,\n>>> -\t\t\t\t       void *cb_ctx);\n>>> -\tstatic void configure(struct ipa_context *ctx,\n>>> -\t\t\t      const struct ipa_sensor_info *sensor_info,\n>>> -\t\t\t      const struct ipa_stream *streams,\n>>> -\t\t\t      unsigned int num_streams,\n>>> -\t\t\t      const struct ipa_control_info_map *maps,\n>>> -\t\t\t      unsigned int num_maps);\n>>> -\tstatic void map_buffers(struct ipa_context *ctx,\n>>> -\t\t\t\tconst struct ipa_buffer *c_buffers,\n>>> -\t\t\t\tsize_t num_buffers);\n>>> -\tstatic void unmap_buffers(struct ipa_context *ctx,\n>>> -\t\t\t\t  const unsigned int *ids,\n>>> -\t\t\t\t  size_t num_buffers);\n>>> -\tstatic void process_event(struct ipa_context *ctx,\n>>> -\t\t\t\t  const struct ipa_operation_data *data);\n>>> -\n>>> -\tstatic const struct ipa_context_ops operations_;\n>>> -\n>>> -\tvoid queueFrameAction(unsigned int frame, const IPAOperationData &data);\n>>> -\n>>> -\tstd::unique_ptr<IPAInterface> ipa_;\n>>> -\tconst struct ipa_callback_ops *callbacks_;\n>>> -\tvoid *cb_ctx_;\n>>> -\n>>> -\tControlSerializer serializer_;\n>>> -};\n>>> -\n>>> -} /* namespace libcamera */\n>>> -\n>>> -#endif /* __LIBCAMERA_IPA_INTERFACE_WRAPPER_H__ */\n>>> diff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build\n>>> deleted file mode 100644\n>>> index 22626405..00000000\n>>> --- a/src/ipa/libipa/meson.build\n>>> +++ /dev/null\n>>> @@ -1,15 +0,0 @@\n>>> -# SPDX-License-Identifier: CC0-1.0\n>>> -\n>>> -libipa_headers = files([\n>>> -    'ipa_interface_wrapper.h',\n>>> -])\n>>> -\n>>> -libipa_sources = files([\n>>> -    'ipa_interface_wrapper.cpp',\n>>> -])\n>>> -\n>>> -libipa_includes = include_directories('..')\n>>> -\n>>> -libipa = static_library('ipa', libipa_sources,\n>>> -                        include_directories : ipa_includes,\n>>> -                        dependencies : libcamera_dep)\n>>> diff --git a/src/ipa/meson.build b/src/ipa/meson.build\n>>> index 5a5de267..b11e5d23 100644\n>>> --- a/src/ipa/meson.build\n>>> +++ b/src/ipa/meson.build\n>>> @@ -15,8 +15,6 @@ config_h.set('IPA_CONFIG_DIR',\n>>>  config_h.set('IPA_MODULE_DIR',\n>>>               '\"' + join_paths(get_option('prefix'), ipa_install_dir) + '\"')\n>>>  \n>>> -subdir('libipa')\n>>> -\n>>>  ipa_sign = files('ipa-sign.sh')\n>>>  \n>>>  ipas = ['raspberrypi', 'rkisp1', 'vimc']\n>>> diff --git a/src/ipa/raspberrypi/meson.build b/src/ipa/raspberrypi/meson.build\n>>> index 4331f718..4a0e18cf 100644\n>>> --- a/src/ipa/raspberrypi/meson.build\n>>> +++ b/src/ipa/raspberrypi/meson.build\n>>> @@ -10,7 +10,6 @@ rpi_ipa_deps = [\n>>>  \n>>>  rpi_ipa_includes = [\n>>>      ipa_includes,\n>>> -    libipa_includes,\n>>>      include_directories('controller')\n>>>  ]\n>>>  \n>>> @@ -46,7 +45,6 @@ mod = shared_module(ipa_name,\n>>>                      name_prefix : '',\n>>>                      include_directories : rpi_ipa_includes,\n>>>                      dependencies : rpi_ipa_deps,\n>>> -                    link_with : libipa,\n>>>                      install : true,\n>>>                      install_dir : ipa_install_dir)\n>>>  \n>>> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\n>>> index 316da7bd..592436f8 100644\n>>> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n>>> +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n>>> @@ -23,8 +23,6 @@\n>>>  #include <libcamera/request.h>\n>>>  #include <libcamera/span.h>\n>>>  \n>>> -#include <libipa/ipa_interface_wrapper.h>\n>>> -\n>>>  #include \"libcamera/internal/camera_sensor.h\"\n>>>  #include \"libcamera/internal/log.h\"\n>>>  #include \"libcamera/internal/utils.h\"\n>>> diff --git a/src/ipa/rkisp1/meson.build b/src/ipa/rkisp1/meson.build\n>>> index 3061d53c..bfe8d362 100644\n>>> --- a/src/ipa/rkisp1/meson.build\n>>> +++ b/src/ipa/rkisp1/meson.build\n>>> @@ -5,9 +5,8 @@ ipa_name = 'ipa_rkisp1'\n>>>  mod = shared_module(ipa_name,\n>>>                      ['rkisp1.cpp', libcamera_generated_ipa_headers],\n>>>                      name_prefix : '',\n>>> -                    include_directories : [ipa_includes, libipa_includes],\n>>> +                    include_directories : ipa_includes,\n>>>                      dependencies : libcamera_dep,\n>>> -                    link_with : libipa,\n>>>                      install : true,\n>>>                      install_dir : ipa_install_dir)\n>>>  \n>>> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n>>> index 7bb261c6..c88f1271 100644\n>>> --- a/src/ipa/rkisp1/rkisp1.cpp\n>>> +++ b/src/ipa/rkisp1/rkisp1.cpp\n>>> @@ -23,8 +23,6 @@\n>>>  #include <libcamera/ipa/rkisp1_ipa_interface.h>\n>>>  #include <libcamera/request.h>\n>>>  \n>>> -#include <libipa/ipa_interface_wrapper.h>\n>>> -\n>>>  #include \"libcamera/internal/log.h\"\n>>>  \n>>>  namespace libcamera {\n>>> diff --git a/src/ipa/vimc/meson.build b/src/ipa/vimc/meson.build\n>>> index e982ebba..67440fd8 100644\n>>> --- a/src/ipa/vimc/meson.build\n>>> +++ b/src/ipa/vimc/meson.build\n>>> @@ -5,9 +5,8 @@ ipa_name = 'ipa_vimc'\n>>>  mod = shared_module(ipa_name,\n>>>                      ['vimc.cpp', libcamera_generated_ipa_headers],\n>>>                      name_prefix : '',\n>>> -                    include_directories : [ipa_includes, libipa_includes],\n>>> +                    include_directories : ipa_includes,\n>>>                      dependencies : libcamera_dep,\n>>> -                    link_with : libipa,\n>>>                      install : true,\n>>>                      install_dir : ipa_install_dir)\n>>>  \n>>> diff --git a/src/ipa/vimc/vimc.cpp b/src/ipa/vimc/vimc.cpp\n>>> index fbf7325e..6b088466 100644\n>>> --- a/src/ipa/vimc/vimc.cpp\n>>> +++ b/src/ipa/vimc/vimc.cpp\n>>> @@ -18,8 +18,6 @@\n>>>  #include <libcamera/ipa/ipa_interface.h>\n>>>  #include <libcamera/ipa/ipa_module_info.h>\n>>>  \n>>> -#include <libipa/ipa_interface_wrapper.h>\n>>> -\n>>>  #include \"libcamera/internal/file.h\"\n>>>  #include \"libcamera/internal/log.h\"\n>>>  \n>>> diff --git a/test/ipa/ipa_wrappers_test.cpp b/test/ipa/ipa_wrappers_test.cpp\n>>> index 59d991cb..0133d8d2 100644\n>>> --- a/test/ipa/ipa_wrappers_test.cpp\n>>> +++ b/test/ipa/ipa_wrappers_test.cpp\n>>> @@ -13,7 +13,6 @@\n>>>  #include <unistd.h>\n>>>  \n>>>  #include <libcamera/controls.h>\n>>> -#include <libipa/ipa_interface_wrapper.h>\n>>>  \n>>>  #include \"libcamera/internal/camera_sensor.h\"\n>>>  #include \"libcamera/internal/device_enumerator.h\"\n>>> diff --git a/test/ipa/meson.build b/test/ipa/meson.build\n>>> index ba672f3f..b25bfcf4 100644\n>>> --- a/test/ipa/meson.build\n>>> +++ b/test/ipa/meson.build\n>>> @@ -9,8 +9,8 @@ ipa_test = [\n>>>  foreach t : ipa_test\n>>>      exe = executable(t[0], t[1],\n>>>                       dependencies : libcamera_dep,\n>>> -                     link_with : [libipa, test_libraries],\n>>> -                     include_directories : [libipa_includes, test_includes_internal])\n>>> +                     link_with : test_libraries,\n>>> +                     include_directories : test_includes_internal)\n>>>  \n>>>      test(t[0], exe, suite : 'ipa')\n>>>  endforeach\n>>>\n>>\n>> -- \n>> Regards\n>> --\n>> Kieran","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 10AA3BDB89\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  9 Nov 2020 10:55:01 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D475E6306D;\n\tMon,  9 Nov 2020 11:55:00 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 558DF62D19\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  9 Nov 2020 11:54:59 +0100 (CET)","from [192.168.0.20]\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C3770FE0;\n\tMon,  9 Nov 2020 11:54:58 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"SHEZT1DP\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1604919299;\n\tbh=3O2Qirutc0DhmvJ9x8z/y1kdVc8P9PSunyaCT2drt0I=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=SHEZT1DPVBiDEWqh83TPB11Y7Ej6f7svKOj7DTJNpuHuHQTzAep8t9PKQLpp+7Cqj\n\tJqwGJvFf344xjdu5qlwjWiuL4fxfiSHfBBZQUhRbe/DJWYKP/lqX1PWAO3SBOZcp3n\n\ti02WTl0fQ0W5uzrDnLx2u97eSvE9KkrRh/NGQKBU=","To":"paul.elder@ideasonboard.com","References":"<20201106103707.49660-1-paul.elder@ideasonboard.com>\n\t<20201106103707.49660-32-paul.elder@ideasonboard.com>\n\t<807413b1-ce83-3337-88ee-2a518ebd581e@ideasonboard.com>\n\t<20201109022557.GA1791@pyrite.rasen.tech>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\tmQINBFYE/WYBEACs1PwjMD9rgCu1hlIiUA1AXR4rv2v+BCLUq//vrX5S5bjzxKAryRf0uHat\n\tV/zwz6hiDrZuHUACDB7X8OaQcwhLaVlq6byfoBr25+hbZG7G3+5EUl9cQ7dQEdvNj6V6y/SC\n\trRanWfelwQThCHckbobWiQJfK9n7rYNcPMq9B8e9F020LFH7Kj6YmO95ewJGgLm+idg1Kb3C\n\tpotzWkXc1xmPzcQ1fvQMOfMwdS+4SNw4rY9f07Xb2K99rjMwZVDgESKIzhsDB5GY465sCsiQ\n\tcSAZRxqE49RTBq2+EQsbrQpIc8XiffAB8qexh5/QPzCmR4kJgCGeHIXBtgRj+nIkCJPZvZtf\n\tKr2EAbc6tgg6DkAEHJb+1okosV09+0+TXywYvtEop/WUOWQ+zo+Y/OBd+8Ptgt1pDRyOBzL8\n\tRXa8ZqRf0Mwg75D+dKntZeJHzPRJyrlfQokngAAs4PaFt6UfS+ypMAF37T6CeDArQC41V3ko\n\tlPn1yMsVD0p+6i3DPvA/GPIksDC4owjnzVX9kM8Zc5Cx+XoAN0w5Eqo4t6qEVbuettxx55gq\n\t8K8FieAjgjMSxngo/HST8TpFeqI5nVeq0/lqtBRQKumuIqDg+Bkr4L1V/PSB6XgQcOdhtd36\n\tOe9X9dXB8YSNt7VjOcO7BTmFn/Z8r92mSAfHXpb07YJWJosQOQARAQABtDBLaWVyYW4gQmlu\n\tZ2hhbSA8a2llcmFuLmJpbmdoYW1AaWRlYXNvbmJvYXJkLmNvbT6JAlcEEwEKAEECGwMFCwkI\n\tBwIGFQgJCgsCBBYCAwECHgECF4ACGQEWIQSQLdeYP70o/eNy1HqhHkZyEKRh/QUCXWTtygUJ\n\tCyJXZAAKCRChHkZyEKRh/f8dEACTDsbLN2nioNZMwyLuQRUAFcXNolDX48xcUXsWS2QjxaPm\n\tVsJx8Uy8aYkS85mdPBh0C83OovQR/OVbr8AxhGvYqBs3nQvbWuTl/+4od7DfK2VZOoKBAu5S\n\tQK2FYuUcikDqYcFWJ8DQnubxfE8dvzojHEkXw0sA4igINHDDFX3HJGZtLio+WpEFQtCbfTAG\n\tYZslasz1YZRbwEdSsmO3/kqy5eMnczlm8a21A3fKUo3g8oAZEFM+f4DUNzqIltg31OAB/kZS\n\tenKZQ/SWC8PmLg/ZXBrReYakxXtkP6w3FwMlzOlhGxqhIRNiAJfXJBaRhuUWzPOpEDE9q5YJ\n\tBmqQL2WJm1VSNNVxbXJHpaWMH1sA2R00vmvRrPXGwyIO0IPYeUYQa3gsy6k+En/aMQJd27dp\n\taScf9am9PFICPY5T4ppneeJLif2lyLojo0mcHOV+uyrds9XkLpp14GfTkeKPdPMrLLTsHRfH\n\tfA4I4OBpRrEPiGIZB/0im98MkGY/Mu6qxeZmYLCcgD6qz4idOvfgVOrNh+aA8HzIVR+RMW8H\n\tQGBN9f0E3kfwxuhl3omo6V7lDw8XOdmuWZNC9zPq1UfryVHANYbLGz9KJ4Aw6M+OgBC2JpkD\n\thXMdHUkC+d20dwXrwHTlrJi1YNp6rBc+xald3wsUPOZ5z8moTHUX/uPA/qhGsbkCDQRWBP1m\n\tARAAzijkb+Sau4hAncr1JjOY+KyFEdUNxRy+hqTJdJfaYihxyaj0Ee0P0zEi35CbE6lgU0Uz\n\ttih9fiUbSV3wfsWqg1Ut3/5rTKu7kLFp15kF7eqvV4uezXRD3Qu4yjv/rMmEJbbD4cTvGCYI\n\td6MDC417f7vK3hCbCVIZSp3GXxyC1LU+UQr3fFcOyCwmP9vDUR9JV0BSqHHxRDdpUXE26Dk6\n\tmhf0V1YkspE5St814ETXpEus2urZE5yJIUROlWPIL+hm3NEWfAP06vsQUyLvr/GtbOT79vXl\n\tEn1aulcYyu20dRRxhkQ6iILaURcxIAVJJKPi8dsoMnS8pB0QW12AHWuirPF0g6DiuUfPmrA5\n\tPKe56IGlpkjc8cO51lIxHkWTpCMWigRdPDexKX+Sb+W9QWK/0JjIc4t3KBaiG8O4yRX8ml2R\n\t+rxfAVKM6V769P/hWoRGdgUMgYHFpHGSgEt80OKK5HeUPy2cngDUXzwrqiM5Sz6Od0qw5pCk\n\tNlXqI0W/who0iSVM+8+RmyY0OEkxEcci7rRLsGnM15B5PjLJjh1f2ULYkv8s4SnDwMZ/kE04\n\t/UqCMK/KnX8pwXEMCjz0h6qWNpGwJ0/tYIgQJZh6bqkvBrDogAvuhf60Sogw+mH8b+PBlx1L\n\toeTK396wc+4c3BfiC6pNtUS5GpsPMMjYMk7kVvEAEQEAAYkCPAQYAQoAJgIbDBYhBJAt15g/\n\tvSj943LUeqEeRnIQpGH9BQJdizzIBQkLSKZiAAoJEKEeRnIQpGH9eYgQAJpjaWNgqNOnMTmD\n\tMJggbwjIotypzIXfhHNCeTkG7+qCDlSaBPclcPGYrTwCt0YWPU2TgGgJrVhYT20ierN8LUvj\n\t6qOPTd+Uk7NFzL65qkh80ZKNBFddx1AabQpSVQKbdcLb8OFs85kuSvFdgqZwgxA1vl4TFhNz\n\tPZ79NAmXLackAx3sOVFhk4WQaKRshCB7cSl+RIng5S/ThOBlwNlcKG7j7W2MC06BlTbdEkUp\n\tECzuuRBv8wX4OQl+hbWbB/VKIx5HKlLu1eypen/5lNVzSqMMIYkkZcjV2SWQyUGxSwq0O/sx\n\tS0A8/atCHUXOboUsn54qdxrVDaK+6jIAuo8JiRWctP16KjzUM7MO0/+4zllM8EY57rXrj48j\n\tsbEYX0YQnzaj+jO6kJtoZsIaYR7rMMq9aUAjyiaEZpmP1qF/2sYenDx0Fg2BSlLvLvXM0vU8\n\tpQk3kgDu7kb/7PRYrZvBsr21EIQoIjXbZxDz/o7z95frkP71EaICttZ6k9q5oxxA5WC6sTXc\n\tMW8zs8avFNuA9VpXt0YupJd2ijtZy2mpZNG02fFVXhIn4G807G7+9mhuC4XG5rKlBBUXTvPU\n\tAfYnB4JBDLmLzBFavQfvonSfbitgXwCG3vS+9HEwAjU30Bar1PEOmIbiAoMzuKeRm2LVpmq4\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<b80fb497-e0c3-29fc-2f87-10ec86ebfc5f@ideasonboard.com>","Date":"Mon, 9 Nov 2020 10:54:56 +0000","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.10.0","MIME-Version":"1.0","In-Reply-To":"<20201109022557.GA1791@pyrite.rasen.tech>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Reply-To":"kieran.bingham@ideasonboard.com","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":13653,"web_url":"https://patchwork.libcamera.org/comment/13653/","msgid":"<20201110002002.GA477907@oden.dyn.berto.se>","date":"2020-11-10T00:20:02","subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hello,\n\nOn 2020-11-09 10:54:56 +0000, Kieran Bingham wrote:\n> Hi Paul,\n> \n> On 09/11/2020 02:25, paul.elder@ideasonboard.com wrote:\n> > Hi Kieran,\n> > \n> > On Fri, Nov 06, 2020 at 11:12:23AM +0000, Kieran Bingham wrote:\n> >> Hi Paul,\n> >>\n> >> On 06/11/2020 10:37, Paul Elder wrote:\n> >>> As every pipeline and have its own proxy, IPAInterfaceWrapper is no\n> >>> longer necessary. Since it's the only member of libipa, remove libipa\n> >>> completely.\n> >>\n> >> Ah, I think I foresee the (imminent?) addition of items to libipa to be\n> >> able to share some common features across open-source IPA modules.\n> >> (closed source ones won't share of course).\n> > \n> > Ah, I see.\n> > \n> >> Could we have this patch strip out the dead code, but /keep/ the libipa\n> >> itself as a skeleton at least?\n> > \n> > Well yes, but... then we'd just have a libipa directory and meson file\n> > but no files to actually build... is that fine?\n> \n> Hrm, well you could keep an empty .cpp file but perhaps it's more than\n> needed.\n> \n> Otherwise, sure lets just let the files disappear, and we can re-add\n> when needed. Maybe that's cleaner anyway.\n> \n> Niklas, I think you're likely working on IPA topics the soonest, do you\n> have a preference?\n\nNo real preference, it's nice to not have to readd plumbing in a short \ntimespan after it was removed, but at the same time digging this up from \nhistory is easy. So whatever is the quickest route to get this series \nmerged is my preference :-)\n\n> \n> --\n> Kieran\n> \n> \n> > \n> > \n> > Thanks,\n> > \n> > Paul\n> > \n> >>\n> >>> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> >>> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> >>>\n> >>> ---\n> >>> No change in v4\n> >>>\n> >>> No change in v3\n> >>>\n> >>> No change in v2\n> >>> ---\n> >>>  Documentation/Doxyfile.in                |   1 -\n> >>>  Documentation/meson.build                |   2 -\n> >>>  src/ipa/libipa/ipa_interface_wrapper.cpp | 285 -----------------------\n> >>>  src/ipa/libipa/ipa_interface_wrapper.h   |  61 -----\n> >>>  src/ipa/libipa/meson.build               |  15 --\n> >>>  src/ipa/meson.build                      |   2 -\n> >>>  src/ipa/raspberrypi/meson.build          |   2 -\n> >>>  src/ipa/raspberrypi/raspberrypi.cpp      |   2 -\n> >>>  src/ipa/rkisp1/meson.build               |   3 +-\n> >>>  src/ipa/rkisp1/rkisp1.cpp                |   2 -\n> >>>  src/ipa/vimc/meson.build                 |   3 +-\n> >>>  src/ipa/vimc/vimc.cpp                    |   2 -\n> >>>  test/ipa/ipa_wrappers_test.cpp           |   1 -\n> >>>  test/ipa/meson.build                     |   4 +-\n> >>>  14 files changed, 4 insertions(+), 381 deletions(-)\n> >>>  delete mode 100644 src/ipa/libipa/ipa_interface_wrapper.cpp\n> >>>  delete mode 100644 src/ipa/libipa/ipa_interface_wrapper.h\n> >>>  delete mode 100644 src/ipa/libipa/meson.build\n> >>>\n> >>> diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\n> >>> index 20fa1349..9a7a3fb4 100644\n> >>> --- a/Documentation/Doxyfile.in\n> >>> +++ b/Documentation/Doxyfile.in\n> >>> @@ -789,7 +789,6 @@ WARN_LOGFILE           =\n> >>>  # Note: If this tag is empty the current directory is searched.\n> >>>  \n> >>>  INPUT                  = \"@TOP_SRCDIR@/include/libcamera\" \\\n> >>> -\t\t\t \"@TOP_SRCDIR@/src/ipa/libipa\" \\\n> >>>  \t\t\t \"@TOP_SRCDIR@/src/libcamera\" \\\n> >>>  \t\t\t \"@TOP_BUILDDIR@/include/libcamera\" \\\n> >>>  \t\t\t \"@TOP_BUILDDIR@/src/libcamera\"\n> >>> diff --git a/Documentation/meson.build b/Documentation/meson.build\n> >>> index 26a12fcd..59107151 100644\n> >>> --- a/Documentation/meson.build\n> >>> +++ b/Documentation/meson.build\n> >>> @@ -27,8 +27,6 @@ if doxygen.found() and dot.found()\n> >>>                        libcamera_ipa_headers,\n> >>>                        libcamera_public_headers,\n> >>>                        libcamera_sources,\n> >>> -                      libipa_headers,\n> >>> -                      libipa_sources,\n> >>>                    ],\n> >>>                    output : 'api-html',\n> >>>                    command : [doxygen, doxyfile],\n> >>> diff --git a/src/ipa/libipa/ipa_interface_wrapper.cpp b/src/ipa/libipa/ipa_interface_wrapper.cpp\n> >>> deleted file mode 100644\n> >>> index cee532e3..00000000\n> >>> --- a/src/ipa/libipa/ipa_interface_wrapper.cpp\n> >>> +++ /dev/null\n> >>> @@ -1,285 +0,0 @@\n> >>> -/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> >>> -/*\n> >>> - * Copyright (C) 2019, Google Inc.\n> >>> - *\n> >>> - * ipa_interface_wrapper.cpp - Image Processing Algorithm interface wrapper\n> >>> - */\n> >>> -\n> >>> -#include \"ipa_interface_wrapper.h\"\n> >>> -\n> >>> -#include <map>\n> >>> -#include <string.h>\n> >>> -#include <unistd.h>\n> >>> -#include <vector>\n> >>> -\n> >>> -#include <libcamera/ipa/ipa_interface.h>\n> >>> -\n> >>> -#include \"libcamera/internal/byte_stream_buffer.h\"\n> >>> -#include \"libcamera/internal/camera_sensor.h\"\n> >>> -\n> >>> -/**\n> >>> - * \\file ipa_interface_wrapper.h\n> >>> - * \\brief Image Processing Algorithm interface wrapper\n> >>> - */\n> >>> -\n> >>> -namespace libcamera {\n> >>> -\n> >>> -/**\n> >>> - * \\class IPAInterfaceWrapper\n> >>> - * \\brief Wrap an IPAInterface and expose it as an ipa_context\n> >>> - *\n> >>> - * This class implements the ipa_context API based on a provided IPAInterface.\n> >>> - * It helps IPAs that implement the IPAInterface API to provide the external\n> >>> - * ipa_context API.\n> >>> - *\n> >>> - * To use the wrapper, an IPA module simple creates a new instance of its\n> >>> - * IPAInterface implementation, and passes it to the constructor of the\n> >>> - * IPAInterfaceWrapper. As IPAInterfaceWrapper inherits from ipa_context, the\n> >>> - * constructed wrapper can then be directly returned from the IPA module's\n> >>> - * ipaCreate() function.\n> >>> - *\n> >>> - * \\code{.cpp}\n> >>> - * class MyIPA : public IPAInterface\n> >>> - * {\n> >>> - * \t...\n> >>> - * };\n> >>> - *\n> >>> - * struct ipa_context *ipaCreate()\n> >>> - * {\n> >>> - * \treturn new IPAInterfaceWrapper(std::make_unique<MyIPA>());\n> >>> - * }\n> >>> - * \\endcode\n> >>> - *\n> >>> - * The wrapper takes ownership of the IPAInterface and will automatically\n> >>> - * delete it when the wrapper is destroyed.\n> >>> - */\n> >>> -\n> >>> -/**\n> >>> - * \\brief Construct an IPAInterfaceWrapper wrapping \\a interface\n> >>> - * \\param[in] interface The interface to wrap\n> >>> - */\n> >>> -IPAInterfaceWrapper::IPAInterfaceWrapper(std::unique_ptr<IPAInterface> interface)\n> >>> -\t: ipa_(std::move(interface)), callbacks_(nullptr), cb_ctx_(nullptr)\n> >>> -{\n> >>> -\tops = &operations_;\n> >>> -\n> >>> -\tipa_->queueFrameAction.connect(this, &IPAInterfaceWrapper::queueFrameAction);\n> >>> -}\n> >>> -\n> >>> -void IPAInterfaceWrapper::destroy(struct ipa_context *_ctx)\n> >>> -{\n> >>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> >>> -\n> >>> -\tdelete ctx;\n> >>> -}\n> >>> -\n> >>> -void *IPAInterfaceWrapper::get_interface(struct ipa_context *_ctx)\n> >>> -{\n> >>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> >>> -\n> >>> -\treturn ctx->ipa_.get();\n> >>> -}\n> >>> -\n> >>> -void IPAInterfaceWrapper::init(struct ipa_context *_ctx,\n> >>> -\t\t\t       const struct ipa_settings *settings)\n> >>> -{\n> >>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> >>> -\n> >>> -\tIPASettings ipaSettings{\n> >>> -\t\t.configurationFile = settings->configuration_file\n> >>> -\t};\n> >>> -\tctx->ipa_->init(ipaSettings);\n> >>> -}\n> >>> -\n> >>> -int IPAInterfaceWrapper::start(struct ipa_context *_ctx)\n> >>> -{\n> >>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> >>> -\n> >>> -\treturn ctx->ipa_->start();\n> >>> -}\n> >>> -\n> >>> -void IPAInterfaceWrapper::stop(struct ipa_context *_ctx)\n> >>> -{\n> >>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> >>> -\n> >>> -\tctx->ipa_->stop();\n> >>> -}\n> >>> -\n> >>> -void IPAInterfaceWrapper::register_callbacks(struct ipa_context *_ctx,\n> >>> -\t\t\t\t\t     const struct ipa_callback_ops *callbacks,\n> >>> -\t\t\t\t\t     void *cb_ctx)\n> >>> -{\n> >>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> >>> -\n> >>> -\tctx->callbacks_ = callbacks;\n> >>> -\tctx->cb_ctx_ = cb_ctx;\n> >>> -}\n> >>> -\n> >>> -void IPAInterfaceWrapper::configure(struct ipa_context *_ctx,\n> >>> -\t\t\t\t    const struct ipa_sensor_info *sensor_info,\n> >>> -\t\t\t\t    const struct ipa_stream *streams,\n> >>> -\t\t\t\t    unsigned int num_streams,\n> >>> -\t\t\t\t    const struct ipa_control_info_map *maps,\n> >>> -\t\t\t\t    unsigned int num_maps)\n> >>> -{\n> >>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> >>> -\n> >>> -\tctx->serializer_.reset();\n> >>> -\n> >>> -\t/* Translate the IPA sensor info. */\n> >>> -\tCameraSensorInfo sensorInfo{};\n> >>> -\tsensorInfo.model = sensor_info->model;\n> >>> -\tsensorInfo.bitsPerPixel = sensor_info->bits_per_pixel;\n> >>> -\tsensorInfo.activeAreaSize = { sensor_info->active_area.width,\n> >>> -\t\t\t\t      sensor_info->active_area.height };\n> >>> -\tsensorInfo.analogCrop = { sensor_info->analog_crop.left,\n> >>> -\t\t\t\t  sensor_info->analog_crop.top,\n> >>> -\t\t\t\t  sensor_info->analog_crop.width,\n> >>> -\t\t\t\t  sensor_info->analog_crop.height };\n> >>> -\tsensorInfo.outputSize = { sensor_info->output_size.width,\n> >>> -\t\t\t\t  sensor_info->output_size.height };\n> >>> -\tsensorInfo.pixelRate = sensor_info->pixel_rate;\n> >>> -\tsensorInfo.lineLength = sensor_info->line_length;\n> >>> -\n> >>> -\t/* Translate the IPA stream configurations map. */\n> >>> -\tstd::map<unsigned int, IPAStream> ipaStreams;\n> >>> -\n> >>> -\tfor (unsigned int i = 0; i < num_streams; ++i) {\n> >>> -\t\tconst struct ipa_stream &stream = streams[i];\n> >>> -\n> >>> -\t\tipaStreams[stream.id] = {\n> >>> -\t\t\tstream.pixel_format,\n> >>> -\t\t\tSize(stream.width, stream.height),\n> >>> -\t\t};\n> >>> -\t}\n> >>> -\n> >>> -\t/* Translate the IPA entity controls map. */\n> >>> -\tstd::map<unsigned int, const ControlInfoMap &> entityControls;\n> >>> -\tstd::map<unsigned int, ControlInfoMap> infoMaps;\n> >>> -\n> >>> -\tfor (unsigned int i = 0; i < num_maps; ++i) {\n> >>> -\t\tconst struct ipa_control_info_map &ipa_map = maps[i];\n> >>> -\t\tByteStreamBuffer byteStream(ipa_map.data, ipa_map.size);\n> >>> -\t\tunsigned int id = ipa_map.id;\n> >>> -\n> >>> -\t\tinfoMaps[id] = ctx->serializer_.deserialize<ControlInfoMap>(byteStream);\n> >>> -\t\tentityControls.emplace(id, infoMaps[id]);\n> >>> -\t}\n> >>> -\n> >>> -\t/* \\todo Translate the ipaConfig and result. */\n> >>> -\tIPAOperationData ipaConfig;\n> >>> -\tctx->ipa_->configure(sensorInfo, ipaStreams, entityControls, ipaConfig,\n> >>> -\t\t\t     nullptr);\n> >>> -}\n> >>> -\n> >>> -void IPAInterfaceWrapper::map_buffers(struct ipa_context *_ctx,\n> >>> -\t\t\t\t      const struct ipa_buffer *_buffers,\n> >>> -\t\t\t\t      size_t num_buffers)\n> >>> -{\n> >>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> >>> -\tstd::vector<IPABuffer> buffers(num_buffers);\n> >>> -\n> >>> -\tfor (unsigned int i = 0; i < num_buffers; ++i) {\n> >>> -\t\tconst struct ipa_buffer &_buffer = _buffers[i];\n> >>> -\t\tIPABuffer &buffer = buffers[i];\n> >>> -\t\tstd::vector<FrameBuffer::Plane> &planes = buffer.planes;\n> >>> -\n> >>> -\t\tbuffer.id = _buffer.id;\n> >>> -\n> >>> -\t\tplanes.resize(_buffer.num_planes);\n> >>> -\t\tfor (unsigned int j = 0; j < _buffer.num_planes; ++j) {\n> >>> -\t\t\tplanes[j].fd = FileDescriptor(_buffer.planes[j].dmabuf);\n> >>> -\t\t\tplanes[j].length = _buffer.planes[j].length;\n> >>> -\t\t}\n> >>> -\t}\n> >>> -\n> >>> -\tctx->ipa_->mapBuffers(buffers);\n> >>> -}\n> >>> -\n> >>> -void IPAInterfaceWrapper::unmap_buffers(struct ipa_context *_ctx,\n> >>> -\t\t\t\t\tconst unsigned int *_ids,\n> >>> -\t\t\t\t\tsize_t num_buffers)\n> >>> -{\n> >>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> >>> -\tstd::vector<unsigned int> ids(_ids, _ids + num_buffers);\n> >>> -\tctx->ipa_->unmapBuffers(ids);\n> >>> -}\n> >>> -\n> >>> -void IPAInterfaceWrapper::process_event(struct ipa_context *_ctx,\n> >>> -\t\t\t\t\tconst struct ipa_operation_data *data)\n> >>> -{\n> >>> -\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n> >>> -\tIPAOperationData opData;\n> >>> -\n> >>> -\topData.operation = data->operation;\n> >>> -\n> >>> -\topData.data.resize(data->num_data);\n> >>> -\tmemcpy(opData.data.data(), data->data,\n> >>> -\t       data->num_data * sizeof(*data->data));\n> >>> -\n> >>> -\topData.controls.resize(data->num_lists);\n> >>> -\tfor (unsigned int i = 0; i < data->num_lists; ++i) {\n> >>> -\t\tconst struct ipa_control_list *c_list = &data->lists[i];\n> >>> -\t\tByteStreamBuffer byteStream(c_list->data, c_list->size);\n> >>> -\t\topData.controls[i] = ctx->serializer_.deserialize<ControlList>(byteStream);\n> >>> -\t}\n> >>> -\n> >>> -\tctx->ipa_->processEvent(opData);\n> >>> -}\n> >>> -\n> >>> -void IPAInterfaceWrapper::queueFrameAction(unsigned int frame,\n> >>> -\t\t\t\t\t   const IPAOperationData &data)\n> >>> -{\n> >>> -\tif (!callbacks_)\n> >>> -\t\treturn;\n> >>> -\n> >>> -\tstruct ipa_operation_data c_data;\n> >>> -\tc_data.operation = data.operation;\n> >>> -\tc_data.data = data.data.data();\n> >>> -\tc_data.num_data = data.data.size();\n> >>> -\n> >>> -\tstruct ipa_control_list control_lists[data.controls.size()];\n> >>> -\tc_data.lists = control_lists;\n> >>> -\tc_data.num_lists = data.controls.size();\n> >>> -\n> >>> -\tstd::size_t listsSize = 0;\n> >>> -\tfor (const auto &list : data.controls)\n> >>> -\t\tlistsSize += serializer_.binarySize(list);\n> >>> -\n> >>> -\tstd::vector<uint8_t> binaryData(listsSize);\n> >>> -\tByteStreamBuffer byteStreamBuffer(binaryData.data(), listsSize);\n> >>> -\n> >>> -\tunsigned int i = 0;\n> >>> -\tfor (const auto &list : data.controls) {\n> >>> -\t\tstruct ipa_control_list &c_list = control_lists[i];\n> >>> -\t\tc_list.size = serializer_.binarySize(list);\n> >>> -\n> >>> -\t\tByteStreamBuffer b = byteStreamBuffer.carveOut(c_list.size);\n> >>> -\t\tserializer_.serialize(list, b);\n> >>> -\n> >>> -\t\tc_list.data = b.base();\n> >>> -\t}\n> >>> -\n> >>> -\tcallbacks_->queue_frame_action(cb_ctx_, frame, c_data);\n> >>> -}\n> >>> -\n> >>> -#ifndef __DOXYGEN__\n> >>> -/*\n> >>> - * This construct confuses Doygen and makes it believe that all members of the\n> >>> - * operations is a member of IPAInterfaceWrapper. It must thus be hidden.\n> >>> - */\n> >>> -const struct ipa_context_ops IPAInterfaceWrapper::operations_ = {\n> >>> -\t.destroy = &IPAInterfaceWrapper::destroy,\n> >>> -\t.get_interface = &IPAInterfaceWrapper::get_interface,\n> >>> -\t.init = &IPAInterfaceWrapper::init,\n> >>> -\t.start = &IPAInterfaceWrapper::start,\n> >>> -\t.stop = &IPAInterfaceWrapper::stop,\n> >>> -\t.register_callbacks = &IPAInterfaceWrapper::register_callbacks,\n> >>> -\t.configure = &IPAInterfaceWrapper::configure,\n> >>> -\t.map_buffers = &IPAInterfaceWrapper::map_buffers,\n> >>> -\t.unmap_buffers = &IPAInterfaceWrapper::unmap_buffers,\n> >>> -\t.process_event = &IPAInterfaceWrapper::process_event,\n> >>> -};\n> >>> -#endif\n> >>> -\n> >>> -} /* namespace libcamera */\n> >>> diff --git a/src/ipa/libipa/ipa_interface_wrapper.h b/src/ipa/libipa/ipa_interface_wrapper.h\n> >>> deleted file mode 100644\n> >>> index a1c70159..00000000\n> >>> --- a/src/ipa/libipa/ipa_interface_wrapper.h\n> >>> +++ /dev/null\n> >>> @@ -1,61 +0,0 @@\n> >>> -/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> >>> -/*\n> >>> - * Copyright (C) 2019, Google Inc.\n> >>> - *\n> >>> - * ipa_interface_wrapper.h - Image Processing Algorithm interface wrapper\n> >>> - */\n> >>> -#ifndef __LIBCAMERA_IPA_INTERFACE_WRAPPER_H__\n> >>> -#define __LIBCAMERA_IPA_INTERFACE_WRAPPER_H__\n> >>> -\n> >>> -#include <memory>\n> >>> -\n> >>> -#include <libcamera/ipa/ipa_interface.h>\n> >>> -\n> >>> -#include \"libcamera/internal/control_serializer.h\"\n> >>> -\n> >>> -namespace libcamera {\n> >>> -\n> >>> -class IPAInterfaceWrapper : public ipa_context\n> >>> -{\n> >>> -public:\n> >>> -\tIPAInterfaceWrapper(std::unique_ptr<IPAInterface> interface);\n> >>> -\n> >>> -private:\n> >>> -\tstatic void destroy(struct ipa_context *ctx);\n> >>> -\tstatic void *get_interface(struct ipa_context *ctx);\n> >>> -\tstatic void init(struct ipa_context *ctx,\n> >>> -\t\t\t const struct ipa_settings *settings);\n> >>> -\tstatic int start(struct ipa_context *ctx);\n> >>> -\tstatic void stop(struct ipa_context *ctx);\n> >>> -\tstatic void register_callbacks(struct ipa_context *ctx,\n> >>> -\t\t\t\t       const struct ipa_callback_ops *callbacks,\n> >>> -\t\t\t\t       void *cb_ctx);\n> >>> -\tstatic void configure(struct ipa_context *ctx,\n> >>> -\t\t\t      const struct ipa_sensor_info *sensor_info,\n> >>> -\t\t\t      const struct ipa_stream *streams,\n> >>> -\t\t\t      unsigned int num_streams,\n> >>> -\t\t\t      const struct ipa_control_info_map *maps,\n> >>> -\t\t\t      unsigned int num_maps);\n> >>> -\tstatic void map_buffers(struct ipa_context *ctx,\n> >>> -\t\t\t\tconst struct ipa_buffer *c_buffers,\n> >>> -\t\t\t\tsize_t num_buffers);\n> >>> -\tstatic void unmap_buffers(struct ipa_context *ctx,\n> >>> -\t\t\t\t  const unsigned int *ids,\n> >>> -\t\t\t\t  size_t num_buffers);\n> >>> -\tstatic void process_event(struct ipa_context *ctx,\n> >>> -\t\t\t\t  const struct ipa_operation_data *data);\n> >>> -\n> >>> -\tstatic const struct ipa_context_ops operations_;\n> >>> -\n> >>> -\tvoid queueFrameAction(unsigned int frame, const IPAOperationData &data);\n> >>> -\n> >>> -\tstd::unique_ptr<IPAInterface> ipa_;\n> >>> -\tconst struct ipa_callback_ops *callbacks_;\n> >>> -\tvoid *cb_ctx_;\n> >>> -\n> >>> -\tControlSerializer serializer_;\n> >>> -};\n> >>> -\n> >>> -} /* namespace libcamera */\n> >>> -\n> >>> -#endif /* __LIBCAMERA_IPA_INTERFACE_WRAPPER_H__ */\n> >>> diff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build\n> >>> deleted file mode 100644\n> >>> index 22626405..00000000\n> >>> --- a/src/ipa/libipa/meson.build\n> >>> +++ /dev/null\n> >>> @@ -1,15 +0,0 @@\n> >>> -# SPDX-License-Identifier: CC0-1.0\n> >>> -\n> >>> -libipa_headers = files([\n> >>> -    'ipa_interface_wrapper.h',\n> >>> -])\n> >>> -\n> >>> -libipa_sources = files([\n> >>> -    'ipa_interface_wrapper.cpp',\n> >>> -])\n> >>> -\n> >>> -libipa_includes = include_directories('..')\n> >>> -\n> >>> -libipa = static_library('ipa', libipa_sources,\n> >>> -                        include_directories : ipa_includes,\n> >>> -                        dependencies : libcamera_dep)\n> >>> diff --git a/src/ipa/meson.build b/src/ipa/meson.build\n> >>> index 5a5de267..b11e5d23 100644\n> >>> --- a/src/ipa/meson.build\n> >>> +++ b/src/ipa/meson.build\n> >>> @@ -15,8 +15,6 @@ config_h.set('IPA_CONFIG_DIR',\n> >>>  config_h.set('IPA_MODULE_DIR',\n> >>>               '\"' + join_paths(get_option('prefix'), ipa_install_dir) + '\"')\n> >>>  \n> >>> -subdir('libipa')\n> >>> -\n> >>>  ipa_sign = files('ipa-sign.sh')\n> >>>  \n> >>>  ipas = ['raspberrypi', 'rkisp1', 'vimc']\n> >>> diff --git a/src/ipa/raspberrypi/meson.build b/src/ipa/raspberrypi/meson.build\n> >>> index 4331f718..4a0e18cf 100644\n> >>> --- a/src/ipa/raspberrypi/meson.build\n> >>> +++ b/src/ipa/raspberrypi/meson.build\n> >>> @@ -10,7 +10,6 @@ rpi_ipa_deps = [\n> >>>  \n> >>>  rpi_ipa_includes = [\n> >>>      ipa_includes,\n> >>> -    libipa_includes,\n> >>>      include_directories('controller')\n> >>>  ]\n> >>>  \n> >>> @@ -46,7 +45,6 @@ mod = shared_module(ipa_name,\n> >>>                      name_prefix : '',\n> >>>                      include_directories : rpi_ipa_includes,\n> >>>                      dependencies : rpi_ipa_deps,\n> >>> -                    link_with : libipa,\n> >>>                      install : true,\n> >>>                      install_dir : ipa_install_dir)\n> >>>  \n> >>> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\n> >>> index 316da7bd..592436f8 100644\n> >>> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> >>> +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> >>> @@ -23,8 +23,6 @@\n> >>>  #include <libcamera/request.h>\n> >>>  #include <libcamera/span.h>\n> >>>  \n> >>> -#include <libipa/ipa_interface_wrapper.h>\n> >>> -\n> >>>  #include \"libcamera/internal/camera_sensor.h\"\n> >>>  #include \"libcamera/internal/log.h\"\n> >>>  #include \"libcamera/internal/utils.h\"\n> >>> diff --git a/src/ipa/rkisp1/meson.build b/src/ipa/rkisp1/meson.build\n> >>> index 3061d53c..bfe8d362 100644\n> >>> --- a/src/ipa/rkisp1/meson.build\n> >>> +++ b/src/ipa/rkisp1/meson.build\n> >>> @@ -5,9 +5,8 @@ ipa_name = 'ipa_rkisp1'\n> >>>  mod = shared_module(ipa_name,\n> >>>                      ['rkisp1.cpp', libcamera_generated_ipa_headers],\n> >>>                      name_prefix : '',\n> >>> -                    include_directories : [ipa_includes, libipa_includes],\n> >>> +                    include_directories : ipa_includes,\n> >>>                      dependencies : libcamera_dep,\n> >>> -                    link_with : libipa,\n> >>>                      install : true,\n> >>>                      install_dir : ipa_install_dir)\n> >>>  \n> >>> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n> >>> index 7bb261c6..c88f1271 100644\n> >>> --- a/src/ipa/rkisp1/rkisp1.cpp\n> >>> +++ b/src/ipa/rkisp1/rkisp1.cpp\n> >>> @@ -23,8 +23,6 @@\n> >>>  #include <libcamera/ipa/rkisp1_ipa_interface.h>\n> >>>  #include <libcamera/request.h>\n> >>>  \n> >>> -#include <libipa/ipa_interface_wrapper.h>\n> >>> -\n> >>>  #include \"libcamera/internal/log.h\"\n> >>>  \n> >>>  namespace libcamera {\n> >>> diff --git a/src/ipa/vimc/meson.build b/src/ipa/vimc/meson.build\n> >>> index e982ebba..67440fd8 100644\n> >>> --- a/src/ipa/vimc/meson.build\n> >>> +++ b/src/ipa/vimc/meson.build\n> >>> @@ -5,9 +5,8 @@ ipa_name = 'ipa_vimc'\n> >>>  mod = shared_module(ipa_name,\n> >>>                      ['vimc.cpp', libcamera_generated_ipa_headers],\n> >>>                      name_prefix : '',\n> >>> -                    include_directories : [ipa_includes, libipa_includes],\n> >>> +                    include_directories : ipa_includes,\n> >>>                      dependencies : libcamera_dep,\n> >>> -                    link_with : libipa,\n> >>>                      install : true,\n> >>>                      install_dir : ipa_install_dir)\n> >>>  \n> >>> diff --git a/src/ipa/vimc/vimc.cpp b/src/ipa/vimc/vimc.cpp\n> >>> index fbf7325e..6b088466 100644\n> >>> --- a/src/ipa/vimc/vimc.cpp\n> >>> +++ b/src/ipa/vimc/vimc.cpp\n> >>> @@ -18,8 +18,6 @@\n> >>>  #include <libcamera/ipa/ipa_interface.h>\n> >>>  #include <libcamera/ipa/ipa_module_info.h>\n> >>>  \n> >>> -#include <libipa/ipa_interface_wrapper.h>\n> >>> -\n> >>>  #include \"libcamera/internal/file.h\"\n> >>>  #include \"libcamera/internal/log.h\"\n> >>>  \n> >>> diff --git a/test/ipa/ipa_wrappers_test.cpp b/test/ipa/ipa_wrappers_test.cpp\n> >>> index 59d991cb..0133d8d2 100644\n> >>> --- a/test/ipa/ipa_wrappers_test.cpp\n> >>> +++ b/test/ipa/ipa_wrappers_test.cpp\n> >>> @@ -13,7 +13,6 @@\n> >>>  #include <unistd.h>\n> >>>  \n> >>>  #include <libcamera/controls.h>\n> >>> -#include <libipa/ipa_interface_wrapper.h>\n> >>>  \n> >>>  #include \"libcamera/internal/camera_sensor.h\"\n> >>>  #include \"libcamera/internal/device_enumerator.h\"\n> >>> diff --git a/test/ipa/meson.build b/test/ipa/meson.build\n> >>> index ba672f3f..b25bfcf4 100644\n> >>> --- a/test/ipa/meson.build\n> >>> +++ b/test/ipa/meson.build\n> >>> @@ -9,8 +9,8 @@ ipa_test = [\n> >>>  foreach t : ipa_test\n> >>>      exe = executable(t[0], t[1],\n> >>>                       dependencies : libcamera_dep,\n> >>> -                     link_with : [libipa, test_libraries],\n> >>> -                     include_directories : [libipa_includes, test_includes_internal])\n> >>> +                     link_with : test_libraries,\n> >>> +                     include_directories : test_includes_internal)\n> >>>  \n> >>>      test(t[0], exe, suite : 'ipa')\n> >>>  endforeach\n> >>>\n> >>\n> >> -- \n> >> Regards\n> >> --\n> >> Kieran\n> \n> -- \n> Regards\n> --\n> Kieran","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 5BA0FBE082\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 10 Nov 2020 00:20:07 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DDCB8630A5;\n\tTue, 10 Nov 2020 01:20:06 +0100 (CET)","from mail-lf1-x134.google.com (mail-lf1-x134.google.com\n\t[IPv6:2a00:1450:4864:20::134])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 595DC6308B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 10 Nov 2020 01:20:05 +0100 (CET)","by mail-lf1-x134.google.com with SMTP id u18so14992486lfd.9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 09 Nov 2020 16:20:05 -0800 (PST)","from localhost (h-209-203.A463.priv.bahnhof.se. [155.4.209.203])\n\tby smtp.gmail.com with ESMTPSA id\n\tq4sm2357874ljp.103.2020.11.09.16.20.03\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tMon, 09 Nov 2020 16:20:03 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=ragnatech-se.20150623.gappssmtp.com\n\theader.i=@ragnatech-se.20150623.gappssmtp.com\n\theader.b=\"Vto0e/lP\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to;\n\tbh=DsjDA9gKYhANFSzHVulGo4p7z8dbdm57GatvWiy2afU=;\n\tb=Vto0e/lPqao88NpmwHVdTuyDUqg9Z/wyt1lgpN2ASS19PK6vaRkH9CWGz5lmy81mWI\n\tevlzeVGyVQ6lX2pgKrvcpY3WqW2I2hVBcPrOW9zA5Pl/5mlLs7R/aAYRpoGvOEFAdZFr\n\tzwuhHERl5iexbqEZS2M6K4/NXXfMmKCAb7SnLgvxQy4nKFIKZgOHP7nLOV6EOnPz67fq\n\ttspxz4wlWL3wtCb435ocic4JKp/hyN+mv0TNX4sjDxOiBAbkITxkUKZs4FXYSDQ7k9Ug\n\tgCHf5EyjHl80HGbKB4f8+AR7u7nxHRwxPy5Sdt5CMrnOW1FeVUVghcOWyBtNha9SmPD3\n\tIRTg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to;\n\tbh=DsjDA9gKYhANFSzHVulGo4p7z8dbdm57GatvWiy2afU=;\n\tb=cFiS2Qeqj6jh+TNdajpExgYCK215UYp5ClIvVtyZ17GhtlsPOYBxfHr+oLhi38YVmK\n\tZ5rcEYXC1UBZKtlWtf7EATCDmaUXpUJK87HpyYDn5vR0i5vDQscr7JN05YcgKw2oLb+E\n\tAPM14YVsgaBHaCu2xCwOH+qE/gp1TFbn5KFKDKpwhg7qg4p8jtWQdTD0YCag6Ay8YEDX\n\th+MLKQRI5IcdZvGiG57ndNCyVh6J2YMSL9lEy69+w4fgBdQojoL1sVEf35AalXa8rDuL\n\tZkRq1cipIFMNReC3RfVfuT36OZ9jEk//2xJ07T2UAHMuQwMDaTuN7Xqm7nPdnWQxDvQc\n\tLfTQ==","X-Gm-Message-State":"AOAM533N9xdpblJvL6ii25glC+6zi9rkGtpopaXsiISGTweR5RUNXXm1\n\tE5iFvxwFmEnvI5oQkQ5A2zQ66ntg2c/ZyQ==","X-Google-Smtp-Source":"ABdhPJzx2F80QhdUZitU+/ebXIeQUnu7XVQbYBYhvlvhxOd+76mHaz9ATxyo3Ur6CAr4x2FCNqM9fw==","X-Received":"by 2002:a19:4b0a:: with SMTP id\n\ty10mr7201540lfa.570.1604967604405; \n\tMon, 09 Nov 2020 16:20:04 -0800 (PST)","Date":"Tue, 10 Nov 2020 01:20:02 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20201110002002.GA477907@oden.dyn.berto.se>","References":"<20201106103707.49660-1-paul.elder@ideasonboard.com>\n\t<20201106103707.49660-32-paul.elder@ideasonboard.com>\n\t<807413b1-ce83-3337-88ee-2a518ebd581e@ideasonboard.com>\n\t<20201109022557.GA1791@pyrite.rasen.tech>\n\t<b80fb497-e0c3-29fc-2f87-10ec86ebfc5f@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<b80fb497-e0c3-29fc-2f87-10ec86ebfc5f@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":13672,"web_url":"https://patchwork.libcamera.org/comment/13672/","msgid":"<20201112061820.GB1811@pyrite.rasen.tech>","date":"2020-11-12T06:18:20","subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"On Tue, Nov 10, 2020 at 01:20:02AM +0100, Niklas Söderlund wrote:\n> Hello,\n> \n> On 2020-11-09 10:54:56 +0000, Kieran Bingham wrote:\n> > Hi Paul,\n> > \n> > On 09/11/2020 02:25, paul.elder@ideasonboard.com wrote:\n> > > Hi Kieran,\n> > > \n> > > On Fri, Nov 06, 2020 at 11:12:23AM +0000, Kieran Bingham wrote:\n> > >> Hi Paul,\n> > >>\n> > >> On 06/11/2020 10:37, Paul Elder wrote:\n> > >>> As every pipeline and have its own proxy, IPAInterfaceWrapper is no\n> > >>> longer necessary. Since it's the only member of libipa, remove libipa\n> > >>> completely.\n> > >>\n> > >> Ah, I think I foresee the (imminent?) addition of items to libipa to be\n> > >> able to share some common features across open-source IPA modules.\n> > >> (closed source ones won't share of course).\n> > > \n> > > Ah, I see.\n> > > \n> > >> Could we have this patch strip out the dead code, but /keep/ the libipa\n> > >> itself as a skeleton at least?\n> > > \n> > > Well yes, but... then we'd just have a libipa directory and meson file\n> > > but no files to actually build... is that fine?\n> > \n> > Hrm, well you could keep an empty .cpp file but perhaps it's more than\n> > needed.\n> > \n> > Otherwise, sure lets just let the files disappear, and we can re-add\n> > when needed. Maybe that's cleaner anyway.\n> > \n> > Niklas, I think you're likely working on IPA topics the soonest, do you\n> > have a preference?\n> \n> No real preference, it's nice to not have to readd plumbing in a short \n> timespan after it was removed, but at the same time digging this up from \n> history is easy. So whatever is the quickest route to get this series \n> merged is my preference :-)\n\nAh yeah, that's true. Okay, I'll keep it then, since it's anticipated to\nbe needed in the near future.\n\nI'll just remove everything regarding the IPAInterfaceWrapper, and I'll\nleave libipa's meson stuff intact, so it'll just be empty libipa_headers\nand libipa_sources. When we add stuff back to libipa then we can just\npopulate those.\n\nIs that sufficient?\n\n\nThanks,\n\nPaul\n\n<snip>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 3DA81BE082\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 12 Nov 2020 06:18:32 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id AF9BF6313A;\n\tThu, 12 Nov 2020 07:18:31 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3E8F763139\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 12 Nov 2020 07:18:30 +0100 (CET)","from pyrite.rasen.tech (unknown\n\t[IPv6:2400:4051:61:600:2c71:1b79:d06d:5032])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 8B89D31A;\n\tThu, 12 Nov 2020 07:18:27 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"tOZ1zvGr\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1605161909;\n\tbh=pouVjZnluob2AA/nI0sMGVLFkuibaobf8lTT90IXP2o=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=tOZ1zvGrDCod5/So7OQ+rPkK07obMu5El2hspOHRvSz3QMwtu+G51ovG8gdLseR+v\n\taOKcTe4jW1HbPchUkjT1QT2Ws8UtDkz2zVJ9aTZ5fnkLRjC0ZTaIuVYDs+2hgwIDtq\n\tQvhKVrHoGlXNHa/X+kmjWZHWiKH4UMjGVa7rZ55Q=","Date":"Thu, 12 Nov 2020 15:18:20 +0900","From":"paul.elder@ideasonboard.com","To":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","Message-ID":"<20201112061820.GB1811@pyrite.rasen.tech>","References":"<20201106103707.49660-1-paul.elder@ideasonboard.com>\n\t<20201106103707.49660-32-paul.elder@ideasonboard.com>\n\t<807413b1-ce83-3337-88ee-2a518ebd581e@ideasonboard.com>\n\t<20201109022557.GA1791@pyrite.rasen.tech>\n\t<b80fb497-e0c3-29fc-2f87-10ec86ebfc5f@ideasonboard.com>\n\t<20201110002002.GA477907@oden.dyn.berto.se>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20201110002002.GA477907@oden.dyn.berto.se>","Subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":13678,"web_url":"https://patchwork.libcamera.org/comment/13678/","msgid":"<20201112104458.GA1478673@oden.dyn.berto.se>","date":"2020-11-12T10:44:58","subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"On 2020-11-12 15:18:20 +0900, paul.elder@ideasonboard.com wrote:\n> On Tue, Nov 10, 2020 at 01:20:02AM +0100, Niklas Söderlund wrote:\n> > Hello,\n> > \n> > On 2020-11-09 10:54:56 +0000, Kieran Bingham wrote:\n> > > Hi Paul,\n> > > \n> > > On 09/11/2020 02:25, paul.elder@ideasonboard.com wrote:\n> > > > Hi Kieran,\n> > > > \n> > > > On Fri, Nov 06, 2020 at 11:12:23AM +0000, Kieran Bingham wrote:\n> > > >> Hi Paul,\n> > > >>\n> > > >> On 06/11/2020 10:37, Paul Elder wrote:\n> > > >>> As every pipeline and have its own proxy, IPAInterfaceWrapper is no\n> > > >>> longer necessary. Since it's the only member of libipa, remove libipa\n> > > >>> completely.\n> > > >>\n> > > >> Ah, I think I foresee the (imminent?) addition of items to libipa to be\n> > > >> able to share some common features across open-source IPA modules.\n> > > >> (closed source ones won't share of course).\n> > > > \n> > > > Ah, I see.\n> > > > \n> > > >> Could we have this patch strip out the dead code, but /keep/ the libipa\n> > > >> itself as a skeleton at least?\n> > > > \n> > > > Well yes, but... then we'd just have a libipa directory and meson file\n> > > > but no files to actually build... is that fine?\n> > > \n> > > Hrm, well you could keep an empty .cpp file but perhaps it's more than\n> > > needed.\n> > > \n> > > Otherwise, sure lets just let the files disappear, and we can re-add\n> > > when needed. Maybe that's cleaner anyway.\n> > > \n> > > Niklas, I think you're likely working on IPA topics the soonest, do you\n> > > have a preference?\n> > \n> > No real preference, it's nice to not have to readd plumbing in a short \n> > timespan after it was removed, but at the same time digging this up from \n> > history is easy. So whatever is the quickest route to get this series \n> > merged is my preference :-)\n> \n> Ah yeah, that's true. Okay, I'll keep it then, since it's anticipated to\n> be needed in the near future.\n> \n> I'll just remove everything regarding the IPAInterfaceWrapper, and I'll\n> leave libipa's meson stuff intact, so it'll just be empty libipa_headers\n> and libipa_sources. When we add stuff back to libipa then we can just\n> populate those.\n> \n> Is that sufficient?\n\nWorks for me.\n\n> \n> \n> Thanks,\n> \n> Paul\n> \n> <snip>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 191A7BDB89\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 12 Nov 2020 10:45:02 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9C84D63162;\n\tThu, 12 Nov 2020 11:45:01 +0100 (CET)","from mail-lj1-x235.google.com (mail-lj1-x235.google.com\n\t[IPv6:2a00:1450:4864:20::235])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4DBE563137\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 12 Nov 2020 11:45:00 +0100 (CET)","by mail-lj1-x235.google.com with SMTP id s9so5507676ljo.11\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 12 Nov 2020 02:45:00 -0800 (PST)","from localhost (h-209-203.A463.priv.bahnhof.se. [155.4.209.203])\n\tby smtp.gmail.com with ESMTPSA id\n\tx24sm509971ljj.112.2020.11.12.02.44.58\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 12 Nov 2020 02:44:58 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=ragnatech-se.20150623.gappssmtp.com\n\theader.i=@ragnatech-se.20150623.gappssmtp.com\n\theader.b=\"0hQQ5CCl\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to;\n\tbh=HecKRNTw8eB/911eVokiFX6rIRZf2kZdrCYFuf8CTBk=;\n\tb=0hQQ5CCleGQo54unI/hEDDThqFEv2y10I3qpxmDyXAygtEEHOnCPSYS5BklWavBE2P\n\tYnQ3Uj0wZErILkbbuvIVKurFixcz+a0o0yYHO9Z3lv5GDQ/1kCCVk1rCXey9OVaXm9CD\n\tEeg9kqTDJ0I7kWVG4y76VxfrQYbxpVgpF2Of/GnuM9mDb2Wp7iztHBNPYfSSEaocRbDf\n\tsBYwDpfC9i6aTvOVy8OCHzzbuBMUrR/ZeuM/YllgIGDtmU5OO8VbqiOwrDj89c68niiA\n\tGp0LdQN/TovmWhr43U6y2q9QfrohRYcVsknbrcYspZOpiUVguJO5jbhMMwVwMPjdsVWP\n\tq66A==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to;\n\tbh=HecKRNTw8eB/911eVokiFX6rIRZf2kZdrCYFuf8CTBk=;\n\tb=jvWDf5n9zW1nM7JUlvGcAhohABmH46R+CtyBy1I8F8acp/A6zTCrQW+gZsNjj+Giy9\n\t5tt5M6bmXFz3ppLZJayX2UhsBJlOGnVTrlqoBN8NQerFNrMrRJOQ048vZqq1yBloE0ta\n\tMEk0/6QKUhr8gb44e7no5VNMKDrUyRAHW5ksePNww/tLVRC2VYp0G2b+Tk1pXpl7WxYq\n\tahwIUieN38hRHUCnKrdyecwnhd9BHTwpC1pJJqnMgRtacUHiVZC6doyBMyl7Z6C1d0a4\n\tlKkF6u8WSMjaiNdGOMXCH/sGF+h0eFlwbpsCQPGdH2cab5270GZsLcarWU3v9x3RE7aa\n\tWv8A==","X-Gm-Message-State":"AOAM531vJlXST1Aa5RdZt8A37rRyPRIvIpwpCz+qySIXJyibmHzkWiCL\n\t+1/yTDse2fyn/Ddet2rKHKSV+A==","X-Google-Smtp-Source":"ABdhPJwZL/+nNJHylwg+5qR4dRmqa/V9IWawyjme5Wywcm4z/CLTvELUmtAhV0gouf+MkQA6sioLHw==","X-Received":"by 2002:a05:651c:103b:: with SMTP id\n\tw27mr11718186ljm.323.1605177899507; \n\tThu, 12 Nov 2020 02:44:59 -0800 (PST)","Date":"Thu, 12 Nov 2020 11:44:58 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"paul.elder@ideasonboard.com","Message-ID":"<20201112104458.GA1478673@oden.dyn.berto.se>","References":"<20201106103707.49660-1-paul.elder@ideasonboard.com>\n\t<20201106103707.49660-32-paul.elder@ideasonboard.com>\n\t<807413b1-ce83-3337-88ee-2a518ebd581e@ideasonboard.com>\n\t<20201109022557.GA1791@pyrite.rasen.tech>\n\t<b80fb497-e0c3-29fc-2f87-10ec86ebfc5f@ideasonboard.com>\n\t<20201110002002.GA477907@oden.dyn.berto.se>\n\t<20201112061820.GB1811@pyrite.rasen.tech>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20201112061820.GB1811@pyrite.rasen.tech>","Subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":13781,"web_url":"https://patchwork.libcamera.org/comment/13781/","msgid":"<20201118132547.2ui6zlg322lcseus@uno.localdomain>","date":"2020-11-18T13:25:47","subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Paul,\n\nOn Thu, Nov 12, 2020 at 11:44:58AM +0100, Niklas Söderlund wrote:\n> On 2020-11-12 15:18:20 +0900, paul.elder@ideasonboard.com wrote:\n> > On Tue, Nov 10, 2020 at 01:20:02AM +0100, Niklas Söderlund wrote:\n> > > Hello,\n> > >\n> > > On 2020-11-09 10:54:56 +0000, Kieran Bingham wrote:\n> > > > Hi Paul,\n> > > >\n> > > > On 09/11/2020 02:25, paul.elder@ideasonboard.com wrote:\n> > > > > Hi Kieran,\n> > > > >\n> > > > > On Fri, Nov 06, 2020 at 11:12:23AM +0000, Kieran Bingham wrote:\n> > > > >> Hi Paul,\n> > > > >>\n> > > > >> On 06/11/2020 10:37, Paul Elder wrote:\n> > > > >>> As every pipeline and have its own proxy, IPAInterfaceWrapper is no\n> > > > >>> longer necessary. Since it's the only member of libipa, remove libipa\n> > > > >>> completely.\n> > > > >>\n> > > > >> Ah, I think I foresee the (imminent?) addition of items to libipa to be\n> > > > >> able to share some common features across open-source IPA modules.\n> > > > >> (closed source ones won't share of course).\n> > > > >\n> > > > > Ah, I see.\n> > > > >\n> > > > >> Could we have this patch strip out the dead code, but /keep/ the libipa\n> > > > >> itself as a skeleton at least?\n> > > > >\n> > > > > Well yes, but... then we'd just have a libipa directory and meson file\n> > > > > but no files to actually build... is that fine?\n> > > >\n> > > > Hrm, well you could keep an empty .cpp file but perhaps it's more than\n> > > > needed.\n> > > >\n> > > > Otherwise, sure lets just let the files disappear, and we can re-add\n> > > > when needed. Maybe that's cleaner anyway.\n> > > >\n> > > > Niklas, I think you're likely working on IPA topics the soonest, do you\n> > > > have a preference?\n> > >\n> > > No real preference, it's nice to not have to readd plumbing in a short\n> > > timespan after it was removed, but at the same time digging this up from\n> > > history is easy. So whatever is the quickest route to get this series\n> > > merged is my preference :-)\n> >\n> > Ah yeah, that's true. Okay, I'll keep it then, since it's anticipated to\n> > be needed in the near future.\n> >\n> > I'll just remove everything regarding the IPAInterfaceWrapper, and I'll\n> > leave libipa's meson stuff intact, so it'll just be empty libipa_headers\n> > and libipa_sources. When we add stuff back to libipa then we can just\n> > populate those.\n> >\n> > Is that sufficient?\n>\n> Works for me.\n\nI would prefer to remove it not to have an empty dir and meson.build\nthat build nothing, but both ways are fine. It's really about creating\na new dir and sketching out a meson file -if- we want to reuse libipa/\n\nAcked-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n>\n> >\n> >\n> > Thanks,\n> >\n> > Paul\n> >\n> > <snip>\n>\n> --\n> Regards,\n> Niklas Söderlund\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id F06D6BE176\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 18 Nov 2020 13:25:46 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5E4FA6156B;\n\tWed, 18 Nov 2020 14:25:46 +0100 (CET)","from relay11.mail.gandi.net (relay11.mail.gandi.net\n\t[217.70.178.231])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 627E361565\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 18 Nov 2020 14:25:44 +0100 (CET)","from uno.localdomain (93-34-118-233.ip49.fastwebnet.it\n\t[93.34.118.233]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay11.mail.gandi.net (Postfix) with ESMTPSA id AF142100006;\n\tWed, 18 Nov 2020 13:25:43 +0000 (UTC)"],"Date":"Wed, 18 Nov 2020 14:25:47 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Niklas =?utf-8?q?S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Message-ID":"<20201118132547.2ui6zlg322lcseus@uno.localdomain>","References":"<20201106103707.49660-1-paul.elder@ideasonboard.com>\n\t<20201106103707.49660-32-paul.elder@ideasonboard.com>\n\t<807413b1-ce83-3337-88ee-2a518ebd581e@ideasonboard.com>\n\t<20201109022557.GA1791@pyrite.rasen.tech>\n\t<b80fb497-e0c3-29fc-2f87-10ec86ebfc5f@ideasonboard.com>\n\t<20201110002002.GA477907@oden.dyn.berto.se>\n\t<20201112061820.GB1811@pyrite.rasen.tech>\n\t<20201112104458.GA1478673@oden.dyn.berto.se>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20201112104458.GA1478673@oden.dyn.berto.se>","Subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":13796,"web_url":"https://patchwork.libcamera.org/comment/13796/","msgid":"<20201119032310.GK1856@pyrite.rasen.tech>","date":"2020-11-19T03:23:10","subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"On Wed, Nov 18, 2020 at 02:25:47PM +0100, Jacopo Mondi wrote:\n> Hi Paul,\n> \n> On Thu, Nov 12, 2020 at 11:44:58AM +0100, Niklas Söderlund wrote:\n> > On 2020-11-12 15:18:20 +0900, paul.elder@ideasonboard.com wrote:\n> > > On Tue, Nov 10, 2020 at 01:20:02AM +0100, Niklas Söderlund wrote:\n> > > > Hello,\n> > > >\n> > > > On 2020-11-09 10:54:56 +0000, Kieran Bingham wrote:\n> > > > > Hi Paul,\n> > > > >\n> > > > > On 09/11/2020 02:25, paul.elder@ideasonboard.com wrote:\n> > > > > > Hi Kieran,\n> > > > > >\n> > > > > > On Fri, Nov 06, 2020 at 11:12:23AM +0000, Kieran Bingham wrote:\n> > > > > >> Hi Paul,\n> > > > > >>\n> > > > > >> On 06/11/2020 10:37, Paul Elder wrote:\n> > > > > >>> As every pipeline and have its own proxy, IPAInterfaceWrapper is no\n> > > > > >>> longer necessary. Since it's the only member of libipa, remove libipa\n> > > > > >>> completely.\n> > > > > >>\n> > > > > >> Ah, I think I foresee the (imminent?) addition of items to libipa to be\n> > > > > >> able to share some common features across open-source IPA modules.\n> > > > > >> (closed source ones won't share of course).\n> > > > > >\n> > > > > > Ah, I see.\n> > > > > >\n> > > > > >> Could we have this patch strip out the dead code, but /keep/ the libipa\n> > > > > >> itself as a skeleton at least?\n> > > > > >\n> > > > > > Well yes, but... then we'd just have a libipa directory and meson file\n> > > > > > but no files to actually build... is that fine?\n> > > > >\n> > > > > Hrm, well you could keep an empty .cpp file but perhaps it's more than\n> > > > > needed.\n> > > > >\n> > > > > Otherwise, sure lets just let the files disappear, and we can re-add\n> > > > > when needed. Maybe that's cleaner anyway.\n> > > > >\n> > > > > Niklas, I think you're likely working on IPA topics the soonest, do you\n> > > > > have a preference?\n> > > >\n> > > > No real preference, it's nice to not have to readd plumbing in a short\n> > > > timespan after it was removed, but at the same time digging this up from\n> > > > history is easy. So whatever is the quickest route to get this series\n> > > > merged is my preference :-)\n> > >\n> > > Ah yeah, that's true. Okay, I'll keep it then, since it's anticipated to\n> > > be needed in the near future.\n> > >\n> > > I'll just remove everything regarding the IPAInterfaceWrapper, and I'll\n> > > leave libipa's meson stuff intact, so it'll just be empty libipa_headers\n> > > and libipa_sources. When we add stuff back to libipa then we can just\n> > > populate those.\n> > >\n> > > Is that sufficient?\n> >\n> > Works for me.\n> \n> I would prefer to remove it not to have an empty dir and meson.build\n> that build nothing, but both ways are fine. It's really about creating\n> a new dir and sketching out a meson file -if- we want to reuse libipa/\n\nWell if it's going to be used almost immediately after, we might as well\nkeep it...\n\n> Acked-by: Jacopo Mondi <jacopo@jmondi.org>\n\n\nThanks,\n\nPaul","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 8AE3CBE176\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 19 Nov 2020 03:23:20 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 1A0056159D;\n\tThu, 19 Nov 2020 04:23:20 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0F22C60336\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 19 Nov 2020 04:23:18 +0100 (CET)","from pyrite.rasen.tech (unknown\n\t[IPv6:2400:4051:61:600:2c71:1b79:d06d:5032])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 3F3D293;\n\tThu, 19 Nov 2020 04:23:15 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"ilLROHza\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1605756197;\n\tbh=XSrc2R3lINPm7w21pBgO4NX2lOyTc/iQTsdwv4xcTjA=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=ilLROHza3DNM2iCt+ZC2ilxNj6ODJph/SUueG8Pge3RF0/DloqxRgeTOkgcpXYpyp\n\tQMzRbz0kyBBy9MLh68yWowILQTr9v0NAH5PME7mIm65lsluNxtzXOLHP/xWTX+PEdo\n\t08kLzy2/fmZZ7fRhdAM6877WpvfGhpqllwyv+4BQ=","Date":"Thu, 19 Nov 2020 12:23:10 +0900","From":"paul.elder@ideasonboard.com","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<20201119032310.GK1856@pyrite.rasen.tech>","References":"<20201106103707.49660-1-paul.elder@ideasonboard.com>\n\t<20201106103707.49660-32-paul.elder@ideasonboard.com>\n\t<807413b1-ce83-3337-88ee-2a518ebd581e@ideasonboard.com>\n\t<20201109022557.GA1791@pyrite.rasen.tech>\n\t<b80fb497-e0c3-29fc-2f87-10ec86ebfc5f@ideasonboard.com>\n\t<20201110002002.GA477907@oden.dyn.berto.se>\n\t<20201112061820.GB1811@pyrite.rasen.tech>\n\t<20201112104458.GA1478673@oden.dyn.berto.se>\n\t<20201118132547.2ui6zlg322lcseus@uno.localdomain>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20201118132547.2ui6zlg322lcseus@uno.localdomain>","Subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":13916,"web_url":"https://patchwork.libcamera.org/comment/13916/","msgid":"<20201126140337.GK3905@pendragon.ideasonboard.com>","date":"2020-11-26T14:03:37","subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Paul,\n\nThank you for the patch.\n\nOn Thu, Nov 19, 2020 at 12:23:10PM +0900, paul.elder@ideasonboard.com wrote:\n> On Wed, Nov 18, 2020 at 02:25:47PM +0100, Jacopo Mondi wrote:\n> > On Thu, Nov 12, 2020 at 11:44:58AM +0100, Niklas Söderlund wrote:\n> > > On 2020-11-12 15:18:20 +0900, paul.elder@ideasonboard.com wrote:\n> > > > On Tue, Nov 10, 2020 at 01:20:02AM +0100, Niklas Söderlund wrote:\n> > > > > On 2020-11-09 10:54:56 +0000, Kieran Bingham wrote:\n> > > > > > On 09/11/2020 02:25, paul.elder@ideasonboard.com wrote:\n> > > > > > > On Fri, Nov 06, 2020 at 11:12:23AM +0000, Kieran Bingham wrote:\n> > > > > > >> On 06/11/2020 10:37, Paul Elder wrote:\n> > > > > > >>> As every pipeline and have its own proxy, IPAInterfaceWrapper is no\n> > > > > > >>> longer necessary. Since it's the only member of libipa, remove libipa\n> > > > > > >>> completely.\n> > > > > > >>\n> > > > > > >> Ah, I think I foresee the (imminent?) addition of items to libipa to be\n> > > > > > >> able to share some common features across open-source IPA modules.\n> > > > > > >> (closed source ones won't share of course).\n> > > > > > >\n> > > > > > > Ah, I see.\n> > > > > > >\n> > > > > > >> Could we have this patch strip out the dead code, but /keep/ the libipa\n> > > > > > >> itself as a skeleton at least?\n> > > > > > >\n> > > > > > > Well yes, but... then we'd just have a libipa directory and meson file\n> > > > > > > but no files to actually build... is that fine?\n> > > > > >\n> > > > > > Hrm, well you could keep an empty .cpp file but perhaps it's more than\n> > > > > > needed.\n> > > > > >\n> > > > > > Otherwise, sure lets just let the files disappear, and we can re-add\n> > > > > > when needed. Maybe that's cleaner anyway.\n> > > > > >\n> > > > > > Niklas, I think you're likely working on IPA topics the soonest, do you\n> > > > > > have a preference?\n> > > > >\n> > > > > No real preference, it's nice to not have to readd plumbing in a short\n> > > > > timespan after it was removed, but at the same time digging this up from\n> > > > > history is easy. So whatever is the quickest route to get this series\n> > > > > merged is my preference :-)\n> > > >\n> > > > Ah yeah, that's true. Okay, I'll keep it then, since it's anticipated to\n> > > > be needed in the near future.\n> > > >\n> > > > I'll just remove everything regarding the IPAInterfaceWrapper, and I'll\n> > > > leave libipa's meson stuff intact, so it'll just be empty libipa_headers\n> > > > and libipa_sources. When we add stuff back to libipa then we can just\n> > > > populate those.\n> > > >\n> > > > Is that sufficient?\n> > >\n> > > Works for me.\n> > \n> > I would prefer to remove it not to have an empty dir and meson.build\n> > that build nothing, but both ways are fine. It's really about creating\n> > a new dir and sketching out a meson file -if- we want to reuse libipa/\n> \n> Well if it's going to be used almost immediately after, we might as well\n> keep it...\n\nI also have a small preference for removing it completely, as it's very\neasy to add back, and we all know what \"almost immediately\" often means\n;-) I'm fine with either option though.\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> > Acked-by: Jacopo Mondi <jacopo@jmondi.org>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id DAB15BE08A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 26 Nov 2020 14:03:47 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6D8D86345A;\n\tThu, 26 Nov 2020 15:03:47 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9152D63408\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 26 Nov 2020 15:03:46 +0100 (CET)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id D3EDEA1B;\n\tThu, 26 Nov 2020 15:03:45 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"j+DirQO4\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1606399426;\n\tbh=xSv1njnhv5kvOiiXu1bneSOM5uoxaTKpssHStxScMhA=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=j+DirQO4huI0NONHTGK4rACwdx9tjWn1owxz2DrmZb6kJvEm/LhdVZLDVEqWw70Lf\n\tmNA4K4SFQX9jmwLmfN2CxkF3ejRSwMZaxlcnMYEat9kqEDgKUeY6A56sESq0+0O73G\n\tPRVczzon85z1R7fcWEWwTUoXtRJsT9f1fp6zgjzY=","Date":"Thu, 26 Nov 2020 16:03:37 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"paul.elder@ideasonboard.com","Message-ID":"<20201126140337.GK3905@pendragon.ideasonboard.com>","References":"<20201106103707.49660-1-paul.elder@ideasonboard.com>\n\t<20201106103707.49660-32-paul.elder@ideasonboard.com>\n\t<807413b1-ce83-3337-88ee-2a518ebd581e@ideasonboard.com>\n\t<20201109022557.GA1791@pyrite.rasen.tech>\n\t<b80fb497-e0c3-29fc-2f87-10ec86ebfc5f@ideasonboard.com>\n\t<20201110002002.GA477907@oden.dyn.berto.se>\n\t<20201112061820.GB1811@pyrite.rasen.tech>\n\t<20201112104458.GA1478673@oden.dyn.berto.se>\n\t<20201118132547.2ui6zlg322lcseus@uno.localdomain>\n\t<20201119032310.GK1856@pyrite.rasen.tech>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20201119032310.GK1856@pyrite.rasen.tech>","Subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":13921,"web_url":"https://patchwork.libcamera.org/comment/13921/","msgid":"<23538f0d-b92d-4c90-55e8-17f24ba47d33@ideasonboard.com>","date":"2020-11-26T14:37:07","subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi All,\n\nOn 26/11/2020 14:03, Laurent Pinchart wrote:\n> Hi Paul,\n> \n> Thank you for the patch.\n> \n> On Thu, Nov 19, 2020 at 12:23:10PM +0900, paul.elder@ideasonboard.com wrote:\n>> On Wed, Nov 18, 2020 at 02:25:47PM +0100, Jacopo Mondi wrote:\n>>> On Thu, Nov 12, 2020 at 11:44:58AM +0100, Niklas Söderlund wrote:\n>>>> On 2020-11-12 15:18:20 +0900, paul.elder@ideasonboard.com wrote:\n>>>>> On Tue, Nov 10, 2020 at 01:20:02AM +0100, Niklas Söderlund wrote:\n>>>>>> On 2020-11-09 10:54:56 +0000, Kieran Bingham wrote:\n>>>>>>> On 09/11/2020 02:25, paul.elder@ideasonboard.com wrote:\n>>>>>>>> On Fri, Nov 06, 2020 at 11:12:23AM +0000, Kieran Bingham wrote:\n>>>>>>>>> On 06/11/2020 10:37, Paul Elder wrote:\n>>>>>>>>>> As every pipeline and have its own proxy, IPAInterfaceWrapper is no\n>>>>>>>>>> longer necessary. Since it's the only member of libipa, remove libipa\n>>>>>>>>>> completely.\n>>>>>>>>>\n>>>>>>>>> Ah, I think I foresee the (imminent?) addition of items to libipa to be\n>>>>>>>>> able to share some common features across open-source IPA modules.\n>>>>>>>>> (closed source ones won't share of course).\n>>>>>>>>\n>>>>>>>> Ah, I see.\n>>>>>>>>\n>>>>>>>>> Could we have this patch strip out the dead code, but /keep/ the libipa\n>>>>>>>>> itself as a skeleton at least?\n>>>>>>>>\n>>>>>>>> Well yes, but... then we'd just have a libipa directory and meson file\n>>>>>>>> but no files to actually build... is that fine?\n>>>>>>>\n>>>>>>> Hrm, well you could keep an empty .cpp file but perhaps it's more than\n>>>>>>> needed.\n>>>>>>>\n>>>>>>> Otherwise, sure lets just let the files disappear, and we can re-add\n>>>>>>> when needed. Maybe that's cleaner anyway.\n>>>>>>>\n>>>>>>> Niklas, I think you're likely working on IPA topics the soonest, do you\n>>>>>>> have a preference?\n>>>>>>\n>>>>>> No real preference, it's nice to not have to readd plumbing in a short\n>>>>>> timespan after it was removed, but at the same time digging this up from\n>>>>>> history is easy. So whatever is the quickest route to get this series\n>>>>>> merged is my preference :-)\n>>>>>\n>>>>> Ah yeah, that's true. Okay, I'll keep it then, since it's anticipated to\n>>>>> be needed in the near future.\n>>>>>\n>>>>> I'll just remove everything regarding the IPAInterfaceWrapper, and I'll\n>>>>> leave libipa's meson stuff intact, so it'll just be empty libipa_headers\n>>>>> and libipa_sources. When we add stuff back to libipa then we can just\n>>>>> populate those.\n>>>>>\n>>>>> Is that sufficient?\n>>>>\n>>>> Works for me.\n>>>\n>>> I would prefer to remove it not to have an empty dir and meson.build\n>>> that build nothing, but both ways are fine. It's really about creating\n>>> a new dir and sketching out a meson file -if- we want to reuse libipa/\n>>\n>> Well if it's going to be used almost immediately after, we might as well\n>> keep it...\n> \n> I also have a small preference for removing it completely, as it's very\n> easy to add back, and we all know what \"almost immediately\" often means\n> ;-) I'm fine with either option though.\n> \n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n\nAs I weighed in and started this digression - I'll finish it with a\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\nand retract my earlier suggestions then.\n\nKeep this patch, and we'll do what's needed when we need to ;-)\n\n\n\n>>> Acked-by: Jacopo Mondi <jacopo@jmondi.org>\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 84AEABE176\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 26 Nov 2020 14:37:13 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 151226346B;\n\tThu, 26 Nov 2020 15:37:13 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 14C37633F6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 26 Nov 2020 15:37:12 +0100 (CET)","from [192.168.0.20]\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 6F941A1B;\n\tThu, 26 Nov 2020 15:37:11 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"v8N8VXLH\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1606401431;\n\tbh=sKcgbCOl5+f9crHQA1VTs58DS21PplTY+2jEoll6RCs=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=v8N8VXLHFyIKgNChvYYQb8XodEcJSATqcxsaTQSOdoJrEdGMb5W+Ig80g6+6BY1VS\n\tmz7yiCD5KDFldd6iNkqcGSc38NO0MDlAHUfFFinrRNlJJXNzV3XN8noSjXLgUct2mW\n\tkabWUXoPf5v4fYOWeL/bxIkG27sRHFzlp1uZt/Rw=","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tpaul.elder@ideasonboard.com","References":"<20201106103707.49660-1-paul.elder@ideasonboard.com>\n\t<20201106103707.49660-32-paul.elder@ideasonboard.com>\n\t<807413b1-ce83-3337-88ee-2a518ebd581e@ideasonboard.com>\n\t<20201109022557.GA1791@pyrite.rasen.tech>\n\t<b80fb497-e0c3-29fc-2f87-10ec86ebfc5f@ideasonboard.com>\n\t<20201110002002.GA477907@oden.dyn.berto.se>\n\t<20201112061820.GB1811@pyrite.rasen.tech>\n\t<20201112104458.GA1478673@oden.dyn.berto.se>\n\t<20201118132547.2ui6zlg322lcseus@uno.localdomain>\n\t<20201119032310.GK1856@pyrite.rasen.tech>\n\t<20201126140337.GK3905@pendragon.ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<23538f0d-b92d-4c90-55e8-17f24ba47d33@ideasonboard.com>","Date":"Thu, 26 Nov 2020 14:37:07 +0000","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.10.0","MIME-Version":"1.0","In-Reply-To":"<20201126140337.GK3905@pendragon.ideasonboard.com>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v4 31/37] ipa: remove libipa","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Reply-To":"kieran.bingham@ideasonboard.com","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]