26#include <libavutil/pixfmt.h>
31#if __has_include(<spa/param/video/raw.h>)
32#include <spa/param/video/raw.h>
33#define SCORE_GFX_HAS_SPA_RAW 1
36namespace score::gfx::interop
39constexpr uint32_t drmFourcc(
char a,
char b,
char c,
char d)
noexcept
41 return uint32_t(uint8_t(a)) | (uint32_t(uint8_t(b)) << 8)
42 | (uint32_t(uint8_t(c)) << 16) | (uint32_t(uint8_t(d)) << 24);
49inline constexpr uint32_t DRM_R8 = drmFourcc(
'R',
'8',
' ',
' ');
50inline constexpr uint32_t DRM_GR88 = drmFourcc(
'G',
'R',
'8',
'8');
51inline constexpr uint32_t DRM_R16 = drmFourcc(
'R',
'1',
'6',
' ');
52inline constexpr uint32_t DRM_GR1616 = drmFourcc(
'G',
'R',
'3',
'2');
54static_assert(DRM_R8 == 0x20203852u,
"DRM_FORMAT_R8");
55static_assert(DRM_GR88 == 0x38385247u,
"DRM_FORMAT_GR88");
56static_assert(DRM_R16 == 0x20363152u,
"DRM_FORMAT_R16");
57static_assert(DRM_GR1616 == 0x32335247u,
"DRM_FORMAT_GR1616");
59inline constexpr uint32_t DRM_ABGR8888 = drmFourcc(
'A',
'B',
'2',
'4');
60inline constexpr uint32_t DRM_ARGB8888 = drmFourcc(
'A',
'R',
'2',
'4');
61inline constexpr uint32_t DRM_XBGR8888 = drmFourcc(
'X',
'B',
'2',
'4');
62inline constexpr uint32_t DRM_XRGB8888 = drmFourcc(
'X',
'R',
'2',
'4');
63inline constexpr uint32_t DRM_ARGB2101010 = drmFourcc(
'A',
'R',
'3',
'0');
64inline constexpr uint32_t DRM_ABGR2101010 = drmFourcc(
'A',
'B',
'3',
'0');
65inline constexpr uint32_t DRM_ABGR16161616F = drmFourcc(
'A',
'B',
'4',
'H');
66inline constexpr uint32_t DRM_BGR888 = drmFourcc(
'B',
'G',
'2',
'4');
67inline constexpr uint32_t DRM_NV12 = drmFourcc(
'N',
'V',
'1',
'2');
68inline constexpr uint32_t DRM_P010 = drmFourcc(
'P',
'0',
'1',
'0');
69inline constexpr uint32_t DRM_P210 = drmFourcc(
'P',
'2',
'1',
'0');
70inline constexpr uint32_t DRM_YUV420 = drmFourcc(
'Y',
'U',
'1',
'2');
71inline constexpr uint32_t DRM_YVU420 = drmFourcc(
'Y',
'V',
'1',
'2');
72inline constexpr uint32_t DRM_YUYV = drmFourcc(
'Y',
'U',
'Y',
'V');
73inline constexpr uint32_t DRM_UYVY = drmFourcc(
'U',
'Y',
'V',
'Y');
81inline AVPixelFormat drmFourccToAv(uint32_t fourcc)
noexcept
83 return score::gfx::interop::toAVPixelFormat(
84 score::gfx::interop::fromDrmFourcc(fourcc));
88inline uint32_t avToDrmFourcc(AVPixelFormat fmt)
noexcept
90 return score::gfx::interop::toDrmFourcc(
91 score::gfx::interop::fromAVPixelFormat(fmt));
98drmFourccToVideoPixelFormat(uint32_t fourcc)
noexcept
100 return score::gfx::interop::fromDrmFourcc(fourcc);
103#if defined(SCORE_GFX_HAS_SPA_RAW)
107spaToVideoPixelFormat(uint32_t spaFmt)
noexcept;
110inline uint32_t spaToDrmFourcc(uint32_t spaFmt)
noexcept
114 case SPA_VIDEO_FORMAT_RGBA:
return DRM_ABGR8888;
115 case SPA_VIDEO_FORMAT_BGRA:
return DRM_ARGB8888;
116 case SPA_VIDEO_FORMAT_RGBx:
return DRM_XBGR8888;
117 case SPA_VIDEO_FORMAT_BGRx:
return DRM_XRGB8888;
118 case SPA_VIDEO_FORMAT_xRGB_210LE:
return DRM_ARGB2101010;
119 case SPA_VIDEO_FORMAT_xBGR_210LE:
return DRM_ABGR2101010;
120 case SPA_VIDEO_FORMAT_RGBA_F16:
return DRM_ABGR16161616F;
121 case SPA_VIDEO_FORMAT_RGB:
return DRM_BGR888;
122 case SPA_VIDEO_FORMAT_NV12:
return DRM_NV12;
123 case SPA_VIDEO_FORMAT_P010_10LE:
return DRM_P010;
124 case SPA_VIDEO_FORMAT_I420:
return DRM_YUV420;
125 case SPA_VIDEO_FORMAT_YV12:
return DRM_YVU420;
126 case SPA_VIDEO_FORMAT_YUY2:
return DRM_YUYV;
127 case SPA_VIDEO_FORMAT_UYVY:
return DRM_UYVY;
133spaToVideoPixelFormat(uint32_t spaFmt)
noexcept
135 return score::gfx::interop::fromDrmFourcc(spaToDrmFourcc(spaFmt));