[{"id":34232,"web_url":"https://patchwork.libcamera.org/comment/34232/","msgid":"<174716270713.233090.15742231526636569444@pyrite.rasen.tech>","date":"2025-05-13T18:58:27","subject":"Re: [PATCH v11 13/19] lc-compliance: Move camera setup to\n\tCameraHolder class","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"Quoting Sven Püschel (2025-04-28 11:02:38)\n> From: Nícolas F. R. A. Prado <nfraprado@collabora.com>\n> \n> Different base classes can be used for different setups on tests, but\n> all of them will need to setup the camera for the test. To reuse that\n> code, move it to a separate CameraHolder class that is inherited by test\n> classes.\n> \n> Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> Signed-off-by: Sven Püschel <s.pueschel@pengutronix.de>\n\nThis patch is useful and can be merged as-is alone. I've pushed it.\n\n\nPaul\n\n> \n> ---\n> Changes in v11:\n> - rebased\n> \n> Changes in v9:\n> - rebased\n> \n> Changes in v8:\n> - Moved CameraHolder to new test_base.{cpp,h} files\n> \n> Changes in v5:\n> - New\n> ---\n>  src/apps/lc-compliance/meson.build            |  1 +\n>  src/apps/lc-compliance/test_base.cpp          | 28 +++++++++++++++++++\n>  src/apps/lc-compliance/test_base.h            | 24 ++++++++++++++++\n>  src/apps/lc-compliance/tests/capture_test.cpp | 18 +++---------\n>  4 files changed, 57 insertions(+), 14 deletions(-)\n>  create mode 100644 src/apps/lc-compliance/test_base.cpp\n>  create mode 100644 src/apps/lc-compliance/test_base.h\n> \n> diff --git a/src/apps/lc-compliance/meson.build b/src/apps/lc-compliance/meson.build\n> index b1f605f3..80b9a160 100644\n> --- a/src/apps/lc-compliance/meson.build\n> +++ b/src/apps/lc-compliance/meson.build\n> @@ -15,6 +15,7 @@ lc_compliance_sources = files([\n>      'environment.cpp',\n>      'helpers/capture.cpp',\n>      'main.cpp',\n> +    'test_base.cpp',\n>      'tests/capture_test.cpp',\n>  ])\n>  \n> diff --git a/src/apps/lc-compliance/test_base.cpp b/src/apps/lc-compliance/test_base.cpp\n> new file mode 100644\n> index 00000000..c9957b9e\n> --- /dev/null\n> +++ b/src/apps/lc-compliance/test_base.cpp\n> @@ -0,0 +1,28 @@\n> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> +/*\n> + * Copyright (C) 2021, Collabora Ltd.\n> + *\n> + * test_base.cpp - Base definitions for tests\n> + */\n> +\n> +#include \"test_base.h\"\n> +\n> +#include \"environment.h\"\n> +\n> +void CameraHolder::acquireCamera()\n> +{\n> +       Environment *env = Environment::get();\n> +\n> +       camera_ = env->cm()->get(env->cameraId());\n> +\n> +       ASSERT_EQ(camera_->acquire(), 0);\n> +}\n> +\n> +void CameraHolder::releaseCamera()\n> +{\n> +       if (!camera_)\n> +               return;\n> +\n> +       camera_->release();\n> +       camera_.reset();\n> +}\n> diff --git a/src/apps/lc-compliance/test_base.h b/src/apps/lc-compliance/test_base.h\n> new file mode 100644\n> index 00000000..52347749\n> --- /dev/null\n> +++ b/src/apps/lc-compliance/test_base.h\n> @@ -0,0 +1,24 @@\n> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> +/*\n> + * Copyright (C) 2021, Collabora Ltd.\n> + *\n> + * test_base.h - Base definitions for tests\n> + */\n> +\n> +#ifndef __LC_COMPLIANCE_TEST_BASE_H__\n> +#define __LC_COMPLIANCE_TEST_BASE_H__\n> +\n> +#include <libcamera/libcamera.h>\n> +\n> +#include <gtest/gtest.h>\n> +\n> +class CameraHolder\n> +{\n> +protected:\n> +       void acquireCamera();\n> +       void releaseCamera();\n> +\n> +       std::shared_ptr<libcamera::Camera> camera_;\n> +};\n> +\n> +#endif /* __LC_COMPLIANCE_TEST_BASE_H__ */\n> diff --git a/src/apps/lc-compliance/tests/capture_test.cpp b/src/apps/lc-compliance/tests/capture_test.cpp\n> index 9fb82a2b..24081fef 100644\n> --- a/src/apps/lc-compliance/tests/capture_test.cpp\n> +++ b/src/apps/lc-compliance/tests/capture_test.cpp\n> @@ -15,13 +15,13 @@\n>  \n>  #include <gtest/gtest.h>\n>  \n> -#include \"environment.h\"\n> +#include \"test_base.h\"\n>  \n>  namespace {\n>  \n>  using namespace libcamera;\n>  \n> -class SimpleCapture : public testing::TestWithParam<std::tuple<std::vector<StreamRole>, int>>\n> +class SimpleCapture : public testing::TestWithParam<std::tuple<std::vector<StreamRole>, int>>, public CameraHolder\n>  {\n>  public:\n>         static std::string nameParameters(const testing::TestParamInfo<SimpleCapture::ParamType> &info);\n> @@ -29,8 +29,6 @@ public:\n>  protected:\n>         void SetUp() override;\n>         void TearDown() override;\n> -\n> -       std::shared_ptr<Camera> camera_;\n>  };\n>  \n>  /*\n> @@ -39,20 +37,12 @@ protected:\n>   */\n>  void SimpleCapture::SetUp()\n>  {\n> -       Environment *env = Environment::get();\n> -\n> -       camera_ = env->cm()->get(env->cameraId());\n> -\n> -       ASSERT_EQ(camera_->acquire(), 0);\n> +       acquireCamera();\n>  }\n>  \n>  void SimpleCapture::TearDown()\n>  {\n> -       if (!camera_)\n> -               return;\n> -\n> -       camera_->release();\n> -       camera_.reset();\n> +       releaseCamera();\n>  }\n>  \n>  std::string SimpleCapture::nameParameters(const testing::TestParamInfo<SimpleCapture::ParamType> &info)\n> -- \n> 2.49.0\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 C3843C3220\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 13 May 2025 18:58:32 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C46ED68B64;\n\tTue, 13 May 2025 20:58:31 +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 8711868B40\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 13 May 2025 20:58:30 +0200 (CEST)","from pyrite.rasen.tech (unknown\n\t[IPv6:2001:861:3a80:3300:4f2f:8c2c:b3ef:17d4])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 78AC97E4;\n\tTue, 13 May 2025 20:58:14 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"pxUxTJns\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1747162694;\n\tbh=PxgWHm8GK3l2MiwYvX3f73zxo+v0mOqgYlip5Ne5sDg=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=pxUxTJnskcqIOKOzwVQ+QNdjDwW1K7484vap0GQ70QPz647l1E/km3AAQwUNxrM0n\n\t0nB+ZCX9RJTPCN2LeDWOBfcA60Pb7JJzzlGeSlHCcrv7xxGjCz1rnbJQ0J4wW+pqgJ\n\t4yr59g4+WtENVAjEkImPZpo1LHkJHBtJIsM8Ut48=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20250428090413.38234-14-s.pueschel@pengutronix.de>","References":"<20250428090413.38234-1-s.pueschel@pengutronix.de>\n\t<20250428090413.38234-14-s.pueschel@pengutronix.de>","Subject":"Re: [PATCH v11 13/19] lc-compliance: Move camera setup to\n\tCameraHolder class","From":"Paul Elder <paul.elder@ideasonboard.com>","Cc":"=?utf-8?q?N=C3=ADcolas?= F. R. A. Prado <nfraprado@collabora.com>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>, Sven\n\t=?utf-8?q?P=C3=BCschel?= <s.pueschel@pengutronix.de>","To":"Sven =?utf-8?q?P=C3=BCschel?= <s.pueschel@pengutronix.de>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Tue, 13 May 2025 20:58:27 +0200","Message-ID":"<174716270713.233090.15742231526636569444@pyrite.rasen.tech>","User-Agent":"alot/0.0.0","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>"}}]