Was ist der Hintergrund hinter use_zpos? Korrigier mich, wenn ich es falsch verstehe:
use_zpos wird gesetzt, wenn das NV12 plane das OVERLAY_PLANE ist und das ARGB plane das PRIMARY_PLANE ist, also standardmäßig OSD unter VIDEO liegt.
In VideoOsdDrawArgb wird das dann getauscht und in VideoOsdClear wieder zurückgetauscht.
In OsdDrawArgb wird zusätzlich das plane mit memcpy beschrieben, in OsdClear mit memset auf 0 gesetzt.
Warum ist das Löschen mit memset notwendig, wenn das OSD eh wieder unter das VIDEO gelegt wird und nicht sichtbar ist?
Falls NV12 bereits unten liegt, wird use_zpos nicht gesetzt, ChangePlanes wird dann auch nicht ausgeführt. Beide Male (OsdDrawArgb und OsdClear) setzen mit drmModeSetPlane die Properties. Diese werden in OsdClear so gesetzt, dass die SRC* Properties auf 0 gesetzt werden. Bewirkt das, dass das Plane "geschlossen" wird und im Endeffekt nicht sichtbar ist, obwohl es oben liegt?
Anders gefragt, könnte man nicht 1x die planes so einstellen, dass OSD über VIDEO liegt und dann "nur" den Puffer löschen oder hat das Performancegründe?