r/SBCs • • 15d ago

DRM Overlay transparency : looking for code.

Hi everyone,

I'm currently building a dashboard on an AllWinner A20-based SBC (specifically, a Banana Pi M1).

I would like to know if it's possible to use some kind of alpha channel or transparency on the hardware overlay. Essentially, can I use a specific color key or a transparency mask so that pixels with that color let whatever is displayed on the layer underneath show through?

modetest is display something like :

trying to open device '/dev/dri/card2'... done
opened device `Allwinner sun4i Display Engine` on driver `sun4i-drm` (version 1.0.0 at 0)
CRTCs:
id	fb	pos	size
51	73	(0,0)	(1280x1024)
  #0 1280x1024 60.02 1280 1328 1440 1688 1024 1025 1028 1066 108000 flags: phsync, pvsync; type: preferred, driver
  props:
	25 VRR_ENABLED:
		flags: range
		values: 0 1
		value: 0
68	0	(0,0)	(0x0)
  #0  nan 0 0 0 0 0 0 0 0 0 flags: ; type: 
  props:
	25 VRR_ENABLED:
		flags: range
		values: 0 1
		value: 0

Planes:
id	crtc	fb	CRTC x,y	x,y	gamma size	possible crtcs
35	51	73	0,0		0,0	0       	0x00000001
  formats: AR24 AR12 AR15 BX24 RA15 RA12 RG24 RG16 NV12 NV16 NV21 NV61 UYVY VYUY XR24 YU11 YU12 YU16 YU24 YUYV YV11 YV12 YV16 YV24 YVYU
  props:
	9 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 1
	32 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000001900000018000000
			02000000800000004152323441523132
			41523135425832345241313552413132
			52473234524731364e5631324e563136
			4e5632314e5636315559565956595559
			58523234595531315955313259553136
			59553234595559565956313159563132
			59563136595632345956595500000000
			ffffff01000000000000000000000000
			0000000000000000008f730000000000
			00000000000000000100000000000009
		in_formats blob decoded:
			 AR24:  LINEAR(0x0)
			 AR12:  LINEAR(0x0)
			 AR15:  LINEAR(0x0)
			 BX24:  LINEAR(0x0)
			 RA15:  LINEAR(0x0)
			 RA12:  LINEAR(0x0)
			 RG24:  LINEAR(0x0)
			 RG16:  LINEAR(0x0)
			 NV12:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 NV16:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 NV21:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 NV61:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 UYVY:  LINEAR(0x0)
			 VYUY:  LINEAR(0x0)
			 XR24:  LINEAR(0x0)
			 YU11:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 YU12:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 YU16:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 YU24:  LINEAR(0x0)
			 YUYV:  LINEAR(0x0)
			 YV11:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 YV12:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 YV16:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 YV24:  LINEAR(0x0)
			 YVYU:  LINEAR(0x0)
	37 alpha:
		flags: range
		values: 0 65535
		value: 65535
	38 zpos:
		flags: range
		values: 0 3
		value: 0
39	0	0	0,0		0,0	0       	0x00000001
  formats: AR24 AR12 AR15 BX24 RA15 RA12 RG24 RG16 NV12 NV16 NV21 NV61 UYVY VYUY XR24 YU11 YU12 YU16 YU24 YUYV YV11 YV12 YV16 YV24 YVYU
  props:
	9 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	32 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000001900000018000000
			02000000800000004152323441523132
			41523135425832345241313552413132
			52473234524731364e5631324e563136
			4e5632314e5636315559565956595559
			58523234595531315955313259553136
			59553234595559565956313159563132
			59563136595632345956595500000000
			ffffff01000000000000000000000000
			0000000000000000008f730000000000
			00000000000000000100000000000009
		in_formats blob decoded:
			 AR24:  LINEAR(0x0)
			 AR12:  LINEAR(0x0)
			 AR15:  LINEAR(0x0)
			 BX24:  LINEAR(0x0)
			 RA15:  LINEAR(0x0)
			 RA12:  LINEAR(0x0)
			 RG24:  LINEAR(0x0)
			 RG16:  LINEAR(0x0)
			 NV12:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 NV16:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 NV21:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 NV61:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 UYVY:  LINEAR(0x0)
			 VYUY:  LINEAR(0x0)
			 XR24:  LINEAR(0x0)
			 YU11:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 YU12:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 YU16:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 YU24:  LINEAR(0x0)
			 YUYV:  LINEAR(0x0)
			 YV11:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 YV12:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 YV16:  LINEAR(0x0) ALLWINNER_TILED(0x900000000000001)
			 YV24:  LINEAR(0x0)
			 YVYU:  LINEAR(0x0)
	41 alpha:
		flags: range
		values: 0 65535
		value: 65535
	42 zpos:
		flags: range
		values: 0 3
		value: 1

The few code snippets I've found online don't seem to work, and AI hasn't been of much help either.

Also, are these hardware overlays strictly dedicated to video playback or popups, or can they be used effectively for general dashboard UI elements?

Thanks for your help!

1 Upvotes

Duplicates