3#if defined(QGC_HAS_GST_DMABUF_GPU_PATH)
9int drmFourccForPlane(
const GstVideoInfo& info,
int plane)
11 const GstVideoFormat fmt = GST_VIDEO_INFO_FORMAT(&info);
12#if G_BYTE_ORDER == G_LITTLE_ENDIAN
13 constexpr int argbFourcc = DRM_FORMAT_ARGB8888;
14 constexpr int rgbaFourcc = DRM_FORMAT_ABGR8888;
15 constexpr int rgbFourcc = DRM_FORMAT_BGR888;
16 constexpr int rgFourcc = DRM_FORMAT_GR88;
18 constexpr int argbFourcc = DRM_FORMAT_BGRA8888;
19 constexpr int rgbaFourcc = DRM_FORMAT_RGBA8888;
20 constexpr int rgbFourcc = DRM_FORMAT_RGB888;
21 constexpr int rgFourcc = DRM_FORMAT_RG88;
25 case GST_VIDEO_FORMAT_RGB16:
26 case GST_VIDEO_FORMAT_BGR16:
27 return DRM_FORMAT_RGB565;
28 case GST_VIDEO_FORMAT_RGB:
29 case GST_VIDEO_FORMAT_BGR:
32 case GST_VIDEO_FORMAT_BGRA:
33 case GST_VIDEO_FORMAT_BGRx:
35 case GST_VIDEO_FORMAT_RGBA:
36 case GST_VIDEO_FORMAT_RGBx:
37 case GST_VIDEO_FORMAT_ARGB:
38 case GST_VIDEO_FORMAT_xRGB:
39 case GST_VIDEO_FORMAT_ABGR:
40 case GST_VIDEO_FORMAT_xBGR:
41 case GST_VIDEO_FORMAT_AYUV:
43#if defined(DRM_FORMAT_BGRA1010102)
44 case GST_VIDEO_FORMAT_BGR10A2_LE:
45 return DRM_FORMAT_BGRA1010102;
47 case GST_VIDEO_FORMAT_GRAY8:
49 case GST_VIDEO_FORMAT_YUY2:
50 case GST_VIDEO_FORMAT_UYVY:
51 case GST_VIDEO_FORMAT_GRAY16_LE:
52 case GST_VIDEO_FORMAT_GRAY16_BE:
54 case GST_VIDEO_FORMAT_NV12:
55 case GST_VIDEO_FORMAT_NV21:
56 return plane == 0 ? DRM_FORMAT_R8 : rgFourcc;
57 case GST_VIDEO_FORMAT_I420:
58 case GST_VIDEO_FORMAT_YV12:
59 case GST_VIDEO_FORMAT_Y42B:
60 case GST_VIDEO_FORMAT_Y444:
62 case GST_VIDEO_FORMAT_P010_10LE:
63 case GST_VIDEO_FORMAT_P010_10BE:
64 return plane == 0 ? DRM_FORMAT_R16 : DRM_FORMAT_RG1616;
70int drmFourccForSingleFd(
const GstVideoInfo& info)
72 switch (GST_VIDEO_INFO_FORMAT(&info)) {
73 case GST_VIDEO_FORMAT_NV12:
74 return DRM_FORMAT_NV12;
75 case GST_VIDEO_FORMAT_NV21:
76 return DRM_FORMAT_NV21;
77 case GST_VIDEO_FORMAT_P010_10LE:
78 return DRM_FORMAT_P010;
79 case GST_VIDEO_FORMAT_I420:
80 return DRM_FORMAT_YUV420;
81 case GST_VIDEO_FORMAT_YV12:
82 return DRM_FORMAT_YVU420;
84 case GST_VIDEO_FORMAT_YUY2:
85 return DRM_FORMAT_YUYV;
86 case GST_VIDEO_FORMAT_UYVY:
87 return DRM_FORMAT_UYVY;
89 case GST_VIDEO_FORMAT_YVYU:
90 return DRM_FORMAT_YVYU;
93 case GST_VIDEO_FORMAT_VYUY:
94 return DRM_FORMAT_VYUY;
98 case GST_VIDEO_FORMAT_Y210:
99 return DRM_FORMAT_Y210;
101#ifdef DRM_FORMAT_Y410
102 case GST_VIDEO_FORMAT_Y410:
103 return DRM_FORMAT_Y410;
110const char* gstFormatNameForImportableFourcc(uint32_t fourcc)
noexcept
112#if G_BYTE_ORDER == G_LITTLE_ENDIAN
113 constexpr uint32_t bgraFourcc = DRM_FORMAT_ARGB8888;
114 constexpr uint32_t rgbaFourcc = DRM_FORMAT_ABGR8888;
116 constexpr uint32_t bgraFourcc = DRM_FORMAT_BGRA8888;
117 constexpr uint32_t rgbaFourcc = DRM_FORMAT_RGBA8888;
120 if (fourcc ==
static_cast<uint32_t
>(DRM_FORMAT_NV12))
return "NV12";
121 if (fourcc ==
static_cast<uint32_t
>(DRM_FORMAT_NV21))
return "NV21";
122 if (fourcc ==
static_cast<uint32_t
>(DRM_FORMAT_YUV420))
return "I420";
123 if (fourcc ==
static_cast<uint32_t
>(DRM_FORMAT_YVU420))
return "YV12";
124 if (fourcc ==
static_cast<uint32_t
>(DRM_FORMAT_P010))
return "P010_10LE";
125 if (fourcc == bgraFourcc)
return "BGRA";
126 if (fourcc == rgbaFourcc)
return "RGBA";