13#ifndef __NVBUF_UTILS_COMPAT_H__
14#define __NVBUF_UTILS_COMPAT_H__
17#if __has_include(<nvbuf_utils_orig.h>)
19 #include <nvbuf_utils_orig.h>
22 #include <nvbufsurface.h>
23 #include <nvbufsurftransform.h>
25 #include <EGL/eglext.h>
34 typedef NvBufSurfaceColorFormat NvBufferColorFormat;
36 #define NvBufferColorFormat_UYVY NVBUF_COLOR_FORMAT_UYVY
37 #define NvBufferColorFormat_YUYV NVBUF_COLOR_FORMAT_YUYV
38 #define NvBufferColorFormat_YUV420 NVBUF_COLOR_FORMAT_YUV420
39 #define NvBufferColorFormat_NV12 NVBUF_COLOR_FORMAT_NV12
40 #define NvBufferColorFormat_NV12_ER NVBUF_COLOR_FORMAT_NV12_ER
41 #define NvBufferColorFormat_ABGR32 NVBUF_COLOR_FORMAT_ABGR
42 #define NvBufferColorFormat_ARGB32 NVBUF_COLOR_FORMAT_ARGB
43 #define NvBufferColorFormat_RGBA NVBUF_COLOR_FORMAT_RGBA
44 #define NvBufferColorFormat_BGRA NVBUF_COLOR_FORMAT_BGRA
45 #define NvBufferColorFormat_Invalid NVBUF_COLOR_FORMAT_INVALID
46 #define NvBufferColorFormat_GRAY8 NVBUF_COLOR_FORMAT_GRAY8
49 typedef NvBufSurfaceLayout NvBufferLayout;
51 #define NvBufferLayout_Pitch NVBUF_LAYOUT_PITCH
52 #define NvBufferLayout_BlockLinear NVBUF_LAYOUT_BLOCK_LINEAR
55 typedef NvBufSurfaceMemType NvBufferPayload;
57 #define NvBufferPayload_SurfArray NVBUF_MEM_SURFACE_ARRAY
58 #define NvBufferPayload_MemHandle NVBUF_MEM_HANDLE
61 #define NvBufferTag_NONE NvBufSurfaceTag_NONE
62 #define NvBufferTag_CAMERA NvBufSurfaceTag_CAMERA
63 #define NvBufferTag_VIDEO_DEC NvBufSurfaceTag_VIDEO_DEC
64 #define NvBufferTag_VIDEO_ENC NvBufSurfaceTag_VIDEO_ENC
65 #define NvBufferTag_VIDEO_CONVERT NvBufSurfaceTag_VIDEO_CONVERT
68 typedef NvBufSurfaceMemMapFlags NvBufferMemMapFlags;
70 #define NvBufferMem_Read NVBUF_MAP_READ
71 #define NvBufferMem_Write NVBUF_MAP_WRITE
72 #define NvBufferMem_Read_Write NVBUF_MAP_READ_WRITE
75 typedef NvBufSurfTransform_Flip NvBufferTransform_Flip;
77 #define NvBufferTransform_None NvBufSurfTransform_None
78 #define NvBufferTransform_Rotate90 NvBufSurfTransform_Rotate90
79 #define NvBufferTransform_Rotate180 NvBufSurfTransform_Rotate180
80 #define NvBufferTransform_Rotate270 NvBufSurfTransform_Rotate270
81 #define NvBufferTransform_FlipX NvBufSurfTransform_FlipX
82 #define NvBufferTransform_FlipY NvBufSurfTransform_FlipY
85 typedef NvBufSurfTransform_Inter NvBufferTransform_Filter;
87 #define NvBufferTransform_Filter_Nearest NvBufSurfTransformInter_Nearest
88 #define NvBufferTransform_Filter_Bilinear NvBufSurfTransformInter_Bilinear
89 #define NvBufferTransform_Filter_5_Tap NvBufSurfTransformInter_Algo1
90 #define NvBufferTransform_Filter_10_Tap NvBufSurfTransformInter_Algo2
91 #define NvBufferTransform_Filter_Smart NvBufSurfTransformInter_Algo3
92 #define NvBufferTransform_Filter_Nicest NvBufSurfTransformInter_Algo4
96 #define NVBUFFER_TRANSFORM_FILTER NVBUFSURF_TRANSFORM_FILTER
97 #define NVBUFFER_TRANSFORM_CROP_SRC NVBUFSURF_TRANSFORM_CROP_SRC
98 #define NVBUFFER_TRANSFORM_CROP_DST NVBUFSURF_TRANSFORM_CROP_DST
99 #define NVBUFFER_TRANSFORM_FLIP NVBUFSURF_TRANSFORM_FLIP
102 typedef NvBufSurfTransformRect NvBufferRect;
124 uint32_t width[NVBUF_MAX_PLANES];
125 uint32_t height[NVBUF_MAX_PLANES];
126 uint32_t pitch[NVBUF_MAX_PLANES];
127 uint32_t offset[NVBUF_MAX_PLANES];
128 uint32_t psize[NVBUF_MAX_PLANES];
129 NvBufferLayout layout[NVBUF_MAX_PLANES];
165 std::lock_guard<std::mutex> lock(
mutex_);
170 std::lock_guard<std::mutex> lock(
mutex_);
176 NvBufSurface* surface =
nullptr;
177 if (NvBufSurfaceFromFd(fd, (
void**)&surface) == 0) {
185 std::lock_guard<std::mutex> lock(
mutex_);
206 if (!fd || !params)
return -1;
208 NvBufSurfaceCreateParams createParams = {0};
209 createParams.gpuId = 0;
210 createParams.width = params->
width;
211 createParams.height = params->
height;
212 createParams.size = 0;
213 createParams.isContiguous =
true;
215 createParams.layout = params->
layout;
218 NvBufSurface* surface =
nullptr;
219 int ret = NvBufSurfaceCreate(&surface, 1, &createParams);
220 if (ret != 0 || surface ==
nullptr) {
225 *fd = surface->surfaceList[0].bufferDesc;
238 inline int NvBufferDestroy(
int fd) {
242 return NvBufSurfaceDestroy(surface);
255 inline int NvBufferMemMap(
int fd, uint32_t plane, NvBufferMemMapFlags memflag,
void** ptr) {
257 if (!surface)
return -1;
260 uint32_t num_planes = surface->surfaceList[0].planeParams.num_planes;
261 uint32_t actual_plane = (plane < num_planes) ? plane : 0;
263 int ret = NvBufSurfaceMap(surface, 0, actual_plane, memflag);
264 if (ret != 0)
return ret;
266 *ptr = surface->surfaceList[0].mappedAddr.addr[actual_plane];
277 inline int NvBufferMemUnMap(
int fd, uint32_t plane,
void** ptr) {
280 if (!surface)
return -1;
283 uint32_t num_planes = surface->surfaceList[0].planeParams.num_planes;
284 uint32_t actual_plane = (plane < num_planes) ? plane : 0;
286 return NvBufSurfaceUnMap(surface, 0, actual_plane);
301 inline int NvBufferMemSyncForCpu(
int fd, uint32_t plane,
void** ptr) {
312 uint32_t num_planes = surface->surfaceList[0].planeParams.num_planes;
313 uint32_t actual_plane = (plane < num_planes) ? plane : 0;
315 return NvBufSurfaceSyncForCpu(surface, 0, actual_plane);
330 inline int NvBufferMemSyncForDevice(
int fd, uint32_t plane,
void** ptr) {
341 uint32_t num_planes = surface->surfaceList[0].planeParams.num_planes;
342 uint32_t actual_plane = (plane < num_planes) ? plane : 0;
344 return NvBufSurfaceSyncForDevice(surface, 0, actual_plane);
354 if (!params)
return -1;
357 if (!surface)
return -1;
359 NvBufSurfaceParams* surfParams = &surface->surfaceList[0];
362 params->
num_planes = surfParams->planeParams.num_planes;
365 params->
memsize = surfParams->dataSize;
367 for (uint32_t i = 0; i < params->
num_planes && i < NVBUF_MAX_PLANES; i++) {
368 params->
width[i] = surfParams->planeParams.width[i];
369 params->
height[i] = surfParams->planeParams.height[i];
370 params->
pitch[i] = surfParams->planeParams.pitch[i];
371 params->
offset[i] = surfParams->planeParams.offset[i];
372 params->
psize[i] = surfParams->planeParams.psize[i];
373 params->
layout[i] = surfParams->layout;
390 if (!srcSurface || !dstSurface || !params)
return -1;
392 NvBufSurfTransformParams transformParams = {0};
396 transformParams.src_rect = ¶ms->
src_rect;
397 transformParams.dst_rect = ¶ms->
dst_rect;
399 return NvBufSurfTransform(srcSurface, dstSurface, &transformParams);
414 inline EGLImageKHR NvEGLImageFromFd(EGLDisplay eglDisplay,
int fd) {
418 if (NvBufSurfaceFromFd(fd, (
void**)&surface) != 0) {
419 return EGL_NO_IMAGE_KHR;
425 if (NvBufSurfaceMapEglImage(surface, 0) != 0) {
426 return EGL_NO_IMAGE_KHR;
429 return surface->surfaceList[0].mappedAddr.eglImage;
441 inline int NvDestroyEGLImage(EGLDisplay eglDisplay, EGLImageKHR eglImage) {
Internal class to manage FD to NvBufSurface mapping.
Definition nvbuf_utils.h:157
NvBufSurface * getSurface(int fd)
Definition nvbuf_utils.h:169
std::mutex mutex_
Definition nvbuf_utils.h:192
static NvBufSurfaceManager & instance()
Definition nvbuf_utils.h:159
NvBufSurfaceManager()=default
std::map< int, NvBufSurface * > fdToSurface_
Definition nvbuf_utils.h:191
void registerSurface(int fd, NvBufSurface *surface)
Definition nvbuf_utils.h:164
void unregisterSurface(int fd)
Definition nvbuf_utils.h:184
Parameters for buffer creation (JetPack 4.x compatible)
Definition nvbuf_utils.h:111
NvBufferPayload payloadType
Definition nvbuf_utils.h:116
NvBufferColorFormat colorFormat
Definition nvbuf_utils.h:115
NvBufferLayout layout
Definition nvbuf_utils.h:114
uint32_t height
Definition nvbuf_utils.h:113
uint32_t width
Definition nvbuf_utils.h:112
NvBufSurfaceTag nvbuf_tag
Definition nvbuf_utils.h:117
Buffer parameters structure (JetPack 4.x compatible)
Definition nvbuf_utils.h:123
uint32_t nv_buffer_size
Definition nvbuf_utils.h:131
NvBufferColorFormat pixel_format
Definition nvbuf_utils.h:133
uint32_t psize[NVBUF_MAX_PLANES]
Definition nvbuf_utils.h:128
uint32_t pitch[NVBUF_MAX_PLANES]
Definition nvbuf_utils.h:126
uint32_t width[NVBUF_MAX_PLANES]
Definition nvbuf_utils.h:124
uint32_t memsize
Definition nvbuf_utils.h:132
uint32_t height[NVBUF_MAX_PLANES]
Definition nvbuf_utils.h:125
uint32_t offset[NVBUF_MAX_PLANES]
Definition nvbuf_utils.h:127
NvBufferLayout layout[NVBUF_MAX_PLANES]
Definition nvbuf_utils.h:129
uint32_t num_planes
Definition nvbuf_utils.h:130