Moin,
dieses Posting ist insbesondere an Autoren von Ausgabeplugins wie Reufer und Johns gerichtet...aber natürlich sind alle eingeladen, in die Diskussion einzusteigen
Ich habe ja begonnen, im Skindesigner die Möglichkeit zu implementieren, Pixmaps in das OSD "hereinfliegen" zu lassen. Dazu definiere ich den ViewPort der Pixmaps entsprechend zuerst mit Koordinaten außerhalb des sichtbaren OSD Bereichs und verschiebe die Position der Pixmaps dann entsprechend in einer Schleife, bis die Pixmaps am Ende der Schleife an ihrer Zielposition gelandet sind. Da hierbei meistens die Pixmaps am Rand des OSD liegen, sind die Koordinaten der Pixmaps (also der x und y Wert des Viewports) dabei natürlich auch ausserhalb des sichtbaren OSD Bereichs.
Das klappt so weit auch ganz ok, jedoch gibt es dabei einige Probleme, die wohl darauf zurückzuführen sind, dass die Positionierung von Pixmaps außerhalb des OSD in den Ausgabeplugins bzw. den benutzten Bibliotheken der Ausgabeplugins nicht vorgesehen ist bzw. nicht entsprechend behandelt wird. Erst mal einige Fakten, die mir bei meinen bisherigen Aktivitäten aufgefallen sind:
- ich teste nur mit softhddevice@nvidia-vdpau
- Pixmaps links (negativer x Wert für den Viewport), rechts (x Wert > OSD Breite) und unterhalb (y Wert > OSD Höhe) des sichtbaren OSD Bereichs funktionieren prima.
- Sobald eine Pixmap einen negativen y Wert hat (also teilweise "oberhalb" des sichtbaren OSD liegt), wird gar kein OSD mehr angezeigt.
- softhddevice stürzt anscheinend beim Löschen des OSD in einigen Fällen ab (bei mir passiert das nicht): Backtrace dazu siehe hier, dort sind Pixmaps unterhalb des schbaren OSD Bereichs gezeichnet worden.
- wie sich das ganze z.B. auf dem Raspi verhält weiss ich nicht, hierzu gabb es noch keine Rückmeldung
Ich hätte den folgenden Vorschlag zu unterbreiten: wäre es möglich, wenn die Ausgabeplugins im Falle eines TrueColor OSD die Pixmaps mit dem sichtbaren OSD Bereich zu "clippen"? Also einfach die Pixmaps, die komplett ausserhalb des OSD Bereichs liegen, gar nicht zu beachten, und die Pixmaps, die nur teilweise ins OSD hineinragen, nur das sichtbare Rechteck zeichnet. Soweit ich das sehe, benutzen Ausgabedevices Obekte der Klasse cPixmapMemory zur Ausgabe, über die Funktion "const uint8_t *Data(void)" kommt man ja an die einzelnen Pixel rann. Dann sollte es doch nicht großartig komplex oder performancefressend sein, vor der Ausgabe das clipping durchzuführen. Oder stelle ich mir das zu einfach vor?
Danke schonmal für die Kommentare...ciao Louis