From patchwork Sun Jul 24 14:43:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Umang Jain X-Patchwork-Id: 16751 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 C26B0BE173 for ; Sun, 24 Jul 2022 14:44:12 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 8069C63318; Sun, 24 Jul 2022 16:44:12 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1658673852; bh=p3zcJc7vBKICC5GwNKYYxll+zLwA+KFyD6S76yoHSt8=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=GkiJG7riVQ0Xy36YQFfIm0zv7AqDxSmcx2Dm03SdyoXAF+YQYJV4vPhR1laSks5BO d1CmV81nLDkSXfHDZ3aRbGcjt0KE/Rlte1duFl/2uSIR/4Kuq/djcJhiFsN7ohpjhT vbdqy07ji5xQwxgXTfQvFVWtRHlj0a367o9s8PTBpADX/ZzhEygv7Pr3VG/5HM+DM5 636dqhcQ/iNQvjFE9QSCBAt2x9beUanYDpZjomqDvQyMeKcOORDkH0Pr7qSeQazBBb s8tlBnaeo1qy1/hUl7ah6Auk+qq9pLGLFaZpfaWX5akXyOPKsVGLE5e/MZv8FbMBVC nVI34NS+9x6ew== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 52E736330D for ; Sun, 24 Jul 2022 16:44:10 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="rhdeHjhY"; dkim-atps=neutral Received: from perceval.ideasonboard.com (unknown [IPv6:2401:4900:1f3e:f7a:bc8f:12ed:b45f:c35d]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id ACDE9835; Sun, 24 Jul 2022 16:44:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1658673850; bh=p3zcJc7vBKICC5GwNKYYxll+zLwA+KFyD6S76yoHSt8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rhdeHjhY4bAmGfqFRr7WctuBNKinaLJl3KR513YXXynbLTnfTwZNsp3K3BdZdh6bj fOt3S08iYkn/WADe2jAG6hDlI1TvcXGICRml5d0f4EmzQ1nANuG7x8BDXHaHZ9/Okj 7ARVhv2DXeTAxHltCkc2AGveQ2JjOi9c/pnfEX7E= To: libcamera-devel@lists.libcamera.org Date: Sun, 24 Jul 2022 20:13:54 +0530 Message-Id: <20220724144355.104978-3-umang.jain@ideasonboard.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220724144355.104978-1-umang.jain@ideasonboard.com> References: <20220724144355.104978-1-umang.jain@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 2/3] libcamera: colorspace: Add a default colorspace 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: Umang Jain via libcamera-devel From: Umang Jain Reply-To: Umang Jain Cc: rishikeshdonadkar@gmail.com, nicolas.dufresne@collabora.com, vedantparanjape160201@gmail.com Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add a Colorspace::Default which corresponds to default V4L2 colorspace identifiers. \todo Add defaults to python colorspace bindings Signed-off-by: Umang Jain --- include/libcamera/color_space.h | 5 +++++ src/libcamera/color_space.cpp | 29 ++++++++++++++++++++++++++++- src/libcamera/v4l2_device.cpp | 5 +++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/include/libcamera/color_space.h b/include/libcamera/color_space.h index 086c56c1..0ad8da17 100644 --- a/include/libcamera/color_space.h +++ b/include/libcamera/color_space.h @@ -16,6 +16,7 @@ class ColorSpace { public: enum class Primaries { + Default, Raw, Smpte170m, Rec709, @@ -23,12 +24,14 @@ public: }; enum class TransferFunction { + Default, Linear, Srgb, Rec709, }; enum class YcbcrEncoding { + Default, None, Rec601, Rec709, @@ -36,6 +39,7 @@ public: }; enum class Range { + Default, Full, Limited, }; @@ -45,6 +49,7 @@ public: { } + static const ColorSpace Default; static const ColorSpace Raw; static const ColorSpace Jpeg; static const ColorSpace Srgb; diff --git a/src/libcamera/color_space.cpp b/src/libcamera/color_space.cpp index 895e5c8e..d52f58cf 100644 --- a/src/libcamera/color_space.cpp +++ b/src/libcamera/color_space.cpp @@ -50,6 +50,9 @@ namespace libcamera { * \enum ColorSpace::Primaries * \brief The color primaries for this color space * + * \var ColorSpace::Primaries::Default + * \brief Use the default primaries as defined by the driver + * * \var ColorSpace::Primaries::Raw * \brief These are raw colors directly from a sensor, the primaries are * unspecified @@ -68,6 +71,9 @@ namespace libcamera { * \enum ColorSpace::TransferFunction * \brief The transfer function used for this color space * + * \var ColorSpace::TransferFunction::Default + * \brief Use the default transfer function as defined by the driver + * * \var ColorSpace::TransferFunction::Linear * \brief This color space uses a linear (identity) transfer function * @@ -82,6 +88,9 @@ namespace libcamera { * \enum ColorSpace::YcbcrEncoding * \brief The Y'CbCr encoding * + * \var ColorSpace::YcbcrEncoding::Default + * \brief Use the default Y'CbCr encoding as defined by the driver + * * \var ColorSpace::YcbcrEncoding::None * \brief There is no defined Y'CbCr encoding (used for non-YUV formats) * @@ -99,6 +108,9 @@ namespace libcamera { * \enum ColorSpace::Range * \brief The range (sometimes "quantisation") for this color space * + * \var ColorSpace::Range::Default + * Use the default range as defined by the driver + * * \var ColorSpace::Range::Full * \brief This color space uses full range pixel values * @@ -132,7 +144,8 @@ std::string ColorSpace::toString() const { /* Print out a brief name only for standard color spaces. */ - static const std::array, 6> colorSpaceNames = { { + static const std::array, 7> colorSpaceNames = { { + { ColorSpace::Default, "Default" }, { ColorSpace::Raw, "RAW" }, { ColorSpace::Jpeg, "JPEG" }, { ColorSpace::Srgb, "sRGB" }, @@ -150,23 +163,27 @@ std::string ColorSpace::toString() const /* Assemble a name made of the constituent fields. */ static const std::map primariesNames = { + { Primaries::Default, "Default" }, { Primaries::Raw, "RAW" }, { Primaries::Smpte170m, "SMPTE170M" }, { Primaries::Rec709, "Rec709" }, { Primaries::Rec2020, "Rec2020" }, }; static const std::map transferNames = { + { TransferFunction::Default, "Default" }, { TransferFunction::Linear, "Linear" }, { TransferFunction::Srgb, "sRGB" }, { TransferFunction::Rec709, "Rec709" }, }; static const std::map encodingNames = { + { YcbcrEncoding::Default, "Default" }, { YcbcrEncoding::None, "None" }, { YcbcrEncoding::Rec601, "Rec601" }, { YcbcrEncoding::Rec709, "Rec709" }, { YcbcrEncoding::Rec2020, "Rec2020" }, }; static const std::map rangeNames = { + { Range::Default, "Default" }, { Range::Full, "Full" }, { Range::Limited, "Limited" }, }; @@ -232,6 +249,16 @@ std::string ColorSpace::toString(const std::optional &colorSpace) * \brief The pixel range used with by color space */ +/** + * \brief A constant representing a default color space + */ +const ColorSpace ColorSpace::Default = { + Primaries::Default, + TransferFunction::Default, + YcbcrEncoding::Default, + Range::Default +}; + /** * \brief A constant representing a raw color space (from a sensor) */ diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp index 3fc8438f..ecfcf337 100644 --- a/src/libcamera/v4l2_device.cpp +++ b/src/libcamera/v4l2_device.cpp @@ -770,6 +770,7 @@ static const std::map v4l2ToRange = { }; static const std::vector> colorSpaceToV4l2 = { + { ColorSpace::Default, V4L2_COLORSPACE_DEFAULT }, { ColorSpace::Raw, V4L2_COLORSPACE_RAW }, { ColorSpace::Jpeg, V4L2_COLORSPACE_JPEG }, { ColorSpace::Srgb, V4L2_COLORSPACE_SRGB }, @@ -779,6 +780,7 @@ static const std::vector> colorSpaceToV4l }; static const std::map primariesToV4l2 = { + { ColorSpace::Primaries::Default, V4L2_COLORSPACE_DEFAULT }, { ColorSpace::Primaries::Raw, V4L2_COLORSPACE_RAW }, { ColorSpace::Primaries::Smpte170m, V4L2_COLORSPACE_SMPTE170M }, { ColorSpace::Primaries::Rec709, V4L2_COLORSPACE_REC709 }, @@ -786,18 +788,21 @@ static const std::map primariesToV4l2 = }; static const std::map transferFunctionToV4l2 = { + { ColorSpace::TransferFunction::Default, V4L2_XFER_FUNC_DEFAULT }, { ColorSpace::TransferFunction::Linear, V4L2_XFER_FUNC_NONE }, { ColorSpace::TransferFunction::Srgb, V4L2_XFER_FUNC_SRGB }, { ColorSpace::TransferFunction::Rec709, V4L2_XFER_FUNC_709 }, }; static const std::map ycbcrEncodingToV4l2 = { + { ColorSpace::YcbcrEncoding::Default, V4L2_YCBCR_ENC_DEFAULT }, { ColorSpace::YcbcrEncoding::Rec601, V4L2_YCBCR_ENC_601 }, { ColorSpace::YcbcrEncoding::Rec709, V4L2_YCBCR_ENC_709 }, { ColorSpace::YcbcrEncoding::Rec2020, V4L2_YCBCR_ENC_BT2020 }, }; static const std::map rangeToV4l2 = { + { ColorSpace::Range::Default, V4L2_QUANTIZATION_DEFAULT }, { ColorSpace::Range::Full, V4L2_QUANTIZATION_FULL_RANGE }, { ColorSpace::Range::Limited, V4L2_QUANTIZATION_LIM_RANGE }, };