HoviTron Video Pipeline
RaytrixStreamer/include/HvtStreamingAPI.h
1/* ----------------------
2* Copyright 2023 Université Libre de Bruxelles(ULB), Universidad Politécnica de Madrid(UPM), CREAL, Deutsches Zentrum für Luft - und Raumfahrt(DLR)
3
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at < http://www.apache.org/licenses/LICENSE-2.0%3E
7
8* Unless required by applicable law or agreed to in writing, software
9* distributed under the License is distributed on an "AS IS" BASIS,
10* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11* See the License for the specific language governing permissionsand
12* limitations under the License.
13---------------------- */
14
15
16#ifndef HVTSTREAMINGAPI_H
17#define HVTSTREAMINGAPI_H
18
19#ifdef __cplusplus
20extern "C"
21{
22#endif
23
24#include <inttypes.h>
25
26#ifdef _WIN32
27#include "windows.h"
28#endif
29
30#define HVT_DEFINE_HANDLE(name) typedef struct name##_T *name;
31
33#define HVT_MAKE_VERSION(major, minor, patch) \
34 ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch)))
35
37#define HVT_VERSION_MAJOR(version) ((uint32_t)(version) >> 22)
38
40#define HVT_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3FFU)
41
43#define HVT_VERSION_PATCH(version) ((uint32_t)(version)&0xFFFU)
44
46#define HVT_HEADER_VERSION HVT_MAKE_VERSION(0, 0, 2)
47
49#ifndef HVT_ENTRY_ATTR
50#ifdef _WIN32
51#define HVT_ENTRY_ATTR __declspec(dllimport) // Default to import DLL
52#else
53#define HVT_ENTRY_ATTR
54#endif
55#endif
56
57#ifdef _WIN32
58#define HVTAPI_ATTR HVT_ENTRY_ATTR
59#define HVTAPI_CALL __stdcall
60#define HVTAPI_PTR HVTAPI_CALL
61#else
62#define HVTAPI_ATTR HVT_ENTRY_ATTR
63#define HVTAPI_CALL
64#define HVTAPI_PTR HVTAPI_CALL
65#endif
66
67#ifndef VK_UUID_SIZE
68#define VK_UUID_SIZE 16U
69#endif
70#define HvtBool32 uint32_t
71#define HVT_MAX_STREAM_NAME_LENGHT 32
72
76 typedef enum HvtImageFormat
77 {
78 HVT_FORMAT_UNDEFINED = 0,
79 HVT_FORMAT_R5G6B5_UNORM_PACK16 = 4,
80 HVT_FORMAT_B5G6R5_UNORM_PACK16 = 5,
81 HVT_FORMAT_R5G5B5A1_UNORM_PACK16 = 6,
82 HVT_FORMAT_B5G5R5A1_UNORM_PACK16 = 7,
83 HVT_FORMAT_A1R5G5B5_UNORM_PACK16 = 8,
84 HVT_FORMAT_R8_UNORM = 9,
85 HVT_FORMAT_R8_SNORM = 10,
86 HVT_FORMAT_R8_USCALED = 11,
87 HVT_FORMAT_R8_SSCALED = 12,
88 HVT_FORMAT_R8_UINT = 13,
89 HVT_FORMAT_R8_SINT = 14,
90 HVT_FORMAT_R8_SRGB = 15,
91 HVT_FORMAT_R8G8B8_UNORM = 23,
92 HVT_FORMAT_R8G8B8_SNORM = 24,
93 HVT_FORMAT_R8G8B8_USCALED = 25,
94 HVT_FORMAT_R8G8B8_SSCALED = 26,
95 HVT_FORMAT_R8G8B8_UINT = 27,
96 HVT_FORMAT_R8G8B8_SINT = 28,
97 HVT_FORMAT_R8G8B8_SRGB = 29,
98 HVT_FORMAT_B8G8R8_UNORM = 30,
99 HVT_FORMAT_B8G8R8_SNORM = 31,
100 HVT_FORMAT_B8G8R8_USCALED = 32,
101 HVT_FORMAT_B8G8R8_SSCALED = 33,
102 HVT_FORMAT_B8G8R8_UINT = 34,
103 HVT_FORMAT_B8G8R8_SINT = 35,
104 HVT_FORMAT_B8G8R8_SRGB = 36,
105 HVT_FORMAT_R8G8B8A8_UNORM = 37,
106 HVT_FORMAT_R8G8B8A8_SNORM = 38,
107 HVT_FORMAT_R8G8B8A8_USCALED = 39,
108 HVT_FORMAT_R8G8B8A8_SSCALED = 40,
109 HVT_FORMAT_R8G8B8A8_UINT = 41,
110 HVT_FORMAT_R8G8B8A8_SINT = 42,
111 HVT_FORMAT_R8G8B8A8_SRGB = 43,
112 HVT_FORMAT_B8G8R8A8_UNORM = 44,
113 HVT_FORMAT_B8G8R8A8_SNORM = 45,
114 HVT_FORMAT_B8G8R8A8_USCALED = 46,
115 HVT_FORMAT_B8G8R8A8_SSCALED = 47,
116 HVT_FORMAT_B8G8R8A8_UINT = 48,
117 HVT_FORMAT_B8G8R8A8_SINT = 49,
118 HVT_FORMAT_B8G8R8A8_SRGB = 50,
119 HVT_FORMAT_R16_UNORM = 70,
120 HVT_FORMAT_R16_SNORM = 71,
121 HVT_FORMAT_R16_USCALED = 72,
122 HVT_FORMAT_R16_SSCALED = 73,
123 HVT_FORMAT_R16_UINT = 74,
124 HVT_FORMAT_R16_SINT = 75,
125 HVT_FORMAT_R16_SFLOAT = 76,
126 HVT_FORMAT_R16G16B16_UNORM = 84,
127 HVT_FORMAT_R16G16B16_SNORM = 85,
128 HVT_FORMAT_R16G16B16_USCALED = 86,
129 HVT_FORMAT_R16G16B16_SSCALED = 87,
130 HVT_FORMAT_R16G16B16_UINT = 88,
131 HVT_FORMAT_R16G16B16_SINT = 89,
132 HVT_FORMAT_R16G16B16_SFLOAT = 90,
133 HVT_FORMAT_R16G16B16A16_UNORM = 91,
134 HVT_FORMAT_R16G16B16A16_SNORM = 92,
135 HVT_FORMAT_R16G16B16A16_USCALED = 93,
136 HVT_FORMAT_R16G16B16A16_SSCALED = 94,
137 HVT_FORMAT_R16G16B16A16_UINT = 95,
138 HVT_FORMAT_R16G16B16A16_SINT = 96,
139 HVT_FORMAT_R16G16B16A16_SFLOAT = 97,
140 HVT_FORMAT_R32_UINT = 98,
141 HVT_FORMAT_R32_SINT = 99,
142 HVT_FORMAT_R32_SFLOAT = 100,
143 HVT_FORMAT_R32G32_UINT = 101,
144 HVT_FORMAT_R32G32_SINT = 102,
145 HVT_FORMAT_R32G32_SFLOAT = 103,
146 HVT_FORMAT_R32G32B32_UINT = 104,
147 HVT_FORMAT_R32G32B32_SINT = 105,
148 HVT_FORMAT_R32G32B32_SFLOAT = 106,
149 HVT_FORMAT_R32G32B32A32_UINT = 107,
150 HVT_FORMAT_R32G32B32A32_SINT = 108,
151 HVT_FORMAT_R32G32B32A32_SFLOAT = 109,
152 HVT_FORMAT_R64_UINT = 110,
153 HVT_FORMAT_R64_SINT = 111,
154 HVT_FORMAT_R64_SFLOAT = 112,
155 HVT_FORMAT_R64G64_UINT = 113,
156 HVT_FORMAT_R64G64_SINT = 114,
157 HVT_FORMAT_R64G64_SFLOAT = 115,
158 HVT_FORMAT_R64G64B64_UINT = 116,
159 HVT_FORMAT_R64G64B64_SINT = 117,
160 HVT_FORMAT_R64G64B64_SFLOAT = 118,
161 HVT_FORMAT_R64G64B64A64_UINT = 119,
162 HVT_FORMAT_R64G64B64A64_SINT = 120,
163 HVT_FORMAT_R64G64B64A64_SFLOAT = 121,
164 HVT_FORMAT_G8B8G8R8_422_UNORM = 1000156000,
165 HVT_FORMAT_B8G8R8G8_422_UNORM = 1000156001,
166 HVT_FORMAT_G8_B8_R8_3PLANE_420_UNORM = 1000156002,
167 HVT_FORMAT_G8_B8R8_2PLANE_420_UNORM = 1000156003,
168 HVT_FORMAT_G8_B8_R8_3PLANE_422_UNORM = 1000156004,
169 HVT_FORMAT_G8_B8R8_2PLANE_422_UNORM = 1000156005,
170 HVT_FORMAT_G8_B8_R8_3PLANE_444_UNORM = 1000156006,
171 HVT_FORMAT_R10X6_UNORM_PACK16 = 1000156007,
172 HVT_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008,
173 HVT_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009,
174 HVT_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010,
175 HVT_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011,
176 HVT_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 = 1000156012,
177 HVT_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 = 1000156013,
178 HVT_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 = 1000156014,
179 HVT_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 = 1000156015,
180 HVT_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 = 1000156016,
181 HVT_FORMAT_R12X4_UNORM_PACK16 = 1000156017,
182 HVT_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018,
183 HVT_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019,
184 HVT_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020,
185 HVT_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021,
186 HVT_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 = 1000156022,
187 HVT_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 = 1000156023,
188 HVT_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 = 1000156024,
189 HVT_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 = 1000156025,
190 HVT_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 = 1000156026,
191 HVT_FORMAT_G16B16G16R16_422_UNORM = 1000156027,
192 HVT_FORMAT_B16G16R16G16_422_UNORM = 1000156028,
193 HVT_FORMAT_G16_B16_R16_3PLANE_420_UNORM = 1000156029,
194 HVT_FORMAT_G16_B16R16_2PLANE_420_UNORM = 1000156030,
195 HVT_FORMAT_G16_B16_R16_3PLANE_422_UNORM = 1000156031,
196 HVT_FORMAT_G16_B16R16_2PLANE_422_UNORM = 1000156032,
197 HVT_FORMAT_G16_B16_R16_3PLANE_444_UNORM = 1000156033,
198 HVT_FORMAT_MAX_ENUM = 0x7FFFFFFF
199 } HvtImageFormat;
200
204 typedef enum HvtResult
205 {
206 HVT_SUCESS = 0,
207 HVT_RESULT_TIMEOUT = 1,
208 HVT_ERROR_UNKNOWN = -1,
209 HVT_ERROR_INVALID_HANDLE = -2,
210 HVT_ERROR_WRONG_BUFFER_SIZE = -3,
211 HVT_ERROR_NOT_FOUND = -4,
212 HVT_ERROR_UNSUPPORTED_FORMAT = -5,
213 HVT_ERROR_UNSUPPORTED_MEMORY_TYPE = -6,
214 HVT_ERROR_UNSUPPORTED_SEMAPHORE_TYPE = -7,
215 HVT_ERROR_HEADER_VERSION = -8,
216 HVT_ERROR_CALL_ORDER = -9
217 } HvtResult;
218
222 typedef enum HvtImageMemoryType
223 {
224 HVT_IMAGE_MEMORY_TYPE_OPAQUE_FD_BIT = 0x00000001,
225 HVT_IMAGE_MEMORY_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
226 HVT_IMAGE_MEMORY_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
227 HVT_IMAGE_MEMORY_TYPE_D3D11_TEXTURE_BIT = 0x00000008,
228 HVT_IMAGE_MEMORY_TYPE_D3D11_TEXTURE_KMT_BIT = 0x00000010,
229 HVT_IMAGE_MEMORY_TYPE_D3D12_HEAP_BIT = 0x00000020,
230 HVT_IMAGE_MEMORY_TYPE_D3D12_RESOURCE_BIT = 0x00000040,
231 HVT_IMAGE_MEMORY_TYPE_DMA_BUF_BIT_EXT = 0x00000200,
232 HVT_IMAGE_MEMORY_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID = 0x00000400,
233 HVT_IMAGE_MEMORY_TYPE_HOST_ALLOCATION_BIT_EXT = 0x00000080,
234 HVT_IMAGE_MEMORY_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT = 0x00000100,
235 HVT_IMAGE_MEMORY_TYPE_ZIRCON_VMO_BIT_FUCHSIA = 0x00000800,
236 HVT_IMAGE_MEMORY_TYPE_RDMA_ADDRESS_BIT_NV = 0x00001000,
237 HVT_IMAGE_MEMORY_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
238 } HvtImageMemoryType;
239
243 typedef enum HvtSemaphoreType
244 {
245 HVT_SEMAPHORE_TYPE_OPAQUE_FD_BIT = 0x00000001,
246 HVT_SEMAPHORE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
247 HVT_SEMAPHORE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
248 HVT_SEMAPHORE_TYPE_D3D12_FENCE_BIT = 0x00000008,
249 HVT_SEMAPHORE_TYPE_SYNC_FD_BIT = 0x00000010,
250 HVT_SEMAPHORE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA = 0x00000080,
251 } HvtSemaphoreType;
252
253 typedef struct HvtPosition
254 {
255 float x, y, z;
256 } HvtPosition;
257
258 typedef struct HvtRotation
259 {
260 float yaw, pitch, roll;
261 } HvtRotation;
262
263 typedef struct HvtExtent2D
264 {
265 uint32_t width;
266 uint32_t height;
267 } HvtExtent2D;
268
269 typedef struct HvtExtrinsics
270 {
271 HvtPosition position;
272 HvtRotation rotation;
274
275 typedef enum HvtProjectionType
276 {
277 HVT_PROJECTION_INVALID = 0,
278 HVT_PROJECTION_PERSPECTIVE = 1,
279 HVT_PROJECTION_EQUIRECTANGULAR = 2,
280 HVT_PROJECTION_MAX_ENUM = 0xff
281 } HvtProjectionType;
282
286 typedef struct HvtIntrinsicsPerspective
287 {
288 float focalX;
289 float focalY;
290 float principlePointX;
291 float principlePointY;
293
297 typedef struct HvtIntrinsicsEquirectangular
298 {
299 float verticalRange[2];
300 float horizontalRange[2];
302
306 typedef union
307 {
308 HvtIntrinsicsPerspective perspective;
309 HvtIntrinsicsEquirectangular equirectangular;
311
312#ifdef WIN32
313#define HVT_OPAQUE_HANDLE HANDLE
314#else
315#define HVT_OPAQUE_HANDLE int
316#endif
317
321 typedef struct HvtRGBDStreamParameters
322 {
323 char name[HVT_MAX_STREAM_NAME_LENGHT];
328 float nearDepth;
329 float farDepth;
331 HvtImageFormat colorFormat;
332 HvtImageFormat depthFormat;
333 uint32_t slotCount;
335 HvtProjectionType projectionType;
337
341 typedef struct HvtStreamImageMemoryInfo
342 {
343 uint64_t size;
344 uint64_t alignment;
345 HVT_OPAQUE_HANDLE handle;
347
351 typedef struct HvtStreamImagesExportInfo
352 {
353 uint32_t streamIndex;
354 HvtBool32 depth;
355 HvtImageMemoryType memoryType;
356 uint32_t imagesCount;
359
363 typedef struct HvtStreamFrameInfo
364 {
365 uint32_t imageIndex;
369
370 typedef struct HvtSemaphoreExportInfo
371 {
372 HVT_OPAQUE_HANDLE semaphore;
373 HvtSemaphoreType type;
375
383 typedef struct HvtStreamingContextCreateInfo
384 {
385 uint8_t graphicsDeviceUUID[VK_UUID_SIZE];
386 uint32_t headerVersion;
388
389 // Handles
390 HVT_DEFINE_HANDLE(HvtStreamingContext);
391 HVT_DEFINE_HANDLE(HvtSemaphore);
396 typedef struct HvtAcquireStreamFramesInfo
397 {
399 uint32_t frameInfoCount;
401 HvtSemaphore signalSemaphore;
403
404 // Entry points function signatures
405#ifdef HVT_FUNCTION_PROTOTYPES
406
413 HVTAPI_ATTR HvtResult HVTAPI_CALL hvtCreateStreamingContext(const HvtStreamingContextCreateInfo* createInfo, HvtStreamingContext* outStreamingContext);
414
422 HVTAPI_ATTR HvtResult HVTAPI_CALL hvtEnumerateStreamsParameters(HvtStreamingContext streamingContext, uint32_t* pStreamParameterCount, HvtRGBDStreamParameters* pStreamParameters);
423
430 HVTAPI_ATTR HvtResult HVTAPI_CALL hvtExportStreamImages(HvtStreamingContext streamingContext, const HvtStreamImagesExportInfo* exportInfos);
431
439 HVTAPI_ATTR HvtResult HVTAPI_CALL hvtExportSemaphore(HvtStreamingContext streamingContext, const HvtSemaphoreExportInfo* exportInfo, HvtSemaphore* outSemaphore);
440
447 HVTAPI_ATTR HvtResult HVTAPI_CALL hvtDestroySemaphore(HvtStreamingContext streamingContext, HvtSemaphore semaphore);
448
454 HVTAPI_ATTR HvtResult HVTAPI_CALL hvtStartStreaming(HvtStreamingContext streamingContext);
455
462 HVTAPI_ATTR HvtResult HVTAPI_CALL hvtAcquireStreamsFrames(HvtStreamingContext streamingContext, const HvtAcquireStreamFramesInfo* infos);
463
473 HVTAPI_ATTR HvtResult HVTAPI_CALL hvtReleaseStreamsFrames(HvtStreamingContext streamingContext, HvtSemaphore waitSemaphore);
474
480 HVTAPI_ATTR HvtResult HVTAPI_CALL hvtStopStreaming(HvtStreamingContext streamingContext);
481
487 HVTAPI_ATTR HvtResult HVTAPI_CALL hvtDestroyStreamingContext(HvtStreamingContext streamingContext);
488#endif
489
490 // Function pointer typedefs
491 typedef HvtResult(HVTAPI_PTR* PFN_hvtCreateStreamingContext)(const HvtStreamingContextCreateInfo* createInfo, HvtStreamingContext* outStreamingContext);
492 typedef HvtResult(HVTAPI_PTR* PFN_hvtEnumerateStreamsParameters)(HvtStreamingContext streamingContext, uint32_t* pStreamParameterCount, HvtRGBDStreamParameters* pStreamParameters);
493 typedef HvtResult(HVTAPI_PTR* PFN_hvtExportStreamImages)(HvtStreamingContext streamingContext, const HvtStreamImagesExportInfo* exportInfos);
494 typedef HvtResult(HVTAPI_PTR* PFN_hvtExportSemaphore)(HvtStreamingContext streamingContext, const HvtSemaphoreExportInfo* exportInfo, HvtSemaphore* outSemaphore);
495 typedef HvtResult(HVTAPI_PTR* PFN_hvtDestroySemaphore)(HvtStreamingContext streamingContext, HvtSemaphore semaphore);
496 typedef HvtResult(HVTAPI_PTR* PFN_hvtStartStreaming)(HvtStreamingContext streamingContext);
497 typedef HvtResult(HVTAPI_PTR* PFN_hvtAcquireStreamsFrames)(HvtStreamingContext streamingContext, const HvtAcquireStreamFramesInfo* infos);
498 typedef HvtResult(HVTAPI_PTR* PFN_hvtReleaseStreamsFrames)(HvtStreamingContext streamingContext, HvtSemaphore waitSemaphore);
499 typedef HvtResult(HVTAPI_PTR* PFN_hvtStopStreaming)(HvtStreamingContext streamingContext);
500 typedef HvtResult(HVTAPI_PTR* PFN_hvtDestroyStreamingContext)(HvtStreamingContext streamingContext);
501
502#ifdef __cplusplus
503} // Extern C
504#endif
505
506#endif // HVTSTREAMINGAPI_H
Parameters for query of the current frames infos.
Intrinsics parameters of an equirectangular projection.
Intrinsics parameters of a perspective projection.
Description of an RGBD stream.
char name[HVT_MAX_STREAM_NAME_LENGHT]
Information about a stream frame.
Information about the memory backing an image slot.
Export info for images of a stream.
Parameters for the creation of the Streaming context.
Union of possible intrinsics types data.