{"id":12617,"url":"https://patchwork.libcamera.org/api/1.1/covers/12617/?format=json","web_url":"https://patchwork.libcamera.org/cover/12617/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20210616151152.3856595-1-kieran.bingham@ideasonboard.com>","date":"2021-06-16T15:11:46","name":"[libcamera-devel,0/6] libcamera-platform: Split library functionality","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/1.1/people/4/?format=json","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"mbox":"https://patchwork.libcamera.org/cover/12617/mbox/","series":[{"id":2143,"url":"https://patchwork.libcamera.org/api/1.1/series/2143/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=2143","date":"2021-06-16T15:11:46","name":"libcamera-platform: Split library functionality","version":1,"mbox":"https://patchwork.libcamera.org/series/2143/mbox/"}],"comments":"https://patchwork.libcamera.org/api/covers/12617/comments/","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 7F2E6BD78E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 16 Jun 2021 15:11:59 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id AA64B6894C;\n\tWed, 16 Jun 2021 17:11:58 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 246B76029A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 16 Jun 2021 17:11:57 +0200 (CEST)","from Monstersaurus.local\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 A64BF3E5;\n\tWed, 16 Jun 2021 17:11:56 +0200 (CEST)"],"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=\"umfyBfWd\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1623856316;\n\tbh=VNDzYnreqGSL1phM61ixg4Cnczoqx3enBMNp8nqVDJU=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=umfyBfWduaDOnAxTnjPMNlIF+7aVR9U0f7OmcXYC6H+Rl4GwGpmzJ5Bck8h3VgQI6\n\tpDdxZ9cU5xOR5A5cLQRubRZwAzZ6kg479D8h2vCnBX7vJ4hudm98FqegAynBTo54Kz\n\t8NLjKidrRfXS6olLbTp/NTFGgldevIEV2LXmRbiE=","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","To":"libcamera devel <libcamera-devel@lists.libcamera.org>","Date":"Wed, 16 Jun 2021 16:11:46 +0100","Message-Id":"<20210616151152.3856595-1-kieran.bingham@ideasonboard.com>","X-Mailer":"git-send-email 2.30.2","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH 0/6] libcamera-platform: Split library\n\tfunctionality","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"The main libcamera.so shared library contains more than the\nimplementation of our camera framework and consists of the android hal\ninterface, as well as various helpers and platform abstractions to\nassist with things like reading files, logging, or thread management.\n\nThis (horrendously large, and painful) series aims to split and refactor\nthe code base to extract re-usable functionality which might be shared\nwith IPA modules (or other applications) while keeping the libcamera\npublic API concise.\n\nTo do this, this series splits out and creates new shared objects:\n\n   libcamera-hal.so\n       ...\n   libcamera-helpers.so\n       ...\n   libcamera.so\n       ...\n   libcamera-platform.so\n\nWith libcamara-platform at the lowest layer, this library is used by\nlibcamera to handle core internal functionality - but it is important to\nnote that this is not intended to form part of the public API of\nlibcamera itself.\n\nlibcamera.so remains the integral implementation and library to operate\ncomplex cameras within linux.\n\nOn top of that is some functionality which builds 'on top' of the\nlibcamera API, and is optional for applications or users of libcamera to\nmake use of. In particular, at the moment this impelements a\nmapped_buffer object which helps manage lifetime of mmap operations on\nlibcamera buffers.\n\nFinally on top of all of that, the existing android camera HAL which has\nhistorically been linked directly into the libcamera.so is now split and\nhas it's own life as libcamera-hal.so.\n\n\nWhile some core elements of the previously 'internal' components of\nlibcamera have been moved to libcamera-platform, not all have - I have\nonly moved the minimum needed to support building an external IPA for\nthe IPU3 which makes use of these components.\n\nIt may make sense to move more internal or abstraction classes to\nlibcamera-platform, but that can be done on an as required basis.\n\nIt may also be possible in the future that the libcamera-platform layer\nprovides a means to abstracting the main libcamera interface to support\nthe API on other platforms, but this is not anticipated in the short\nterm.\n\n\nKieran Bingham (6):\n  android: Split HAL to its own shared library\n  libcamera-platform: Introduce new platform library\n  libcamera-platform: Move utils to the platform library\n  libcamera-platform: Move extended platform functionality\n  libcamera-platform: Move File to platform library\n  libcamera-helpers: Provide helper library\n\n Documentation/Doxyfile.in                     |   6 +-\n Documentation/guides/pipeline-handler.rst     |   3 +-\n Documentation/meson.build                     |   2 +\n include/libcamera/camera.h                    |   5 +-\n include/libcamera/camera_manager.h            |   5 +-\n .../buffer.h => helpers/mapped_buffer.h}      |  10 +-\n include/libcamera/helpers/meson.build         |  10 +\n include/libcamera/internal/camera_sensor.h    |   3 +-\n .../libcamera/internal/device_enumerator.h    |   2 +-\n include/libcamera/internal/event_notifier.h   |   4 +-\n .../libcamera/internal/ipa_data_serializer.h  |   3 +-\n include/libcamera/internal/ipa_manager.h      |   3 +-\n include/libcamera/internal/ipa_module.h       |   3 +-\n include/libcamera/internal/ipc_pipe.h         |   4 +-\n include/libcamera/internal/ipc_unixsocket.h   |   2 +-\n include/libcamera/internal/media_device.h     |   4 +-\n include/libcamera/internal/meson.build        |  10 -\n include/libcamera/internal/pipeline_handler.h |   3 +-\n include/libcamera/internal/process.h          |   2 +-\n include/libcamera/internal/v4l2_device.h      |   4 +-\n include/libcamera/internal/v4l2_subdevice.h   |   3 +-\n include/libcamera/internal/v4l2_videodevice.h |   5 +-\n include/libcamera/ipa/ipa_interface.h         |   3 +-\n include/libcamera/meson.build                 |   5 +-\n .../libcamera/{ => platform}/bound_method.h   |   6 +-\n .../{internal => platform}/event_dispatcher.h |   6 +-\n .../event_dispatcher_poll.h                   |   8 +-\n .../libcamera/{internal => platform}/file.h   |   6 +-\n .../libcamera/{internal => platform}/log.h    |   8 +-\n include/libcamera/platform/meson.build        |  21 +++\n .../{internal => platform}/message.h          |   8 +-\n include/libcamera/{ => platform}/object.h     |   8 +-\n .../{internal => platform}/semaphore.h        |   8 +-\n include/libcamera/{ => platform}/signal.h     |  10 +-\n .../libcamera/{internal => platform}/thread.h |  13 +-\n .../libcamera/{internal => platform}/timer.h  |  10 +-\n .../libcamera/{internal => platform}/utils.h  |   8 +-\n include/libcamera/request.h                   |   3 +-\n src/android/camera3_hal.cpp                   |   2 +-\n src/android/camera_device.cpp                 |   7 +-\n src/android/camera_device.h                   |   9 +-\n src/android/camera_hal_config.cpp             |   2 +-\n src/android/camera_hal_manager.cpp            |   2 +-\n src/android/camera_metadata.cpp               |   2 +-\n src/android/camera_stream.h                   |   2 +-\n src/android/camera_worker.h                   |   4 +-\n src/android/jpeg/encoder_libjpeg.cpp          |   3 +-\n src/android/jpeg/encoder_libjpeg.h            |   3 +-\n src/android/jpeg/exif.cpp                     |   4 +-\n src/android/jpeg/post_processor_jpeg.cpp      |   2 +-\n src/android/jpeg/post_processor_jpeg.h        |   2 +-\n src/android/jpeg/thumbnailer.cpp              |   2 +-\n src/android/jpeg/thumbnailer.h                |   3 +-\n src/android/meson.build                       |  13 +-\n src/android/mm/cros_camera_buffer.cpp         |   2 +-\n src/android/mm/generic_camera_buffer.cpp      |   5 +-\n src/android/post_processor.h                  |   2 +-\n src/android/yuv/post_processor_yuv.cpp        |   3 +-\n src/ipa/ipu3/ipu3.cpp                         |   5 +-\n src/ipa/ipu3/ipu3_agc.cpp                     |   2 +-\n src/ipa/ipu3/ipu3_awb.cpp                     |   2 +-\n src/ipa/ipu3/meson.build                      |   2 +-\n src/ipa/libipa/histogram.cpp                  |   2 +-\n src/ipa/raspberrypi/cam_helper.hpp            |   3 +-\n .../raspberrypi/controller/agc_algorithm.hpp  |   3 +-\n src/ipa/raspberrypi/controller/agc_status.h   |   2 +-\n src/ipa/raspberrypi/controller/camera_mode.h  |   2 +-\n src/ipa/raspberrypi/controller/controller.cpp |   2 +-\n .../raspberrypi/controller/device_status.h    |   2 +-\n src/ipa/raspberrypi/controller/rpi/agc.cpp    |   2 +-\n src/ipa/raspberrypi/controller/rpi/agc.hpp    |   2 +-\n src/ipa/raspberrypi/controller/rpi/alsc.cpp   |   2 +-\n src/ipa/raspberrypi/controller/rpi/awb.cpp    |   2 +-\n .../controller/rpi/black_level.cpp            |   2 +-\n src/ipa/raspberrypi/controller/rpi/ccm.cpp    |   2 +-\n .../raspberrypi/controller/rpi/contrast.cpp   |   2 +-\n src/ipa/raspberrypi/controller/rpi/dpc.cpp    |   2 +-\n src/ipa/raspberrypi/controller/rpi/focus.cpp  |   2 +-\n src/ipa/raspberrypi/controller/rpi/geq.cpp    |   2 +-\n src/ipa/raspberrypi/controller/rpi/lux.cpp    |   2 +-\n src/ipa/raspberrypi/controller/rpi/lux.hpp    |   2 +-\n src/ipa/raspberrypi/controller/rpi/noise.cpp  |   2 +-\n src/ipa/raspberrypi/controller/rpi/sdn.cpp    |   2 +-\n .../raspberrypi/controller/rpi/sharpen.cpp    |   2 +-\n src/ipa/raspberrypi/meson.build               |   1 +\n src/ipa/raspberrypi/raspberrypi.cpp           |   5 +-\n src/ipa/rkisp1/rkisp1.cpp                     |   2 +-\n src/ipa/vimc/vimc.cpp                         |   4 +-\n src/libcamera-helpers/mapped_buffer.cpp       | 171 ++++++++++++++++++\n .../bound_method.cpp                          |  11 +-\n .../event_dispatcher.cpp                      |   7 +-\n .../event_dispatcher_poll.cpp                 |  13 +-\n .../file.cpp                                  |   6 +-\n src/{libcamera => libcamera-platform}/log.cpp |   8 +-\n src/libcamera-platform/meson.build            |  51 ++++++\n .../message.cpp                               |   9 +-\n .../object.cpp                                |  17 +-\n .../semaphore.cpp                             |   6 +-\n .../signal.cpp                                |   6 +-\n .../thread.cpp                                |  12 +-\n .../timer.cpp                                 |  14 +-\n .../utils.cpp                                 |   8 +-\n src/libcamera/buffer.cpp                      | 151 +---------------\n src/libcamera/byte_stream_buffer.cpp          |   2 +-\n src/libcamera/camera.cpp                      |   5 +-\n src/libcamera/camera_manager.cpp              |   8 +-\n src/libcamera/camera_sensor.cpp               |   3 +-\n src/libcamera/camera_sensor_properties.cpp    |   2 +-\n src/libcamera/control_serializer.cpp          |   3 +-\n src/libcamera/controls.cpp                    |   5 +-\n src/libcamera/delayed_controls.cpp            |   3 +-\n src/libcamera/device_enumerator.cpp           |   3 +-\n src/libcamera/device_enumerator_sysfs.cpp     |   3 +-\n src/libcamera/device_enumerator_udev.cpp      |   3 +-\n src/libcamera/event_notifier.cpp              |   6 +-\n src/libcamera/file_descriptor.cpp             |   2 +-\n src/libcamera/formats.cpp                     |   2 +-\n src/libcamera/framebuffer_allocator.cpp       |   3 +-\n src/libcamera/geometry.cpp                    |   2 +-\n src/libcamera/ipa_data_serializer.cpp         |   2 +-\n src/libcamera/ipa_manager.cpp                 |   7 +-\n src/libcamera/ipa_module.cpp                  |   7 +-\n src/libcamera/ipa_proxy.cpp                   |   5 +-\n src/libcamera/ipc_pipe.cpp                    |   2 +-\n src/libcamera/ipc_pipe_unixsocket.cpp         |   9 +-\n src/libcamera/ipc_unixsocket.cpp              |   3 +-\n src/libcamera/media_device.cpp                |   2 +-\n src/libcamera/media_object.cpp                |   3 +-\n src/libcamera/meson.build                     |  32 +---\n src/libcamera/pipeline/ipu3/cio2.h            |   2 +-\n src/libcamera/pipeline/ipu3/frames.h          |   2 +-\n src/libcamera/pipeline/ipu3/imgu.cpp          |   5 +-\n src/libcamera/pipeline/ipu3/ipu3.cpp          |   5 +-\n .../pipeline/raspberrypi/dma_heaps.cpp        |   2 +-\n .../pipeline/raspberrypi/raspberrypi.cpp      |   6 +-\n .../pipeline/raspberrypi/rpi_stream.cpp       |   2 +-\n src/libcamera/pipeline/rkisp1/rkisp1.cpp      |   5 +-\n src/libcamera/pipeline/rkisp1/rkisp1_path.h   |   3 +-\n src/libcamera/pipeline/simple/converter.cpp   |   8 +-\n src/libcamera/pipeline/simple/converter.h     |   4 +-\n src/libcamera/pipeline/simple/simple.cpp      |   3 +-\n src/libcamera/pipeline/uvcvideo/uvcvideo.cpp  |   5 +-\n src/libcamera/pipeline/vimc/vimc.cpp          |   5 +-\n src/libcamera/pipeline_handler.cpp            |   5 +-\n src/libcamera/process.cpp                     |   5 +-\n src/libcamera/request.cpp                     |   3 +-\n src/libcamera/stream.cpp                      |   5 +-\n src/libcamera/sysfs.cpp                       |   4 +-\n src/libcamera/v4l2_device.cpp                 |   5 +-\n src/libcamera/v4l2_pixelformat.cpp            |   3 +-\n src/libcamera/v4l2_subdevice.cpp              |   5 +-\n src/libcamera/v4l2_videodevice.cpp            |   3 +-\n src/meson.build                               |   9 +-\n src/v4l2/v4l2_camera.cpp                      |   2 +-\n src/v4l2/v4l2_camera.h                        |   2 +-\n src/v4l2/v4l2_camera_proxy.cpp                |   7 +-\n src/v4l2/v4l2_compat_manager.cpp              |   4 +-\n test/camera-sensor.cpp                        |   3 +-\n test/camera/buffer_import.cpp                 |   7 +-\n test/camera/capture.cpp                       |   6 +-\n test/event-dispatcher.cpp                     |   6 +-\n test/event-thread.cpp                         |   5 +-\n test/event.cpp                                |   7 +-\n test/file-descriptor.cpp                      |   2 +-\n test/file.cpp                                 |   2 +-\n test/hotplug-cameras.cpp                      |   8 +-\n test/ipa/ipa_interface_test.cpp               |   7 +-\n test/ipc/unixsocket.cpp                       |   7 +-\n test/ipc/unixsocket_ipc.cpp                   |  10 +-\n test/log/log_api.cpp                          |   2 +-\n test/log/log_process.cpp                      |  11 +-\n test/mapped-buffer.cpp                        |   3 +-\n test/meson.build                              |  14 +-\n test/message.cpp                              |   4 +-\n test/object-delete.cpp                        |   5 +-\n test/object-invoke.cpp                        |   7 +-\n test/object.cpp                               |   7 +-\n test/pixel-format.cpp                         |   2 +-\n test/process/process_test.cpp                 |  10 +-\n .../ipa_data_serializer_test.cpp              |   5 +-\n test/signal-threads.cpp                       |   6 +-\n test/signal.cpp                               |   4 +-\n test/threads.cpp                              |   2 +-\n test/timer-thread.cpp                         |   6 +-\n test/timer.cpp                                |   6 +-\n test/utils.cpp                                |   2 +-\n test/v4l2_subdevice/list_formats.cpp          |   3 +-\n test/v4l2_videodevice/buffer_sharing.cpp      |   6 +-\n test/v4l2_videodevice/capture_async.cpp       |   6 +-\n test/v4l2_videodevice/formats.cpp             |   3 +-\n test/v4l2_videodevice/v4l2_m2mdevice.cpp      |   7 +-\n .../module_ipa_proxy.cpp.tmpl                 |   5 +-\n .../module_ipa_proxy.h.tmpl                   |   3 +-\n .../module_ipa_proxy_worker.cpp.tmpl          |   7 +-\n 194 files changed, 738 insertions(+), 574 deletions(-)\n rename include/libcamera/{internal/buffer.h => helpers/mapped_buffer.h} (81%)\n create mode 100644 include/libcamera/helpers/meson.build\n rename include/libcamera/{ => platform}/bound_method.h (97%)\n rename include/libcamera/{internal => platform}/event_dispatcher.h (79%)\n rename include/libcamera/{internal => platform}/event_dispatcher_poll.h (82%)\n rename include/libcamera/{internal => platform}/file.h (91%)\n rename include/libcamera/{internal => platform}/log.h (95%)\n create mode 100644 include/libcamera/platform/meson.build\n rename include/libcamera/{internal => platform}/message.h (86%)\n rename include/libcamera/{ => platform}/object.h (88%)\n rename include/libcamera/{internal => platform}/semaphore.h (74%)\n rename include/libcamera/{ => platform}/signal.h (93%)\n rename include/libcamera/{internal => platform}/thread.h (83%)\n rename include/libcamera/{internal => platform}/timer.h (80%)\n rename include/libcamera/{internal => platform}/utils.h (97%)\n create mode 100644 src/libcamera-helpers/mapped_buffer.cpp\n rename src/{libcamera => libcamera-platform}/bound_method.cpp (93%)\n rename src/{libcamera => libcamera-platform}/event_dispatcher.cpp (96%)\n rename src/{libcamera => libcamera-platform}/event_dispatcher_poll.cpp (96%)\n rename src/{libcamera => libcamera-platform}/file.cpp (99%)\n rename src/{libcamera => libcamera-platform}/log.cpp (99%)\n create mode 100644 src/libcamera-platform/meson.build\n rename src/{libcamera => libcamera-platform}/message.cpp (96%)\n rename src/{libcamera => libcamera-platform}/object.cpp (96%)\n rename src/{libcamera => libcamera-platform}/semaphore.cpp (95%)\n rename src/{libcamera => libcamera-platform}/signal.cpp (98%)\n rename src/{libcamera => libcamera-platform}/thread.cpp (98%)\n rename src/{libcamera => libcamera-platform}/timer.cpp (93%)\n rename src/{libcamera => libcamera-platform}/utils.cpp (99%)"}