Program Listing for File DataType.h

Return to documentation for file (nvcv_types/include/nvcv/DataType.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_DATA_TYPE_H
#define NVCV_DATA_TYPE_H

#include "ColorSpec.h"
#include "DataLayout.h"
#include "detail/FormatUtils.h"

#ifdef __cplusplus
extern "C"
{
#endif

typedef struct
{
    uint8_t value;
} NVCVByte;

typedef uint64_t NVCVDataType;

/* clang-format off */

#define NVCV_DATA_TYPE_NONE ((NVCVDataType)0)

#define NVCV_DATA_TYPE_U8   NVCV_DETAIL_MAKE_PIX_TYPE(UNSIGNED, X8)
#define NVCV_DATA_TYPE_2U8  NVCV_DETAIL_MAKE_PIX_TYPE(UNSIGNED, X8_Y8)
#define NVCV_DATA_TYPE_3U8  NVCV_DETAIL_MAKE_PIX_TYPE(UNSIGNED, X8_Y8_Z8)
#define NVCV_DATA_TYPE_4U8  NVCV_DETAIL_MAKE_PIX_TYPE(UNSIGNED, X8_Y8_Z8_W8)

#define NVCV_DATA_TYPE_S8   NVCV_DETAIL_MAKE_PIX_TYPE(SIGNED, X8)
#define NVCV_DATA_TYPE_2S8  NVCV_DETAIL_MAKE_PIX_TYPE(SIGNED, X8_Y8)
#define NVCV_DATA_TYPE_3S8  NVCV_DETAIL_MAKE_PIX_TYPE(SIGNED, X8_Y8_Z8)
#define NVCV_DATA_TYPE_4S8  NVCV_DETAIL_MAKE_PIX_TYPE(SIGNED, X8_Y8_Z8_W8)

#define NVCV_DATA_TYPE_U16  NVCV_DETAIL_MAKE_PIX_TYPE(UNSIGNED, X16)
#define NVCV_DATA_TYPE_2U16 NVCV_DETAIL_MAKE_PIX_TYPE(UNSIGNED, X16_Y16)
#define NVCV_DATA_TYPE_3U16 NVCV_DETAIL_MAKE_PIX_TYPE(UNSIGNED, X16_Y16_Z16)
#define NVCV_DATA_TYPE_4U16 NVCV_DETAIL_MAKE_PIX_TYPE(UNSIGNED, X16_Y16_Z16_W16)

#define NVCV_DATA_TYPE_S16  NVCV_DETAIL_MAKE_PIX_TYPE(SIGNED, X16)
#define NVCV_DATA_TYPE_2S16 NVCV_DETAIL_MAKE_PIX_TYPE(SIGNED, X16_Y16)
#define NVCV_DATA_TYPE_3S16 NVCV_DETAIL_MAKE_PIX_TYPE(SIGNED, X16_Y16_Z16)
#define NVCV_DATA_TYPE_4S16 NVCV_DETAIL_MAKE_PIX_TYPE(SIGNED, X16_Y16_Z16_W16)

#define NVCV_DATA_TYPE_U32  NVCV_DETAIL_MAKE_PIX_TYPE(UNSIGNED, X32)
#define NVCV_DATA_TYPE_2U32 NVCV_DETAIL_MAKE_PIX_TYPE(UNSIGNED, X32_Y32)
#define NVCV_DATA_TYPE_3U32 NVCV_DETAIL_MAKE_PIX_TYPE(UNSIGNED, X32_Y32_Z32)
#define NVCV_DATA_TYPE_4U32 NVCV_DETAIL_MAKE_PIX_TYPE(UNSIGNED, X32_Y32_Z32_W32)

#define NVCV_DATA_TYPE_S32  NVCV_DETAIL_MAKE_PIX_TYPE(SIGNED, X32)
#define NVCV_DATA_TYPE_2S32 NVCV_DETAIL_MAKE_PIX_TYPE(SIGNED, X32_Y32)
#define NVCV_DATA_TYPE_3S32 NVCV_DETAIL_MAKE_PIX_TYPE(SIGNED, X32_Y32_Z32)
#define NVCV_DATA_TYPE_4S32 NVCV_DETAIL_MAKE_PIX_TYPE(SIGNED, X32_Y32_Z32_W32)

#define NVCV_DATA_TYPE_F16  NVCV_DETAIL_MAKE_PIX_TYPE(FLOAT, X16)
#define NVCV_DATA_TYPE_2F16 NVCV_DETAIL_MAKE_PIX_TYPE(FLOAT, X16_Y16)
#define NVCV_DATA_TYPE_3F16 NVCV_DETAIL_MAKE_PIX_TYPE(FLOAT, X16_Y16_Z16)
#define NVCV_DATA_TYPE_4F16 NVCV_DETAIL_MAKE_PIX_TYPE(FLOAT, X16_Y16_Z16_W16)

#define NVCV_DATA_TYPE_F32  NVCV_DETAIL_MAKE_PIX_TYPE(FLOAT, X32)
#define NVCV_DATA_TYPE_2F32 NVCV_DETAIL_MAKE_PIX_TYPE(FLOAT, X32_Y32)
#define NVCV_DATA_TYPE_3F32 NVCV_DETAIL_MAKE_PIX_TYPE(FLOAT, X32_Y32_Z32)
#define NVCV_DATA_TYPE_4F32 NVCV_DETAIL_MAKE_PIX_TYPE(FLOAT, X32_Y32_Z32_W32)

#define NVCV_DATA_TYPE_U64  NVCV_DETAIL_MAKE_PIX_TYPE(UNSIGNED, X64)
#define NVCV_DATA_TYPE_2U64 NVCV_DETAIL_MAKE_PIX_TYPE(UNSIGNED, X64_Y64)
#define NVCV_DATA_TYPE_3U64 NVCV_DETAIL_MAKE_PIX_TYPE(UNSIGNED, X64_Y64_Z64)
#define NVCV_DATA_TYPE_4U64 NVCV_DETAIL_MAKE_PIX_TYPE(UNSIGNED, X64_Y64_Z64_W64)

#define NVCV_DATA_TYPE_S64  NVCV_DETAIL_MAKE_PIX_TYPE(SIGNED, X64)
#define NVCV_DATA_TYPE_2S64 NVCV_DETAIL_MAKE_PIX_TYPE(SIGNED, X64_Y64)
#define NVCV_DATA_TYPE_3S64 NVCV_DETAIL_MAKE_PIX_TYPE(SIGNED, X64_Y64_Z64)
#define NVCV_DATA_TYPE_4S64 NVCV_DETAIL_MAKE_PIX_TYPE(SIGNED, X64_Y64_Z64_W64)

#define NVCV_DATA_TYPE_F64  NVCV_DETAIL_MAKE_PIX_TYPE(FLOAT, X64)
#define NVCV_DATA_TYPE_2F64 NVCV_DETAIL_MAKE_PIX_TYPE(FLOAT, X64_Y64)
#define NVCV_DATA_TYPE_3F64 NVCV_DETAIL_MAKE_PIX_TYPE(FLOAT, X64_Y64_Z64)
#define NVCV_DATA_TYPE_4F64 NVCV_DETAIL_MAKE_PIX_TYPE(FLOAT, X64_Y64_Z64_W64)

#define NVCV_DATA_TYPE_C64  NVCV_DETAIL_MAKE_PIX_TYPE(COMPLEX, X64)
#define NVCV_DATA_TYPE_2C64 NVCV_DETAIL_MAKE_PIX_TYPE(COMPLEX, X64_Y64)
#define NVCV_DATA_TYPE_3C64 NVCV_DETAIL_MAKE_PIX_TYPE(COMPLEX, X64_Y64_Z64)
#define NVCV_DATA_TYPE_4C64 NVCV_DETAIL_MAKE_PIX_TYPE(COMPLEX, X64_Y64_Z64_W64)

#define NVCV_DATA_TYPE_C128  NVCV_DETAIL_MAKE_PIX_TYPE(COMPLEX, X128)
#define NVCV_DATA_TYPE_2C128 NVCV_DETAIL_MAKE_PIX_TYPE(COMPLEX, X128_Y128)

/* clang-format on */

#ifdef DOXYGEN_SHOULD_SKIP_THIS
#    define NVCV_MAKE_DATA_TYPE(dataKind, packing)
#else
#    define NVCV_MAKE_DATA_TYPE (NVCVDataType) NVCV_DETAIL_MAKE_DATA_TYPE
#endif

NVCV_PUBLIC NVCVStatus nvcvMakeDataType(NVCVDataType *outPixType, NVCVDataKind dataKind, NVCVPacking packing);

NVCV_PUBLIC NVCVStatus nvcvDataTypeGetPacking(NVCVDataType type, NVCVPacking *outPacking);

NVCV_PUBLIC NVCVStatus nvcvDataTypeGetBitsPerPixel(NVCVDataType type, int32_t *outBPP);

NVCV_PUBLIC NVCVStatus nvcvDataTypeGetBitsPerChannel(NVCVDataType type, int32_t *outBits);

NVCV_PUBLIC NVCVStatus nvcvDataTypeGetAlignment(NVCVDataType type, int32_t *outAlignment);

NVCV_PUBLIC NVCVStatus nvcvDataTypeGetDataKind(NVCVDataType type, NVCVDataKind *outDataKind);

NVCV_PUBLIC NVCVStatus nvcvDataTypeGetNumChannels(NVCVDataType type, int32_t *outNumChannels);

NVCV_PUBLIC const char *nvcvDataTypeGetName(NVCVDataType type);

NVCV_PUBLIC NVCVStatus nvcvDataTypeGetChannelType(NVCVDataType type, int32_t channel, NVCVDataType *outChannelTpe);

NVCV_PUBLIC NVCVStatus nvcvDataTypeGetStrideBytes(NVCVDataType type, int32_t *pixStrideBytes);

#ifdef __cplusplus
}
#endif

#endif /* NVCV_DATA_TYPE_H */