VPI - Vision Programming Interface
1.2 Release
FormatUtils.h
1
/*
2
* Copyright 2020-2021 NVIDIA Corporation. All rights reserved.
3
*
4
* NOTICE TO LICENSEE:
5
*
6
* This source code and/or documentation ("Licensed Deliverables") are
7
* subject to NVIDIA intellectual property rights under U.S. and
8
* international Copyright laws.
9
*
10
* These Licensed Deliverables contained herein is PROPRIETARY and
11
* CONFIDENTIAL to NVIDIA and is being provided under the terms and
12
* conditions of a form of NVIDIA software license agreement by and
13
* between NVIDIA and Licensee ("License Agreement") or electronically
14
* accepted by Licensee. Notwithstanding any terms or conditions to
15
* the contrary in the License Agreement, reproduction or disclosure
16
* of the Licensed Deliverables to any third party without the express
17
* written consent of NVIDIA is prohibited.
18
*
19
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
20
* LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
21
* SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS
22
* PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
23
* NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
24
* DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
25
* NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
26
* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
27
* LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
28
* SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
29
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
30
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
31
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
32
* OF THESE LICENSED DELIVERABLES.
33
*
34
* U.S. Government End Users. These Licensed Deliverables are a
35
* "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
36
* 1995), consisting of "commercial computer software" and "commercial
37
* computer software documentation" as such terms are used in 48
38
* C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
39
* only as a commercial end item. Consistent with 48 C.F.R.12.212 and
40
* 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
41
* U.S. Government End Users acquire the Licensed Deliverables with
42
* only those rights set forth herein.
43
*
44
* Any use of the Licensed Deliverables in individual and commercial
45
* software must include, in the user documentation and internal
46
* comments to the code, the above Disclaimer and U.S. Government End
47
* Users Notice.
48
*/
49
50
#ifndef NV_VPI_DETAIL_FORMATUTILS_H
51
#define NV_VPI_DETAIL_FORMATUTILS_H
52
53
#include <stdint.h>
54
55
#define VPI_DETAIL_SET_BITFIELD(value, offset, size) (((uint64_t)(value) & ((1ULL << (size)) - 1)) << (offset))
56
#define VPI_DETAIL_GET_BITFIELD(value, offset, size) (((uint64_t)(value) >> (offset)) & ((1ULL << (size)) - 1))
57
58
#define VPI_DETAIL_ENCODE_BPP(bpp) \
59
((bpp) <= 8 ? 0 \
60
: ((bpp) <= 32 ? (bpp) / 8 - 1 \
61
: ((bpp) <= 64 ? (bpp) / 16 + 1 : ((bpp) <= 128 ? (bpp) / 32 + 3 : (bpp) / 64 + 5))))
62
63
#define VPI_DETAIL_BPP_NCH(bpp, chcount) \
64
(VPI_DETAIL_SET_BITFIELD(VPI_DETAIL_ENCODE_BPP(bpp), 6, 4) | VPI_DETAIL_SET_BITFIELD((chcount)-1, 4, 2) | \
65
VPI_DETAIL_SET_BITFIELD((bpp) <= 2 ? (bpp) : ((bpp) == 4 ? 3 : ((bpp) == 8 ? 4 : 0)), 0, 4))
66
67
#define VPI_DETAIL_MAKE_SWIZZLE(x, y, z, w) \
68
(VPI_DETAIL_SET_BITFIELD(x, 0, 3) | VPI_DETAIL_SET_BITFIELD(y, 3, 3) | VPI_DETAIL_SET_BITFIELD(z, 6, 3) | \
69
VPI_DETAIL_SET_BITFIELD(w, 9, 3))
70
71
#define VPI_DETAIL_MAKE_SWZL(x, y, z, w) \
72
VPI_DETAIL_MAKE_SWIZZLE(VPI_CHANNEL_##x, VPI_CHANNEL_##y, VPI_CHANNEL_##z, VPI_CHANNEL_##w)
73
74
#define VPI_DETAIL_DEF_SWIZZLE_ENUM(x, y, z, w) VPI_SWIZZLE_##x##y##z##w = VPI_DETAIL_MAKE_SWZL(x, y, z, w)
75
76
#define VPI_DETAIL_ADJUST_BPP_ENCODING(PACK, BPP, PACKLEN) \
77
((PACKLEN) == 0 && (BPP) == 0 && (PACK) == 4 ? (uint64_t)-1 : (BPP))
78
79
#define VPI_DETAIL_ENCODE_PACKING(P, CHLEN, PACKLEN, BPPLEN) \
80
(VPI_DETAIL_SET_BITFIELD( \
81
VPI_DETAIL_ADJUST_BPP_ENCODING(VPI_DETAIL_GET_BITFIELD(P, 0, 4), VPI_DETAIL_GET_BITFIELD(P, 6, 4), PACKLEN), \
82
(PACKLEN) + (CHLEN), BPPLEN) | \
83
VPI_DETAIL_SET_BITFIELD(VPI_DETAIL_GET_BITFIELD(P, 4, 2), PACKLEN, CHLEN) | \
84
VPI_DETAIL_SET_BITFIELD(VPI_DETAIL_GET_BITFIELD(P, 0, 4), 0, PACKLEN))
85
86
#define VPI_DETAIL_HANDLE_DATATYPE_SIGNEDNESS(DataType, rest) \
87
(VPI_DETAIL_GET_BITFIELD(DataType, 2, 1) ? -(1 + (int64_t)((~(uint64_t)(rest)) & ~(1ULL << 63))) : (int64_t)(rest))
88
89
/* clang-format off */
90
#define VPI_DETAIL_MAKE_FMT_HELPER(ColorModel, ColorSpecOrRawPattern, Subsampling, MemLayout, DataType, Swizzle, \
91
Packing0, Packing1, Packing2, Packing3) \
92
((int64_t)VPI_DETAIL_HANDLE_DATATYPE_SIGNEDNESS( \
93
DataType, \
94
VPI_DETAIL_SET_BITFIELD(((DataType)&0x3), 61, 2) | VPI_DETAIL_SET_BITFIELD(Swizzle, 0, 4 * 3) | \
95
VPI_DETAIL_SET_BITFIELD(MemLayout, 12, 3) | \
96
((ColorModel) == VPI_COLOR_MODEL_YCbCr \
97
? VPI_DETAIL_SET_BITFIELD(ColorSpecOrRawPattern, 20, 15) | VPI_DETAIL_SET_BITFIELD(Subsampling, 17, 3) \
98
: ((ColorModel) == VPI_COLOR_MODEL_UNDEFINED \
99
? VPI_DETAIL_SET_BITFIELD((1U<<19)-1, 16, 19) \
100
: (VPI_DETAIL_SET_BITFIELD(1,16,1) | \
101
((ColorModel)-2 < 0x7 \
102
? VPI_DETAIL_SET_BITFIELD(ColorSpecOrRawPattern, 20, 15) \
103
| VPI_DETAIL_SET_BITFIELD((ColorModel)-2, 17, 3) \
104
: (VPI_DETAIL_SET_BITFIELD(0x7, 17, 3) | \
105
((ColorModel) == VPI_COLOR_MODEL_RAW \
106
? VPI_DETAIL_SET_BITFIELD(ColorSpecOrRawPattern, 21, 6) \
107
: (VPI_DETAIL_SET_BITFIELD(1, 20, 1) | VPI_DETAIL_SET_BITFIELD((ColorModel)-(7+2+1), 21, 6)) \
108
) \
109
) \
110
) \
111
) \
112
) \
113
) | \
114
VPI_DETAIL_SET_BITFIELD(VPI_DETAIL_ENCODE_PACKING(Packing0, 2, 3, 4), 35, 9) | \
115
VPI_DETAIL_SET_BITFIELD(VPI_DETAIL_ENCODE_PACKING(Packing1, 1, 3, 3), 44, 7) | \
116
VPI_DETAIL_SET_BITFIELD(VPI_DETAIL_ENCODE_PACKING(Packing2, 1, 3, 3), 51, 7) | \
117
VPI_DETAIL_SET_BITFIELD(VPI_DETAIL_ENCODE_PACKING(Packing3, 0, 0, 3), 58, 3)))
118
/* clang-format on */
119
120
#define VPI_DETAIL_MAKE_COLOR_FMT_HELPER VPI_DETAIL_MAKE_FMT_HELPER
121
122
#define VPI_DETAIL_MAKE_COLOR_FMT_HELPER_ABBREV(ColorModel, ColorSpec, Subsampling, MemLayout, DataType, Swizzle, \
123
Packing0, Packing1, Packing2, Packing3) \
124
VPI_DETAIL_MAKE_FMT_HELPER(VPI_COLOR_MODEL_##ColorModel, VPI_COLOR_SPEC_##ColorSpec, VPI_CSS_##Subsampling, \
125
VPI_MEM_LAYOUT_##MemLayout, VPI_DATA_TYPE_##DataType, VPI_SWIZZLE_##Swizzle, \
126
VPI_PACKING_##Packing0, VPI_PACKING_##Packing1, VPI_PACKING_##Packing2, \
127
VPI_PACKING_##Packing3)
128
129
#define VPI_DETAIL_MAKE_COLOR_FMT_HELPER_4(TYPE, ...) VPI_DETAIL_MAKE_COLOR_FMT_HELPER##TYPE(__VA_ARGS__)
130
131
#define VPI_DETAIL_MAKE_COLOR_FMT_HELPER_3(TYPE, ColorModel, ColorSpec, Subsampling, MemLayout, DataType, Swizzle, \
132
Packing0, Packing1, Packing2) \
133
VPI_DETAIL_MAKE_COLOR_FMT_HELPER_4(TYPE, ColorModel, ColorSpec, Subsampling, MemLayout, DataType, Swizzle, \
134
Packing0, Packing1, Packing2, 0)
135
136
#define VPI_DETAIL_MAKE_COLOR_FMT_HELPER_2(TYPE, ColorModel, ColorSpec, Subsampling, MemLayout, DataType, Swizzle, \
137
Packing0, Packing1) \
138
VPI_DETAIL_MAKE_COLOR_FMT_HELPER_3(TYPE, ColorModel, ColorSpec, Subsampling, MemLayout, DataType, Swizzle, \
139
Packing0, Packing1, 0)
140
141
#define VPI_DETAIL_MAKE_COLOR_FMT_HELPER_1(TYPE, ColorModel, ColorSpec, Subsampling, MemLayout, DataType, Swizzle, \
142
Packing0) \
143
VPI_DETAIL_MAKE_COLOR_FMT_HELPER_2(TYPE, ColorModel, ColorSpec, Subsampling, MemLayout, DataType, Swizzle, \
144
Packing0, 0)
145
146
#define VPI_DETAIL_EXTRACT_PACKING_CHANNELS(Packing) (VPI_DETAIL_GET_BITFIELD(Packing, 4, 2) + 1)
147
148
#define VPI_DETAIL_MAKE_PIXEL_TYPE(MemLayout, DataType, Packing) \
149
VPI_DETAIL_MAKE_FMT_HELPER( \
150
VPI_COLOR_MODEL_UNDEFINED, VPI_COLOR_SPEC_UNDEFINED, VPI_CSS_NONE, MemLayout, DataType, \
151
VPI_DETAIL_MAKE_SWIZZLE(VPI_CHANNEL_X, VPI_DETAIL_EXTRACT_PACKING_CHANNELS(Packing) >= 2 ? VPI_CHANNEL_Y : 0, \
152
VPI_DETAIL_EXTRACT_PACKING_CHANNELS(Packing) >= 3 ? VPI_CHANNEL_Z : 0, \
153
VPI_DETAIL_EXTRACT_PACKING_CHANNELS(Packing) >= 4 ? VPI_CHANNEL_W : 0), \
154
Packing, 0, 0, 0)
155
156
#define VPI_DETAIL_MAKE_PIXEL_FMT(MemLayout, DataType, Packing) \
157
VPI_DETAIL_MAKE_PIXEL_TYPE(VPI_MEM_LAYOUT_##MemLayout, VPI_DATA_TYPE_##DataType, VPI_PACKING_##Packing)
158
159
#define VPI_DETAIL_MAKE_COLOR_FMT(ColorModel, ColorSpec, MemLayout, DataType, Swizzle, PlaneCount, ...) \
160
VPI_DETAIL_MAKE_COLOR_FMT_HELPER_##PlaneCount(_ABBREV, ColorModel, ColorSpec, NONE, MemLayout, DataType, Swizzle, \
161
__VA_ARGS__)
162
163
#define VPI_DETAIL_MAKE_COLOR_FORMAT(ColorModel, ColorSpec, MemLayout, DataType, Swizzle, PlaneCount, ...) \
164
VPI_DETAIL_MAKE_COLOR_FMT_HELPER_##PlaneCount(, ColorModel, ColorSpec, VPI_CSS_NONE, MemLayout, DataType, Swizzle, \
165
__VA_ARGS__)
166
167
#define VPI_DETAIL_MAKE_NONCOLOR_FMT(MemLayout, DataType, Swizzle, PlaneCount, ...) \
168
VPI_DETAIL_MAKE_COLOR_FMT_HELPER_##PlaneCount(_ABBREV, UNDEFINED, UNDEFINED, NONE, MemLayout, DataType, Swizzle, \
169
__VA_ARGS__)
170
171
#define VPI_DETAIL_MAKE_NONCOLOR_FORMAT(MemLayout, DataType, Swizzle, PlaneCount, ...) \
172
VPI_DETAIL_MAKE_COLOR_FMT_HELPER_##PlaneCount(, VPI_COLOR_MODEL_UNDEFINED, VPI_COLOR_SPEC_UNDEFINED, VPI_CSS_NONE, \
173
MemLayout, DataType, Swizzle, __VA_ARGS__)
174
175
#define VPI_DETAIL_MAKE_RAW_FMT_HELPER(RawPattern, MemLayout, DataType, Swizzle, Packing0, Packing1, Packing2, \
176
Packing3) \
177
VPI_DETAIL_MAKE_FMT_HELPER(VPI_COLOR_MODEL_RAW, RawPattern, VPI_CSS_NONE, MemLayout, DataType, Swizzle, Packing0, \
178
Packing1, Packing2, Packing3)
179
180
#define VPI_DETAIL_MAKE_RAW_FMT_HELPER_ABBREV(RawPattern, MemLayout, DataType, Swizzle, Packing0, Packing1, Packing2, \
181
Packing3) \
182
VPI_DETAIL_MAKE_RAW_FMT_HELPER(VPI_RAW_##RawPattern, VPI_MEM_LAYOUT_##MemLayout, VPI_DATA_TYPE_##DataType, \
183
VPI_SWIZZLE_##Swizzle, VPI_PACKING_##Packing0, VPI_PACKING_##Packing1, \
184
VPI_PACKING_##Packing2, VPI_PACKING_##Packing3)
185
186
#define VPI_DETAIL_MAKE_RAW_FMT_HELPER_4(TYPE, RawPattern, MemLayout, DataType, Swizzle, Packing0, Packing1, Packing2, \
187
Packing3) \
188
VPI_DETAIL_MAKE_RAW_FMT_HELPER##TYPE(RawPattern, MemLayout, DataType, Swizzle, Packing0, Packing1, Packing2, \
189
Packing3)
190
191
#define VPI_DETAIL_MAKE_RAW_FMT_HELPER_3(TYPE, RawPattern, MemLayout, DataType, Swizzle, Packing0, Packing1, Packing2) \
192
VPI_DETAIL_MAKE_RAW_FMT_HELPER_4(TYPE, RawPattern, MemLayout, DataType, Swizzle, Packing0, Packing1, Packing2, 0)
193
194
#define VPI_DETAIL_MAKE_RAW_FMT_HELPER_2(TYPE, RawPattern, MemLayout, DataType, Swizzle, Packing0, Packing1) \
195
VPI_DETAIL_MAKE_RAW_FMT_HELPER_3(TYPE, RawPattern, MemLayout, DataType, Swizzle, Packing0, Packing1, 0)
196
197
#define VPI_DETAIL_MAKE_RAW_FMT_HELPER_1(TYPE, RawPattern, MemLayout, DataType, Swizzle, Packing0) \
198
VPI_DETAIL_MAKE_RAW_FMT_HELPER_2(TYPE, RawPattern, MemLayout, DataType, Swizzle, Packing0, 0)
199
200
#define VPI_DETAIL_MAKE_RAW_FMT(RawPattern, MemLayout, DataType, Swizzle, PlaneCount, ...) \
201
VPI_DETAIL_MAKE_RAW_FMT_HELPER_##PlaneCount(_ABBREV, RawPattern, MemLayout, DataType, Swizzle, __VA_ARGS__)
202
203
#define VPI_DETAIL_MAKE_RAW_FORMAT(RawPattern, MemLayout, DataType, Swizzle, PlaneCount, ...) \
204
VPI_DETAIL_MAKE_RAW_FMT_HELPER_##PlaneCount(, RawPattern, MemLayout, DataType, Swizzle, __VA_ARGS__)
205
206
#define VPI_DETAIL_MAKE_YCbCr_FORMAT(ColorSpec, ChromaSubsamp, MemLayout, DataType, Swizzle, PlaneCount, ...) \
207
VPI_DETAIL_MAKE_COLOR_FMT_HELPER_##PlaneCount(, VPI_COLOR_MODEL_YCbCr, ColorSpec, ChromaSubsamp, MemLayout, \
208
DataType, Swizzle, __VA_ARGS__)
209
210
#define VPI_DETAIL_MAKE_YCbCr_FMT(ColorSpec, ChromaSubsamp, MemLayout, DataType, Swizzle, PlaneCount, ...) \
211
VPI_DETAIL_MAKE_COLOR_FMT_HELPER_##PlaneCount(_ABBREV, YCbCr, ColorSpec, ChromaSubsamp, MemLayout, DataType, \
212
Swizzle, __VA_ARGS__)
213
214
#define VPI_DETAIL_MAKE_COLOR_SPEC(CSpace, Encoding, XferFunc, Range, LocHoriz, LocVert) \
215
(VPI_DETAIL_SET_BITFIELD((CSpace), 0, 3) | VPI_DETAIL_SET_BITFIELD(XferFunc, 3, 4) | \
216
VPI_DETAIL_SET_BITFIELD(Encoding, 7, 3) | VPI_DETAIL_SET_BITFIELD(LocHoriz, 10, 2) | \
217
VPI_DETAIL_SET_BITFIELD(LocVert, 12, 2) | VPI_DETAIL_SET_BITFIELD(Range, 14, 1))
218
219
#define VPI_DETAIL_MAKE_CSPC(CSpace, Encoding, XferFunc, Range, LocHoriz, LocVert) \
220
VPI_DETAIL_MAKE_COLOR_SPEC(VPI_COLOR_##CSpace, VPI_YCbCr_##Encoding, VPI_COLOR_##XferFunc, VPI_COLOR_##Range, \
221
VPI_CHROMA_##LocHoriz, VPI_CHROMA_##LocVert)
222
223
#endif
/* NV_VPI_DETAIL_FORMATUTILS_H */
Generated by NVIDIA | Tue Feb 15 2022 15:36:53 | 2f226df9520a61ec30f136fa8ea2a70fb6e69eb0