libcamera: Add ColorSpace class

This class represents a color space by defining its color primaries,
the transfer (gamma) function it uses, the YCbCr encoding and whether
the output is full or limited range.

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
David Plowman 2021-12-10 14:44:17 +00:00 committed by Laurent Pinchart
parent 015fa7f718
commit ddb5e9d37e
4 changed files with 389 additions and 0 deletions

View file

@ -0,0 +1,70 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2021, Raspberry Pi (Trading) Limited
*
* color_space.h - color space definitions
*/
#pragma once
#include <optional>
#include <string>
namespace libcamera {
class ColorSpace
{
public:
enum class Primaries {
Raw,
Smpte170m,
Rec709,
Rec2020,
};
enum class TransferFunction {
Linear,
Srgb,
Rec709,
};
enum class YcbcrEncoding {
None,
Rec601,
Rec709,
Rec2020,
};
enum class Range {
Full,
Limited,
};
constexpr ColorSpace(Primaries p, TransferFunction t, YcbcrEncoding e, Range r)
: primaries(p), transferFunction(t), ycbcrEncoding(e), range(r)
{
}
static const ColorSpace Raw;
static const ColorSpace Jpeg;
static const ColorSpace Srgb;
static const ColorSpace Smpte170m;
static const ColorSpace Rec709;
static const ColorSpace Rec2020;
Primaries primaries;
TransferFunction transferFunction;
YcbcrEncoding ycbcrEncoding;
Range range;
std::string toString() const;
static std::string toString(const std::optional<ColorSpace> &colorSpace);
};
bool operator==(const ColorSpace &lhs, const ColorSpace &rhs);
static inline bool operator!=(const ColorSpace &lhs, const ColorSpace &rhs)
{
return !(lhs == rhs);
}
} /* namespace libcamera */

View file

@ -5,6 +5,7 @@ libcamera_include_dir = 'libcamera' / 'libcamera'
libcamera_public_headers = files([
'camera.h',
'camera_manager.h',
'color_space.h',
'controls.h',
'fence.h',
'framebuffer.h',