Grund für maximal 64 Pixmaps im OSD

  • Moin,


    im VDR Code ist die maximale Anzahl der parallel verwendbaren Pixmaps fest auf 64 begrenzt. Mich würde interessieren, was der genaue Grund dafür ist. Liegt das am Speicher der HDFF Karte? Ich denke, mit Software Ausgabe Plugins könnte man hier locker einen höheren Wert setzen...oder sehe ich das falsch?


    64 Pixmaps sind zwar i.d.r. ausreichend, jedioch stosse ich z.B. beim tvguide manchmal an die Grenze (jede Sendung ist eine eigene Pixmap, wenn ein Sender viele kurze Sendungen hat, dann kann das ganze ein bisschen knapp werden)...


    Danke für die Info...Cheers Louis

  • Moin,


    im VDR Code ist die maximale Anzahl der parallel verwendbaren Pixmaps fest auf 64 begrenzt. Mich würde interessieren, was der genaue Grund dafür ist. Liegt das am Speicher der HDFF Karte? Ich denke, mit Software Ausgabe Plugins könnte man hier locker einen höheren Wert setzen...oder sehe ich das falsch?


    Die TT-S2 6400 kann bisher noch gar keine Pixmaps, aber die maximale Anzahl davon irgendwie zu beschränken ist sicher nicht verkehrt, denn sonst würde das wohl sehr schnell "entarten" ;)


    Quote


    64 Pixmaps sind zwar i.d.r. ausreichend, jedioch stosse ich z.B. beim tvguide manchmal an die Grenze (jede Sendung ist eine eigene Pixmap, wenn ein Sender viele kurze Sendungen hat, dann kann das ganze ein bisschen knapp werden)...


    Was ist denn der Grund dafür, für jede einzelne Sendung eine Pixmap zu verwenden?


    Klaus

  • Hi Klaus,


    Die TT-S2 6400 kann bisher noch gar keine Pixmaps, aber die maximale Anzahl davon irgendwie zu beschränken ist sicher nicht verkehrt, denn sonst würde das wohl sehr schnell "entarten" ;)


    Hmmm...aber sie kann doch true color OSD? Wahrscheinlich habe ich da was falsch verstanden...war ja nur ein Erklärungsversuch :)


    Was ist denn der Grund dafür, für jede einzelne Sendung eine Pixmap zu verwenden?


    Fragen mit Gegenfragen zu beantworten ist aber nicht nett ;) Aber der Grund ist einfach der, dass es so am Ressourcenschonensten und elegantesten ist. Wenn ich z.B. die Hintergrundfarbe der "aktiven" Sendung ändern will, muss ich nur den kompletten Hintergrund einer Pixmap dafür neu malen...


    Aber nochmal zur Ausgangsfrage: hast du den Wert einfach so festgelegt oder gab es einen Grund für diese Zahl?


    Cheers Louis


  • Aber manchmal notwendig, um den Grund für die Frage zu verstehen ;)


    Quote


    Aber der Grund ist einfach der, dass es so am Ressourcenschonensten und elegantesten ist. Wenn ich z.B. die Hintergrundfarbe der "aktiven" Sendung ändern will, muss ich nur eine Pixmap dafür anfassen...


    Aber du mußt doch dennoch diese eine Pixmap komplett neu zeichnen, oder?
    Was macht es da für einen Unterschied, ob du in eine kleine Pixmap oder einen Ausschnitt einer großen Pixmap zeichnest? In jedem Fall fasst du doch nur *eine* Pixmap an.
    Oder übersehe ich da was?


    Quote


    Aber nochmal zur Ausgangsfrage: hast du den Wert einfach so festgelegt oder gab es einen Grund für diese Zahl?


    Die Zahl wurde einfach mal so festgelegt und erschien mir hinreichend groß.
    Aber bevor du jetzt anfängst, einen VDR-Patch für deine Skin vorauszusetzen, würde ich gerne genauer verstehen, warum du nicht eine große Pixmap verwenden kannst anstatt vieler kleiner. Das mit "ressourcenschonend" und "elegant" erschließt sich mir noch nicht unbedingt... ;)


    Klaus

  • Die Zahl wurde einfach mal so festgelegt und erschien mir hinreichend groß.
    Aber bevor du jetzt anfängst, einen VDR-Patch für deine Skin vorauszusetzen, würde ich gerne genauer verstehen, warum du nicht eine große Pixmap verwenden kannst anstatt vieler kleiner. Das mit "ressourcenschonend" und "elegant" erschließt sich mir noch nicht unbedingt... ;)


    Nein keine Angst...ich werde sicherlich nichts patchen...obwohl es einfach wäre :)


    Es geht mir auch nicht um den Skin (*), sondern um den tvguide, mein anderes Plugin (siehe http://projects.vdr-developer.org/projects/plg-tvguide). Vielleicht probierst du es einfach mal aus, dann muss ich mir nicht den Wolf erklären :) Beim scrollen nach links / rechts und oben / unten muss ich z.B. immer nur bestehende Pixmaps verschieben, neue anhängen und nicht mehr benötigte wegschmeissen. Ich finde das auf diese Art und Weise "eleganter" und "ressourcenschonender".


    Wie gesagt, die Frage war rein interessehalber. Ich habe das Plugin natürlich mit der Beschränkung im Hinterkopf programmiert, da müsste schon einiges zusammenkoommen, dass die 64 Pixmaps nicht ausreichen. Mich hat einfach der Grund für die Beschränkung interessiert.


    Ciao Louis


    (*) ich verstehe ja, dass aus dem deutschen Übersetzt Skin feminin ist...aber ich stolpere jedesmal beim Lesen drüber und werde auch in Zukunft "der Skin" schreiben :)

  • Ich vermute du kennst tvguide nicht kls: http://www.vdr-portal.de/index.php?page=Attachment&attachmentID=31385


    Die grade gewählte Sendung dürfte die Lindenstrasse sein. Um diese anders einzufärben und den Verlauf in den Sendungen zu haben dürfte 1 Pixmap schwierig sein.


    Korrigiert mich wenn ich flasch liege :)

    VDR User: 87 - LaScala LC14B - LG/Phillipps 6,4" VGA Display | Asrock H61/U3S3 | G630T | 1x 16GB Mobi Mtron 3035 1x WD 750GB 2,5" |1x L4m DVB-S2 Version 5.4

  • Nein keine Angst...ich werde sicherlich nichts patchen...obwohl es einfach wäre :)


    Es geht mir auch nicht um den Skin (*), sondern um den tvguide, mein anderes Plugin (siehe http://projects.vdr-developer.org/projects/plg-tvguide). Vielleicht probierst du es einfach mal aus, dann muss ich mir nicht den Wolf erklären :)


    So einen "zweidimensionalen EPG" hat meine SKY-Box (BSkyB) auch. Ich mag diese Teile überhaupt nicht, weil man immer nur einen winzigen Ausschnitt von dem sieht, was einen wirklich interessiert, und dafür jede Menge anderes Zeug, was einen nicht interessiert. Ich komme mir da jedesmal vor, als würde ich durch ein Schlüsselloch hindurch ein Zimmer tapezieren ;-).


    Quote


    Beim scrollen nach links / rechts und oben / unten muss ich z.B. immer nur bestehende Pixmaps verschieben, neue anhängen und nicht mehr benötigte wegschmeissen. Ich finde das auf diese Art und Weise "eleganter" und "ressourcenschonender".


    Na ja, über "ressourcenschonend" kann man ja allein deswegen schon diskutieren, weil du ja anscheinend bereits an die Grenze einer Ressource stößt ;)
    Und "elegant" wäre sicher auch, den betroffenen Teil einer großen Pixmap mit Scroll() oder Pan() zu verschieben und den neuen Teil zu zeichnen.
    Aber laß dir von mir nicht dreinreden - ich wollte ja nur verstehen, worum es geht.


    Quote


    (*) ich verstehe ja, dass aus dem deutschen Übersetzt Skin feminin ist...aber ich stolpere jedesmal beim Lesen drüber und werde auch in Zukunft "der Skin" schreiben :)


    Das bleibt dir völlig unbenommen ;)


    Klaus

  • Ich vermute du kennst tvguide nicht kls: http://www.vdr-portal.de/index.php?page=Attachment&attachmentID=31385


    Die grade gewählte Sendung dürfte die Lindenstrasse sein. Um diese anders einzufärben und den Verlauf in den Sendungen zu haben dürfte 1 Pixmap schwierig sein.


    Korrigiert mich wenn ich flasch liege :)


    In jedem Fall muß aber doch das graue Rechteck samt Text komplett neu gezeichnet werden, nehme ich mal an. Und vom Aufwand her sollte es da doch egal sein, ob in eine kleine Pixmap oder den entsprechenden Ausschnitt einer großen Pixmap gezeichnet wird.


    Man könnte es ja sogar so machen, daß man die gesamte Übersicht in eine große Pixmap zeichnet, und für die gerade ausgewählte Sendung eine kleine Pixmap mit dem anders dargestellten Inhalt des entsprechenden Rechtecks "drüberlegt". Dann müsste man beim Verlassen dieser Sendung diesen Eintrag gar nicht mal neu zeichnen, sondern einfach die darübergelegte Pixmap wegnehmen.


    Es gibt sicherlich diverse Möglichkeiten, wie man sowas implementieren kann, und ich möchte "louis" ja seine Methode (die ihm ja offensichtlich sehr gut gefällt) auch nicht ausreden. Ich wollte nur Alternativen aufzeigen für den Fall, daß es halt doch eng wird.


    Klaus

  • Moin Klaus,


    sicherlich kann man ein Ergebnis auf viele Arten erreichen, und sicherlich wäre es auch möglich, z.B. im tvguide eine große Pixmap zu verwenden und dann auf dieser Pixmap alles zu zeichnen. Ich habe jedoch die Erfahrung gemacht, dass der Code insbesondere bei GUI Programmierung schnell sperrig und unhandlich wird, wenn man nicht konsequent objektorientiert programmiert. Eines der Paradigmen in der objektorientierten Programmierung ist nun mal, die realen Gegebenheiten durch Objekte abzubilden. Meiner Ansicht nach eignen sich hier Pixmaps sehr gut dazu, die Oberfläche in (möglicherweise viele kleine) Bereiche zu strukturieren und diese einzelnen Bereiche bzw. die einzelnen Objekte in der GUI durch jeweils einzelne Pixmaps abzubilden. Dadurch wird der Code meiner Ausicht nach wesentlich übersichtlicher und besser wartbar...


    Ich habe mir eben mal den Spass gemacht, in cSkinLCARSDisplayMenu die Anzahl der objektweit definierten Koordinaten zu zählen...und komme dabei auf die stolze Anzahl von 119. Das soll jetzt nicht als Kritik verstanden werden, denn wie du schon geschrieben hast soll jeder so programmieren wie er es mag. Ich persönlich hätte aber keine Lust, mit dieser Anzahl von Koordinaten zu jonglieren, da ich genau wüsste, dass ich am nächsten Tag vergessen hätte, was die einzelnen Werte denn so bedeuten. Definiert man pro Bereich eine Pixmap, dann hat diese Pixmap ihre Koordinaten und gut isses. Gibt man der Pixmap dann auch noch einen entsprechenden Namen, dann muss man auch einige Tage später nicht groß nachdenken, was der Code denn genau zu bedeuten hat.


    Wenn die Anzahl der aktuell maximal erlaubten Pixmaps nun ein Wert ist, der nicht durch irgendwelche äußeren Gegebenheiten festgelegt ist sondern vielmehr ein festgelegter Wert ist, der dir "hinreichend groß" vorkam, könntest du dir ja eventuell mal überlegen, ob man diesen Wert für die 2.0 nicht vielleicht noch ein bisschen erhöhen könnte, damit man in der GUI Programmierung flexibler ist und diese künstliche Begrenzung nicht immer im Hinterkopf haben muss...nur mal so als Anregung und Vorschlag :)


    Cheers Louis

  • Moin!


    Wäre es evtl. vorstellbar, dass du eine eigene Pixmap-Klasse erstellst, in der zu zeichnest, die sich dann auf einer großen Pixmap darstellen?
    Dann bist du dein Koordinaten-Problem los, brauchst nicht auf die Grenze im vdr achten und bist etwas flexibler.


    Nur so als Anregung, es gibt ja wie immer dutzende Wege... :)


    Lars.

  • Hi Lars,


    sowas in der Art habe ich mir auch schon überlegt...ich fände es eh schöner, wenn ich direkt von cPixmap erben könnte und nur mit der abgeleiteten Klasse arbeiten könnte. Das geht aber "in Reinform" nicht, da ich mir ja Pixmaps nur über eine statische Methode vom cOsdProvider holen kann und nicht selbst direkt mit "new" erzeugen kann...


    Ist zwar irgendwie von hinten durch die Brust, nochmal selbst eine Pixmap Verwaltung zu schreiben...aber ich denke mal drüber nach :)


    Cheers Louis

  • PS: wenn man z.B. ein "truecolor-text2skin" Plugin bauen wollte, wäre diese Limitierung wahrscheinlich auch nicht sehr zuträglich...


    PS2: bei einer eigenen Pixmap verwaltung müsste man auch die Viewport / Drawport Systematik nachprogrammieren...hmmm... 8o


  • Ich habe mir eben mal den Spass gemacht, in cSkinLCARSDisplayMenu die Anzahl der objektweit definierten Koordinaten zu zählen...und komme dabei auf die stolze Anzahl von 119. Das soll jetzt nicht als Kritik verstanden werden, denn wie du schon geschrieben hast soll jeder so programmieren wie er es mag. Ich persönlich hätte aber keine Lust, mit dieser Anzahl von Koordinaten zu jonglieren, da ich genau wüsste, dass ich am nächsten Tag vergessen hätte, was die einzelnen Werte denn so bedeuten.


    Ich wollte halt, daß meine Skin auch ohne Pixmaps funktioniert (wg. "high level OSD" der TT-S2 6400, was deutlich schneller ist) ;)


    Quote


    Wenn die Anzahl der aktuell maximal erlaubten Pixmaps nun ein Wert ist, der nicht durch irgendwelche äußeren Gegebenheiten festgelegt ist sondern vielmehr ein festgelegter Wert ist, der dir "hinreichend groß" vorkam, könntest du dir ja eventuell mal überlegen, ob man diesen Wert für die 2.0 nicht vielleicht noch ein bisschen erhöhen könnte, damit man in der GUI Programmierung flexibler ist und diese künstliche Begrenzung nicht immer im Hinterkopf haben muss...nur mal so als Anregung und Vorschlag :)


    Jetzt weiß ich es wieder: die maximale Anzahl der *Layer* im OSD habe ich seinerzeit in Absprache mit "powarman" auf 8 festgelegt. Das Maximum für die Anzahl der Pixmaps war rein willkürlich auf 64 gesetzt worden. Da jeder feste Wert wohl irgendwann wieder hinterfragt werden dürfte, und MAXOSDPIXMAPS lediglich für das Array "pixmaps[]" in cOsd benutzt wird, werde ich hier wohl einen cVector verwenden und damit die Begrenzung ganz abschaffen. Allerdings kann es dann natürlich immer noch vorkommen, daß ein konkretes Device, welches das OSD selber implementiert, einfach nicht genug Speicher hat, um beliebig viele Pixmaps anzulegen...


    Klaus

  • Hi Lars,


    sowas in der Art habe ich mir auch schon überlegt...ich fände es eh schöner, wenn ich direkt von cPixmap erben könnte und nur mit der abgeleiteten Klasse arbeiten könnte. Das geht aber "in Reinform" nicht, da ich mir ja Pixmaps nur über eine statische Methode vom cOsdProvider holen kann und nicht selbst direkt mit "new" erzeugen kann...


    Die Idee dabei war, es einem Device zu ermöglichen, die Pixmaps auf seiner eigenen Hardware zu erzeugen und so die Datenübertragung über den Systembus vermeiden zu können ("high level OSD").


    Klaus

  • Jetzt weiß ich es wieder: die maximale Anzahl der *Layer* im OSD habe ich seinerzeit in Absprache mit "powarman" auf 8 festgelegt. Das Maximum für die Anzahl der Pixmaps war rein willkürlich auf 64 gesetzt worden. Da jeder feste Wert wohl irgendwann wieder hinterfragt werden dürfte, und MAXOSDPIXMAPS lediglich für das Array "pixmaps[]" in cOsd benutzt wird, werde ich hier wohl einen cVector verwenden und damit die Begrenzung ganz abschaffen. Allerdings kann es dann natürlich immer noch vorkommen, daß ein konkretes Device, welches das OSD selber implementiert, einfach nicht genug Speicher hat, um beliebig viele Pixmaps anzulegen...


    Hi Klaus,


    ich möchte dich da zu nix drängen, du musst entscheiden, ob du das so umsetzen willst. Für mich klingt jedoch ein Vector vernünftig, der Plugin Entwickler merkt ja selbst, wenn er es mit der Anzahl der Pixmaps übertrieben hat und das Plugin arschlangsam wird ;)


    Danke für deine Flexibilität und dein Entgegenkommen! :tup


    Cheers Louis


  • Die Idee dabei war, es einem Device zu ermöglichen, die Pixmaps auf seiner eigenen Hardware zu erzeugen und so die Datenübertragung über den Systembus vermeiden zu können ("high level OSD").


    Klaus


    Gerade nochmal für mich zum Verständnis: du hast ja weiter oben geschrieben, dass die TT-S2 6400 gar keine Pixmaps kann...ist dass der Grund, warum meine Plugins mit der TT-S2 6400 deutlich langsamer sind als z.B. mit softhddevice? Oder anders herum gefragt, was müsste denn gemacht werden, damit die Performance mit der TT-S2 6400 besser wird? Müsste das Ausgabeplugin das OSD selbst implementieren?


    Cheers Louis

  • Gerade nochmal für mich zum Verständnis: du hast ja weiter oben geschrieben, dass die TT-S2 6400 gar keine Pixmaps kann...ist dass der Grund, warum meine Plugins mit der TT-S2 6400 deutlich langsamer sind als z.B. mit softhddevice? Oder anders herum gefragt, was müsste denn gemacht werden, damit die Performance mit der TT-S2 6400 besser wird? Müsste das Ausgabeplugin das OSD selbst implementieren?


    Pixmaps kann bis jetzt nur VDRs cOsd selber (also cPixmapMemory). Der Flaschenhals ist die Übertragung der Daten an die eigentliche Hardware - im Falle von softhddevice wohl die Grafikkarte, bei der TT-S2 6400 müssen sie an die Karte geschickt werden.
    Wenn die Firmware der TT-S2 6400 selber Pixmaps können würde, dann müssten nur die "primitiven" Zeichenoperationen übertragen werden, denn die Pixmap-Daten wären ja nur innerhalb der Kartenhardware. Ob es aber dazu noch kommen wird, weiß ich nicht...


    Klaus

  • Der Flaschenhals ist die Übertragung der Daten an die eigentliche Hardware [...] bei der TT-S2 6400 müssen sie an die Karte geschickt werden.

    Die SAA7160-PCIe-Bridge ist leider nicht besonders schnell bei der Uebertragung zum PHI-Bus (kein DMA), trotzdem koennte man nach meiner Schaetzung noch einen Faktor drei bis fuenf in der Datenrate zur Karte rausholen, wenn man das FPGA-Design optimiert. Hast Du irgendeinen Kontakt, wo man Zugriff auf den FPGA-Code bekommen koennte, ich unterschreibe auch (fast) jedes NDA wenn noetig...


    Gruss,
    S:oren

  • Die SAA7160-PCIe-Bridge ist leider nicht besonders schnell bei der Uebertragung zum PHI-Bus (kein DMA), trotzdem koennte man nach meiner Schaetzung noch einen Faktor drei bis fuenf in der Datenrate zur Karte rausholen, wenn man das FPGA-Design optimiert. Hast Du irgendeinen Kontakt, wo man Zugriff auf den FPGA-Code bekommen koennte, ich unterschreibe auch (fast) jedes NDA wenn noetig...


    Da müsstest du dich an "powarman" wenden.


    Klaus

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!