NVIDIA DRIVE OS Linux SDK API Reference

5.1.15.0 Release
For Test and Development only
nvros_egl_utils.h
Go to the documentation of this file.
1 /*Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved.
2 
3 NVIDIA CORPORATION and its licensors retain all intellectual property
4 and proprietary rights in and to this software, related documentation
5 and any modifications thereto. Any use, reproduction, disclosure or
6 distribution of this software and related documentation without an express
7 license agreement from NVIDIA CORPORATION is strictly prohibited.*/
8 
9 #ifndef _NVROSEGLUTIL_H_
10 #define _NVROSEGLUTIL_H_
11 
12 #include <EGL/egl.h>
13 #include <EGL/eglext.h>
14 
15 #include "nvmedia_core.h"
16 #include "nvroscommon.h"
17 #include "egl_extensions.h"
18 
19 #include "cuda.h"
20 #include "cudaEGL.h"
21 
34  namespace nvros
35  {
49 typedef enum _ConsumerType
50 {
51 
56 
61 
66 
72 
77 
81 
84 } ConsumerType;
85 
90 typedef enum _ProducerType
91 {
92 
97 
102 
107 
112 
116 
119 } ProducerType;
120 
125 typedef enum _WinSys
126 {
127 
129  X11 = 0,
130 
133 
136 
139 
142 } WinSys;
143 
147 typedef enum _OpMode
148 {
149 
151  MAILBOX = 0,
152 
155 
158 } OpMode;
159 
169 typedef struct _EglUtilOptions
170 {
172  uint8_t winSizeX;
173 
175  uint8_t winSizeY;
176 
178  uint8_t winOffsetX;
179 
181  uint8_t winOffsetY;
182 
184  uint8_t dispId;
185 
187  uint8_t winId;
189 
198 typedef struct _EglUtilState
199 {
204  EGLDisplay display;
205 
210  EGLSurface surface;
211 
216  EGLConfig config;
217 
222  EGLContext context;
223 
225  EGLint width;
226 
228  EGLint height;
229 
231  EGLint xoffset;
232 
234  EGLint yoffset;
235 
237  EGLint displayId;
238 
240  EGLint windowId;
241 } EglUtilState;
242 
251 typedef struct _CudaEglParams {
252 
257  EGLDisplay display;
258 
263  EGLStreamKHR eglStream;
264 
269  CUcontext context;
270 
275  CUeglStreamConnection cuEglConn;
276 } CudaEglParams;
277 
286 
287 public:
300  NvRosEglUtil(ConsumerType cons_type, WinSys win_sys_type, OpMode op_mode);
301 
311  NvRosEglUtil(ProducerType prod_type, WinSys win_sys_type, OpMode op_mode);
312 
316  ~NvRosEglUtil();
317 
328 
343  NvRosErr EglUtilInit(EglUtilOptions* options, EglUtilState* eglUtil);
344 
358  EGLStreamKHR EglStreamInit(EGLDisplay display, const char* socket_path);
359 
370  EGLint GetStreamState(EGLDisplay display, EGLStreamKHR eglStream);
371 
383  NvRosErr InitConsumer(EGLDisplay display, EGLStreamKHR eglStream);
384 
398  NvRosErr InitConsumer(EGLDisplay display, EGLStreamKHR eglStream,
399  CudaEglParams* cudaConsumerParams);
400 
411  NvRosErr DeInitConsumer(CudaEglParams* cudaConsumerParams);
412 
422  NvRosErr EglStreamFinish(EGLDisplay display, EGLStreamKHR eglStream);
423 
434 
435 private:
436  ConsumerType mConsType;
437  ProducerType mProdType;
438  WinSys mWinSys;
439  OpMode mOpMode;
440 
441  typedef struct _EglDeviceState {
442  EGLDeviceEXT egl_dev;
443  int drm_fd;
444  int32_t drm_crtc_id;
445  uint32_t drm_conn_id;
446  EGLStreamKHR egl_str;
447  EGLOutputLayerEXT egl_lyr;
448  } EglDeviceState;
449 
450  EglDeviceState* eglDeviceState;
451 
452  //Private methods
453  NvRosErr EglUtilSetupExtensions();
454  NvRosErr WindowSystemInit(EglUtilState* state);
455  NvRosErr WindowSystemWindowInit(EglUtilState* state);
456  NvRosErr WindowSystemEglSurfaceCreate(EglUtilState* state);
457  NvRosErr GetOutputLayer(EglUtilState* state);
458  NvRosErr WindowSystemTerminate(void);
459  NvRosErr WindowSystemWindowTerminate(EglUtilState* state);
460  EGLStreamKHR InitConsumerEglStream(EGLDisplay display, const char* socket_path);
461  EGLStreamKHR InitProducerEglStream(EGLDisplay display, const char* socket_path);
462  NvRosErr EGLStreamSendFd(const char* socket_name, int fd);
463  int EGLStreamReceiveFd(const char* socket_name);
464  NvRosErr InitEglOutputConsumer(EGLDisplay display, EGLStreamKHR eglStream);
465  NvRosErr InitCudaConsumer(EGLDisplay display, EGLStreamKHR eglStream,
466  CudaEglParams* cudaCondumerParams);
467  NvRosErr DeInitCudaConsumer(CudaEglParams* cudaConsParams);
468 
469 };
471 }
472 #endif
nvros::DEFAULT_OP_MODE
@ DEFAULT_OP_MODE
Default EGLStream mode.
Definition: nvros_egl_utils.h:157
nvros::_EglUtilState::windowId
EGLint windowId
Window ID.
Definition: nvros_egl_utils.h:240
nvros::_EglUtilState::config
EGLConfig config
References EGLConfig.
Definition: nvros_egl_utils.h:216
nvros::_ConsumerType
_ConsumerType
Declares all EGL consumer types supported by NvMedia EGLStream library.
Definition: nvros_egl_utils.h:49
nvros::CUDA_CONSUMER
@ CUDA_CONSUMER
CUDA® consumer.
Definition: nvros_egl_utils.h:71
nvros::_EglUtilState::height
EGLint height
Height of the EGLDisplay.
Definition: nvros_egl_utils.h:228
nvros::ProducerType
enum nvros::_ProducerType ProducerType
Declares all EGL producer types supported by NvMedia EGLStream library.
nvros::NvRosEglUtil::DeInitConsumer
NvRosErr DeInitConsumer(CudaEglParams *cudaConsumerParams)
De-Initializes CUDA consumer over specified EGLDisplay and EGLStreamKHR handles with additional CudaE...
nvros::_EglUtilOptions::winOffsetX
uint8_t winOffsetX
Offset of window in the horizontal direction.
Definition: nvros_egl_utils.h:178
nvros::WinSys
enum nvros::_WinSys WinSys
Declares all window systems supported by NvMedia EGLStream library.
nvros::NvRosEglUtil::NvRosEglUtil
NvRosEglUtil(ConsumerType cons_type, WinSys win_sys_type, OpMode op_mode)
Instantiates NvRosEglUtil class for the EGL consumer role.
nvros::_CudaEglParams::cuEglConn
CUeglStreamConnection cuEglConn
Handle to the CUDA EGLStream connection.
Definition: nvros_egl_utils.h:275
nvros::DEFAULT_PRODUCER
@ DEFAULT_PRODUCER
Default producer.
Definition: nvros_egl_utils.h:115
nvros::NvRosEglUtil::InitConsumer
NvRosErr InitConsumer(EGLDisplay display, EGLStreamKHR eglStream)
Initializes an EGL consumer in EGLOUTPUT role over specified EGLDisplay and EGLStreamKHR handles.
nvros::VIDEO_CONSUMER
@ VIDEO_CONSUMER
Video consumer.
Definition: nvros_egl_utils.h:55
nvros::WAYLAND
@ WAYLAND
Wayland window system.
Definition: nvros_egl_utils.h:132
nvros::X11
@ X11
X11 window system.
Definition: nvros_egl_utils.h:129
nvros::NvRosEglUtil::EglUtilInit
NvRosErr EglUtilInit(EglUtilOptions *options, EglUtilState *eglUtil)
Initializes EGL utility structures.
nvros::_EglUtilState::xoffset
EGLint xoffset
Offset in X direction.
Definition: nvros_egl_utils.h:231
nvros::_ProducerType
_ProducerType
Declares all EGL producer types supported by NvMedia EGLStream library.
Definition: nvros_egl_utils.h:90
nvros::NvRosEglUtil
Class to initialize the EGLStream for the following roles: EGLOUTPUT_CONSUMER, CUDA_CONSUMER,...
Definition: nvros_egl_utils.h:285
nvros::_EglUtilState::surface
EGLSurface surface
References EGLSurface.
Definition: nvros_egl_utils.h:210
nvros::_CudaEglParams::context
CUcontext context
Handle to the CUDA context.
Definition: nvros_egl_utils.h:269
nvros::_EglUtilOptions::winSizeY
uint8_t winSizeY
Size of window in the vertical direction.
Definition: nvros_egl_utils.h:175
nvros::VIDEO_PRODUCER
@ VIDEO_PRODUCER
Video producer.
Definition: nvros_egl_utils.h:96
nvros::MAILBOX
@ MAILBOX
EGLStream in mailbox mode.
Definition: nvros_egl_utils.h:151
nvros::EGLOUTPUT_CONSUMER
@ EGLOUTPUT_CONSUMER
EGL output consumer.
Definition: nvros_egl_utils.h:76
nvros::_EglUtilOptions::winSizeX
uint8_t winSizeX
Size of window in the horizontal direction.
Definition: nvros_egl_utils.h:172
nvros::_EglUtilState
Holds EGL related parameters.
Definition: nvros_egl_utils.h:198
nvros::EglUtilOptions
struct nvros::_EglUtilOptions EglUtilOptions
Holds required window system related parameters when initializing EGLStream.
nvros::_EglUtilState::displayId
EGLint displayId
Display ID.
Definition: nvros_egl_utils.h:237
nvros::INVALID_CONSUMER
@ INVALID_CONSUMER
Invalid consumer type.
Definition: nvros_egl_utils.h:83
nvros::_EglUtilOptions::dispId
uint8_t dispId
Display ID.
Definition: nvros_egl_utils.h:184
nvros::NONE
@ NONE
No window system.
Definition: nvros_egl_utils.h:138
nvros::ConsumerType
enum nvros::_ConsumerType ConsumerType
Declares all EGL consumer types supported by NvMedia EGLStream library.
nvros::_EglUtilState::context
EGLContext context
References EGLContext.
Definition: nvros_egl_utils.h:222
nvros::EGLDEVICE
@ EGLDEVICE
Egldevice window system.
Definition: nvros_egl_utils.h:135
nvros::_OpMode
_OpMode
Declares modes of operation for EGLStream.
Definition: nvros_egl_utils.h:147
nvros::NvRosEglUtil::CheckNvMediaEGLStreamVersion
NvMediaStatus CheckNvMediaEGLStreamVersion(void)
Checks version of NvMedia EGLStream library.
nvmedia_core.h
NVIDIA Media Interface: Core
nvros::GL_PRODUCER
@ GL_PRODUCER
GL producer.
Definition: nvros_egl_utils.h:106
nvros::NvRosErr
enum nvros::_NvRosErrCode NvRosErr
Declares error codes for all NvROS modules and packages.
nvros::_EglUtilState::display
EGLDisplay display
References EGLDisplay when creating the EGLStream.
Definition: nvros_egl_utils.h:204
nvros::DEFAULT_WINSYS
@ DEFAULT_WINSYS
Default window system.
Definition: nvros_egl_utils.h:141
nvros::_CudaEglParams
Holds CUDA EGL related parameters.
Definition: nvros_egl_utils.h:251
NvMediaStatus
NvMediaStatus
Defines all possible error codes.
Definition: nvmedia_core.h:180
nvros::IMAGE_CONSUMER
@ IMAGE_CONSUMER
Image consumer.
Definition: nvros_egl_utils.h:60
nvros::EglUtilState
struct nvros::_EglUtilState EglUtilState
Holds EGL related parameters.
nvros::DEFAULT_CONSUMER
@ DEFAULT_CONSUMER
Default consumer.
Definition: nvros_egl_utils.h:80
nvros::NvRosEglUtil::EglUtilDeInit
NvRosErr EglUtilDeInit(EglUtilState *state)
Terminates the entire EGLStream setup that was initialized through previous EglUtilInit and EglStream...
nvros::_WinSys
_WinSys
Declares all window systems supported by NvMedia EGLStream library.
Definition: nvros_egl_utils.h:125
nvros::_CudaEglParams::display
EGLDisplay display
Handle to the EGLDisplay.
Definition: nvros_egl_utils.h:257
nvros::FIFO
@ FIFO
EGLStream in FIFO mode.
Definition: nvros_egl_utils.h:154
nvros::_EglUtilOptions
Holds required window system related parameters when initializing EGLStream.
Definition: nvros_egl_utils.h:169
nvros::OpMode
enum nvros::_OpMode OpMode
Declares modes of operation for EGLStream.
nvros::CUDA_PRODUCER
@ CUDA_PRODUCER
CUDA producer.
Definition: nvros_egl_utils.h:111
nvros::IMAGE_PRODUCER
@ IMAGE_PRODUCER
Image producer.
Definition: nvros_egl_utils.h:101
nvros::CudaEglParams
struct nvros::_CudaEglParams CudaEglParams
Holds CUDA EGL related parameters.
nvros::_EglUtilState::yoffset
EGLint yoffset
Offset in the vertical direction.
Definition: nvros_egl_utils.h:234
nvros::NvRosEglUtil::EglStreamInit
EGLStreamKHR EglStreamInit(EGLDisplay display, const char *socket_path)
Initializes an EGLStream over a given EGLDisplay through EglUtilInit and a given socket path.
nvros::NvRosEglUtil::GetStreamState
EGLint GetStreamState(EGLDisplay display, EGLStreamKHR eglStream)
Gets the current state of EGLStream.
nvros::_EglUtilOptions::winId
uint8_t winId
Window ID.
Definition: nvros_egl_utils.h:187
nvros
A global namespace for NvRos packages.
nvros::GL_CONSUMER
@ GL_CONSUMER
GL consumer.
Definition: nvros_egl_utils.h:65
nvros::NvRosEglUtil::EglStreamFinish
NvRosErr EglStreamFinish(EGLDisplay display, EGLStreamKHR eglStream)
Closes the EGLStream that is set up by the same NvRosEglUtil object.
nvros::INVALID_PRODUCER
@ INVALID_PRODUCER
Invalid producer type.
Definition: nvros_egl_utils.h:118
nvros::NvRosEglUtil::~NvRosEglUtil
~NvRosEglUtil()
Destroys NvRosEglUtil object.
nvros::_EglUtilOptions::winOffsetY
uint8_t winOffsetY
Offset of window in the vertical direction.
Definition: nvros_egl_utils.h:181
nvroscommon.h
NVIDIA Robot Operating System : Common Enums, Macros, and Constants
nvros::_EglUtilState::width
EGLint width
Width of the EGLDisplay.
Definition: nvros_egl_utils.h:225
nvros::_CudaEglParams::eglStream
EGLStreamKHR eglStream
Handle to the EGLStream.
Definition: nvros_egl_utils.h:263