Program Listing for File ColorSpec.h
↰ Return to documentation for file (nvcv_types/include/nvcv/ColorSpec.h
)
/*
* SPDX-FileCopyrightText: Copyright (c) 2022-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef NVCV_FORMAT_COLORSPEC_H
#define NVCV_FORMAT_COLORSPEC_H
#include "detail/FormatUtils.h"
#include <nvcv/Export.h>
#include <nvcv/Status.h>
#ifdef __cplusplus
extern "C"
{
#endif
typedef enum
{
NVCV_COLOR_MODEL_UNDEFINED = 0,
NVCV_COLOR_MODEL_YCbCr = 1,
NVCV_COLOR_MODEL_RGB = 2,
NVCV_COLOR_MODEL_RAW = 2 + 7,
NVCV_COLOR_MODEL_XYZ,
NVCV_COLOR_MODEL_HSV,
NVCV_COLOR_MODEL_CMYK,
NVCV_COLOR_MODEL_YCCK
} NVCVColorModel;
typedef enum
{
NVCV_COLOR_SPACE_BT601,
NVCV_COLOR_SPACE_BT709,
NVCV_COLOR_SPACE_BT2020,
NVCV_COLOR_SPACE_DCIP3,
} NVCVColorSpace;
typedef enum
{
NVCV_WHITE_POINT_D65,
NVCV_WHITE_POINT_FORCE8 = UINT8_MAX
/* \endcond */
} NVCVWhitePoint;
typedef enum
{
NVCV_YCbCr_ENC_UNDEFINED = 0,
NVCV_YCbCr_ENC_BT601,
NVCV_YCbCr_ENC_BT709,
NVCV_YCbCr_ENC_BT2020,
NVCV_YCbCr_ENC_BT2020c,
NVCV_YCbCr_ENC_SMPTE240M,
} NVCVYCbCrEncoding;
typedef enum
{
NVCV_COLOR_XFER_LINEAR,
NVCV_COLOR_XFER_sRGB,
NVCV_COLOR_XFER_sYCC,
NVCV_COLOR_XFER_PQ,
NVCV_COLOR_XFER_BT709,
NVCV_COLOR_XFER_BT2020,
NVCV_COLOR_XFER_SMPTE240M,
} NVCVColorTransferFunction;
typedef enum
{
NVCV_COLOR_RANGE_FULL,
NVCV_COLOR_RANGE_LIMITED
} NVCVColorRange;
typedef enum
{
NVCV_CHROMA_LOC_BOTH = 0,
NVCV_CHROMA_LOC_EVEN,
NVCV_CHROMA_LOC_CENTER,
NVCV_CHROMA_LOC_ODD,
} NVCVChromaLocation;
/* clang-format off */
typedef enum
{
NVCV_COLOR_SPEC_UNDEFINED = NVCV_DETAIL_MAKE_CSPC(SPACE_BT709, ENC_UNDEFINED, XFER_LINEAR, RANGE_FULL, LOC_BOTH, LOC_BOTH),
NVCV_COLOR_SPEC_BT601 = NVCV_DETAIL_MAKE_CSPC(SPACE_BT709, ENC_BT601, XFER_BT709, RANGE_LIMITED, LOC_EVEN, LOC_EVEN),
NVCV_COLOR_SPEC_BT601_ER = NVCV_DETAIL_MAKE_CSPC(SPACE_BT709, ENC_BT601, XFER_BT709, RANGE_FULL, LOC_EVEN, LOC_EVEN),
NVCV_COLOR_SPEC_BT709 = NVCV_DETAIL_MAKE_CSPC(SPACE_BT709, ENC_BT709, XFER_BT709, RANGE_LIMITED, LOC_EVEN, LOC_EVEN),
NVCV_COLOR_SPEC_BT709_ER = NVCV_DETAIL_MAKE_CSPC(SPACE_BT709, ENC_BT709, XFER_BT709, RANGE_FULL, LOC_EVEN, LOC_EVEN),
NVCV_COLOR_SPEC_BT709_LINEAR = NVCV_DETAIL_MAKE_CSPC(SPACE_BT709, ENC_BT709, XFER_LINEAR, RANGE_LIMITED, LOC_EVEN, LOC_EVEN),
NVCV_COLOR_SPEC_BT2020 = NVCV_DETAIL_MAKE_CSPC(SPACE_BT2020, ENC_BT2020, XFER_BT2020, RANGE_LIMITED, LOC_EVEN, LOC_EVEN),
NVCV_COLOR_SPEC_BT2020_ER = NVCV_DETAIL_MAKE_CSPC(SPACE_BT2020, ENC_BT2020, XFER_BT2020, RANGE_FULL, LOC_EVEN, LOC_EVEN),
NVCV_COLOR_SPEC_BT2020_LINEAR = NVCV_DETAIL_MAKE_CSPC(SPACE_BT2020, ENC_BT2020, XFER_LINEAR, RANGE_LIMITED, LOC_EVEN, LOC_EVEN),
NVCV_COLOR_SPEC_BT2020_PQ = NVCV_DETAIL_MAKE_CSPC(SPACE_BT2020, ENC_BT2020, XFER_PQ, RANGE_LIMITED, LOC_EVEN, LOC_EVEN),
NVCV_COLOR_SPEC_BT2020_PQ_ER = NVCV_DETAIL_MAKE_CSPC(SPACE_BT2020, ENC_BT2020, XFER_PQ, RANGE_FULL, LOC_EVEN, LOC_EVEN),
NVCV_COLOR_SPEC_BT2020c = NVCV_DETAIL_MAKE_CSPC(SPACE_BT2020, ENC_BT2020c, XFER_BT2020, RANGE_LIMITED, LOC_EVEN, LOC_EVEN),
NVCV_COLOR_SPEC_BT2020c_ER = NVCV_DETAIL_MAKE_CSPC(SPACE_BT2020, ENC_BT2020c, XFER_BT2020, RANGE_FULL, LOC_EVEN, LOC_EVEN),
NVCV_COLOR_SPEC_MPEG2_BT601 = NVCV_DETAIL_MAKE_CSPC(SPACE_BT709, ENC_BT601, XFER_BT709, RANGE_FULL, LOC_EVEN, LOC_CENTER),
NVCV_COLOR_SPEC_MPEG2_BT709 = NVCV_DETAIL_MAKE_CSPC(SPACE_BT709, ENC_BT709, XFER_BT709, RANGE_FULL, LOC_EVEN, LOC_CENTER),
NVCV_COLOR_SPEC_MPEG2_SMPTE240M = NVCV_DETAIL_MAKE_CSPC(SPACE_BT709, ENC_SMPTE240M, XFER_SMPTE240M, RANGE_FULL, LOC_EVEN, LOC_CENTER),
NVCV_COLOR_SPEC_sRGB = NVCV_DETAIL_MAKE_CSPC(SPACE_BT709, ENC_UNDEFINED, XFER_sRGB, RANGE_FULL, LOC_BOTH, LOC_BOTH),
NVCV_COLOR_SPEC_sYCC = NVCV_DETAIL_MAKE_CSPC(SPACE_BT709, ENC_BT601, XFER_sYCC, RANGE_FULL, LOC_CENTER, LOC_CENTER),
NVCV_COLOR_SPEC_SMPTE240M = NVCV_DETAIL_MAKE_CSPC(SPACE_BT709, ENC_SMPTE240M, XFER_SMPTE240M, RANGE_LIMITED, LOC_EVEN, LOC_EVEN),
NVCV_COLOR_SPEC_DISPLAYP3 = NVCV_DETAIL_MAKE_CSPC(SPACE_DCIP3, ENC_UNDEFINED, XFER_sRGB, RANGE_FULL, LOC_BOTH, LOC_BOTH),
NVCV_COLOR_SPEC_DISPLAYP3_LINEAR = NVCV_DETAIL_MAKE_CSPC(SPACE_DCIP3, ENC_UNDEFINED, XFER_LINEAR, RANGE_FULL, LOC_BOTH, LOC_BOTH),
NVCV_COLOR_SPEC_FORCE32 = INT32_MAX
/* \endcond */
} NVCVColorSpec;
/* clang-format on */
#ifdef NVCV_DOXYGEN
# define NVCV_MAKE_COLOR_SPEC(cspace, encoding, xferFunc, range, locHoriz, locVert)
#else
# define NVCV_MAKE_COLOR_SPEC (NVCVColorSpec) NVCV_DETAIL_MAKE_COLOR_SPEC
#endif
NVCV_PUBLIC NVCVStatus nvcvMakeColorSpec(NVCVColorSpec *outColorSpec, NVCVColorSpace cspace, NVCVYCbCrEncoding encoding,
NVCVColorTransferFunction xferFunc, NVCVColorRange range,
NVCVChromaLocation locHoriz, NVCVChromaLocation locVert);
typedef enum
{
NVCV_RAW_BAYER_RGGB,
NVCV_RAW_BAYER_BGGR,
NVCV_RAW_BAYER_GRBG,
NVCV_RAW_BAYER_GBRG,
NVCV_RAW_BAYER_RCCB,
NVCV_RAW_BAYER_BCCR,
NVCV_RAW_BAYER_CRBC,
NVCV_RAW_BAYER_CBRC,
NVCV_RAW_BAYER_RCCC,
NVCV_RAW_BAYER_CRCC,
NVCV_RAW_BAYER_CCRC,
NVCV_RAW_BAYER_CCCR,
NVCV_RAW_BAYER_CCCC,
NVCV_RAW_FORCE8 = UINT8_MAX
/* \endcond */
} NVCVRawPattern;
typedef enum
{
NVCV_CSS_NONE = 0,
NVCV_CSS_444 = NVCV_CSS_NONE,
NVCV_CSS_422,
NVCV_CSS_422R,
NVCV_CSS_411,
NVCV_CSS_411R,
NVCV_CSS_420,
NVCV_CSS_440 = NVCV_CSS_422R,
NVCV_CSS_410,
NVCV_CSS_410R
} NVCVChromaSubsampling;
NVCV_PUBLIC NVCVStatus nvcvMakeChromaSubsampling(NVCVChromaSubsampling *outCSS, int32_t samplesHoriz,
int32_t samplesVert);
NVCV_PUBLIC NVCVStatus nvcvChromaSubsamplingGetNumSamples(NVCVChromaSubsampling css, int32_t *outSamplesHoriz,
int32_t *outSamplesVert);
NVCV_PUBLIC NVCVStatus nvcvColorSpecGetChromaLoc(NVCVColorSpec cspec, NVCVChromaLocation *outLocHoriz,
NVCVChromaLocation *outLocVert);
NVCV_PUBLIC NVCVStatus nvcvColorSpecSetChromaLoc(NVCVColorSpec *cspec, NVCVChromaLocation locHoriz,
NVCVChromaLocation locVert);
NVCV_PUBLIC NVCVStatus nvcvColorSpecGetColorSpace(NVCVColorSpec cspec, NVCVColorSpace *outColorSpace);
NVCV_PUBLIC NVCVStatus nvcvColorSpecSetColorSpace(NVCVColorSpec *cspec, NVCVColorSpace cspace);
NVCV_PUBLIC NVCVStatus nvcvColorSpecGetYCbCrEncoding(NVCVColorSpec cspec, NVCVYCbCrEncoding *outEncoding);
NVCV_PUBLIC NVCVStatus nvcvColorSpecSetYCbCrEncoding(NVCVColorSpec *cspec, NVCVYCbCrEncoding encoding);
NVCV_PUBLIC NVCVStatus nvcvColorSpecGetColorTransferFunction(NVCVColorSpec cspec,
NVCVColorTransferFunction *outXferFunc);
NVCV_PUBLIC NVCVStatus nvcvColorSpecSetColorTransferFunction(NVCVColorSpec *cspec, NVCVColorTransferFunction xferFunc);
NVCV_PUBLIC NVCVStatus nvcvColorSpecGetRange(NVCVColorSpec cspec, NVCVColorRange *outColorRange);
NVCV_PUBLIC NVCVStatus nvcvColorSpecSetRange(NVCVColorSpec *cspec, NVCVColorRange range);
NVCV_PUBLIC const char *nvcvColorSpecGetName(NVCVColorSpec cspec);
NVCV_PUBLIC NVCVStatus nvcvColorModelNeedsColorspec(NVCVColorModel cmodel, int8_t *outBool);
NVCV_PUBLIC const char *nvcvColorModelGetName(NVCVColorModel cmodel);
NVCV_PUBLIC const char *nvcvColorSpaceGetName(NVCVColorSpace cspace);
NVCV_PUBLIC const char *nvcvWhitePointGetName(NVCVWhitePoint wpoint);
NVCV_PUBLIC const char *nvcvYCbCrEncodingGetName(NVCVYCbCrEncoding enc);
NVCV_PUBLIC const char *nvcvColorTransferFunctionGetName(NVCVColorTransferFunction xfer);
NVCV_PUBLIC const char *nvcvColorRangeGetName(NVCVColorRange range);
NVCV_PUBLIC const char *nvcvChromaLocationGetName(NVCVChromaLocation loc);
NVCV_PUBLIC const char *nvcvRawPatternGetName(NVCVRawPattern raw);
NVCV_PUBLIC const char *nvcvChromaSubsamplingGetName(NVCVChromaSubsampling css);
#ifdef __cplusplus
}
#endif
#endif /* NVCV_FORMAT_COLORSPEC_H */