[osdteletext] Patch für High-Level-OSDs

  • Hi kanadakruemel


    Nun habe ich meinen Patch doch nocheinmal rausgekramt und etwas angepasst. Dieser benutzt - wie von reufer vorgeschlagen - als Auflösung die Teletextauflösung. Das ist für Geräte wie den RPi natürlich ressourcenschonender. Für das Zeichnen in das OSD die Funktion DrawScaledBitmap genutzt. Im Einstellungsmenü des OSDTeletext Plugins kann man Antialiasing ein- und ausschalten. reufer Wenn das rpihddevice das noch nicht kann, müsste man das per DEFINE rausnehmen.

    Danke für den Patch - funktioniert hier prima. Allerdings solltest du den Zugriff auf das OSD-Bitmap mittels #define und API-Check verhindern, sonst lässt sich das Plugin für einen ungepatchten vdr-3.2.1 nicht komplieren.


    Das Deaktivieren des Antialiasings funktioniert nun auch mit rpihddevice, ich habe die Änderung in git eingecheckt.


    Gruss
    Thomas

  • Hi Thomas,
    danke für die Rückmeldung. Werde ich noch mit vorsehen. Allerdings arbeite ich gerade an einer Version, die den Vorschlag von Copperhead umsetzt. Da fällt dann das ganze rumkopieren etc. weg und die Schrift sieht auch besser aus. Dauert allerdings noch ein wenig (insb. Grafikzeichen und solche Dinge wie doppelte Höhe usw.).


    Hast Du jetzt Unterstützung von Anitaliasing im rpidevice implementiert?


    Gruss
    kanadakruemel

    VDR: 2.4.6, Intel NUC8i3BEH + 8GB + 128GB SSD + 1TB
    + CIR + SATIP (Octopus Net)

  • Ich habe mal den Vorschlag von Copperhead aufgegriffen und das osdteletext plugin so umgeschrieben, dass die OSD Funktion DrawText zur Darstellung benutzt wird. Für die Videotext Grafiksymbole wird der teletext.ttf Font des Kodi Projekts im Font Suchpfad benötigt (z.B. unter /usr/share/fonts). Für normale Texte kann ein beliebiger monospaced Font im Plugin Setup eingestellt werden. Die Text-Darstellung sieht dadurch natürlich viel besser aus.


    Der Patch ist noch nicht komplett, funktioniert hier aber schon gut (der WAF Faktor ist durch die bessere Textdarstellung extrem gestiegen!).
    Anzuwenden ist der Patch gegen den letzten git Stand.


    Es gibt noch folgende Einschränkungen:

    • Bisher sind nur deutsche Sonderzeichen angepasst
    • Es werden nur noch TrueColor OSD unterstützt (z.B. keine SD-FF mehr)
    • Bei den Grafikzeichen gibt es noch leichte Grafikfehler (teilweise einzelne Linien zwischen den Grafikzeichen)
    • Die Ermittlung der Fontgröße ist ein ziemlicher Hack (ich muss die Fontgröße so setzen, dass die Größe der Glyphs meinen Vorgaben entspricht, also ohne "Rand" um die Glyphs), falls jemand eine Idee hat...
    • Ich konnte nur auf meinem System (benutzt SHD) testen, wie es sich z.B. auf dem RPI verhält wäre sehr interessant


    Vorteile des Patches:

    • nutzt direkt das OSD ohne zusätzliche Bitmap/Pixmap, dadurch entfällt das Umkopieren der Bitmap bei Änderungen des Seiteninhalts
    • unter vdr 2.2.0 und vdr 2.3.1 lauffähig
    • viel bessere Textdarstellung


    Gruß,
    kanadakruemel

  • Hi,


    danke, klingt gut :tup Der Text ist tatsächlich gut lesbar, irgendwie sind die Grafiken bei mir aber leicht "zerhackt", siehe Screenshot.


    Gruß maz

    Bilder

    Meine VDRs:
    >>>Mac mini 2010 mit 2x Sundtek SkyTV Ultimate III, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>ZOTAC D2550 ITX-WIFI Supreme mit DD Cine S2, Gehäuse OrigenAE M10, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>Raspberry Pi
    2 mit Sundtek SkyTV Ultimate IV, raspbian, rpihddevice-Plugin, Logitech Harmony 200<<<

  • Hallo maz und Thomas,
    erstmal danke fürs Testen. Scheinbar wird bei Euch die Fontgröße des Grafikfonts falsch berechnet (oder es wird der falsche Font benutzt, allerdings muss der dann auch teletext2:medium (Fontname) benannt sein).... Da muss ich mal noch ein paar Logausgaben einbauen.
    Bei mir sieht es wie im angehängten Screenshot aus.


    maz
    Benutzt Du das normale softhddevice, oder die opengl Variante? Dann könnte es mit der Beschleunigung zu tun haben, da ja das RPI device da ähnlich funktioniert. Ich nutze derzeit das "normale" softhddevice. Ich schau mail, ob ich die opengl Variante auf meinem Laptop zum Laufen kriege.


    Gruß,
    kanadakruemel

  • Ich benutze softhddevice-openglosd.


    Gruß maz

    Meine VDRs:
    >>>Mac mini 2010 mit 2x Sundtek SkyTV Ultimate III, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>ZOTAC D2550 ITX-WIFI Supreme mit DD Cine S2, Gehäuse OrigenAE M10, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>Raspberry Pi
    2 mit Sundtek SkyTV Ultimate IV, raspbian, rpihddevice-Plugin, Logitech Harmony 200<<<

  • Hallo,


    kanadakruemel: Das ist ja echt schick, wie das jetzt aussieht :tup



    Für normale Texte kann ein beliebiger monospaced Font im Plugin Setup eingestellt werden. Die Text-Darstellung sieht dadurch natürlich viel besser aus.

    Das sollte man unbedingt beachten! Nach dem ersten Start ist nämlich dieser teletextfont im Setup eingestellt und der ist für die Schriftzeichen nicht unbedingt schön, wie man auf den Screenshots von maz und Thomas sieht. Ich habe einen kombinierten Screenshot angehängt. Links Ausgabe mit opengl und rechts 'normal' vdpau. Eingestellter Font: DejaVu Sans Mono:Book... es gibt aber sicher welche, die geeigneter sind....bzw ist ja Geschmackssache, Hauptsache die 'Treppchen' sind weg ;)


    Gruß,
    Tomas

  • Moin,


    ich muss jetzt mal blöd nachfragen, ohne mich mit dem teletext Plugin näher beschäftigt zu haben. Woher kommen denn diese Unterschiede zwischen "normalem" und High Level OSD? Irgendwie muss das an der Art liegen, wie die Seiten ausgegeben werden...jaja, das ist eine Nullaussage, wer hätts gedacht ;) Aber da es ja anscheinend beim Raspi High Level Osd und auch beim SHD High Level Osd die gleichen "Probleme" gibt, muss da doch was generelles komisch sein?


    Skins schauen ja auch bei beiden Osd Varianten (zumindest annähernd) gleich aus...schon seltsam.


    Ciao Louis


    PS: nachdem ich mir Tomas Screenshot nochmal etwas länger angesehen habe: kann es sein, dass beim High Level Osd die Zeichenbreite anders berechnet wird? Das könnte auch die Lücken erklären...

  • Hi Tomas und Louis,


    tomas
    wenn nichts eingestellt wurde, ist der Textfont == dem Grafikfont, also teletext2:Medium. Es sollte dann eigentlich aussehen wie früher. Fürs Auge sind natürlich alle anderen Fonts besser geeignet. Ich nehme z.B. den FreeMono:Standard für Text. Danke auch für den Screenshot, das zeigt sehr gut den Unterschied.


    louis
    Die Fontgrößen werden immer gleich berechnet. Sie sind nur von der im Setup eingestellten Größe des Teletext Fensters abhängig. Die tatsächliche Größe der Glyphs ermittle ich über die eingebauten cFont Funktionen. Für das Zeichnen wird die Funktion DrawText der cOsd Klasse verwendet. Ich hab da jetzt nicht nachgeschaut, aber ist die für beschleunigte Ausgabedevices anders implementiert?
    Andererseit sieht man im Screenshot von Tomas schön, dass die Zeichen zu schmal sind. Ich bau mal ein paar Logausgaben mit der Größe der berechneten Fonts etc. ein.


    Mir würde dann nur noch einfallen, für Grafikzeichen den bisher verwendeten internen Font von osdteletext zu nehmen und die Zeichen selbst zu "malen", also nicht per DrawText, sondern DrawBitmap. Das würde dann auch die Abhängigkeit vom teletext font lösen.


    Gruß,
    kanadakruemel

    VDR: 2.4.6, Intel NUC8i3BEH + 8GB + 128GB SSD + 1TB
    + CIR + SATIP (Octopus Net)

  • Hallo Louis


    ich habe mir mal die Implementierung von DrawText in openglosd.cpp von softhddevice-openglosd angeschaut. Demnach wird nur die Fonthöhe benutzt, die ggf. bei cFont::CreateFont angegebene Fontbreite wird nicht genutzt. Genau dieses Feature brauche ich aber, und so sieht auch der Screenshot von Tomas aus. Ich nehme an, das RPI Device nutzt eine ähnliche Implementierung. cFont bietet leider keine Möglichkeit, auf die übergebene Fontbreite zuzugreifen (cFont::Size liefert die Höhe). Im Moment arbeite ich an einem Workaround dafür, der dann aber nicht die beschleunigte Textausgabe nutzt.


    Gruß,
    kanadakruemel

    VDR: 2.4.6, Intel NUC8i3BEH + 8GB + 128GB SSD + 1TB
    + CIR + SATIP (Octopus Net)

  • Hi,


    Demnach wird nur die Fonthöhe benutzt, die ggf. bei cFont::CreateFont angegebene Fontbreite wird nicht genutzt.


    Stimmt, ich (bzw. Thomas auch, der hats ja erfunden ;) ) haben keine "Monospace" Fonts berücksichtigt. Vielmehr wird das "Font Kerning" benutzt, damit z.B. ein AV anders ausgegeben wird als ein AX. Müsste ich mir die VDR API nochmal genauer anschauen, ich meine mich zu erinnern, dass es da irgendwo einen "Monospace" Parameter gab ;)


    Ciao Louis

  • Dann ist das Aussehen ja erstmal klar.


    Ich habe mal ein paar Logmeldungen bzgl. Fontgrößen etc. eingebaut. Außerdem habe ich die Ausgabe geändert, indem ich erst den Text in eine Bitmap schreibe und diese dann per DrawBitmap ins OSD schreibe. Damit wird zwar die beschleunigte Textausgabe nicht benutzt, es sollte dafür aber überall gleich aussehen. Wenn Du eine Möglichkeit findest, die beschleunigte Ausgabe mit monospaced fonts zu nutzen, kann ich das ja wieder ändern (oder per Makefile Parameter schaltbar machen).


    Gruß,
    kanadakruemel

  • Hab den patch von heute 23:15 heruntergeladen und vdr-osdteletext damit kompiliert.
    Benutzte VDR 2.3.1 , rpihddevice (1.0.0), skindesigner (0.7.3): Skin Designer ; vdr-osdteletext 0.9.5 mit osdteletext_vdr2.3.1.diff und osdteletext-ttf.diff
    Da ich nie vor vdr-osdteletext benutzt habe habe ich auch nichts im setup.conf configuriert. Leider schaut teletext ganzschlim aus (siehe das Bild im Anhang).




    Code
    http://abload.de/img/osdteletext01phsw2.jpg
  • Damit wird zwar die beschleunigte Textausgabe nicht benutzt, es sollte dafür aber überall gleich aussehen.

    :]
    Zumindest was softhddevice betrifft, kann ich das bestätigen. Ich hab's mal untereinander angeordnet, dann hat man die gleichen Ausschnitte zum Vergleich.


    Gruß,
    Tomas

  • Hi kanadakruemel


    Demnach wird nur die Fonthöhe benutzt, die ggf. bei cFont::CreateFont angegebene Fontbreite wird nicht genutzt.

    Ich habe mir das kurz angeschaut. Das Problem ist, die Font-Breite wird, im Gegensatz zur Höhe, in cFont gar nicht gespeichert, sondern nur für das VDR-interne Rendering benutzt. Im OSD habe ich deshalb keine Möglichkeit mehr, über cFont die gewünschte Breite abzufragen. Ein einfacher VDR-Patch würde dieses Dilemma lösen.


    Gruss
    Thomas

  • Moin Thomas,


    zwar ein bisschen OT, aber passt hier eigentlich ganz gut: siehst du es auch so, dass die Implementierung der Fonts im VDR nicht ganz optimal für ein High Level OSD ist? Meiner Ansicht nach müsste das Requesten eines Fonts aus einer Anwendung heraus (Skin oder Plugin) besser z.B. über den OsdProvider laufen, damit das High Level Osd das auch mitbekommt. Aktuell geht das ja komplett am High Level Osd vorbei, und der Font muss zweimal erzeugt und im Speicher gehalten werden. Hätte das High Level Osd die Möglichkeit, die Fonts selbst zu verwalten, könnte man das ressourcenschonender implementieren.


    Wenn man sich hier eh schon Änderungen überlegt, könnte man dieses Thema ggf. auch mal komplett durchdenken...


    Ciao Louis

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!