From patchwork Tue Aug 23 17:43:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 17190 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 88EAFC327D for ; Tue, 23 Aug 2022 17:43:28 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 1C34A61FCE; Tue, 23 Aug 2022 19:43:28 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1661276608; bh=Q8xm+HRrwp36abDQNeAE8x0BCMzSovEjbAzWH2WvBO4=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=aRaD+Vw+9M+3L2fASrmcGr5VMhTHsZmzY0uGpothbbezg4C6LOKMJg0uBxUXCh2h0 JHJcpTF2fQbJ94XmALOfGK5K9YZrjNC1p6YgxXCzlwbm9twDZyUtVcVaXXQUX3PfFr zaz85Rd3offzUsN88Qh7tFa+hmNwrb2uUz+xp+i+7ZtASRekrvfKDlC6V6W74sRRuN RL1wcbWT07AS01eEhqtLy4sNVSwY6f/mxPp1W8HRHNY5kxok/OMxRn4vRII6cKzuMk 9CLh72ILePnoAuo6ZRFCPBDEddkcKyabM5ctMyNBbNhMYhdhwENPqYrQM3w8JyDjva 4lxTdKNy1TGqQ== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 1B0B461FC9 for ; Tue, 23 Aug 2022 19:43:26 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="LTX2zNXs"; dkim-atps=neutral Received: from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 9B566484 for ; Tue, 23 Aug 2022 19:43:25 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1661276605; bh=Q8xm+HRrwp36abDQNeAE8x0BCMzSovEjbAzWH2WvBO4=; h=From:To:Subject:Date:In-Reply-To:References:From; b=LTX2zNXsP1eUV95xfbmzZq1NAu5QENSJCbS7Jt/HqIHxRM1Oh4m3GGKZL2yeP2Lrs Kj1OVIUm10OeJiLtJrZOsLVu4BmX6l2pvlml1XAHv2lKZLuJcoPApcSejKXTpQIUjH BHCHvQZ+OTdX6+qgS/3rCCW2ctY0h8QOepPURmCw= To: libcamera-devel@lists.libcamera.org Date: Tue, 23 Aug 2022 20:43:12 +0300 Message-Id: <20220823174314.14881-5-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220823174314.14881-1-laurent.pinchart@ideasonboard.com> References: <20220823174314.14881-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 4/6] test: Add a ColorSpace test X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Laurent Pinchart via libcamera-devel From: Laurent Pinchart Reply-To: Laurent Pinchart Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add a test for the ColorSpace class that exercises the toString() and fromString() functions. Signed-off-by: Laurent Pinchart Reviewed-by: Umang Jain Reviewed-by: Paul Elder --- test/color-space.cpp | 105 +++++++++++++++++++++++++++++++++++++++++++ test/meson.build | 1 + 2 files changed, 106 insertions(+) create mode 100644 test/color-space.cpp diff --git a/test/color-space.cpp b/test/color-space.cpp new file mode 100644 index 000000000000..7d45b2179bca --- /dev/null +++ b/test/color-space.cpp @@ -0,0 +1,105 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2022, Laurent Pinchart + * + * libcamera ColorSpace test + */ + +#include +#include + +#include + +#include "test.h" + +using namespace libcamera; +using namespace std; + +class ColorSpaceTest : public Test +{ +protected: + int run() + { + if (ColorSpace::toString(std::nullopt) != "Unset") { + std::cerr << "Conversion from nullopt to string failed" << std::endl; + return TestFail; + } + + const std::array, 10> colorSpaces = { { + { ColorSpace::Raw, "RAW" }, + { ColorSpace::Srgb, "sRGB" }, + { ColorSpace::Sycc, "sYCC" }, + { ColorSpace::Smpte170m, "SMPTE170M" }, + { ColorSpace::Rec709, "Rec709" }, + { ColorSpace::Rec2020, "Rec2020" }, + { + ColorSpace{ + ColorSpace::Primaries::Raw, + ColorSpace::TransferFunction::Linear, + ColorSpace::YcbcrEncoding::None, + ColorSpace::Range::Limited + }, + "RAW/Linear/None/Limited" + }, { + ColorSpace{ + ColorSpace::Primaries::Smpte170m, + ColorSpace::TransferFunction::Srgb, + ColorSpace::YcbcrEncoding::Rec601, + ColorSpace::Range::Full + }, + "SMPTE170M/sRGB/Rec601/Full" + }, { + ColorSpace{ + ColorSpace::Primaries::Rec709, + ColorSpace::TransferFunction::Rec709, + ColorSpace::YcbcrEncoding::Rec709, + ColorSpace::Range::Full + }, + "Rec709/Rec709/Rec709/Full" + }, { + ColorSpace{ + ColorSpace::Primaries::Rec2020, + ColorSpace::TransferFunction::Linear, + ColorSpace::YcbcrEncoding::Rec2020, + ColorSpace::Range::Limited + }, + "Rec2020/Linear/Rec2020/Limited" + }, + } }; + + for (const auto &[colorSpace, name] : colorSpaces) { + if (colorSpace.toString() != name) { + std::cerr + << "Conversion from ColorSpace to string failed: " + << "expected " << name + << ", got " << colorSpace.toString() + << std::endl; + return TestFail; + } + + if (ColorSpace::fromString(name) != colorSpace) { + std::cerr + << "Conversion from string " + << name << " to ColorSpace failed" + << std::endl; + return TestFail; + } + } + + if (ColorSpace::fromString("Invalid")) { + std::cerr << "Conversion from invalid name string to color space succeeded" + << std::endl; + return TestFail; + } + + if (ColorSpace::fromString("Rec709/Rec709/Rec710/Limited")) { + std::cerr << "Conversion from invalid component string to color space succeeded" + << std::endl; + return TestFail; + } + + return TestPass; + } +}; + +TEST_REGISTER(ColorSpaceTest) diff --git a/test/meson.build b/test/meson.build index d050bfa14cec..6cc778415dc8 100644 --- a/test/meson.build +++ b/test/meson.build @@ -26,6 +26,7 @@ subdir('v4l2_subdevice') subdir('v4l2_videodevice') public_tests = [ + ['color-space', 'color-space.cpp'], ['geometry', 'geometry.cpp'], ['public-api', 'public-api.cpp'], ['signal', 'signal.cpp'],