Source code
Revision control
Copy as Markdown
Other Tools
/* Simple Plugin API */
/* SPDX-FileCopyrightText: Copyright © 2018 Wim Taymans */
/* SPDX-License-Identifier: MIT */
#ifndef SPA_VIDEO_COLOR_H
#define SPA_VIDEO_COLOR_H
#ifdef __cplusplus
extern "C" {
#endif
/**
* \addtogroup spa_param
* \{
*/
/**
* Possible color range values. These constants are defined for 8 bit color
* values and can be scaled for other bit depths.
*/
enum spa_video_color_range {
SPA_VIDEO_COLOR_RANGE_UNKNOWN = 0, /**< unknown range */
SPA_VIDEO_COLOR_RANGE_0_255, /**< [0..255] for 8 bit components */
SPA_VIDEO_COLOR_RANGE_16_235 /**< [16..235] for 8 bit components. Chroma has
[16..240] range. */
};
/**
* The color matrix is used to convert between Y'PbPr and
* non-linear RGB (R'G'B')
*/
enum spa_video_color_matrix {
SPA_VIDEO_COLOR_MATRIX_UNKNOWN = 0, /**< unknown matrix */
SPA_VIDEO_COLOR_MATRIX_RGB, /**< identity matrix */
SPA_VIDEO_COLOR_MATRIX_FCC, /**< FCC color matrix */
SPA_VIDEO_COLOR_MATRIX_BT709, /**< ITU BT.709 color matrix */
SPA_VIDEO_COLOR_MATRIX_BT601, /**< ITU BT.601 color matrix */
SPA_VIDEO_COLOR_MATRIX_SMPTE240M, /**< SMTPE 240M color matrix */
SPA_VIDEO_COLOR_MATRIX_BT2020, /**< ITU-R BT.2020 color matrix. since 1.6. */
};
/**
* The video transfer function defines the formula for converting between
* non-linear RGB (R'G'B') and linear RGB
*/
enum spa_video_transfer_function {
SPA_VIDEO_TRANSFER_UNKNOWN = 0, /**< unknown transfer function */
SPA_VIDEO_TRANSFER_GAMMA10, /**< linear RGB, gamma 1.0 curve */
SPA_VIDEO_TRANSFER_GAMMA18, /**< Gamma 1.8 curve */
SPA_VIDEO_TRANSFER_GAMMA20, /**< Gamma 2.0 curve */
SPA_VIDEO_TRANSFER_GAMMA22, /**< Gamma 2.2 curve */
SPA_VIDEO_TRANSFER_BT709, /**< Gamma 2.2 curve with a linear segment in the lower range */
SPA_VIDEO_TRANSFER_SMPTE240M, /**< Gamma 2.2 curve with a linear segment in the lower range */
SPA_VIDEO_TRANSFER_SRGB, /**< Gamma 2.4 curve with a linear segment in the lower range */
SPA_VIDEO_TRANSFER_GAMMA28, /**< Gamma 2.8 curve */
SPA_VIDEO_TRANSFER_LOG100, /**< Logarithmic transfer characteristic 100:1 range */
SPA_VIDEO_TRANSFER_LOG316, /**< Logarithmic transfer characteristic 316.22777:1 range */
SPA_VIDEO_TRANSFER_BT2020_12, /**< Gamma 2.2 curve with a linear segment in the lower
* range. Used for BT.2020 with 12 bits per
* component. \since 1.6. */
SPA_VIDEO_TRANSFER_ADOBERGB, /**< Gamma 2.19921875. \since 1.8 */
};
/**
* The color primaries define the how to transform linear RGB values to and from
* the CIE XYZ colorspace.
*/
enum spa_video_color_primaries {
SPA_VIDEO_COLOR_PRIMARIES_UNKNOWN = 0, /**< unknown color primaries */
SPA_VIDEO_COLOR_PRIMARIES_BT709, /**< BT709 primaries */
SPA_VIDEO_COLOR_PRIMARIES_BT470M, /**< BT470M primaries */
SPA_VIDEO_COLOR_PRIMARIES_BT470BG, /**< BT470BG primaries */
SPA_VIDEO_COLOR_PRIMARIES_SMPTE170M, /**< SMPTE170M primaries */
SPA_VIDEO_COLOR_PRIMARIES_SMPTE240M, /**< SMPTE240M primaries */
SPA_VIDEO_COLOR_PRIMARIES_FILM, /**< Generic film */
SPA_VIDEO_COLOR_PRIMARIES_BT2020, /**< BT2020 primaries. \since 1.6. */
SPA_VIDEO_COLOR_PRIMARIES_ADOBERGB, /**< Adobe RGB primaries. \since 1.8 */
};
/**
* spa_video_colorimetry:
*
* Structure describing the color info.
*/
struct spa_video_colorimetry {
enum spa_video_color_range range; /**< The color range. This is the valid range for the
* samples. It is used to convert the samples to Y'PbPr
* values. */
enum spa_video_color_matrix matrix; /**< the color matrix. Used to convert between Y'PbPr and
* non-linear RGB (R'G'B') */
enum spa_video_transfer_function transfer; /**< The transfer function. Used to convert between
* R'G'B' and RGB */
enum spa_video_color_primaries primaries; /**< Color primaries. Used to convert between R'G'B'
* and CIE XYZ */
};
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* SPA_VIDEO_COLOR_H */