Program Listing for File ImageFormat.h

Return to documentation for file (nvcv_types/include/nvcv/ImageFormat.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_IMAGEFORMAT_H
#define NVCV_FORMAT_IMAGEFORMAT_H

#include "ColorSpec.h"
#include "DataLayout.h"
#include "DataType.h"

#include <assert.h>

#ifdef __cplusplus
extern "C"
{
#endif

typedef uint64_t NVCVImageFormat;

// clang-format off
#define NVCV_IMAGE_FORMAT_NONE ((NVCVImageFormat)0)

#define NVCV_IMAGE_FORMAT_U8 NVCV_DETAIL_MAKE_NONCOLOR_FMT1(PL, UNSIGNED, X000, ASSOCIATED, X8)

#define NVCV_IMAGE_FORMAT_U8_BL NVCV_DETAIL_MAKE_NONCOLOR_FMT1(BL, UNSIGNED, X000, ASSOCIATED, X8)

#define NVCV_IMAGE_FORMAT_S8 NVCV_DETAIL_MAKE_NONCOLOR_FMT1(PL, SIGNED, X000, ASSOCIATED, X8)

#define NVCV_IMAGE_FORMAT_U16 NVCV_DETAIL_MAKE_NONCOLOR_FMT1(PL, UNSIGNED, X000, ASSOCIATED, X16)

#define NVCV_IMAGE_FORMAT_U32 NVCV_DETAIL_MAKE_NONCOLOR_FMT1(PL, UNSIGNED, X000, ASSOCIATED, X32)

#define NVCV_IMAGE_FORMAT_S32 NVCV_DETAIL_MAKE_NONCOLOR_FMT1(PL, SIGNED, X000, ASSOCIATED, X32)

#define NVCV_IMAGE_FORMAT_S16 NVCV_DETAIL_MAKE_NONCOLOR_FMT1(PL, SIGNED, X000, ASSOCIATED, X16)

#define NVCV_IMAGE_FORMAT_S16_BL NVCV_DETAIL_MAKE_NONCOLOR_FMT1(BL, SIGNED, X000, ASSOCIATED, X16)

#define NVCV_IMAGE_FORMAT_2S16 NVCV_DETAIL_MAKE_NONCOLOR_FMT1(PL, SIGNED, XY00, ASSOCIATED, X16_Y16)

#define NVCV_IMAGE_FORMAT_2S16_BL NVCV_DETAIL_MAKE_NONCOLOR_FMT1(BL, SIGNED, XY00, ASSOCIATED, X16_Y16)

#define NVCV_IMAGE_FORMAT_F16 NVCV_DETAIL_MAKE_NONCOLOR_FMT1(PL, FLOAT, X000, ASSOCIATED, X16)

#define NVCV_IMAGE_FORMAT_F32 NVCV_DETAIL_MAKE_NONCOLOR_FMT1(PL, FLOAT, X000, ASSOCIATED, X32)

#define NVCV_IMAGE_FORMAT_F64 NVCV_DETAIL_MAKE_NONCOLOR_FMT1(PL, FLOAT, X000, ASSOCIATED, X64)

#define NVCV_IMAGE_FORMAT_2F16 NVCV_DETAIL_MAKE_NONCOLOR_FMT1(PL, FLOAT, XY00, ASSOCIATED, X16_Y16)

#define NVCV_IMAGE_FORMAT_2F32 NVCV_DETAIL_MAKE_NONCOLOR_FMT1(PL, FLOAT, XY00, ASSOCIATED, X32_Y32)

#define NVCV_IMAGE_FORMAT_C64 NVCV_DETAIL_MAKE_NONCOLOR_FMT1(PL, COMPLEX, X000, ASSOCIATED, X64)

#define NVCV_IMAGE_FORMAT_2C64 NVCV_DETAIL_MAKE_NONCOLOR_FMT1(PL, COMPLEX, XY00, ASSOCIATED, X64_Y64)

#define NVCV_IMAGE_FORMAT_C128 NVCV_DETAIL_MAKE_NONCOLOR_FMT1(PL, COMPLEX, X000, ASSOCIATED, X128)

#define NVCV_IMAGE_FORMAT_2C128 NVCV_DETAIL_MAKE_NONCOLOR_FMT1(PL, COMPLEX, XY00, ASSOCIATED, X128_Y128)

#define NVCV_IMAGE_FORMAT_Y8 NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601, NONE, PL, UNSIGNED, X000, ASSOCIATED, X8)

#define NVCV_IMAGE_FORMAT_Y8_BL NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601, NONE, BL, UNSIGNED, X000, ASSOCIATED, X8)

#define NVCV_IMAGE_FORMAT_Y8_ER NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601_ER, NONE, PL, UNSIGNED, X000, ASSOCIATED, X8)

#define NVCV_IMAGE_FORMAT_Y8_ER_BL NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601_ER, NONE, BL, UNSIGNED, X000, ASSOCIATED, X8)

#define NVCV_IMAGE_FORMAT_Y16 NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601, NONE, PL, UNSIGNED, X000, ASSOCIATED, X16)

#define NVCV_IMAGE_FORMAT_Y16_BL NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601, NONE, BL, UNSIGNED, X000, ASSOCIATED, X16)

#define NVCV_IMAGE_FORMAT_Y16_ER NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601_ER, NONE, PL, UNSIGNED, X000, ASSOCIATED, X16)

#define NVCV_IMAGE_FORMAT_Y16_ER_BL NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601_ER, NONE, BL, UNSIGNED, X000, ASSOCIATED, X16)

#define NVCV_IMAGE_FORMAT_NV12 NVCV_DETAIL_MAKE_YCbCr_FMT2(BT601, 420, PL, UNSIGNED, XYZ0, ASSOCIATED, X8, X8_Y8)

#define NVCV_IMAGE_FORMAT_NV12_BL NVCV_DETAIL_MAKE_YCbCr_FMT2(BT601, 420, BL, UNSIGNED, XYZ0, ASSOCIATED, X8, X8_Y8)

#define NVCV_IMAGE_FORMAT_NV12_ER NVCV_DETAIL_MAKE_YCbCr_FMT2(BT601_ER, 420, PL, UNSIGNED, XYZ0, ASSOCIATED, X8, X8_Y8)

#define NVCV_IMAGE_FORMAT_NV12_ER_BL NVCV_DETAIL_MAKE_YCbCr_FMT2(BT601_ER, 420, BL, UNSIGNED, XYZ0, ASSOCIATED, X8, X8_Y8)

#define NVCV_IMAGE_FORMAT_NV21 NVCV_DETAIL_MAKE_YCbCr_FMT2(BT601_ER, 420, PL, UNSIGNED, XYZ0, ASSOCIATED, X8, X8_Y8)

#define NVCV_IMAGE_FORMAT_NV21_ER NVCV_DETAIL_MAKE_YCbCr_FMT2(BT601_ER, 420, PL, UNSIGNED, XYZ0, ASSOCIATED, X8, X8_Y8)

#define NVCV_IMAGE_FORMAT_NV24 NVCV_DETAIL_MAKE_YCbCr_FMT2(BT601, 444, PL, UNSIGNED, XYZ0, ASSOCIATED, X8, X8_Y8)

#define NVCV_IMAGE_FORMAT_NV24_BL NVCV_DETAIL_MAKE_YCbCr_FMT2(BT601, 444, BL, UNSIGNED, XYZ0, ASSOCIATED, X8, X8_Y8)

#define NVCV_IMAGE_FORMAT_NV24_ER NVCV_DETAIL_MAKE_YCbCr_FMT2(BT601_ER, 444, PL, UNSIGNED, XYZ0, ASSOCIATED, X8, X8_Y8)

#define NVCV_IMAGE_FORMAT_NV24_ER_BL NVCV_DETAIL_MAKE_YCbCr_FMT2(BT601_ER, 444, BL, UNSIGNED, XYZ0, ASSOCIATED, X8, X8_Y8)

#define NVCV_IMAGE_FORMAT_UYVY NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601, 422, PL, UNSIGNED, XYZ1, ASSOCIATED, Y8_X8__Z8_X8)

#define NVCV_IMAGE_FORMAT_UYVY_BL NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601, 422, BL, UNSIGNED, XYZ1, ASSOCIATED, Y8_X8__Z8_X8)

#define NVCV_IMAGE_FORMAT_UYVY_ER NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601_ER, 422, PL, UNSIGNED, XYZ1, ASSOCIATED, Y8_X8__Z8_X8)

#define NVCV_IMAGE_FORMAT_UYVY_ER_BL NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601_ER, 422, BL, UNSIGNED, XYZ1, ASSOCIATED, Y8_X8__Z8_X8)

#define NVCV_IMAGE_FORMAT_YUYV NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601, 422, PL, UNSIGNED, XYZ1, ASSOCIATED, X8_Y8__X8_Z8)

#define NVCV_IMAGE_FORMAT_YUYV_BL NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601, 422, BL, UNSIGNED, XYZ1, ASSOCIATED, X8_Y8__X8_Z8)

#define NVCV_IMAGE_FORMAT_YUYV_ER NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601_ER, 422, PL, UNSIGNED, XYZ1, ASSOCIATED, X8_Y8__X8_Z8)

#define NVCV_IMAGE_FORMAT_YUYV_ER_BL NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601_ER, 422, BL, UNSIGNED, XYZ1, ASSOCIATED, X8_Y8__X8_Z8)

#define NVCV_IMAGE_FORMAT_YUV8  NVCV_DETAIL_MAKE_YCbCr_FMT1(BT601, NONE, PL, UNSIGNED, XYZ1, ASSOCIATED, X8_Y8_Z8)

#define NVCV_IMAGE_FORMAT_RGB8 NVCV_DETAIL_MAKE_COLOR_FMT1(RGB, UNDEFINED, PL, UNSIGNED, XYZ1, ASSOCIATED, X8_Y8_Z8)

#define NVCV_IMAGE_FORMAT_BGR8 NVCV_DETAIL_MAKE_COLOR_FMT1(RGB, UNDEFINED, PL, UNSIGNED, ZYX1, ASSOCIATED, X8_Y8_Z8)

#define NVCV_IMAGE_FORMAT_RGBA8 NVCV_DETAIL_MAKE_COLOR_FMT1(RGB, UNDEFINED, PL, UNSIGNED, XYZW, ASSOCIATED, X8_Y8_Z8_W8)

#define NVCV_IMAGE_FORMAT_BGRA8 NVCV_DETAIL_MAKE_COLOR_FMT1(RGB, UNDEFINED, PL, UNSIGNED, ZYXW, ASSOCIATED, X8_Y8_Z8_W8)

#define NVCV_IMAGE_FORMAT_RGB8p NVCV_DETAIL_MAKE_COLOR_FMT3(RGB, UNDEFINED, PL, UNSIGNED, XYZ0, ASSOCIATED, X8, X8, X8)

#define NVCV_IMAGE_FORMAT_BGR8p NVCV_DETAIL_MAKE_COLOR_FMT3(RGB, UNDEFINED, PL, UNSIGNED, ZYX1, ASSOCIATED, X8, X8, X8)

#define NVCV_IMAGE_FORMAT_RGBA8p NVCV_DETAIL_MAKE_COLOR_FMT4(RGB, UNDEFINED, PL, UNSIGNED, XYZW, ASSOCIATED, X8, X8, X8, X8)

#define NVCV_IMAGE_FORMAT_BGRA8p NVCV_DETAIL_MAKE_COLOR_FMT4(RGB, UNDEFINED, PL, UNSIGNED, ZYXW, ASSOCIATED, X8, X8, X8, X8)

#define NVCV_IMAGE_FORMAT_RGBf16 NVCV_DETAIL_MAKE_COLOR_FMT1(RGB, UNDEFINED, PL, FLOAT, XYZ1, ASSOCIATED, X16_Y16_Z16)

#define NVCV_IMAGE_FORMAT_BGRf16 NVCV_DETAIL_MAKE_COLOR_FMT1(RGB, UNDEFINED, PL, FLOAT, ZYX1, ASSOCIATED, X16_Y16_Z16)

#define NVCV_IMAGE_FORMAT_RGBAf16 NVCV_DETAIL_MAKE_COLOR_FMT1(RGB, UNDEFINED, PL, FLOAT, XYZW, ASSOCIATED, X16_Y16_Z16_W16)

#define NVCV_IMAGE_FORMAT_BGRAf16 NVCV_DETAIL_MAKE_COLOR_FMT1(RGB, UNDEFINED, PL, FLOAT, ZYXW, ASSOCIATED, X16_Y16_Z16_W16)

#define NVCV_IMAGE_FORMAT_RGBf16p NVCV_DETAIL_MAKE_COLOR_FMT3(RGB, UNDEFINED, PL, FLOAT, XYZ0, ASSOCIATED, X16, X16, X16)

#define NVCV_IMAGE_FORMAT_BGRf16p NVCV_DETAIL_MAKE_COLOR_FMT3(RGB, UNDEFINED, PL, FLOAT, ZYX1, ASSOCIATED, X16, X16, X16)

#define NVCV_IMAGE_FORMAT_RGBAf16p NVCV_DETAIL_MAKE_COLOR_FMT4(RGB, UNDEFINED, PL, FLOAT, XYZW, ASSOCIATED, X16, X16, X16, X16)

#define NVCV_IMAGE_FORMAT_BGRAf16p NVCV_DETAIL_MAKE_COLOR_FMT4(RGB, UNDEFINED, PL, FLOAT, ZYXW, ASSOCIATED, X16, X16, X16, X16)

#define NVCV_IMAGE_FORMAT_RGBf32 NVCV_DETAIL_MAKE_COLOR_FMT1(RGB, UNDEFINED, PL, FLOAT, XYZ1, ASSOCIATED, X32_Y32_Z32)

#define NVCV_IMAGE_FORMAT_BGRf32 NVCV_DETAIL_MAKE_COLOR_FMT1(RGB, UNDEFINED, PL, FLOAT, ZYX1, ASSOCIATED, X32_Y32_Z32)

#define NVCV_IMAGE_FORMAT_RGBAf32 NVCV_DETAIL_MAKE_COLOR_FMT1(RGB, UNDEFINED, PL, FLOAT, XYZW, ASSOCIATED, X32_Y32_Z32_W32)

#define NVCV_IMAGE_FORMAT_BGRAf32 NVCV_DETAIL_MAKE_COLOR_FMT1(RGB, UNDEFINED, PL, FLOAT, ZYXW, ASSOCIATED, X32_Y32_Z32_W32)

#define NVCV_IMAGE_FORMAT_RGBf32p NVCV_DETAIL_MAKE_COLOR_FMT3(RGB, UNDEFINED, PL, FLOAT, XYZ0, ASSOCIATED, X32, X32, X32)

#define NVCV_IMAGE_FORMAT_BGRf32p NVCV_DETAIL_MAKE_COLOR_FMT3(RGB, UNDEFINED, PL, FLOAT, ZYX1, ASSOCIATED, X32, X32, X32)

#define NVCV_IMAGE_FORMAT_RGBAf32p NVCV_DETAIL_MAKE_COLOR_FMT4(RGB, UNDEFINED, PL, FLOAT, XYZW, ASSOCIATED, X32, X32, X32, X32)

#define NVCV_IMAGE_FORMAT_BGRAf32p NVCV_DETAIL_MAKE_COLOR_FMT4(RGB, UNDEFINED, PL, FLOAT, ZYXW, ASSOCIATED, X32, X32, X32, X32)

#define NVCV_IMAGE_FORMAT_HSV8 NVCV_DETAIL_MAKE_COLOR_FMT1(HSV, UNDEFINED, PL, UNSIGNED, XYZ0, ASSOCIATED, X8_Y8_Z8)

#define NVCV_IMAGE_FORMAT_CMYK8 NVCV_DETAIL_MAKE_COLOR_FMT1(CMYK, UNDEFINED, PL, UNSIGNED, XYZW, ASSOCIATED, X8_Y8_Z8_W8)

#define NVCV_IMAGE_FORMAT_YCCK8 NVCV_DETAIL_MAKE_COLOR_FMT1(YCCK, UNDEFINED, PL, UNSIGNED, XYZW, ASSOCIATED, X8_Y8_Z8_W8)

#define NVCV_IMAGE_FORMAT_RGBA8_UNASSOCIATED_ALPHA NVCV_DETAIL_MAKE_COLOR_FMT1(RGB, UNDEFINED, PL, UNSIGNED, XYZW, UNASSOCIATED, X8_Y8_Z8_W8)

#define NVCV_IMAGE_FORMAT_RGB8_1U_U8 NVCV_DETAIL_MAKE_COLOR_EXTRA_CHANNELS_FMT1(RGB, UNDEFINED, PL, UNSIGNED, XYZ1, ASSOCIATED, 1, 8, UNSIGNED, U, X8_Y8_Z8)

#define NVCV_IMAGE_FORMAT_RGB8_7U_U8 NVCV_DETAIL_MAKE_COLOR_EXTRA_CHANNELS_FMT1(RGB, UNDEFINED, PL, UNSIGNED, XYZ1, ASSOCIATED, 7, 8, UNSIGNED, U, X8_Y8_Z8)

#define NVCV_IMAGE_FORMAT_RGBA8_3U_U16 NVCV_DETAIL_MAKE_COLOR_EXTRA_CHANNELS_FMT1(RGB, UNDEFINED, PL, UNSIGNED, XYZW, ASSOCIATED, 3, 16, UNSIGNED, U, X8_Y8_Z8_W8)

#define NVCV_IMAGE_FORMAT_RGBA8_3POS3D_U32 NVCV_DETAIL_MAKE_COLOR_EXTRA_CHANNELS_FMT1(RGB, UNDEFINED, PL, UNSIGNED, XYZW, ASSOCIATED, 3, 32, UNSIGNED, POS3D, X8_Y8_Z8)

#define NVCV_IMAGE_FORMAT_RGB8_3D_F32 NVCV_DETAIL_MAKE_COLOR_EXTRA_CHANNELS_FMT1(RGB, UNDEFINED, PL, UNSIGNED, XYZ1, ASSOCIATED, 3, 32, FLOAT, D, X8_Y8_Z8)
// clang-format on

#ifdef DOXYGEN_SHOULD_SKIP_THIS
// WAR sphinx is acting up on this
//#    define NVCV_MAKE_YCbCr_IMAGE_FORMAT(colorModel, colorSpec, chromaSubsamp, memLayout, dataKind, swizzle, numPlanes, packing0, packing1, packing2, packing3)
#else
#    define NVCV_MAKE_YCbCr_IMAGE_FORMAT                (NVCVImageFormat) NVCV_DETAIL_MAKE_YCbCr_FORMAT
#    define NVCV_MAKE_YCbCr_IMAGE_EXTRA_CHANNELS_FORMAT (NVCVImageFormat) NVCV_DETAIL_MAKE_YCbCr_EXTRA_CHANNELS_FORMAT
#endif

#ifdef DOXYGEN_SHOULD_SKIP_THIS
// WAR sphinx is acting up on this
//#    define NVCV_MAKE_COLOR_IMAGE_FORMAT(colorModel, colorSpec, memLayout, dataKind, swizzle, numPlanes, packing0, packing1, packing2, packing3)
#else
#    define NVCV_MAKE_COLOR_IMAGE_FORMAT                (NVCVImageFormat) NVCV_DETAIL_MAKE_COLOR_FORMAT
#    define NVCV_MAKE_COLOR_IMAGE_EXTRA_CHANNELS_FORMAT (NVCVImageFormat) NVCV_DETAIL_MAKE_COLOR_EXTRA_CHANNELS_FORMAT
#endif

#ifdef DOXYGEN_SHOULD_SKIP_THIS
// WAR sphinx is acting up on this
//#    define NVCV_MAKE_NONCOLOR_IMAGE_FORMAT(memLayout, dataKind, swizzle, numPlanes, packing0, packing1, packing2, packing3)
#else
#    define NVCV_MAKE_NONCOLOR_IMAGE_FORMAT (NVCVImageFormat) NVCV_DETAIL_MAKE_NONCOLOR_FORMAT
#    define NVCV_MAKE_NONCOLOR_IMAGE_EXTRA_CHANNELS_FORMAT \
        (NVCVImageFormat) NVCV_DETAIL_MAKE_NONCOLOR_EXTRA_CHANNELS_FORMAT
#endif

#ifdef DOXYGEN_SHOULD_SKIP_THIS
// WAR sphinx is acting up on this
//#    define NVCV_MAKE_RAW_IMAGE_FORMAT(rawPattern, memLayout, dataKind, numPlanes, swizzle, packing)
#else
#    define NVCV_MAKE_RAW_IMAGE_FORMAT                (NVCVImageFormat) NVCV_DETAIL_MAKE_RAW_FORMAT
#    define NVCV_MAKE_RAW_IMAGE_EXTRA_CHANNELS_FORMAT (NVCVImageFormat) NVCV_DETAIL_MAKE_RAW_EXTRA_CHANNELS_FORMAT
#endif

NVCV_PUBLIC NVCVStatus nvcvMakeYCbCrImageFormat(NVCVImageFormat *outFormat, NVCVColorSpec colorSpec,
                                                NVCVChromaSubsampling chromaSub, NVCVMemLayout memLayout,
                                                NVCVDataKind dataKind, NVCVSwizzle swizzle, NVCVPacking packing0,
                                                NVCVPacking packing1, NVCVPacking packing2, NVCVPacking packing3,
                                                NVCVAlphaType alphaType, const NVCVExtraChannelInfo *exChannelInfo);

NVCV_PUBLIC NVCVStatus nvcvMakeColorImageFormat(NVCVImageFormat *outFormat, NVCVColorModel colorModel,
                                                NVCVColorSpec colorSpec, NVCVMemLayout memLayout, NVCVDataKind dataKind,
                                                NVCVSwizzle swizzle, NVCVPacking packing0, NVCVPacking packing1,
                                                NVCVPacking packing2, NVCVPacking packing3, NVCVAlphaType alphaType,
                                                const NVCVExtraChannelInfo *exChannelInfo);

NVCV_PUBLIC NVCVStatus nvcvMakeNonColorImageFormat(NVCVImageFormat *outFormat, NVCVMemLayout memLayout,
                                                   NVCVDataKind dataKind, NVCVSwizzle swizzle, NVCVPacking packing0,
                                                   NVCVPacking packing1, NVCVPacking packing2, NVCVPacking packing3,
                                                   NVCVAlphaType alphaType, const NVCVExtraChannelInfo *exChannelInfo);

NVCV_PUBLIC NVCVStatus nvcvMakeRawImageFormat(NVCVImageFormat *outFormat, NVCVRawPattern rawPattern,
                                              NVCVMemLayout memLayout, NVCVDataKind dataKind, NVCVSwizzle swizzle,
                                              NVCVPacking packing0, NVCVPacking packing1, NVCVPacking packing2,
                                              NVCVPacking packing3, NVCVAlphaType alphaType,
                                              const NVCVExtraChannelInfo *exChannelInfo);

NVCV_PUBLIC NVCVStatus nvcvMakeImageFormatFromFourCC(NVCVImageFormat *outFormat, uint32_t fourcc,
                                                     NVCVColorSpec colorSpec, NVCVMemLayout memLayout);

NVCV_PUBLIC NVCVStatus nvcvImageFormatToFourCC(NVCVImageFormat fmt, uint32_t *outFourCC);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetPlanePacking(NVCVImageFormat fmt, int32_t plane, NVCVPacking *outPacking);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetPlaneSize(NVCVImageFormat fmt, int32_t plane, int32_t imgWidth,
                                                   int32_t imgHeight, int32_t *outPlaneWidth, int32_t *outPlaneHeight);

NVCV_PUBLIC NVCVStatus nvcvImageFormatSetSwizzleAndPacking(NVCVImageFormat *fmt, NVCVSwizzle swizzle,
                                                           NVCVPacking packing0, NVCVPacking packing1,
                                                           NVCVPacking packing2, NVCVPacking packing3);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetPlaneBitsPerPixel(NVCVImageFormat fmt, int32_t plane, int32_t *outBPP);

NVCV_PUBLIC NVCVStatus nvcvImageFormatSetDataKind(NVCVImageFormat *fmt, NVCVDataKind dataKind);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetDataKind(NVCVImageFormat fmt, NVCVDataKind *outDataKind);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetSwizzle(NVCVImageFormat fmt, NVCVSwizzle *outSwizzle);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetPlaneSwizzle(NVCVImageFormat fmt, int32_t plane, NVCVSwizzle *outPlaneSwizzle);

NVCV_PUBLIC NVCVStatus nvcvImageFormatSetMemLayout(NVCVImageFormat *fmt, NVCVMemLayout memLayout);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetMemLayout(NVCVImageFormat fmt, NVCVMemLayout *outMemLayout);

NVCV_PUBLIC NVCVStatus nvcvImageFormatSetColorSpec(NVCVImageFormat *fmt, NVCVColorSpec colorSpec);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetColorSpec(NVCVImageFormat fmt, NVCVColorSpec *outColorSpec);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetColorModel(NVCVImageFormat fmt, NVCVColorModel *outColorModel);

NVCV_PUBLIC NVCVStatus nvcvImageFormatSetChromaSubsampling(NVCVImageFormat *fmt, NVCVChromaSubsampling css);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetChromaSubsampling(NVCVImageFormat fmt, NVCVChromaSubsampling *outCSS);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetPlaneNumChannels(NVCVImageFormat fmt, int32_t plane,
                                                          int32_t *outPlaneNumChannels);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetNumPlanes(NVCVImageFormat fmt, int32_t *outNumPlanes);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetNumChannels(NVCVImageFormat fmt, int32_t *outNumChannels);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetBitsPerChannel(NVCVImageFormat fmt, int32_t *bits);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetPlaneDataType(NVCVImageFormat fmt, int32_t plane, NVCVDataType *outPixType);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetPlaneFormat(NVCVImageFormat fmt, int32_t plane, NVCVImageFormat *outFormat);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetPlanePixelStrideBytes(NVCVImageFormat fmt, int32_t plane,
                                                               int32_t *outStrideBytes);

NVCV_PUBLIC NVCVStatus nvcvMakeImageFormatFromPlanes(NVCVImageFormat *outFormat, NVCVImageFormat plane0,
                                                     NVCVImageFormat plane1, NVCVImageFormat plane2,
                                                     NVCVImageFormat plane3);

NVCV_PUBLIC const char *nvcvImageFormatGetName(NVCVImageFormat fmt);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetRawPattern(NVCVImageFormat fmt, NVCVRawPattern *outRawPattern);

NVCV_PUBLIC NVCVStatus nvcvImageFormatSetRawPattern(NVCVImageFormat *fmt, NVCVRawPattern rawPattern);

NVCV_PUBLIC NVCVStatus nvcvImageFormatHasSameDataLayout(NVCVImageFormat a, NVCVImageFormat b, int8_t *outBool);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetAlphaType(NVCVImageFormat fmt, NVCVAlphaType *outAlphaChannelType);

NVCV_PUBLIC NVCVStatus nvcvImageFormatSetAlphaType(NVCVImageFormat *fmt, NVCVAlphaType alphaChannelType);

NVCV_PUBLIC NVCVStatus nvcvImageFormatGetExtraChannelInfo(NVCVImageFormat fmt, NVCVExtraChannelInfo *outExChannelInfo);

NVCV_PUBLIC NVCVStatus nvcvImageFormatSetExtraChannelInfo(NVCVImageFormat            *fmt,
                                                          const NVCVExtraChannelInfo *exChannelInfo);

#ifdef __cplusplus
}
#endif

#endif /* NVCV_FORMAT_IMAGEFORMAT_H */