[{"id":27056,"web_url":"https://patchwork.libcamera.org/comment/27056/","msgid":"<20230504162347.GO4551@pendragon.ideasonboard.com>","date":"2023-05-04T16:23:47","subject":"Re: [libcamera-devel] [PATCH 05/13] pipeline: raspberrypi: Refactor\n\tand move pipeline handler code","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Naush,\n\nThank you for the patch.\n\nOn Wed, May 03, 2023 at 01:20:27PM +0100, Naushir Patuck via libcamera-devel wrote:\n> Split the Raspberry Pi pipeline handler code into common and VC4/BCM2835\n> specific file structures.\n> \n> The common code files now live in src/libcamera/pipeline/rpi/common/\n> and the vc4 specific files in src/libcamera/pipeline/rpi/vc4/.\n\ns/vc4 specific/vc4-specific/\n\n> To build the pipeline handler, the meson configuration option to select\n> the Raspberry Pi pipeline handler has now changed from \"raspberrypi\" to\n> \"rpi/vc4\":\n> \n> meson setup build -Dpipelines=rpi/vc4\n> \n> There are no functional changes in the pipeline handler code itself.\n> \n> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> ---\n>  Documentation/environment_variables.rst              |  2 +-\n>  Documentation/guides/introduction.rst                |  2 +-\n>  Documentation/guides/pipeline-handler.rst            |  2 +-\n>  include/libcamera/ipa/meson.build                    |  2 +-\n>  meson.build                                          |  2 +-\n>  meson_options.txt                                    |  2 +-\n>  .../{raspberrypi => rpi/common}/delayed_controls.cpp |  0\n>  .../{raspberrypi => rpi/common}/delayed_controls.h   |  0\n>  src/libcamera/pipeline/rpi/common/meson.build        |  6 ++++++\n>  .../{raspberrypi => rpi/common}/rpi_stream.cpp       |  0\n>  .../{raspberrypi => rpi/common}/rpi_stream.h         |  0\n>  src/libcamera/pipeline/rpi/meson.build               | 12 ++++++++++++\n>  .../{raspberrypi => rpi/vc4}/data/example.yaml       |  0\n>  .../{raspberrypi => rpi/vc4}/data/meson.build        |  2 +-\n>  .../pipeline/{raspberrypi => rpi/vc4}/dma_heaps.cpp  |  0\n>  .../pipeline/{raspberrypi => rpi/vc4}/dma_heaps.h    |  0\n>  .../pipeline/{raspberrypi => rpi/vc4}/meson.build    |  2 --\n>  .../{raspberrypi => rpi/vc4}/raspberrypi.cpp         |  6 +++---\n>  18 files changed, 28 insertions(+), 12 deletions(-)\n>  rename src/libcamera/pipeline/{raspberrypi => rpi/common}/delayed_controls.cpp (100%)\n>  rename src/libcamera/pipeline/{raspberrypi => rpi/common}/delayed_controls.h (100%)\n>  create mode 100644 src/libcamera/pipeline/rpi/common/meson.build\n>  rename src/libcamera/pipeline/{raspberrypi => rpi/common}/rpi_stream.cpp (100%)\n>  rename src/libcamera/pipeline/{raspberrypi => rpi/common}/rpi_stream.h (100%)\n>  create mode 100644 src/libcamera/pipeline/rpi/meson.build\n>  rename src/libcamera/pipeline/{raspberrypi => rpi/vc4}/data/example.yaml (100%)\n>  rename src/libcamera/pipeline/{raspberrypi => rpi/vc4}/data/meson.build (63%)\n>  rename src/libcamera/pipeline/{raspberrypi => rpi/vc4}/dma_heaps.cpp (100%)\n>  rename src/libcamera/pipeline/{raspberrypi => rpi/vc4}/dma_heaps.h (100%)\n>  rename src/libcamera/pipeline/{raspberrypi => rpi/vc4}/meson.build (71%)\n>  rename src/libcamera/pipeline/{raspberrypi => rpi/vc4}/raspberrypi.cpp (99%)\n> \n> diff --git a/Documentation/environment_variables.rst b/Documentation/environment_variables.rst\n> index ceeb251a2ac0..4bf38b877897 100644\n> --- a/Documentation/environment_variables.rst\n> +++ b/Documentation/environment_variables.rst\n> @@ -40,7 +40,7 @@ LIBCAMERA_IPA_MODULE_PATH\n>  LIBCAMERA_RPI_CONFIG_FILE\n>     Define a custom configuration file to use in the Raspberry Pi pipeline handler.\n>  \n> -   Example value: ``/usr/local/share/libcamera/pipeline/raspberrypi/minimal_mem.yaml``\n> +   Example value: ``/usr/local/share/libcamera/pipeline/rpi/vc4/minimal_mem.yaml``\n>  \n>  Further details\n>  ---------------\n> diff --git a/Documentation/guides/introduction.rst b/Documentation/guides/introduction.rst\n> index 2d1760c1866b..700ec2d33c30 100644\n> --- a/Documentation/guides/introduction.rst\n> +++ b/Documentation/guides/introduction.rst\n> @@ -288,7 +288,7 @@ with dedicated pipeline handlers:\n>  \n>     -  Intel IPU3 (ipu3)\n>     -  Rockchip RK3399 (rkisp1)\n> -   -  RaspberryPi 3 and 4 (raspberrypi)\n> +   -  RaspberryPi 3 and 4 (rpi/vc4)\n>  \n>  Furthermore, generic platform support is provided for the following:\n>  \n> diff --git a/Documentation/guides/pipeline-handler.rst b/Documentation/guides/pipeline-handler.rst\n> index 1acd1812cf37..57644534de61 100644\n> --- a/Documentation/guides/pipeline-handler.rst\n> +++ b/Documentation/guides/pipeline-handler.rst\n> @@ -183,7 +183,7 @@ to the libcamera build options in the top level ``meson_options.txt``.\n>  \n>     option('pipelines',\n>             type : 'array',\n> -           choices : ['ipu3', 'raspberrypi', 'rkisp1', 'simple', 'uvcvideo', 'vimc', 'vivid'],\n> +           choices : ['ipu3', 'rkisp1', 'rpi/vc4', 'simple', 'uvcvideo', 'vimc', 'vivid'],\n>             description : 'Select which pipeline handlers to include')\n>  \n>  \n> diff --git a/include/libcamera/ipa/meson.build b/include/libcamera/ipa/meson.build\n> index c57b3a5e1570..6060c68f047d 100644\n> --- a/include/libcamera/ipa/meson.build\n> +++ b/include/libcamera/ipa/meson.build\n> @@ -64,7 +64,7 @@ libcamera_generated_ipa_headers += custom_target('core_ipa_serializer_h',\n>  pipeline_ipa_mojom_mapping = {\n>      'ipu3': 'ipu3.mojom',\n>      'rkisp1': 'rkisp1.mojom',\n> -    'raspberrypi': 'raspberrypi.mojom',\n> +    'rpi/vc4': 'raspberrypi.mojom',\n>      'vimc': 'vimc.mojom',\n>  }\n>  \n> diff --git a/meson.build b/meson.build\n> index 2d99029bf5b7..e1fd924307f7 100644\n> --- a/meson.build\n> +++ b/meson.build\n> @@ -194,8 +194,8 @@ arch_x86 = ['x86', 'x86_64']\n>  pipelines_support = {\n>      'imx8-isi':     arch_arm,\n>      'ipu3':         arch_x86,\n> -    'raspberrypi':  arch_arm,\n>      'rkisp1':       arch_arm,\n> +    'rpi/vc4':      arch_arm,\n>      'simple':       arch_arm,\n>      'uvcvideo':     ['any'],\n>      'vimc':         ['test'],\n> diff --git a/meson_options.txt b/meson_options.txt\n> index 78a78b7214d5..b4afb8e591a8 100644\n> --- a/meson_options.txt\n> +++ b/meson_options.txt\n> @@ -43,8 +43,8 @@ option('pipelines',\n>              'auto',\n>              'imx8-isi',\n>              'ipu3',\n> -            'raspberrypi',\n>              'rkisp1',\n> +            'rpi/vc4',\n>              'simple',\n>              'uvcvideo',\n>              'vimc'\n> diff --git a/src/libcamera/pipeline/raspberrypi/delayed_controls.cpp b/src/libcamera/pipeline/rpi/common/delayed_controls.cpp\n> similarity index 100%\n> rename from src/libcamera/pipeline/raspberrypi/delayed_controls.cpp\n> rename to src/libcamera/pipeline/rpi/common/delayed_controls.cpp\n> diff --git a/src/libcamera/pipeline/raspberrypi/delayed_controls.h b/src/libcamera/pipeline/rpi/common/delayed_controls.h\n> similarity index 100%\n> rename from src/libcamera/pipeline/raspberrypi/delayed_controls.h\n> rename to src/libcamera/pipeline/rpi/common/delayed_controls.h\n> diff --git a/src/libcamera/pipeline/rpi/common/meson.build b/src/libcamera/pipeline/rpi/common/meson.build\n> new file mode 100644\n> index 000000000000..2ad594cf8d1a\n> --- /dev/null\n> +++ b/src/libcamera/pipeline/rpi/common/meson.build\n> @@ -0,0 +1,6 @@\n> +# SPDX-License-Identifier: CC0-1.0\n> +\n> +libcamera_sources += files([\n> +    'delayed_controls.cpp',\n> +    'rpi_stream.cpp',\n> +])\n> diff --git a/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp b/src/libcamera/pipeline/rpi/common/rpi_stream.cpp\n> similarity index 100%\n> rename from src/libcamera/pipeline/raspberrypi/rpi_stream.cpp\n> rename to src/libcamera/pipeline/rpi/common/rpi_stream.cpp\n> diff --git a/src/libcamera/pipeline/raspberrypi/rpi_stream.h b/src/libcamera/pipeline/rpi/common/rpi_stream.h\n> similarity index 100%\n> rename from src/libcamera/pipeline/raspberrypi/rpi_stream.h\n> rename to src/libcamera/pipeline/rpi/common/rpi_stream.h\n> diff --git a/src/libcamera/pipeline/rpi/meson.build b/src/libcamera/pipeline/rpi/meson.build\n> new file mode 100644\n> index 000000000000..2391b6a9729e\n> --- /dev/null\n> +++ b/src/libcamera/pipeline/rpi/meson.build\n> @@ -0,0 +1,12 @@\n> +# SPDX-License-Identifier: CC0-1.0\n> +\n> +subdir('common')\n> +\n> +foreach pipeline : pipelines\n> +    pipeline = pipeline.split('/')\n> +    if pipeline.length() < 2 or pipeline[0] != 'rpi'\n> +        continue\n> +    endif\n> +\n> +    subdir(pipeline[1])\n> +endforeach\n> diff --git a/src/libcamera/pipeline/raspberrypi/data/example.yaml b/src/libcamera/pipeline/rpi/vc4/data/example.yaml\n> similarity index 100%\n> rename from src/libcamera/pipeline/raspberrypi/data/example.yaml\n> rename to src/libcamera/pipeline/rpi/vc4/data/example.yaml\n> diff --git a/src/libcamera/pipeline/raspberrypi/data/meson.build b/src/libcamera/pipeline/rpi/vc4/data/meson.build\n> similarity index 63%\n> rename from src/libcamera/pipeline/raspberrypi/data/meson.build\n> rename to src/libcamera/pipeline/rpi/vc4/data/meson.build\n> index 1c70433bbcbc..cca5e3885a4e 100644\n> --- a/src/libcamera/pipeline/raspberrypi/data/meson.build\n> +++ b/src/libcamera/pipeline/rpi/vc4/data/meson.build\n> @@ -5,4 +5,4 @@ conf_files = files([\n>  ])\n>  \n>  install_data(conf_files,\n> -             install_dir : pipeline_data_dir / 'raspberrypi')\n> +             install_dir : pipeline_data_dir / 'rpi' / 'vc4')\n> diff --git a/src/libcamera/pipeline/raspberrypi/dma_heaps.cpp b/src/libcamera/pipeline/rpi/vc4/dma_heaps.cpp\n> similarity index 100%\n> rename from src/libcamera/pipeline/raspberrypi/dma_heaps.cpp\n> rename to src/libcamera/pipeline/rpi/vc4/dma_heaps.cpp\n> diff --git a/src/libcamera/pipeline/raspberrypi/dma_heaps.h b/src/libcamera/pipeline/rpi/vc4/dma_heaps.h\n> similarity index 100%\n> rename from src/libcamera/pipeline/raspberrypi/dma_heaps.h\n> rename to src/libcamera/pipeline/rpi/vc4/dma_heaps.h\n> diff --git a/src/libcamera/pipeline/raspberrypi/meson.build b/src/libcamera/pipeline/rpi/vc4/meson.build\n> similarity index 71%\n> rename from src/libcamera/pipeline/raspberrypi/meson.build\n> rename to src/libcamera/pipeline/rpi/vc4/meson.build\n> index 59e8fb18c555..228823f30922 100644\n> --- a/src/libcamera/pipeline/raspberrypi/meson.build\n> +++ b/src/libcamera/pipeline/rpi/vc4/meson.build\n> @@ -1,10 +1,8 @@\n>  # SPDX-License-Identifier: CC0-1.0\n>  \n>  libcamera_sources += files([\n> -    'delayed_controls.cpp',\n>      'dma_heaps.cpp',\n>      'raspberrypi.cpp',\n> -    'rpi_stream.cpp',\n>  ])\n>  \n>  subdir('data')\n> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp\n> similarity index 99%\n> rename from src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> rename to src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp\n> index 0060044143cc..af464d153f28 100644\n> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> +++ b/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp\n> @@ -2,7 +2,7 @@\n>  /*\n>   * Copyright (C) 2019-2021, Raspberry Pi Ltd\n>   *\n> - * raspberrypi.cpp - Pipeline handler for Raspberry Pi devices\n> + * raspberrypi.cpp - Pipeline handler for VC4-based Raspberry Pi devices\n>   */\n>  #include <algorithm>\n>  #include <assert.h>\n> @@ -43,9 +43,9 @@\n>  #include \"libcamera/internal/v4l2_videodevice.h\"\n>  #include \"libcamera/internal/yaml_parser.h\"\n>  \n> -#include \"delayed_controls.h\"\n> +#include \"../common/delayed_controls.h\"\n> +#include \"../common/rpi_stream.h\"\n>  #include \"dma_heaps.h\"\n> -#include \"rpi_stream.h\"\n>  \n>  using namespace std::chrono_literals;\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 57AB4BD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  4 May 2023 16:23:38 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D101A633B4;\n\tThu,  4 May 2023 18:23:37 +0200 (CEST)","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 ED1D261EAE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  4 May 2023 18:23:35 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(133-32-181-51.west.xps.vectant.ne.jp [133.32.181.51])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 8EA527CE;\n\tThu,  4 May 2023 18:23:31 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1683217417;\n\tbh=kKz0Ug72gFjfiqx3aHALUAChFI79emwHJIj99KUUR/A=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=cOXZEB2yjFlA96xlTqLDKrvtqyPH0quzDxIt3v5xV/+wJ+RK3RKM7LgqMWJlNb+eX\n\tWbe2llwDAT1yASeX4PLf4F0rfPJ3xP/V/PA0lRP5q/J5A+kxKyfUs0L/VrkGZo/0li\n\tfg0yXX4oGdOqunmMmbIxtf+Lnt/aa6ytyl5itFmmNM/0x/lu/OhGRgn1r3ENoQ7mBz\n\tun66PVD/i2pJjdGTKVkgSMO41VMdsnvkJTtqArPoO2MwlbPblT9KyDNHfuDNxFPC4T\n\t2V3F5w6VgOgP9865dwiZiFSq4gdBwih+m/wN/AQ4kaibW0T1hVbPwByUJftRUhHZoe\n\tkdi5yT2R7PR8w==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1683217412;\n\tbh=kKz0Ug72gFjfiqx3aHALUAChFI79emwHJIj99KUUR/A=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=Q06Xd4FT6cE55uyWcIPgUl2WMuYNT4V1Tq5ZUQl5usbnHrBWkm0bfAoKo7rwCaMTf\n\tLP52sB7A2xopRNZh5qnVEC/g9x8j7eeiJLB1tXA9F+G81XqIov0eReXWbjU7jMmH64\n\t1CFYKnoV1fAIXA7mElFB2y+x4UhyQgC+gQds7TKM="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"Q06Xd4FT\"; dkim-atps=neutral","Date":"Thu, 4 May 2023 19:23:47 +0300","To":"Naushir Patuck <naush@raspberrypi.com>","Message-ID":"<20230504162347.GO4551@pendragon.ideasonboard.com>","References":"<20230503122035.32026-1-naush@raspberrypi.com>\n\t<20230503122035.32026-6-naush@raspberrypi.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20230503122035.32026-6-naush@raspberrypi.com>","Subject":"Re: [libcamera-devel] [PATCH 05/13] pipeline: raspberrypi: Refactor\n\tand move pipeline handler code","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>","From":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]