Program Listing for File DataLayout.h
↰ Return to documentation for file (nvcv_types/include/nvcv/DataLayout.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_DATALAYOUT_H
#define NVCV_FORMAT_DATALAYOUT_H
#include "detail/FormatUtils.h"
#include <nvcv/Export.h>
#include <nvcv/Status.h>
#ifdef __cplusplus
extern "C"
{
#endif
#define NVCV_MAX_CHANNEL_COUNT (4)
#define NVCV_MAX_EXTRA_CHANNEL_COUNT (7)
#define NVCV_MAX_SWIZZLE_COUNT (57)
typedef enum
{
NVCV_PACKING_0 = 0,
NVCV_PACKING_X1 = NVCV_DETAIL_BPP_NCH(1, 1),
NVCV_PACKING_X2 = NVCV_DETAIL_BPP_NCH(2, 1),
NVCV_PACKING_X4 = NVCV_DETAIL_BPP_NCH(4, 1),
NVCV_PACKING_X8 = NVCV_DETAIL_BPP_NCH(8, 1),
NVCV_PACKING_b4X4,
NVCV_PACKING_X4b4,
NVCV_PACKING_X4Y4 = NVCV_DETAIL_BPP_NCH(8, 2),
NVCV_PACKING_X3Y3Z2 = NVCV_DETAIL_BPP_NCH(8, 3),
NVCV_PACKING_X16 = NVCV_DETAIL_BPP_NCH(16, 1),
NVCV_PACKING_b6X10,
NVCV_PACKING_X10b6,
NVCV_PACKING_b4X12,
NVCV_PACKING_X12b4,
NVCV_PACKING_b2X14,
NVCV_PACKING_X14b2,
NVCV_PACKING_X8_Y8 = NVCV_DETAIL_BPP_NCH(16, 2),
NVCV_PACKING_X5Y5Z6 = NVCV_DETAIL_BPP_NCH(16, 3),
NVCV_PACKING_X5Y6Z5,
NVCV_PACKING_X6Y5Z5,
NVCV_PACKING_b4X4Y4Z4,
NVCV_PACKING_b1X5Y5Z5,
NVCV_PACKING_X5Y5b1Z5,
NVCV_PACKING_X1Y5Z5W5 = NVCV_DETAIL_BPP_NCH(16, 4),
NVCV_PACKING_X4Y4Z4W4,
NVCV_PACKING_X5Y1Z5W5,
NVCV_PACKING_X5Y5Z1W5,
NVCV_PACKING_X5Y5Z5W1,
NVCV_PACKING_X8_Y8__X8_Z8,
NVCV_PACKING_Y8_X8__Z8_X8,
NVCV_PACKING_X24 = NVCV_DETAIL_BPP_NCH(24, 1),
NVCV_PACKING_X8_Y8_Z8 = NVCV_DETAIL_BPP_NCH(24, 3),
NVCV_PACKING_X32 = NVCV_DETAIL_BPP_NCH(32, 1),
NVCV_PACKING_b12X20,
NVCV_PACKING_X20b12,
NVCV_PACKING_X24b8,
NVCV_PACKING_b8X24,
NVCV_PACKING_X16_Y16 = NVCV_DETAIL_BPP_NCH(32, 2),
NVCV_PACKING_X10b6_Y10b6,
NVCV_PACKING_X12b4_Y12b4,
NVCV_PACKING_X10Y11Z11 = NVCV_DETAIL_BPP_NCH(32, 3),
NVCV_PACKING_X11Y11Z10,
NVCV_PACKING_b2X10Y10Z10,
NVCV_PACKING_X10Y10Z10b2,
NVCV_PACKING_X8_Y8_Z8_W8 = NVCV_DETAIL_BPP_NCH(32, 4),
NVCV_PACKING_X2Y10Z10W10,
NVCV_PACKING_X10Y10Z10W2,
NVCV_PACKING_X48 = NVCV_DETAIL_BPP_NCH(48, 1),
NVCV_PACKING_X16_Y16_Z16 = NVCV_DETAIL_BPP_NCH(48, 3),
NVCV_PACKING_X64 = NVCV_DETAIL_BPP_NCH(64, 1),
NVCV_PACKING_X32_Y32 = NVCV_DETAIL_BPP_NCH(64, 2),
NVCV_PACKING_X32_Y24b8,
NVCV_PACKING_X16_Y16_Z16_W16 = NVCV_DETAIL_BPP_NCH(64, 4),
NVCV_PACKING_X96 = NVCV_DETAIL_BPP_NCH(96, 1),
NVCV_PACKING_X32_Y32_Z32 = NVCV_DETAIL_BPP_NCH(96, 3),
NVCV_PACKING_X128 = NVCV_DETAIL_BPP_NCH(128, 1),
NVCV_PACKING_X64_Y64 = NVCV_DETAIL_BPP_NCH(128, 2),
NVCV_PACKING_X32_Y32_Z32_W32 = NVCV_DETAIL_BPP_NCH(128, 4),
NVCV_PACKING_X192 = NVCV_DETAIL_BPP_NCH(192, 1),
NVCV_PACKING_X64_Y64_Z64 = NVCV_DETAIL_BPP_NCH(192, 3),
NVCV_PACKING_X256 = NVCV_DETAIL_BPP_NCH(256, 1),
NVCV_PACKING_X128_Y128 = NVCV_DETAIL_BPP_NCH(256, 2),
NVCV_PACKING_X64_Y64_Z64_W64 = NVCV_DETAIL_BPP_NCH(256, 4),
NVCV_PACKING_LIMIT32 = INT32_MAX
/* \endcond */
} NVCVPacking;
typedef enum
{
NVCV_DATA_KIND_UNSPECIFIED = -1,
NVCV_DATA_KIND_UNSIGNED,
NVCV_DATA_KIND_SIGNED,
NVCV_DATA_KIND_FLOAT,
NVCV_DATA_KIND_COMPLEX
} NVCVDataKind;
typedef enum
{
NVCV_MEM_LAYOUT_PITCH_LINEAR,
NVCV_MEM_LAYOUT_BLOCK1_LINEAR,
NVCV_MEM_LAYOUT_BLOCK2_LINEAR,
NVCV_MEM_LAYOUT_BLOCK4_LINEAR,
NVCV_MEM_LAYOUT_BLOCK8_LINEAR,
NVCV_MEM_LAYOUT_BLOCK16_LINEAR,
NVCV_MEM_LAYOUT_BLOCK32_LINEAR,
NVCV_MEM_LAYOUT_BLOCK_LINEAR = NVCV_MEM_LAYOUT_BLOCK2_LINEAR,
NVCV_MEM_LAYOUT_PL = NVCV_MEM_LAYOUT_PITCH_LINEAR,
NVCV_MEM_LAYOUT_BL = NVCV_MEM_LAYOUT_BLOCK_LINEAR
} NVCVMemLayout;
typedef enum
{
NVCV_CHANNEL_0 = 0,
NVCV_CHANNEL_X,
NVCV_CHANNEL_Y,
NVCV_CHANNEL_Z,
NVCV_CHANNEL_W,
NVCV_CHANNEL_1,
NVCV_CHANNEL_FORCE8 = UINT8_MAX,
/* \endcond */
} NVCVChannel;
typedef enum
{
NVCV_ALPHA_ASSOCIATED,
NVCV_ALPHA_UNASSOCIATED,
} NVCVAlphaType;
typedef enum
{
NVCV_EXTRA_CHANNEL_U = 0,
NVCV_EXTRA_CHANNEL_D,
NVCV_EXTRA_CHANNEL_POS3D,
} NVCVExtraChannel;
typedef struct
{
int32_t numChannels;
int32_t bitsPerPixel;
NVCVDataKind datakind;
NVCVExtraChannel channelType;
} NVCVExtraChannelInfo;
typedef enum
{
NVCV_SWIZZLE_0000,
NVCV_SWIZZLE_X000,
NVCV_SWIZZLE_XY00,
NVCV_SWIZZLE_XYZ0,
NVCV_SWIZZLE_XYZW,
NVCV_SWIZZLE_1000,
NVCV_SWIZZLE_0001,
NVCV_SWIZZLE_ZYXW,
NVCV_SWIZZLE_WXYZ,
NVCV_SWIZZLE_WZYX,
NVCV_SWIZZLE_YZWX,
NVCV_SWIZZLE_XYZ1,
NVCV_SWIZZLE_YZW1,
NVCV_SWIZZLE_XXX1,
NVCV_SWIZZLE_XZY1,
NVCV_SWIZZLE_ZYX1,
NVCV_SWIZZLE_ZYX0,
NVCV_SWIZZLE_WZY1,
NVCV_SWIZZLE_0X00,
NVCV_SWIZZLE_00X0,
NVCV_SWIZZLE_000X,
NVCV_SWIZZLE_Y000,
NVCV_SWIZZLE_0Y00,
NVCV_SWIZZLE_00Y0,
NVCV_SWIZZLE_000Y,
NVCV_SWIZZLE_0XY0,
NVCV_SWIZZLE_XXXY,
NVCV_SWIZZLE_YYYX,
NVCV_SWIZZLE_0YX0,
NVCV_SWIZZLE_X00Y,
NVCV_SWIZZLE_Y00X,
NVCV_SWIZZLE_X001,
NVCV_SWIZZLE_XY01,
NVCV_SWIZZLE_0XZ0,
NVCV_SWIZZLE_0ZX0,
NVCV_SWIZZLE_XZY0,
NVCV_SWIZZLE_YZX1,
NVCV_SWIZZLE_ZYW1,
NVCV_SWIZZLE_0YX1,
NVCV_SWIZZLE_XYXZ,
NVCV_SWIZZLE_YXZX,
NVCV_SWIZZLE_XZ00,
NVCV_SWIZZLE_WYXZ,
NVCV_SWIZZLE_YX00,
NVCV_SWIZZLE_YX01,
NVCV_SWIZZLE_00YX,
NVCV_SWIZZLE_00XY,
NVCV_SWIZZLE_0XY1,
NVCV_SWIZZLE_0X01,
NVCV_SWIZZLE_YZXW,
NVCV_SWIZZLE_YW00,
NVCV_SWIZZLE_XYW0,
NVCV_SWIZZLE_YZW0,
NVCV_SWIZZLE_YZ00,
NVCV_SWIZZLE_00X1,
NVCV_SWIZZLE_0ZXY,
NVCV_SWIZZLE_UNSUPPORTED = 0b111111
} NVCVSwizzle;
NVCV_PUBLIC NVCVStatus nvcvMakeSwizzle(NVCVSwizzle *outSwizzle, NVCVChannel x, NVCVChannel y, NVCVChannel z,
NVCVChannel w);
NVCV_PUBLIC NVCVStatus nvcvSwizzleGetChannels(NVCVSwizzle swizzle, NVCVChannel *channels);
NVCV_PUBLIC NVCVStatus nvcvSwizzleGetNumChannels(NVCVSwizzle swizzle, int32_t *outNumChannels);
typedef enum
{
NVCV_ORDER_LSB,
NVCV_ORDER_MSB
} NVCVByteOrder;
typedef struct
{
NVCVByteOrder byteOrder;
int32_t alignment;
NVCVSwizzle swizzle;
int32_t bits[NVCV_MAX_CHANNEL_COUNT];
} NVCVPackingParams;
NVCV_PUBLIC NVCVStatus nvcvMakePacking(NVCVPacking *outPacking, const NVCVPackingParams *params);
NVCV_PUBLIC NVCVStatus nvcvPackingGetParams(NVCVPacking packing, NVCVPackingParams *outParams);
NVCV_PUBLIC NVCVStatus nvcvPackingGetNumComponents(NVCVPacking packing, int32_t *outNumComponents);
NVCV_PUBLIC NVCVStatus nvcvPackingGetBitsPerComponent(NVCVPacking packing, int32_t *outBits);
NVCV_PUBLIC NVCVStatus nvcvPackingGetBitsPerPixel(NVCVPacking packing, int32_t *outBPP);
NVCV_PUBLIC NVCVStatus nvcvPackingGetAlignment(NVCVPacking packing, int32_t *outAlignment);
NVCV_PUBLIC const char *nvcvPackingGetName(NVCVPacking fmt);
NVCV_PUBLIC const char *nvcvDataKindGetName(NVCVDataKind dtype);
NVCV_PUBLIC const char *nvcvMemLayoutGetName(NVCVMemLayout memlayout);
NVCV_PUBLIC const char *nvcvChannelGetName(NVCVChannel channel);
NVCV_PUBLIC const char *nvcvSwizzleGetName(NVCVSwizzle swizzle);
NVCV_PUBLIC const char *nvcvByteOrderGetName(NVCVByteOrder byteOrder);
#ifdef __cplusplus
}
#endif
#endif /* NVCV_FORMAT_DATALAYOUT_H */