16 #ifndef NVMEDIA_SURFACE_H
17 #define NVMEDIA_SURFACE_H
46 #define NVMEDIA_SURFACE_VERSION_MAJOR (1u)
48 #define NVMEDIA_SURFACE_VERSION_MINOR (12u)
74 #define NVM_SURF_ATTR_SURF_TYPE_YUV (0x00000001u)
76 #define NVM_SURF_ATTR_SURF_TYPE_RGBA (0x00000002u)
78 #define NVM_SURF_ATTR_SURF_TYPE_RAW (0x00000003u)
82 #define NVM_SURF_ATTR_LAYOUT_BL (0x00000001u)
84 #define NVM_SURF_ATTR_LAYOUT_PL (0x00000002u)
88 #define NVM_SURF_ATTR_DATA_TYPE_UINT (0x00000001u)
90 #define NVM_SURF_ATTR_DATA_TYPE_INT (0x00000002u)
92 #define NVM_SURF_ATTR_DATA_TYPE_FLOAT (0x00000003u)
94 #define NVM_SURF_ATTR_DATA_TYPE_FLOATISP (0x00000004u)
98 #define NVM_SURF_ATTR_MEMORY_PLANAR (0x00000001u)
100 #define NVM_SURF_ATTR_MEMORY_SEMI_PLANAR (0x00000002u)
102 #define NVM_SURF_ATTR_MEMORY_PACKED (0x00000003u)
108 #define NVM_SURF_ATTR_SUB_SAMPLING_TYPE_420 (0x00000001u)
110 #define NVM_SURF_ATTR_SUB_SAMPLING_TYPE_422 (0x00000002u)
112 #define NVM_SURF_ATTR_SUB_SAMPLING_TYPE_444 (0x00000003u)
114 #define NVM_SURF_ATTR_SUB_SAMPLING_TYPE_422R (0x00000004u)
116 #define NVM_SURF_ATTR_SUB_SAMPLING_TYPE_NONE (0x00000000u)
122 #define NVM_SURF_ATTR_BITS_PER_COMPONENT_8 (0x00000001u)
124 #define NVM_SURF_ATTR_BITS_PER_COMPONENT_10 (0x00000002u)
126 #define NVM_SURF_ATTR_BITS_PER_COMPONENT_12 (0x00000003u)
128 #define NVM_SURF_ATTR_BITS_PER_COMPONENT_14 (0x00000004u)
130 #define NVM_SURF_ATTR_BITS_PER_COMPONENT_16 (0x00000005u)
132 #define NVM_SURF_ATTR_BITS_PER_COMPONENT_32 (0x00000006u)
135 #define NVM_SURF_ATTR_BITS_PER_COMPONENT_LAYOUT_16_8_8 (0x00000007u)
137 #define NVM_SURF_ATTR_BITS_PER_COMPONENT_LAYOUT_10_8_8 (0x00000008u)
139 #define NVM_SURF_ATTR_BITS_PER_COMPONENT_LAYOUT_2_10_10_10 (0x00000009u)
141 #define NVM_SURF_ATTR_BITS_PER_COMPONENT_20 (0x0000000Au)
145 #define NVM_SURF_ATTR_COMPONENT_ORDER_LUMA (0x00000001u)
147 #define NVM_SURF_ATTR_COMPONENT_ORDER_YUV (0x00000002u)
149 #define NVM_SURF_ATTR_COMPONENT_ORDER_YVU (0x00000003u)
151 #define NVM_SURF_ATTR_COMPONENT_ORDER_YUYV (0x00000004u)
153 #define NVM_SURF_ATTR_COMPONENT_ORDER_YVYU (0x00000005u)
155 #define NVM_SURF_ATTR_COMPONENT_ORDER_VYUY (0x00000006u)
157 #define NVM_SURF_ATTR_COMPONENT_ORDER_UYVY (0x00000007u)
159 #define NVM_SURF_ATTR_COMPONENT_ORDER_XUYV (0x00000008u)
161 #define NVM_SURF_ATTR_COMPONENT_ORDER_XYUV (0x00000009u)
163 #define NVM_SURF_ATTR_COMPONENT_ORDER_VUYX (0x0000000Au)
167 #define NVM_SURF_ATTR_COMPONENT_ORDER_ALPHA (0x00000011u)
169 #define NVM_SURF_ATTR_COMPONENT_ORDER_RGBA (0x00000012u)
171 #define NVM_SURF_ATTR_COMPONENT_ORDER_ARGB (0x00000013u)
173 #define NVM_SURF_ATTR_COMPONENT_ORDER_BGRA (0x00000014u)
175 #define NVM_SURF_ATTR_COMPONENT_ORDER_RG (0x00000015u)
179 #define NVM_SURF_ATTR_COMPONENT_ORDER_RGGB (0x00000021u)
181 #define NVM_SURF_ATTR_COMPONENT_ORDER_BGGR (0x00000022u)
183 #define NVM_SURF_ATTR_COMPONENT_ORDER_GRBG (0x00000023u)
185 #define NVM_SURF_ATTR_COMPONENT_ORDER_GBRG (0x00000024u)
188 #define NVM_SURF_ATTR_COMPONENT_ORDER_RCCB (0x00000025u)
190 #define NVM_SURF_ATTR_COMPONENT_ORDER_BCCR (0x00000026u)
192 #define NVM_SURF_ATTR_COMPONENT_ORDER_CRBC (0x00000027u)
194 #define NVM_SURF_ATTR_COMPONENT_ORDER_CBRC (0x00000028u)
197 #define NVM_SURF_ATTR_COMPONENT_ORDER_RCCC (0x00000029u)
199 #define NVM_SURF_ATTR_COMPONENT_ORDER_CCCR (0x0000002Au)
201 #define NVM_SURF_ATTR_COMPONENT_ORDER_CRCC (0x0000002Bu)
203 #define NVM_SURF_ATTR_COMPONENT_ORDER_CCRC (0x0000002Cu)
206 #define NVM_SURF_ATTR_COMPONENT_ORDER_CCCC (0x0000002Du)
221 #define NVM_SURF_FMT_DEFINE_ATTR(x) \
222 NvMediaSurfFormatAttr x[] = { \
224 .type = NVM_SURF_ATTR_SURF_TYPE, \
228 .type = NVM_SURF_ATTR_LAYOUT, \
232 .type = NVM_SURF_ATTR_DATA_TYPE, \
236 .type = NVM_SURF_ATTR_MEMORY, \
240 .type = NVM_SURF_ATTR_SUB_SAMPLING_TYPE, \
244 .type = NVM_SURF_ATTR_BITS_PER_COMPONENT, \
248 .type = NVM_SURF_ATTR_COMPONENT_ORDER, \
259 #define NVM_SURF_FMT_SET_ATTR_YUV(attr, order, samplingtype, memory, datatype, bpc, layout) \
261 attr[0].type = NVM_SURF_ATTR_SURF_TYPE; \
262 attr[0].value = NVM_SURF_ATTR_SURF_TYPE_YUV; \
264 attr[1].type = NVM_SURF_ATTR_LAYOUT; \
265 attr[1].value = NVM_SURF_ATTR_LAYOUT_##layout; \
267 attr[2].type = NVM_SURF_ATTR_DATA_TYPE; \
268 attr[2].value = NVM_SURF_ATTR_DATA_TYPE_##datatype; \
270 attr[3].type = NVM_SURF_ATTR_MEMORY; \
271 attr[3].value = NVM_SURF_ATTR_MEMORY_##memory; \
273 attr[4].type = NVM_SURF_ATTR_SUB_SAMPLING_TYPE; \
274 attr[4].value = NVM_SURF_ATTR_SUB_SAMPLING_TYPE_##samplingtype; \
276 attr[5].type = NVM_SURF_ATTR_BITS_PER_COMPONENT; \
277 attr[5].value = NVM_SURF_ATTR_BITS_PER_COMPONENT_##bpc; \
279 attr[6].type = NVM_SURF_ATTR_COMPONENT_ORDER; \
280 attr[6].value = NVM_SURF_ATTR_COMPONENT_ORDER_##order; \
287 #define NVM_SURF_FMT_SET_ATTR_RGBA(attr, order, datatype, bpc, layout) \
289 attr[0].type = NVM_SURF_ATTR_SURF_TYPE; \
290 attr[0].value = NVM_SURF_ATTR_SURF_TYPE_RGBA; \
292 attr[1].type = NVM_SURF_ATTR_LAYOUT; \
293 attr[1].value = NVM_SURF_ATTR_LAYOUT_##layout; \
295 attr[2].type = NVM_SURF_ATTR_DATA_TYPE; \
296 attr[2].value = NVM_SURF_ATTR_DATA_TYPE_##datatype; \
298 attr[3].type = NVM_SURF_ATTR_MEMORY; \
299 attr[3].value = NVM_SURF_ATTR_MEMORY_PACKED; \
301 attr[4].type = NVM_SURF_ATTR_SUB_SAMPLING_TYPE; \
304 attr[5].type = NVM_SURF_ATTR_BITS_PER_COMPONENT; \
305 attr[5].value = NVM_SURF_ATTR_BITS_PER_COMPONENT_##bpc; \
307 attr[6].type = NVM_SURF_ATTR_COMPONENT_ORDER; \
308 attr[6].value = NVM_SURF_ATTR_COMPONENT_ORDER_##order; \
315 #define NVM_SURF_FMT_SET_ATTR_RAW(attr, order, datatype, bpc, layout) \
317 attr[0].type = NVM_SURF_ATTR_SURF_TYPE; \
318 attr[0].value = NVM_SURF_ATTR_SURF_TYPE_RAW; \
320 attr[1].type = NVM_SURF_ATTR_LAYOUT; \
321 attr[1].value = NVM_SURF_ATTR_LAYOUT_##layout; \
323 attr[2].type = NVM_SURF_ATTR_DATA_TYPE; \
324 attr[2].value = NVM_SURF_ATTR_DATA_TYPE_##datatype; \
326 attr[3].type = NVM_SURF_ATTR_MEMORY; \
327 attr[3].value = NVM_SURF_ATTR_MEMORY_PACKED; \
329 attr[4].type = NVM_SURF_ATTR_SUB_SAMPLING_TYPE; \
332 attr[5].type = NVM_SURF_ATTR_BITS_PER_COMPONENT; \
333 attr[5].value = NVM_SURF_ATTR_BITS_PER_COMPONENT_##bpc; \
335 attr[6].type = NVM_SURF_ATTR_COMPONENT_ORDER; \
336 attr[6].value = NVM_SURF_ATTR_COMPONENT_ORDER_##order; \
371 #define NVM_SURF_ATTR_CPU_ACCESS_UNCACHED (0x00000001u)
373 #define NVM_SURF_ATTR_CPU_ACCESS_CACHED (0x00000002u)
375 #define NVM_SURF_ATTR_CPU_ACCESS_UNMAPPED (0x00000003u)
380 #define NVM_SURF_ATTR_ALLOC_ISOCHRONOUS (0x00000001u)
382 #define NVM_SURF_ATTR_ALLOC_SECURED (0x00000002u)
387 #define NVM_SURF_ATTR_SCAN_PROGRESSIVE (0x00000001u)
389 #define NVM_SURF_ATTR_SCAN_INTERLACED (0x00000002u)
396 #define NVM_SURF_ATTR_COLOR_STD_SRGB (0x00000001u)
400 #define NVM_SURF_ATTR_COLOR_STD_REC601_SR (0x00000002u)
404 #define NVM_SURF_ATTR_COLOR_STD_REC601_ER (0x00000003u)
408 #define NVM_SURF_ATTR_COLOR_STD_REC709_SR (0x00000004u)
412 #define NVM_SURF_ATTR_COLOR_STD_REC709_ER (0x00000005u)
418 #define NVM_SURF_ATTR_COLOR_STD_REC2020_RGB (0x00000006u)
424 #define NVM_SURF_ATTR_COLOR_STD_REC2020_SR (0x00000007u)
430 #define NVM_SURF_ATTR_COLOR_STD_REC2020_ER (0x00000008u)
436 #define NVM_SURF_ATTR_COLOR_STD_YcCbcCrc_SR (0x00000009u)
442 #define NVM_SURF_ATTR_COLOR_STD_YcCbcCrc_ER (0x0000000Au)
450 #define NVM_SURF_ATTR_COLOR_STD_SENSOR_RGBA (0x0000000Bu)
455 #define NVM_SURF_ATTR_COLOR_STD_REC2020PQ_ER (0x0000000Cu)
470 #define NvMediaSurfaceType uint32_t
482 #define NvMediaSurfaceType_Video_420 (1000u)
483 #define NvMediaSurfaceType_Video_420_10bit (1001u)
484 #define NvMediaSurfaceType_Video_420_12bit (1002u)
488 #define NvMediaSurfaceType_Video_422 (1003u)
489 #define NvMediaSurfaceType_Video_422_10bit (1004u)
490 #define NvMediaSurfaceType_Video_422_12bit (1005u)
494 #define NvMediaSurfaceType_Video_444 (1006u)
495 #define NvMediaSurfaceType_Video_444_10bit (1007u)
496 #define NvMediaSurfaceType_Video_444_12bit (1008u)
498 #define NvMediaSurfaceType_VideoCapture_422 (1009u)
500 #define NvMediaSurfaceType_VideoCapture_YUYV_422 (1010u)
502 #define NvMediaSurfaceType_R8G8B8A8 (1011u)
506 #define NvMediaSurfaceType_R8G8B8A8_BottomOrigin (1012u)
508 #define NvMediaSurfaceType_Image_Monochrome (1013u)
510 #define NvMediaSurfaceType_Image_YUV_420 (1014u)
512 #define NvMediaSurfaceType_Image_YUV_422 (1015u)
514 #define NvMediaSurfaceType_Image_YUV_444 (1016u)
516 #define NvMediaSurfaceType_Image_YUYV_422 (1017u)
518 #define NvMediaSurfaceType_Image_RGBA (1018u)
520 #define NvMediaSurfaceType_Image_RAW (1019u)
522 #define NvMediaSurfaceType_Image_V16Y16U16X16 (1020u)
524 #define NvMediaSurfaceType_Image_Y16 (1021u)
526 #define NvMediaSurfaceType_Image_X2U10Y10V10 (1022u)
528 #define NvMediaSurfaceType_Image_Y10U8V8_420 (1023u)
530 #define NvMediaSurfaceType_Image_Y10 (1024u)
532 #define NvMediaSurfaceType_A8 (1025u)
534 #define NvMediaSurfaceType_Unsupported (99999u)
537 #define NvMediaSurfaceType_YV12 NvMediaSurfaceType_Video_420
539 #define NvMediaSurfaceType_YV16 NvMediaSurfaceType_Video_422
541 #define NvMediaSurfaceType_YV24 NvMediaSurfaceType_Video_444
543 #define NvMediaSurfaceType_YV16x2 NvMediaSurfaceType_VideoCapture_422
554 unsigned int numAttrs
575 unsigned int numAttrs
#define NvMediaSurfaceType
Defines the set of NvMedia surface types.
NvMediaStatus NvMediaSurfaceGetVersion(NvMediaVersion *version)
Returns the version information for the NvMediaSurface component.
! Maximum number of surface format attributes.
! Surface scan type (default: Progressive)
! Peer VM ID in case of shared buffers
NvMediaStatus
Defines all possible error codes.
! Maximum number of surface allocation attributes
NvMediaSurfaceType NvMediaSurfaceFormatGetType(const NvMediaSurfFormatAttr *attrs, unsigned int numAttrs)
Gets the NvMedia surface format type for the input surface format attributes.
! Surface layout type flags.
! Surface height (excluding embedded data lines)
! Allocation type, isochronous or secured (default: none)
! CPU access to surface flags (default: uncached)
! Color Standard type (default: YCbCr Rec.601 (Extended Range) for YUV surface types, sRGB for RGB surface types)
! Bits per component flags.
! Surface sub sampling type flags.
NvMediaSurfAllocAttrType
Defines NvMedia Surface Allocation attribute types.
! Surface memory type flags.
NvMediaSurfFormatAttrType
Defines NvMedia Surface format attribute types.
! Surface data type flags.
NvMediaStatus NvMediaSurfaceFormatGetAttrs(NvMediaSurfaceType type, NvMediaSurfFormatAttr *attrs, unsigned int numAttrs)
Gets NvMedia surface format attributes for the input surface type.